查看: 4065|回复: 0

[资料分享] 关于NX二次开发中选择对象mask triple的详细讲解

[复制链接]

4

主题

3

回帖

44

积分

管理员

积分
44
发表于 2017-10-25 16:33:48 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×
关于NX二次开发中选择对象mask triple的详细讲解6 t% {8 E! N7 O2 R8 b" I1 c  ]# j* m
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。6 `# ?  y* M3 Q8 f/ h
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
4 M# K  @7 `8 F! @, |一些常见的类型和子类型如下:* {3 E5 o; g2 j6 W9 m
QQ截图20171025161410.png " h$ b% x6 i& Z" r% ]; N( A
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。  N% H. M# z# T: I1 T2 N, o; T
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& ?& a; J9 v5 h; F0 ~9 k0 m  Y8 D8 W( U
QQ截图20171025161432.png . P9 r1 h- l: `$ L

1 O! q  _$ G5 _* F

+ m! a/ y6 o5 M8 p选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。- P6 M* n+ l; B( W1 U; U

( i9 |! G% D% B* s

" g9 g6 \% z  T% ?4 i; l( h4 B+ H QQ截图20171025162656.png
/ \' O, J; E8 a( U  r6 @" J9 q* ^, R1 |5 ^2 G, E; h( G3 a1 F* w  ]

" l3 x# M3 h% \. E: A& P0 _+ Y) Y7 j对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。( ]6 X1 d. p0 U
- C$ h# ~9 w! ~4 Y8 P8 e0 ]8 p2 D7 d
" C5 e: D5 }/ g7 P$ H4 _+ h5 w# F( v
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);9 C* _0 W1 s& i9 w
* _5 M2 D) {: B: l% M& q
8 _; x+ \# h, u* K! G+ w2 s& `
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);2 U- i  N) Q7 ?4 q7 k- K
" c, {" w% |: a* V8 U! y

0 x) {6 k" i* Q7 y* ~3 B0 z) VAddFilter (int type, int subType, int solidBodyType);7 [$ N8 M8 y( y1 c( ]$ a/ f  \2 t

) b6 ^3 k. Y# @& [* b2 v

) l0 H0 z0 X- W对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:1 e# n! z  E! q" w' k. W2 x

