PLM之家PLMHome-工业软件践行者

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

[复制链接]

2017-10-25 16:33:48 3821 0

admin 发表于 2017-10-25 16:33:48 |阅读模式

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
3 Y$ j# f" I, F9 j7 B7 _5 b: Z很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。! l9 L5 Y  f7 P. A
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
& R0 |( l; ~7 n5 R$ Z一些常见的类型和子类型如下:% B/ W$ {5 w4 a9 ]- P4 l4 _' G
QQ截图20171025161410.png
9 R! R3 Y- l6 n4 N如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
6 W0 p8 k7 B' G8 F实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。6 Y* g# G+ J1 w; V

+ O) c6 A! X. p2 U' ~! ^/ T QQ截图20171025161432.png
' U0 E+ \& e5 ^1 q% v0 i) T, R# A# ?' K3 G

8 g, p6 q- |1 a/ ~选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
* m+ C9 H1 ^0 k- l3 k# V6 B
$ ~; @# p! J& U1 V& `4 t8 F" f

6 q- ?. R) `9 A. p; w3 B' M+ ]7 x QQ截图20171025162656.png
  z: t1 w% ~" b  c* H0 E- I8 D, s2 z# d
% m- x8 O6 Z+ R2 x3 s$ H
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
0 M' T6 P6 s3 N% {9 u3 y5 N+ X
4 G  Z/ l2 z% U' ?0 G% C& c7 I$ O4 V* E. F3 x6 O
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);$ o* B! B4 K3 p

2 s( _" @; P1 P% `$ n
6 {  i3 i0 x' Q/ f/ P* ?. UAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);0 ~0 H7 y7 ~& m
2 M# _6 n. n6 v. x4 K, Y+ r" O% K, _

2 R2 Q' ~; f6 P7 H6 r- `/ Q# ?  wAddFilter (int type, int subType, int solidBodyType);; |9 }3 J8 Y3 x

9 k, i  E- e  I+ d1 V; ~
4 R# d. M2 Z2 ^8 w" I% n
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
. h! `& d0 g+ v) M; |3 ?$ s1 W) x3 `9 w8 y8 w/ c! I6 p2 l' X- m

" c5 D7 F. I, k4 ?; v! B9 b/ n' z  t
5 _( _  i9 u1 b$ N# q1 X/ g; a
//------------------------------------------------------------------------------; E9 a- D- ^) N. a& T8 l
// Selection with mask
! ^1 s. C: m0 s# \* _; [$ L( h//------------------------------------------------------------------------------
7 x) Q+ I# b  s2 FTaggedObject* MyClass::select_by_mask()- Y# B  p2 |& Q. w; j" \+ f1 J
{
. ]2 Z* C, }8 a2 v6 L7 s$ }/ x        NXString message("Select an object by mask:");: `' \2 [% B' t- b9 m* `
        NXString title("Select object");' g% c9 X# X( O0 k$ L& R* Y
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
# q- t9 f1 u) R% Q! g, X        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
' g: {: J4 M! ]        bool include_features = 0;7 r. ~2 T5 D! j& \' c) I
        bool keep_highlighted = 0;$ c  k5 J& s" F

7 t* z2 z' K( ], u! U$ A6 M

