|
|
请使用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
! 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% _
~; {! 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
, 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 |
|