# n- O# `8 U8 d5 |
) E6 I, n0 ^- A7 |
& Y3 R/ @7 O6 C* ~; W
//------------------------------------------------------------------------------
. s6 z6 o4 y" `. f// Selection with mask( _) c) Y; r2 A
//------------------------------------------------------------------------------* z( [0 |4 Y0 L2 y. g
TaggedObject* MyClass::select_by_mask()5 l  c: g4 ?- z* i
{
$ E1 r* t3 V, J+ v7 X. D        NXString message("Select an object by mask:");
, \6 L; o( a% I        NXString title("Select object");
; [2 [; H( a. M& }  x        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
, Y5 W4 C! E8 w2 k; B/ s2 P: A        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;! m! w' K$ e# a4 @
        bool include_features = 0;' T' L+ r6 q8 i! N! A+ _7 V6 s
        bool keep_highlighted = 0;
3 n4 J6 ]9 y+ J- K/ _- E' N
% v. @( [8 {+ ~/ V6 k! e
8 K# W9 a, f/ T* s( B9 {1 ]9 ?
        // Define the mask triple(s), see also uf_object_types.h.
9 W7 q. E3 X1 v: n/ E8 T        // Uncomment or combine the desired mask triples- a4 _0 M- A5 x
        std::vector<Selection::MaskTriple> maskArray(1);6 B1 a& [% O+ x2 s0 t( K
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies9 a  [2 D9 d+ N( N8 i8 x+ Y* @
        /*
5 N/ [6 U6 w" x8 ?0 G2 r& w        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
$ h& W, j+ R8 \        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
( t6 w1 |+ `, k$ z        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components9 w* ^# b8 |9 o% `
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
) O+ @, E! j! `- y$ }        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
  ~! I6 D) b! W8 [* S& S' Y9 ~        */5 A3 |$ ~! \0 p% w: l' ?. P
        Point3d cursor;
# ]$ U6 ^1 A7 @        TaggedObject *object;
) ?, u  g$ F6 y7 O% E4 T1 M2 N2 a8 @2 t/ x: M* `+ w3 E

* C7 ~$ ?/ T! ~( @1 K+ G8 W        // Select objects using filter defined by maskArray triples
7 h1 A5 f% a0 G$ I- [        Selection::Response res = selmgr->SelectTaggedObject(
* r6 N. x/ @# ~3 c                        message, title, scope, action, include_features,9 J5 F, e( G, N" L# ~
            keep_highlighted, maskArray, &object, &cursor );1 D5 |1 c4 e+ b, |% B  O7 z

+ A8 m" q- F5 e/ V  _; i: A- `

, N; B* e* K2 h6 A) S" G2 P        if( res == Selection::ResponseObjectSelected )
. B4 E0 P/ P# B        {
2 m+ B+ I6 U3 x4 Z) m* b5 z3 i  b( |                return object;/ v$ g% F! s; {0 ~% @' h9 B
        }
4 i0 h' B. `% }4 w1 Y        return 0;7 y# r' a% J. l
}
2 q4 D, @4 t" L+ p" z  l$ o
) M$ E' B5 p' z
  z% h% x! p( q" w
//------------------------------------------------------------------------------
* C4 ]1 t+ \2 _, m& K$ s3 w  D; Y// Selection with type array
0 l* Y# l# o# W( M8 p. w4 h//------------------------------------------------------------------------------3 T  ~6 m- n& _) w$ u
TaggedObject* MyClass::select_by_type()4 i4 c+ j  E: q. P/ B% ^- ?* Y
{
3 b0 R. i8 W" O9 Z9 ^        NXString message("Select an object by type:");% i# C" W$ p# b# ^! L
        NXString title("Select object");
) p6 i6 a' P# P# {$ y! Q2 g* {& q        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;2 \# P- k9 F  W9 {5 w% ^3 B  B
        bool keep_highlighted = 0;
( M6 I$ i  c5 i! w2 m+ _, D2 \* X% N- V1 Z6 F
4 b* q: o7 `+ g5 T; r& v
        // Define type array, see Selection::SelectionType Enumeration
' Y5 M" B& {' W0 R. s/ ~        // Uncomment or combine the desired types
5 x1 Y' o4 V: k9 Z2 ^. E: w1 x5 b        std::vector<Selection::SelectionType> typeArray(1);; S, ]( w7 ^# p2 e. M; R
        typeArray[0] = Selection::SelectionTypeAll;
" `9 t& y( d$ T3 n4 i        /*- ~6 E  I) v1 ]' C- L& p, d
        typeArray[0] = Selection::SelectionTypeFeatures;
* ]) N2 N* c: n0 J        typeArray[0] = Selection::SelectionTypeCurves;
, D' J6 U* Z) I/ f$ H+ M        typeArray[0] = Selection::SelectionTypeFaces;# y. l+ w3 T2 d# Y8 M  q
        typeArray[0] = Selection::SelectionTypeEdges;! ]5 c' B9 {& C% I1 m
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;; B0 I5 v% Y4 f+ g2 u9 u  M
        */: w, C' U' \- b
        Point3d cursor;: G2 j* p: G2 n" Z$ i) q
        TaggedObject *object;7 L# N5 r  Q. }, Y) G9 z

4 C. ~% y9 T4 A: `  H, p
" ]; b1 Y# g3 L$ Z1 x% E# g& m5 h
        // Select objects using filter defined by type array
! q! j1 N6 m7 b( B+ `) G. i8 z        Selection::Response res = selmgr->SelectTaggedObject(# P/ }# W  `& }, A; T& L+ n' Y
                        message, title, scope, keep_highlighted, 7 |8 p. X' Z1 v/ ]; |
                        typeArray, &object, &cursor );5 {3 `% o! F5 J

% T. B& ], x2 U' F! E/ o

4 N; E  u# K" u7 B" ~        if( res == Selection::ResponseObjectSelected )5 ^5 V3 _) s9 N" G$ x8 X
        {3 S) ^  O0 ?3 R: a* U
                return object;
: O% \: K& I6 ^        }
7 f, e* [% @$ r' ~7 e        return 0;" N% z+ s$ n% V
}6 P* E2 I8 i! a0 t, d% e, F; ?

" u3 g% C+ t* C5 w' ^' w& d) z

: u, b5 u6 |/ _) Q3 h9 e//------------------------------------------------------------------------------
3 Z7 K! [6 U4 t# A% f& h/ |& i// Selection any objects+ T$ H6 f* v/ o. f- R
//------------------------------------------------------------------------------
# e$ u+ ^/ @: ~6 [+ _( z; L" l3 q6 Fstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
/ |. k# [  T% A( e( L: D{& g$ ]4 ]# C& W: _; t/ o* U
        NXString message("Select any objects:");- d3 X- A! k, k0 f+ D8 }
        NXString title("Select objects");, L1 N  a' s7 T4 F7 r
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
2 T4 U3 C2 K% _        bool include_features = 0;        1 ^' Q: Q) y7 _: Z: I! }4 ^
        bool keep_highlighted = 0;" j3 Y. X1 c. Q( ^( {4 r/ I
        std::vector< NXOpen::TaggedObject * > objectArray;" z3 x( z7 X% [+ J
6 t: {6 e& l" i. R# u, c* d7 y
$ U& S0 c/ U; n: t& U9 b4 \
        // Select any object array
. w. W( E- f/ w  t3 R: n! f. c        Selection::Response res = selmgr->SelectTaggedObjects(
# e/ D* g$ G: v                        message, title, scope, include_features, 4 O0 g0 ^, f) \( K& @
                        keep_highlighted, objectArray );
+ b( Z3 {5 C2 B, W
* I6 c! m' P& a6 y9 p

" V$ T! b, V  k3 o& P        return objectArray;
9 y8 Q; Z; @+ v  F" O+ ?}- W5 _& P2 T( [5 D# j+ O8 ^

! _" ]) X4 d. W3 ?/ |) v0 n1 a8 K/ h: k3 D; ~' q
, R$ Y4 U; }1 X0 E! @1 i; E6 j

5 k4 Z1 p, @. v1 q
0 @! _0 i2 Z3 {7 w; t( U4 a; Q! \  I: k

- C/ ]4 X' W+ x8 ?) s$ d1 h; B* e" T; ]2 _1 X/ G$ _5 u
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部