|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
, p! ^" X, N$ c* o9 d7 G! t很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。7 Y, p( G* l1 x. R1 q8 K4 d# U* X" G
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
+ j6 M& C" o* R6 V' \, @$ [一些常见的类型和子类型如下:
2 S: p' b; u; b8 s4 v* E
- Q# a2 \4 q N6 Y- Q
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。. S4 O& n1 A4 P3 ?6 n$ [4 c
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 G. M: y8 S" q1 }/ E8 P% @8 j
6 c3 M, t- V& x6 D1 s
, R1 j" d( u$ X
1 w2 C2 ?; @& U3 F' J/ @
) H( q3 w( M& M) T3 d; E# N( |$ n
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。 O6 A% K, t2 ^4 G
* a8 i9 q; o2 b& o/ {7 b
) S" M* p( D' J8 a% }" S) v( |0 Y
, d& |/ ?) {) t. R/ x5 {( P6 w0 @4 `; @5 |6 I) _+ ~
1 Z2 D! q# d! D0 n" O
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。$ v5 j3 g$ D3 [/ J
- }* ~+ W2 x' p, C! j+ y
: A$ y6 o0 W# \" OSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);. Z. J/ A3 R3 k% b$ Q: N# S3 j
, k" Y; m+ }/ K: ~( f2 i
, z9 f3 i) h; `; T$ q/ q' KAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);6 z2 Y1 q) F& ^# d3 \
7 T; e3 H- G# [0 J
! U* c( c9 Y q: w f# A+ J) tAddFilter (int type, int subType, int solidBodyType);
/ c+ u3 {. D& ^. J. o0 J" |/ Y# R8 |8 _8 {2 E3 x
% S- V8 }' m$ o% J. A2 a, V
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
9 T* ]; k n/ Y5 Q: `. e9 S8 S/ {) C1 u* w2 f
6 p1 q% L+ J4 c7 o; G' |
! x; y* X/ \- X/ J' F1 @//------------------------------------------------------------------------------
9 n# o/ ~9 u& ~( i3 Q H// Selection with mask
9 r4 v" e( E* E- m//------------------------------------------------------------------------------
8 V, f X6 X( f9 t; i0 T7 M3 \TaggedObject* MyClass::select_by_mask()6 T, a! P! D5 Y, u1 [9 C
{
8 f7 H+ l6 F0 j7 S& w, A! _7 x u NXString message("Select an object by mask:");& |7 F* V8 i" A3 q* ]
NXString title("Select object");
, W1 r& \( R, X6 x6 ]0 [. b Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;: V% p$ q* X; }- i) O5 i
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
9 d8 X+ N; E" M" O' d bool include_features = 0;( @5 c0 h3 a1 d
bool keep_highlighted = 0;
# Q8 ~4 E& Y7 Q; Q* b( w6 F: G% r! R/ g5 K7 d" \2 a( B5 G5 [6 `$ k
1 x! `' Y3 L \9 o3 n // Define the mask triple(s), see also uf_object_types.h.
7 t& L) E$ ?. _0 K( ^ // Uncomment or combine the desired mask triples
& b3 E3 o! ]2 U" O% m8 _' x) d, ] std::vector<Selection::MaskTriple> maskArray(1);
+ p) x( u y8 _% s' R maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies0 i2 r& C% O% d& X! {
/*
3 n4 c: |. Q. H$ _3 V& r0 b maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
) C4 U; U b! T; R/ h7 S8 ?" Y9 @ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
4 ?$ m' Q1 f! s; w6 o2 d maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
3 d- t% u- Z. P, s( t9 |* d/ V S maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines, B* a5 _$ E: w5 j6 K2 F
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
n/ |, m+ F3 v" D3 p# i4 ] */
$ p4 p7 O( ?1 Y* x3 y+ P Point3d cursor;! Q- ~' e6 u9 }9 i
TaggedObject *object;# E! X! T- f0 k) P' p
" T6 N- V+ F# ]: V! N5 _
2 m5 [; \& ?/ ~9 h& Q+ }
// Select objects using filter defined by maskArray triples
$ @* I% J6 O# a$ k" R Selection::Response res = selmgr->SelectTaggedObject(
5 y3 t8 M" y" k$ N message, title, scope, action, include_features,
- Q3 l, d O" w' V" _ keep_highlighted, maskArray, &object, &cursor );4 Q' n8 b3 q# Q% d
# J; f q* I! Z: p4 k) g2 u \
" F+ g; y2 J3 @0 [1 E
if( res == Selection::ResponseObjectSelected )! c9 F# A" f+ _+ W3 B6 D
{7 ~- d1 [" R, v
return object;
/ x6 ^* \6 r" Y5 v& \ }" P/ T$ A- y( L
return 0;
9 v4 `3 d. S! _$ J}9 S; ~$ X, E: Y* o! {) [. C
3 X3 e* I& U" x! u) V
3 m2 ~' D- _8 i: s# l; E8 P//------------------------------------------------------------------------------
: N/ [# C4 h- S) T// Selection with type array
. _- z% {2 d# i/ b) B//------------------------------------------------------------------------------
! U) Z/ z2 V. X* X* mTaggedObject* MyClass::select_by_type()
3 ^- ^/ |$ @. d, d{
' z' v0 U* |/ \3 O NXString message("Select an object by type:");$ I5 { w2 P2 b. B) d0 u x
NXString title("Select object");) F; R2 z5 J& E
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( D# G* z) ^( [4 T1 h6 `# ~ m
bool keep_highlighted = 0;7 F* ^8 l. R3 S7 J
6 O+ |& B$ p+ I& h2 ^
# ?* z0 R9 M- | ] n \9 _* q // Define type array, see Selection::SelectionType Enumeration. y- K3 z3 s \: A$ a. u: o
// Uncomment or combine the desired types
: g. |; U4 O( j1 J8 J2 S: | std::vector<Selection::SelectionType> typeArray(1);
" B$ Q, q# H4 T% w typeArray[0] = Selection::SelectionTypeAll;7 B$ H) u, [9 h. s/ l$ F4 M
/** h3 V+ f6 B4 k- [- R
typeArray[0] = Selection::SelectionTypeFeatures;
8 W+ C5 j2 z7 J G& y( G typeArray[0] = Selection::SelectionTypeCurves;" s! o% ?: X8 c& d& b
typeArray[0] = Selection::SelectionTypeFaces;
) ]2 L7 g* o. e! d typeArray[0] = Selection::SelectionTypeEdges;
8 y) d" Q2 A# l+ }. m/ k3 H% l g: [ typeArray[0] = Selection::SelectionTypeCurvesAndEdges;/ O( X) P4 ?: v0 Q
*/
- W2 h' ~/ E$ ]& \0 W9 C1 X) l Point3d cursor;# ]( J/ M5 Y3 X: d/ j6 o) v
TaggedObject *object;/ |/ H2 G3 ?, C7 Q
1 Y/ O$ `: C: h: H
# q) j5 A0 _. [; y // Select objects using filter defined by type array
8 K* d+ n; w; n! F$ F/ E& l3 Q4 o% F* C Selection::Response res = selmgr->SelectTaggedObject( d8 C3 t% S7 |9 f1 f$ F. @
message, title, scope, keep_highlighted, 9 j+ G# C6 s+ I/ d
typeArray, &object, &cursor );
: N2 m/ ~, F, q) q. P9 f8 ?
0 u9 D; f( x/ F f2 e6 ]2 S0 _0 w
if( res == Selection::ResponseObjectSelected )& m+ c% {7 O+ |- X5 L
{) t7 m6 B' E7 ]2 G' o, O
return object;5 j1 N/ @ ^/ u! D
}, o2 `& }" N# k4 K8 y: H( r
return 0;: X* o; u9 I9 A
}4 L+ V# q3 f, u Q. ~1 y# p1 ^+ p
" h3 f& g& q3 x) S8 r
C$ g) y) G7 ~, y
//------------------------------------------------------------------------------$ ]2 |0 c( J; L+ T$ F/ n, ]
// Selection any objects
; L% h, } u2 B* t& J) o/ V0 G//------------------------------------------------------------------------------7 V0 @1 o/ O T" U& }1 v
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
1 }/ s( E# v/ @0 _- E( R$ d# W) h{
( C: [5 Z! j2 E" |6 J, j4 [ NXString message("Select any objects:");/ @6 D3 A8 o' i" P" m
NXString title("Select objects");
3 n1 [5 ]% `: }/ u K$ q, w Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
5 p7 l9 M" R+ l4 I bool include_features = 0; 6 q* i p7 C$ M V& q* l0 X% \
bool keep_highlighted = 0;$ L& l7 s( B) F/ G8 m6 z& ?/ z8 g
std::vector< NXOpen::TaggedObject * > objectArray;2 d. O7 u6 s2 M- ^
8 U: b% B2 `/ B% v& W6 r" q5 J* z ^2 G8 |! ?: A0 ~
// Select any object array
" N' j5 G! F! M; R) t: k0 d* M7 G) P8 L Selection::Response res = selmgr->SelectTaggedObjects(, r3 k! G1 w! y2 ?# M* [$ b
message, title, scope, include_features, ' @- [% W8 [+ _& D+ m/ `
keep_highlighted, objectArray );; b8 `, G: M" K! V G( J
+ T- E. ~2 C3 L2 S% c& y
, k4 F7 b5 J/ D& D/ ?2 s
return objectArray;+ ]. y' R& O$ |6 _* M/ P6 k/ H
}. ~; j' T2 `8 O1 a' c7 M" d
, H! d0 W V9 B) e8 T! [7 i! a
2 u0 o! Z" e [. W6 l# k9 C ?' a7 g) S. s8 N: E
/ t# Y: V% m, v9 d+ `- r+ X( D7 F. P
! S0 U. J3 n @9 I" p. T. c6 |
' S7 ~7 n, v4 {1 j2 S/ `# m9 y- Y0 m |
|