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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解4 \# E# ?# C5 l8 i
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。& Z; g! T; i- ~3 ~9 P" F5 c
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。: @( K3 _: k; U1 }7 }
一些常见的类型和子类型如下:
) t1 F* I; R6 l QQ截图20171025161410.png
/ k( Q- N6 K2 x8 m7 l; M  B如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。0 F* {* x" p! g/ _
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。1 u0 I& `% B( g4 k
8 i- W9 m; t/ R) k
QQ截图20171025161432.png ' m& l% ^7 ~# f

5 z0 }3 \; Q; X

/ Q" h. z4 Q7 S$ f2 V选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
1 G. |3 e- j, @$ P# C& y: T: f8 _! Y9 ^% d

5 e0 F3 \/ F, c( z QQ截图20171025162656.png
1 p- c6 i) _. B
: f4 K/ Y4 k: h8 m( P& o
% b+ W$ }  [, ?5 K8 r: K, J
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。0 Y& M! f& g4 F3 \* I- D- P  _2 [: w
8 ?) b+ }+ U& [( e' `" u
8 e% Q; u. E* I. I; o. t3 t
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
% i+ g& J' p7 Q( U/ p  U2 p& L8 h; I. |5 `
8 a2 H" W: i) @
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
! L% F/ C0 \( V! k1 k- f8 t* o  s( b. F3 @! Z! a1 A2 W
6 p5 Y3 U/ A5 Y* ?* B, a& W9 t- m
AddFilter (int type, int subType, int solidBodyType);; u; p9 h& N, @3 M

; O0 ^: q" a9 I! g: b

. T6 N4 ~3 _' D4 C$ L' x5 p对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:2 p) j1 u( ~$ ^' Z

+ ]$ P: V1 d& }6 U. j$ W. m
. l( ~+ o9 j- ?0 i$ T2 s. V
( C# {# i( T* J: j' ~5 w
//------------------------------------------------------------------------------8 n* x( s$ r- N" [- w9 Q
// Selection with mask# i( X6 X# {  o4 }
//------------------------------------------------------------------------------  \; C# S+ n2 i- S& A6 Z
TaggedObject* MyClass::select_by_mask()
) @2 s' J% A% s{
  j2 O% o+ t, d& Z( t' \- y6 l        NXString message("Select an object by mask:");2 }$ b5 P6 S) M* x4 z' G5 k
        NXString title("Select object");
' _; {1 i( K+ s0 E- w2 }" h        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
) t/ O& `0 X! K        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
: |7 G6 n0 H$ v        bool include_features = 0;2 E: _4 [) }; C$ W2 C
        bool keep_highlighted = 0;: f. P0 H5 a& e$ k' s0 s7 R
, h; m% F( j$ _) F. Y

* ]0 r; |8 x3 S; Q- A2 X        // Define the mask triple(s), see also uf_object_types.h.
. S5 z3 i' g) E% }        // Uncomment or combine the desired mask triples+ F/ [% Z! C' l& y2 P: Z
        std::vector<Selection::MaskTriple> maskArray(1);
8 Y0 w0 J$ K2 \" O        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
8 G+ \) |, Z! A; a% _" \% i" o        /*
" w6 D# ^' d* X& X- V0 y        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces, P3 ^% E' i' D* c5 l. V
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
, _6 s) |# {( X        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
# y1 q+ L2 s3 q" W  t        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines8 L. X# o% {# ~! I) Y' U
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects7 f& ~8 m& M: ~" E- p
        */. S. \( V% ]: v9 Y0 Q
        Point3d cursor;8 T$ [2 c0 Y( f5 Q7 u
        TaggedObject *object;/ d, K' F# M5 r9 ^/ ~0 S
: X0 w% X2 S- o0 e/ Z

$ s8 n3 v  g& X9 S% [        // Select objects using filter defined by maskArray triples
5 t+ L" B1 s: b' M        Selection::Response res = selmgr->SelectTaggedObject(; C* \0 m, T) I2 C7 N1 ~  [3 q; B
                        message, title, scope, action, include_features,2 t" B& G9 B- w) a. c% |# t' v( B
            keep_highlighted, maskArray, &object, &cursor );
# m% p3 N* W" |- B5 `5 u
& b5 C$ Q- z6 P& t! Q# y- w

: s; n; O1 l6 W4 |( X! }        if( res == Selection::ResponseObjectSelected )
5 W/ r. e! O- V3 _; Q/ M) b# w! a) n9 s        {' O7 M3 e4 p  R
                return object;
7 B, d; r& [% }. L( Z" g+ M        }' L0 J% c- E% w# h2 q  K
        return 0;5 _7 i' `2 i9 X" N% V
}
9 C0 ^. ^( `! P! f; k+ _* m5 D
4 @5 @4 a# R8 G5 P) U4 p
+ T& y. x( ~# V
//------------------------------------------------------------------------------
- a7 N" B/ l! c( q) _0 U) h// Selection with type array
7 }3 n7 R7 A, n7 \* [" \( r//------------------------------------------------------------------------------# g+ B& ~0 X- j% r8 s# K2 C
TaggedObject* MyClass::select_by_type()- U; r: h) u& y
{
: p& r* k# k4 g6 E        NXString message("Select an object by type:");+ a; |! I9 V* c
        NXString title("Select object");+ W0 ~: b) D* J$ i( x& ]
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;7 s1 M. E8 l4 ]) o) b2 B8 Q6 v" U% ~
        bool keep_highlighted = 0;
# G: g2 ]) s' B$ |, m1 g! k' k3 k& O+ }# y$ d! G- Z/ y
# Z: \! k; f5 ~5 t& d- u
        // Define type array, see Selection::SelectionType Enumeration
5 d* {  L& W' s8 Q+ |( `        // Uncomment or combine the desired types, s+ p: C  ~: R2 e
        std::vector<Selection::SelectionType> typeArray(1);7 a2 r1 P( e& V( N7 s, y: h
        typeArray[0] = Selection::SelectionTypeAll;/ F; U1 l! t3 m) m
        /*
; Z' ^6 o$ ?' |3 E' }  n: p        typeArray[0] = Selection::SelectionTypeFeatures;1 r8 d) n' |' \" f" r, x
        typeArray[0] = Selection::SelectionTypeCurves;8 R' q# U$ N; Y
        typeArray[0] = Selection::SelectionTypeFaces;4 I5 M: f; k3 l3 E' E
        typeArray[0] = Selection::SelectionTypeEdges;
9 D, {; S% Y$ z: X6 o; P        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;) P3 e% ?& N. ?' @' H  |/ |
        */& r! O+ G4 U$ O; e8 f
        Point3d cursor;: {8 u* o9 U8 z& [7 K
        TaggedObject *object;$ k$ O- x7 W6 L5 r# E; w* ?

. r( b# C- k4 D

" l& A9 B" }  V        // Select objects using filter defined by type array
# L  q3 g' T' |, s1 X3 }        Selection::Response res = selmgr->SelectTaggedObject(. k7 w+ v; u5 q: o: Y9 Z
                        message, title, scope, keep_highlighted,
3 y- {+ Y! P( o- W5 ^7 b1 q                        typeArray, &object, &cursor );2 A* d$ ]! O4 ]+ E/ h( n9 k

2 N" `6 S% |8 L6 {7 [9 r& Y/ j

  s3 U8 d" e. M- u        if( res == Selection::ResponseObjectSelected )% }( W# r( T6 V
        {
7 h3 L! j6 B  K                return object;- F+ L# P; T  m. M) ^9 _6 T
        }
4 }( l; R7 Y9 {( X: V5 ~* L: D        return 0;
" T7 U: u) D* ^; }0 ?& l% |. a! y}
8 |6 t, ?% d6 [- h6 K' e1 K6 X& _/ u
& G+ T0 G7 u; L; J0 q0 @8 Z1 l! v1 o
//------------------------------------------------------------------------------9 b: k- Q) |2 |$ t0 Y, E
// Selection any objects$ v& [9 B1 r$ I1 [; l" C9 ^& _1 D
//------------------------------------------------------------------------------5 y1 F; V4 }, @- c8 y! V1 Q  W
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
6 n, A2 W* X2 G3 T{: W* H, t$ L6 _! r+ w. t
        NXString message("Select any objects:");6 V2 f0 V+ Q, W8 ~' E
        NXString title("Select objects");' [9 C6 r# v8 I- \$ Y
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;0 [' Q/ Z6 s3 }8 I4 u! ^
        bool include_features = 0;        
! H/ A; D% `/ J5 M' t' w        bool keep_highlighted = 0;
. c) _( ]$ Z  [$ Y" d, F        std::vector< NXOpen::TaggedObject * > objectArray;
& T' d) J/ u. O6 e; x# K
8 o& a5 x5 d/ G: S
1 Z9 s; q9 W$ k& E  w5 Y
        // Select any object array! z8 S% Q% d: C& E& `9 {
        Selection::Response res = selmgr->SelectTaggedObjects(( J& E( W/ n; L* U8 H1 ~
                        message, title, scope, include_features,
/ ^+ d5 P- g) G' P+ d                        keep_highlighted, objectArray );
/ B" A6 _* I3 i" ~- M* I- U: A7 A# Z3 l  }; [
. A9 w* ^6 Y1 c& ?: |  ^! @
        return objectArray;
+ o, L& x( w4 ^6 f6 e}
- F! F+ ~% M; h; a3 J; o
8 g6 `# x+ B/ [; n
# l; W" H$ n6 c, v0 z
- P4 W& q0 ^- o/ P. M
0 |6 o9 e2 d& N9 z* r. q! k2 X

$ O8 C$ c7 d( s# W1 R9 L
7 E6 Y0 \* e2 S$ ~  y

" K0 Z# ~7 g+ x* G4 D  P$ E  b
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了