|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
; {8 }7 h8 ^) q$ ], I( f: c; j9 B很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。( r2 _2 V, D2 C6 K9 W7 n: ?
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
( @4 _3 d& u3 g' G: P一些常见的类型和子类型如下:
0 N+ Y2 X. t/ R) B1 |, s5 @
: W6 c; ?5 h' t8 a如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
; R# ~! O7 Q- D3 u! |* J; u$ s3 g0 [% Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
( x* [/ n' ~+ S7 W
, c& p( [0 D( q/ z/ ]0 o/ T" A
8 s7 j# i G, ^: Y0 l, b% K
- t1 e( r) B! B! R1 r
$ c) _2 t Y# f% K8 ?选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
9 d- T$ |/ L# @+ E' d* n
1 I6 Q. {. `2 L# o
8 ^, |; T; H6 P A: V8 s9 N% c
9 }2 A @7 _# a6 Q
( b( a2 U3 B7 B+ ~. w2 i
% a2 Q' w/ }" v3 P# y/ _0 Z对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。" v) i) r, o/ Q
5 C- r" A3 a( W4 n0 u/ }' |! L; P
! U2 f' ^7 C' {2 h, k8 S& dSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
" c8 {4 b0 x! H P! S0 K7 Y6 q
+ D/ S! N" h S+ |# o( D
% q- J$ l9 D f( oAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
; }; D5 A+ N$ o4 X4 C" E3 j% M1 q, X, c
/ k" _. H! d- e* n7 `4 P3 UAddFilter (int type, int subType, int solidBodyType);7 n6 i: T/ o, t9 n
2 G) f" `% Z4 V- l E; k% [0 S
/ y0 ]$ o' v: V9 j$ f9 v& {对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
{7 ~9 a0 W0 H7 ?9 a& B1 |3 x+ g. R" W/ b+ R/ b
5 E% X. w$ }9 ]3 |" e
2 [; S+ u, H+ @4 G3 r/ W) k5 E//------------------------------------------------------------------------------
4 T4 V5 j$ t' u+ e// Selection with mask! J9 B4 X v! w
//------------------------------------------------------------------------------' _ A6 b8 G6 ]
TaggedObject* MyClass::select_by_mask()5 \% b4 @0 O a6 j9 ^0 |: z8 S
{) K3 D4 ?" S1 b- x) A' p% n
NXString message("Select an object by mask:");
* I( J# j' K I) x: e3 x NXString title("Select object");; p [0 u3 g& \' x
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
0 t9 I; E/ M- `" V2 f: G4 U1 C8 g, b Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
. o# |4 h1 t3 q3 p bool include_features = 0;5 \+ h6 q$ h, \9 C+ v
bool keep_highlighted = 0;
6 A7 o' |# ^, v
; V' `, Z+ d5 g1 F& I. R* {, ~
; `+ H" Y) a3 q" Q // Define the mask triple(s), see also uf_object_types.h. k, J+ P F) m. i8 R$ G' v0 r
// Uncomment or combine the desired mask triples
: z) n9 E7 s% I std::vector<Selection::MaskTriple> maskArray(1);5 U8 [) {1 l# A1 U
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
' e# R' z8 e8 v, R: p0 t# k' W /*: \( q. d; S* g3 f
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
5 w, e' w0 b1 l/ n( _( E" }- ~ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges, l, M# Y6 i4 }1 l
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components# J8 k/ O j% e+ t
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines z; l X! G5 ^! S
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
, o& E* B B+ n1 U$ P */7 V# z8 d) E/ S h u
Point3d cursor;
6 K7 O& m" i2 @, s1 d5 J( O, r TaggedObject *object; [6 X% p6 K+ O+ Q
1 S9 Q) @8 u/ b5 }
2 g( q' \( O: f. O. O // Select objects using filter defined by maskArray triples
4 I/ ^* r1 S4 s4 h$ B# h Selection::Response res = selmgr->SelectTaggedObject(
2 j9 y; I9 i* M' N, m message, title, scope, action, include_features,, @$ i2 }1 H/ ~6 i2 h' A
keep_highlighted, maskArray, &object, &cursor );9 J' M( p6 Z' U* v
1 q9 l. v& l# j9 }; A: P$ _4 d
+ q# Y0 i1 b- {! s. `% H3 s3 K6 x/ J# I if( res == Selection::ResponseObjectSelected )2 x4 n) F$ _0 Q+ l
{6 \8 I# ^+ h. u: D
return object;
O& S# }8 j- G/ \ }
% v/ `( l7 T$ \5 y3 d ~0 Y return 0;$ k0 d# b3 U& @$ v# I3 G
}
/ A1 p+ I* q9 [3 U. d8 t
3 q N D: M+ a3 ?3 ]/ T6 g# D* J- F
//------------------------------------------------------------------------------* A; D! u8 b, x: M1 N0 t
// Selection with type array7 \' w: b, i+ _& B) d% p
//------------------------------------------------------------------------------
' E# Z/ ~$ | ^TaggedObject* MyClass::select_by_type()) v) P+ {: E1 ^0 R) N. _& ?( ^
{6 T5 k3 X- u E
NXString message("Select an object by type:");- ], j- d7 \1 e7 R; x
NXString title("Select object");# a0 E Q/ Y' b1 n' Y7 B
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;% ]/ y9 S/ B5 x9 O2 u
bool keep_highlighted = 0;
# ^7 c8 J3 W( h9 ^
! F! `3 [4 u' _
: H. b. S( u) P // Define type array, see Selection::SelectionType Enumeration
" L8 |2 m* t3 W4 w // Uncomment or combine the desired types
5 b* w7 k/ b: A! E& _6 e std::vector<Selection::SelectionType> typeArray(1);
3 a! C' y: U% ?: N X5 X$ A( ] typeArray[0] = Selection::SelectionTypeAll;# `8 D/ k3 H2 C. X& m. P
/*- q4 i- E! K6 O: U( ~4 q0 _' R
typeArray[0] = Selection::SelectionTypeFeatures;
, R/ |0 T0 v8 ]( |+ { typeArray[0] = Selection::SelectionTypeCurves;% {2 s. S) ~5 E; S/ }. {, d
typeArray[0] = Selection::SelectionTypeFaces;% O2 l) a. z/ s: R3 Y
typeArray[0] = Selection::SelectionTypeEdges;9 l2 Y) N8 s7 V+ ]& S; w' c% N
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
6 X- E5 L- U2 P: k$ m */
' V; I$ J% P/ h, L5 z$ }6 v Point3d cursor;
% T! x Q" Q2 y TaggedObject *object;
3 Q' ^3 g! u4 H: ?
5 r6 F6 M) L2 { p; Q2 q v& T4 I; D5 t
// Select objects using filter defined by type array1 y% V1 J% H3 i1 q" l) _5 Q, ^. ]- t
Selection::Response res = selmgr->SelectTaggedObject(
& A% g$ Q: A' s! s message, title, scope, keep_highlighted, # ]% O% ]" Y- Z: w
typeArray, &object, &cursor );
3 v1 `) e' Z" F1 D; W, C, n% \( O& z" b8 i+ }
% T( Z! @( f& A0 @1 L
if( res == Selection::ResponseObjectSelected )9 }7 i( T- R4 a. g' ?$ J
{
. X) [0 J s6 o& O% h1 V5 K- D) e return object;
' F2 j) Q- s$ [$ J4 C' z }5 _" [5 o% v) ~/ B8 G: K
return 0;- w [/ a, ~" z" I% I" i
}
0 t8 r2 ~. y5 d! v7 i( Z n; O
" g# Z6 t3 A" U$ a i' i4 v
2 V% [ {# I4 i& A4 O) ]//------------------------------------------------------------------------------% ~* {/ u2 I& A! ?' u3 z9 T
// Selection any objects
" p) c3 z$ H1 z/ C, o4 v( j//------------------------------------------------------------------------------
0 l, m7 C6 N7 R$ i+ d4 m sstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
+ l |# ~7 b$ B5 Y$ a% H8 N{! y3 j1 S4 t3 O7 h: F
NXString message("Select any objects:");7 I1 W J$ y, I9 P3 M( @" Y
NXString title("Select objects");
4 |) \' K5 p* Y. k$ P Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
- Q1 p* J- ?6 h. z% W. L/ e2 d& ~ bool include_features = 0;
) w) [4 Q. p, W5 Q+ w7 k bool keep_highlighted = 0;
7 r1 {7 p* R# k: @ std::vector< NXOpen::TaggedObject * > objectArray;3 Y$ p* Q( [9 @ o
; h& G# e3 s' N4 \( a9 o8 R# C0 i, ^, ~
// Select any object array
, f1 F l. r/ _1 G \ Selection::Response res = selmgr->SelectTaggedObjects(
# }2 V, H6 \; N* I: W message, title, scope, include_features,
* f# {& j3 V/ Q4 h keep_highlighted, objectArray );
% l9 X2 r3 I: n4 W0 s1 i7 J( P& t8 h- ]) k' e8 r
: g6 `% l, C" {1 X; `, i7 n return objectArray;
5 O. M {1 s# X- c5 H. Z}
/ J" E2 \7 v) {0 P$ h
8 i3 K# e( N5 u: \# J$ a! e1 ]0 X% O8 h7 y& M# w
) U$ x, f: H+ M! T- `8 @* [
0 {' B9 m+ a" |' W6 z) `: \9 c/ U) o% D7 p+ \, Z
9 y1 ]1 p5 m8 z: C0 _ J4 ]
0 `, g6 D* {3 Q) k, X |
|