查看: 4115|回复: 0

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

[复制链接]

4

主题

3

回帖

48

积分

管理员

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

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

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

×
关于NX二次开发中选择对象mask triple的详细讲解3 V, C# C7 L$ w" B
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
% K7 t9 S* z/ y. ~- S; W) s如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。5 G5 Q/ T8 d* G
一些常见的类型和子类型如下:
$ G% t6 T) b. M* e" m QQ截图20171025161410.png
' I! n2 f5 s6 V0 y8 d& q0 m! v如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。1 ]* F0 c  [; }1 D+ l
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
2 H; @' S& Q0 k+ ]+ j7 Z( \/ E$ e
QQ截图20171025161432.png - @! a2 [  ~* u7 |/ ?

, C! E' t5 H  H# c8 H) s! s( A
/ P* x$ V' E' _* ~! F1 ?; \' w
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。7 B, z- G) ~& {/ l, X+ @

/ m: ^6 t. }) E& C! d1 R7 S
- q! r8 x+ B# W# [/ }
QQ截图20171025162656.png
: N% z7 v6 ]+ a+ B: l- q' d+ m! S" s) l0 K+ H# h+ C2 {1 x
/ _% e0 W9 H- p3 [1 E8 M+ z
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。7 R  r) p( J: q, s% b2 H( f4 @

( {8 z, d) y5 x. A3 x6 b6 d! B/ n3 X2 c$ h
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);6 O9 \5 {  }* g& a* @# ~

4 ?  }5 K# U* W. _! J
9 S/ ^. m1 N& A! b/ [1 ~) HAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);  `5 w1 W% p; z9 \) O

& n: U# }0 y. r" h' P% X3 ^
2 U& s/ T0 Y( CAddFilter (int type, int subType, int solidBodyType);
1 x2 y/ A+ ]  y
0 Y- w- P5 ?/ U( o+ W) f" w( O+ p
3 v7 E9 X# z; N+ f% H+ ^5 x
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
! ^: |# |/ M! Q8 L7 D! t5 e# Q8 I. ~, R3 u" u; ^

+ F0 w, Z% u1 E) v& W

; ?; Y) ^% ^' x/ c6 s  u//------------------------------------------------------------------------------
* F8 E2 n0 d0 {  o3 _1 R2 `// Selection with mask& Y" t5 H& {2 n& i, o0 p" m
//------------------------------------------------------------------------------
' r; H1 E# K3 A& j: [( dTaggedObject* MyClass::select_by_mask()% ?: \) u  D+ @
{
3 `+ O! b6 R2 r5 G& D4 N3 H$ D9 m  J        NXString message("Select an object by mask:");
8 O# `6 }* Y9 w3 T4 N: L) x        NXString title("Select object");/ R+ j! |+ L3 h+ ~- f5 `
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;" {/ ~6 [4 K- ?/ |$ R
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
9 s, d9 N6 M; e) _% D        bool include_features = 0;
* F# }3 ]! z: T7 i5 d* R" q( H9 P! |        bool keep_highlighted = 0;2 O* @7 L- X5 D) s* c
# k* G) w3 p9 m6 V1 {7 m9 R
7 _8 }; N. d/ V5 v
        // Define the mask triple(s), see also uf_object_types.h.
2 g6 C" V2 U7 _8 h- M        // Uncomment or combine the desired mask triples
3 A, t1 w* X( d+ i  m! u# T        std::vector<Selection::MaskTriple> maskArray(1);
7 P. ~  S. R( n+ @/ ^' W  L( l        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
8 G: C7 X' X9 C: W$ v: L# K* }        /*
0 H( o7 ]- l3 K3 l0 [7 p5 f        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces; P3 B* l$ ~* i" C
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges5 J4 r' K5 h9 R" G  b
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
' t; E  e8 V# H/ f+ W$ Y0 ~% ^5 x        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
& i, {# d5 D9 v3 E$ [) ~        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects2 z6 @/ \. K9 a7 H
        */5 A8 h. ~: F4 s1 K
        Point3d cursor;3 }  Q* X6 \1 \* y) I$ y/ V
        TaggedObject *object;& k5 V$ K/ d/ X0 c# H
& |1 r: t3 C5 O; t
8 q5 F8 r) P6 B- Q
        // Select objects using filter defined by maskArray triples
% o6 M! ^- u. W- M& q. y* s/ ]        Selection::Response res = selmgr->SelectTaggedObject(# N5 s" {4 E8 d' D) S( U
                        message, title, scope, action, include_features,
3 c6 w3 I& N" ~+ ^" F/ V            keep_highlighted, maskArray, &object, &cursor );# F9 [3 K4 w$ W% v- e6 \# R

% a: \, i  q* a( p5 A/ ?1 r2 J

9 p, w- a7 p4 ^4 @        if( res == Selection::ResponseObjectSelected )
9 s. X! L" `6 W9 [" e        {) X. M9 M0 E2 H" c9 v4 [" _
                return object;; l- L" s. F/ O$ I; p/ G3 a
        }$ q6 H7 C$ _8 o) u# g
        return 0;
) i( U2 M, B; ^! D9 N' c$ }}: o9 o, g/ O5 a' z+ u
$ s, C" Z. O2 U

) q) w/ C- u" e3 I//------------------------------------------------------------------------------, b( ]' k( s3 W
// Selection with type array' i1 Z! }4 z3 T- W6 R$ T8 ~
//------------------------------------------------------------------------------! u2 k  l, I' B( X" c
TaggedObject* MyClass::select_by_type()
( \) l' f7 R& g7 D5 j$ j{" T4 h3 e4 a; L5 }& _
        NXString message("Select an object by type:");6 W$ S9 }+ C$ p  d8 `) n
        NXString title("Select object");
+ J) F, r1 J1 P  j$ ]) y5 X        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
3 H& C+ n# x9 Y% P        bool keep_highlighted = 0;" `" ?" r" o3 Q7 M+ j/ }- n* z
  h$ o7 [" c" `) V" ^
4 e4 n' M/ N+ Q0 K9 m( M+ \3 {# l
        // Define type array, see Selection::SelectionType Enumeration6 S% ]% z6 @4 }& ^4 m+ D. ]+ J0 T
        // Uncomment or combine the desired types
* r6 e* G/ Y2 q. m( M# O' F        std::vector<Selection::SelectionType> typeArray(1);. t) Z7 w, N: @" k
        typeArray[0] = Selection::SelectionTypeAll;
6 c5 e8 A6 |- k0 `' q. @2 S        /*; ^* L+ l9 _! ^' F
        typeArray[0] = Selection::SelectionTypeFeatures;. h. t1 l( B. f3 S: r. P4 c. o
        typeArray[0] = Selection::SelectionTypeCurves;
1 L3 F6 m/ d+ p+ m7 C8 \3 B- u        typeArray[0] = Selection::SelectionTypeFaces;
' K- X3 P/ m5 m8 L+ ~        typeArray[0] = Selection::SelectionTypeEdges;
6 |* Q2 \% |- c% d        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;& [5 D' s' a) c: b# p+ y$ r
        */
9 i9 ^4 X' b2 F4 _$ D        Point3d cursor;' p: j+ Q0 S$ r5 r4 e9 S
        TaggedObject *object;
) F* F& B5 g& @
' ?& S2 C9 q9 o5 u+ b9 l3 M6 [$ n6 @

/ K9 }& r6 e, j$ D        // Select objects using filter defined by type array
; Z- T- U" ]% ~( k        Selection::Response res = selmgr->SelectTaggedObject(
0 {. n( n1 b2 }; a                        message, title, scope, keep_highlighted,
& v8 [; J) Q' y3 F                        typeArray, &object, &cursor );' @; Y5 }/ m8 A4 }7 Y

