查看: 4319|回复: 0

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

[复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

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

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

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

×
关于NX二次开发中选择对象mask triple的详细讲解
! }# e. F7 N8 |: u2 T7 c, ^很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
0 [2 c3 K) z% O7 W) q1 W. {7 y: c如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
' V) r6 q8 n% V" g一些常见的类型和子类型如下:% K6 J( y  ?9 K- H0 v2 c
QQ截图20171025161410.png ! D0 \+ t% |" G% E5 a6 F$ {& l% q
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。; p2 n# S* G0 E7 _
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
# }+ |- x6 r: |+ A) K6 N% p  z  L' b8 S. z/ D% _
QQ截图20171025161432.png   ~; {! x4 y1 e  ?/ f1 B
2 m" A# }! Q- J! ^
0 C) Y1 `  ~- Q+ `& p) c3 w
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。+ B5 V4 Y$ _7 |( M/ D0 I8 l
5 D4 V' i, v  s3 G8 g6 y

/ x# H# H$ g6 j QQ截图20171025162656.png
, i) H& b3 {% B" L; h% F/ @" @5 l# Y1 x, F: @7 g9 H$ Y

6 b$ T2 A; o7 x- L7 v' z对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。$ c5 }7 |9 N% N( ~) o: B3 P1 h

) e) U3 L. ~8 o+ Q1 ^1 G9 E& T1 x( D7 z& \& g" t1 {$ P6 l5 \
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);$ g/ f- ~: f7 n; e. ^. r0 p
# }7 ?3 A2 U9 L8 M
0 F/ S: j2 f* _$ R% t
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);' D. j0 ?! W7 r9 H9 K- N

) o1 J( Y9 ?1 p, M, K& q: t$ d) j
AddFilter (int type, int subType, int solidBodyType);0 c7 a! m4 F9 z/ [

' b5 f) W0 \9 m; t+ _
; t3 l2 I* |7 \$ t9 G2 R, O; M
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:" \6 |+ a0 d1 @% U. R/ ]. c
0 w  k8 f8 L' T3 ]

$ z, w; Y& b0 H, ]/ h  d+ s0 [

+ d! m: R; A2 r3 q& Z//------------------------------------------------------------------------------
+ [5 x- V( @" S5 Q$ I) k0 t// Selection with mask
+ V9 q  g% L+ E% V! V/ T) a2 s' s//------------------------------------------------------------------------------
4 q8 ~) K+ J' `+ {TaggedObject* MyClass::select_by_mask()! ~0 G- V; c7 {
{
% [" U- x) j. _+ M* l        NXString message("Select an object by mask:");5 u2 ~( A' F" f) E; e
        NXString title("Select object");
4 |- S4 ^+ ?; Z( t' j7 P& G5 o        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;+ r6 w$ v4 U7 |- h8 u/ a4 B
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
4 u& c6 J4 f- T! h8 f2 Q        bool include_features = 0;( {$ w' t  b1 ?. c
        bool keep_highlighted = 0;% `& O8 H. t2 J
+ K& Z: }8 C3 _0 M9 V" |
# N  x4 `( j: F, V, U
        // Define the mask triple(s), see also uf_object_types.h.
# \/ r2 g7 F: Y& H9 Y% Z        // Uncomment or combine the desired mask triples5 w$ p: y3 f& M( T) @/ z
        std::vector<Selection::MaskTriple> maskArray(1);* q# E" Q2 ?6 J$ J
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies6 c" c5 l' v6 a0 J! [  H& v8 J' j
        /*
6 `$ v7 [! p- l  s) K        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces# B' {! {! @% G6 q: F) E, @! c
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges3 k- a: l& P( Y
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
* ^9 c0 [; R1 L. ^5 D2 L        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines8 p0 m. B9 v- @9 O. P* C
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
5 x8 s1 }) Y$ L) Y! @        */! [* _  t$ h( D, g4 O! L1 U5 |
        Point3d cursor;
% O7 @9 j  R3 I9 _9 \        TaggedObject *object;
4 k* f4 e+ W5 T! M" v5 X2 f6 B
% t0 R* l) T0 v5 T6 ?; a2 _' s
* ~4 v% X' r$ E; S. s* D
        // Select objects using filter defined by maskArray triples7 H4 f  s1 y% w( |! A6 u
        Selection::Response res = selmgr->SelectTaggedObject(
  i" f- D  C& a4 v8 k4 ^                        message, title, scope, action, include_features,7 G- |  s5 u' Z' a8 z
            keep_highlighted, maskArray, &object, &cursor );6 G2 o) w+ O% d) H$ o! u
9 |$ _$ U0 v* e

% o( w; E6 i" ?; p# J8 }0 t        if( res == Selection::ResponseObjectSelected )
1 y* u/ y- @5 G. `        {
6 P' G+ _& f3 c# M+ Q& |9 `+ `, l                return object;
. O( w9 M$ V% o        }  a! t: m8 E; }$ V7 f! L
        return 0;! U4 j5 T; g8 s# h0 u; ]+ B% o
}
# d3 Q4 k, b4 ^" y( V2 H  V; @
7 A1 w/ F! y" C& b" `
7 T2 U) y5 I, k" W& I8 z; ~7 W& ^; s
//------------------------------------------------------------------------------
4 s# {% h! O2 R5 V# j5 u( I0 A6 \// Selection with type array  x; l# g7 A$ b( X8 r
//------------------------------------------------------------------------------
4 b. p4 N) R+ z! v' ]' H2 j, k- ~TaggedObject* MyClass::select_by_type()
! p- u( ?% m0 s' ?+ {{) ~2 T* W( ^7 i, N2 c* D5 ~$ k/ @
        NXString message("Select an object by type:");
- J5 A7 d. J1 w: ~: Q        NXString title("Select object");
) F3 u( W0 s: c( z, P5 f$ v  r        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
  o+ I3 E( x. `6 X' V  ]* H! o        bool keep_highlighted = 0;& Y: U3 ^8 J( \6 z" S( a
: a* D, [$ W5 x- q+ f' [% [) e, [/ h
2 A! D2 F0 A" C/ S: n& l4 V+ }3 N
        // Define type array, see Selection::SelectionType Enumeration+ H) H- a* y9 S
        // Uncomment or combine the desired types
6 M$ t# q, Q! f1 g+ I9 k- b        std::vector<Selection::SelectionType> typeArray(1);6 N3 n9 S4 F3 W
        typeArray[0] = Selection::SelectionTypeAll;& I; F1 Y& ?, ^; A3 Z7 B! D
        /*
8 L9 r6 C" m3 |5 V, i5 p, y        typeArray[0] = Selection::SelectionTypeFeatures;) K- R" u8 z. J/ h
        typeArray[0] = Selection::SelectionTypeCurves;0 k% W: ?, M# Q
        typeArray[0] = Selection::SelectionTypeFaces;
2 v* h2 g. W7 {' m        typeArray[0] = Selection::SelectionTypeEdges;$ G: J- I) T! }
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;( I5 ~' m( Z, [" ?
        */
, I7 t( D/ Q8 `& q( }6 k        Point3d cursor;
9 Q0 _9 \+ J6 Q1 e        TaggedObject *object;$ `( a$ t" q+ d

8 y% |) S3 D" [6 |
- R$ A" E8 l% f" F3 R5 Z7 D
        // Select objects using filter defined by type array
4 Y2 K3 X4 K. e( G2 Q- [        Selection::Response res = selmgr->SelectTaggedObject(  H2 Q: b1 |/ e# O! K
                        message, title, scope, keep_highlighted, , m& d0 i/ G' d
                        typeArray, &object, &cursor );
5 F3 f/ }! `& ?1 o4 J% Y4 q3 x+ S" i/ \7 _$ c  I. l( U7 u

/ A* f1 Q: U$ ]0 P5 t3 q        if( res == Selection::ResponseObjectSelected )& a! I2 [6 W! T$ Z1 ^
        {. R# b5 J1 }8 _- y1 a% _
                return object;3 n; ^/ Z+ V" M( B" h
        }$ N% k+ r( V1 a' \) \( C
        return 0;
+ e, n" T( i' N7 [1 T" T}# B( T; f0 Q0 N- @

- ~5 O: ?8 m6 F1 P# \

6 E% Q) f. J. X# P- @//------------------------------------------------------------------------------
: Y4 }6 M( @/ _0 v6 h) }// Selection any objects
' i. z$ I- B! ?  j//------------------------------------------------------------------------------2 _! H0 ?8 ]8 b# A) N3 F5 I, `0 d3 A
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
7 b  {" o7 }3 f5 ?0 V( w. \2 V{7 y/ i. z! C1 L' b; }# m+ \
        NXString message("Select any objects:");
6 m: [4 @; K: i/ {; M8 x$ x* [        NXString title("Select objects");& r# }) \' Z9 i& Q
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;9 a7 P+ @8 V& k2 M: [
        bool include_features = 0;        
9 _! a- T& N; j" S' t( K        bool keep_highlighted = 0;
- v! ~/ g6 W: r0 v) z/ S  D        std::vector< NXOpen::TaggedObject * > objectArray;- e5 d, s! C# t, e- @; x
6 k# l* w7 X9 W/ Q
- A2 r& O& @. F% Z' c! J6 P
        // Select any object array
! z7 X5 q1 Z9 X: d        Selection::Response res = selmgr->SelectTaggedObjects(- e. N9 T' ]$ s1 @4 `( p5 B
                        message, title, scope, include_features, ; ]  ~" \* V( B, y5 o0 s
                        keep_highlighted, objectArray );- ?7 R& }9 Q8 A% k* A

' N* T9 b4 M- I

, A) r$ K. v1 p* V' x        return objectArray;
! p% M+ N3 u: E; u& H7 u}
& s) p# U% B: [, N! z0 p8 V" ~  K: p& t/ L6 G
+ C, w3 k  c* E

! @9 m7 c/ c! v5 ~9 ?8 s& J

9 O4 V8 l5 b3 t
7 I+ |0 P5 Q* d( e/ e

0 @2 T8 I& F& q
; w6 l7 g! |  n- n
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

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

本版积分规则

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