! n: @7 s) Z* z- U  H  P        // Define the mask triple(s), see also uf_object_types.h.
( m+ f/ E2 A0 X  Z; Q. |9 A+ t4 W        // Uncomment or combine the desired mask triples, F0 o3 L( G' _1 x3 z7 {
        std::vector<Selection::MaskTriple> maskArray(1);3 E: l% Z% y2 r5 `7 ]2 L
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
$ q2 c! b0 _. I& y+ D; y        /*4 t* U" O+ X4 r  Z
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
  U# t( |% S& `3 |1 ]" x' ~        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges8 L  ]1 _) N1 x4 p6 G2 b
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components5 O- W+ W3 {: G* p
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines9 P2 c! r/ n, S+ h, e
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
. D) A$ {/ u0 q* S4 K+ J: ?8 l        */; K$ A" p) u1 \; |8 J
        Point3d cursor;
1 g6 s. d9 |7 w$ ?# A5 o' W! q7 {  R        TaggedObject *object;, i7 X0 L4 i5 N1 S2 B6 J: R7 L! C

% B$ S: S4 f( H* s

4 \% M; g! L5 [* i* l        // Select objects using filter defined by maskArray triples* L2 a# w4 ~5 Z# K! }; I: H9 t
        Selection::Response res = selmgr->SelectTaggedObject(% f* N& N+ D7 t) w7 l2 u
                        message, title, scope, action, include_features,6 y1 p9 ^9 D1 z+ J% m0 ^
            keep_highlighted, maskArray, &object, &cursor );
5 L4 H" a: @4 l
2 m* q% A" a7 L: {$ b
1 p/ O& A& |/ K) b  s
        if( res == Selection::ResponseObjectSelected )) U0 ?8 ?, M% H# e$ ~- D/ k, N) P
        {
9 E* H3 M/ Q& g: Q* [                return object;
: R/ v; A7 r& c4 c! |; e! o3 T        }
, _8 ~7 ~9 p. z+ b! S  H1 a  s        return 0;  B! }! z" |  b1 N* n8 {5 K* r
}
3 O) n# j  W, V& n, c% z; B, ~, {2 G) F+ T* h( `
* W6 [* W0 ?/ Z3 v# k. W
//------------------------------------------------------------------------------7 d+ j5 u2 ?8 h
// Selection with type array7 g9 @5 v( p, H3 {
//------------------------------------------------------------------------------
/ @. k% y) N& Z- R- C( YTaggedObject* MyClass::select_by_type()$ v1 J7 O; m" w1 F0 [9 z
{
) e  r  ~. o  g        NXString message("Select an object by type:");
- Q, u; M0 G3 k/ m        NXString title("Select object");
( Z& d) ~9 L( _, j        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 T  l' f& b1 z7 u+ s/ B
        bool keep_highlighted = 0;
2 W  U$ ^8 p0 N/ x" I/ a6 F' j9 g: P) W* i

8 f& ~. c" i( a2 H! u! a) E/ f+ A0 I        // Define type array, see Selection::SelectionType Enumeration* c4 Z! e( }5 R5 @& d% Z
        // Uncomment or combine the desired types
7 H: v" T$ L5 v7 k        std::vector<Selection::SelectionType> typeArray(1);
; j# t* Y2 {- _) m, K# W- w  L        typeArray[0] = Selection::SelectionTypeAll;* p9 j0 R- n* Q$ I
        /*
( U7 U6 |' N" y* k! S; `- k        typeArray[0] = Selection::SelectionTypeFeatures;3 l, ?& A) J$ k* s: E- y
        typeArray[0] = Selection::SelectionTypeCurves;% j3 t  o& I7 f
        typeArray[0] = Selection::SelectionTypeFaces;+ _0 s# E) y0 N; {* j( C9 f5 P
        typeArray[0] = Selection::SelectionTypeEdges;. L$ P" a2 O7 k$ M3 s4 G8 \
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;$ f" L2 ], m% Z. Y* [, m' w4 e  V8 ?
        */
" Z6 h9 n6 O2 M& r' a# E) q: h' [        Point3d cursor;
  P7 O; k& n8 ?" M' E0 G" s        TaggedObject *object;2 _! W4 y' M3 a/ F0 \" W9 E% R

/ d, o3 C  |- j) j  i/ ]% \/ M/ e
  i: Z3 V  \9 ~' r# l
        // Select objects using filter defined by type array2 n* ?, c, A" B5 Z& u
        Selection::Response res = selmgr->SelectTaggedObject(1 c* U4 u3 a8 H2 T! W8 h. a
                        message, title, scope, keep_highlighted, ) @& G5 W4 D: ]& F
                        typeArray, &object, &cursor );& e) W& G- ?, Y( K! A
6 J6 z2 n9 m( H9 h. }* p
2 N3 h% C" j; ^6 W% `: w
        if( res == Selection::ResponseObjectSelected )3 u5 U- v4 ~) q7 K: o6 D7 t
        {' d. z) a$ [- _; ~' U% A/ {, o" n
                return object;
0 q& e+ {0 d; c2 G5 W* E5 n! _4 T5 b        }! U# u9 j" @* U- f& j
        return 0;4 D: l2 ]4 Y# m; B
}
; e7 r" o# ?- `2 v3 B, C1 N+ Z1 ?! i+ d  P: H9 ]) R) l1 }/ o

+ U8 a) e# X1 p! i//------------------------------------------------------------------------------
+ m: p" G. F5 q1 }+ W! e9 _// Selection any objects' ?; g. @/ N, C. n2 _+ w
//------------------------------------------------------------------------------
9 [! |3 ~( w  ]7 |& \std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' K4 x, P& h# ~1 a( K6 z* u& t$ o! V9 \{
/ q. ]/ v4 t+ {9 o! a8 _        NXString message("Select any objects:");3 `+ g* r) \3 K1 U1 [* K
        NXString title("Select objects");
& f7 M; ^& J$ s2 T& [9 F- F        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
+ M. C3 e$ b% b0 i; x& ^        bool include_features = 0;        
2 U6 ^" x* X  a+ F0 s        bool keep_highlighted = 0;
8 J) X: u+ c: {* Q8 q6 B' N        std::vector< NXOpen::TaggedObject * > objectArray;* r1 n) L1 B$ j" h
& g$ c$ R$ O( \9 j

, r/ D, ^/ T4 U        // Select any object array- B: E: B' R5 A- Y
        Selection::Response res = selmgr->SelectTaggedObjects(
5 H$ ~% O1 N3 P& y# G3 [- x                        message, title, scope, include_features, $ o+ V3 C6 L& ?) M9 ]3 T
                        keep_highlighted, objectArray );
0 |' S- d6 R, \0 |1 J& U- l+ y+ s7 B* w4 L& a: G3 ]
0 H- O8 d$ W2 F* e! d' w0 S9 S9 r
        return objectArray;+ H# H; g' @2 x! c( p
}
6 v. R; Z3 [$ A! L6 E
4 n: x! T3 m6 C
2 r- D0 c9 @( X! b
1 l: @. H# a1 w
# y1 j6 ^' S5 n9 n4 V
) D& C7 h. }( o' R* J% o

6 ?7 r5 l$ L; [/ a9 i) T; A$ B6 z! K5 I3 D
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了