; S( m9 H: ]* N6 U* x7 S

! |% O/ r, `9 W; [+ E' z        if( res == Selection::ResponseObjectSelected )# y% S$ b; b+ h
        {
' D. s& f' e0 z* P3 l/ `                return object;8 R8 W+ E5 {* ]
        }
  {2 B" a" }0 ?$ Y        return 0;
! S  K% f) u+ m/ o& P& D( Z}, S; u2 L5 B$ a* e0 j

3 b8 Z& q) Z/ K" l  R

/ U5 U6 p) Q( t; q' T1 X% `//------------------------------------------------------------------------------
) ^5 \! _" U9 Q8 i: l// Selection any objects! ]$ H0 x; ?+ E; r
//------------------------------------------------------------------------------
- C: B, n$ j" A; H1 v! Tstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()- Z1 e5 k8 g- n2 b) u0 [5 A
{1 S0 ^' {$ a9 X# B3 Z
        NXString message("Select any objects:");- ~0 \! a5 }2 `, d
        NXString title("Select objects");, o, ]9 w( W3 R& B" N- W' g8 w
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;! g" n+ U; G: T! e; D* |1 @
        bool include_features = 0;        
% l# h/ q' K9 l0 n        bool keep_highlighted = 0;
1 M, @% Q% F0 ~; j9 p9 y        std::vector< NXOpen::TaggedObject * > objectArray;8 i9 S& f# ?' h2 D: [8 d

8 n1 F$ F  Y# _& m; R

, F& }6 {/ _8 g% Z+ {/ R# [        // Select any object array4 R) ]% c* T" f
        Selection::Response res = selmgr->SelectTaggedObjects(/ ]9 ?" ~0 i( R+ y- H0 Y  R; ~
                        message, title, scope, include_features, 5 ^, {) A0 e3 `$ O
                        keep_highlighted, objectArray );
0 y, k+ y6 i0 W9 h5 @5 l7 N
! R; E* f& ~7 o+ k4 r

! E, Q* d) j2 j' _+ U" b$ I4 Y        return objectArray;
7 Y% v7 P, C( c$ D7 y}& O1 n$ F! e! v' k. r4 S
  S* }/ K& `; M# d% P
3 I  r* }0 ~8 ?8 x! ~. R% D+ r
, p; _% r8 z- w' W4 v) h
+ O0 _2 i$ Y3 C+ O' _0 S4 D

, J: _, m6 U; I: [" ?2 @

: o$ ], f# z( R" j* V, S1 Q4 W2 R! M* K' F' H
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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

本版积分规则

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