|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解$ p7 Q9 d. Q# z0 a4 @! {9 [% A
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
; W) H5 Q; z$ z0 i2 g如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
- |* f' x% L7 R6 M9 L一些常见的类型和子类型如下:
, b r1 W6 H7 X$ T' z
7 L% `( d/ c: |% v/ V, E
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。7 ]' u# ~5 J$ H2 W1 E8 t
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
6 e: l& o% D- D! z
% W* b4 |& p+ M2 u7 W
- I8 W N8 Z3 h& s$ p$ r- @ I& E0 l" X/ ~+ D
' h6 V" i' i9 L
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。5 m3 W% `1 `$ C# }2 N! \
+ X4 o; S9 m7 J" f! k
( M C! W& q( M% l# m% _
) c9 n: |& a/ i/ `& i- l% ] [( P& f4 o* F6 m
" Q7 b0 Q. c: O* n, F5 a$ ~
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
8 u3 D5 E: Z! b2 `2 W8 S7 T3 U6 J; v
- }) g4 x. }- F1 D
! w/ c8 [% e; YSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);" B! R: V. Q8 a7 ~( P
* W2 B" q4 i- ]2 G3 ?
4 X/ V# w4 O3 d! F
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
; d7 ` B, v t$ |* \/ c) _. C, D- N% [/ [
% Y. u0 m8 s% K% o- [AddFilter (int type, int subType, int solidBodyType);8 W5 x" _, g$ @
# n9 L5 g; J" B2 G
8 i: D5 y% d; e2 l, G$ ~对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:" z. x& Z1 h+ d5 t) X6 K
: Z _- h/ n0 O: y
% W8 s+ w4 j0 \, U2 z( g c
' Q$ W5 n$ R9 G4 h/ c$ B6 e2 l; Y//------------------------------------------------------------------------------
: C1 X( L- z; W// Selection with mask0 @5 Y p! Z2 o6 }, J2 |% ^; `
//------------------------------------------------------------------------------
& k# o$ b8 @$ r% }$ ETaggedObject* MyClass::select_by_mask()
0 [. I1 v0 e8 F3 z4 b; i{, p3 B v7 n9 C5 g( O+ @
NXString message("Select an object by mask:");
$ E& y# X9 |4 [& {) h# I7 c NXString title("Select object");- B2 a, ~* O2 ]$ V
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;5 J; @0 \. n& E/ n. o! L
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
, S' j: L, ]" M# C/ I) z bool include_features = 0;
- l1 X1 l) O( y0 E" S bool keep_highlighted = 0;
2 Z( w/ G+ Y/ b' |' q5 F8 d2 V1 q5 Q% J& o l2 |
5 C& \6 l7 Y8 R // Define the mask triple(s), see also uf_object_types.h.' _# d4 i; J, \' P( G4 p
// Uncomment or combine the desired mask triples
: @ m7 |7 T* K0 k( O8 k' Z std::vector<Selection::MaskTriple> maskArray(1);
3 B8 _, {( _6 `( X5 s maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies( H( ^( O8 E. }' F
/*5 M% I2 k% `% p! g
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces9 h( K( n, {3 a$ v/ a$ n4 Y0 ]
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
: j! D7 D) |' o' V* w9 |& {' c maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components2 T3 ?% C( s6 b8 U: c9 ^
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines7 Y/ D0 E% l$ ?# \. l6 h4 {8 V
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects" G& @% V/ K+ j9 c9 y
*/
* ^! o7 N2 d/ J4 l Point3d cursor;
2 G+ o- m+ S) H Z0 |' P' H9 ~ l# `: ^ TaggedObject *object;
$ P9 f% h0 A' F0 c; E$ t( |) J$ t3 z/ y& p& r* ]* z; S4 \
, r6 K( d5 Z$ d+ c5 o$ m0 `
// Select objects using filter defined by maskArray triples
, _4 o7 N( I% I# x Selection::Response res = selmgr->SelectTaggedObject(
7 }; P$ C% [, x4 |# I6 v# Q message, title, scope, action, include_features,) G- n4 A0 D* Q% }5 Y; \
keep_highlighted, maskArray, &object, &cursor );
/ H9 G% r" g( o D3 B9 R V/ x% t* [4 ~
, X6 h% Q! b3 s8 N* ~. j1 e" l- M, n
if( res == Selection::ResponseObjectSelected )6 H* k6 ~6 s) @( h7 z
{4 W# n, B" j' y; |$ n: B- e. E
return object;
4 K' n ] q# O J }6 o# H h) t. _# P
return 0;3 ^) W7 J* I4 Q- S
}
. Q( Q6 g: b W, @: H
! ^. F9 y, u9 l# I9 X9 L$ N4 @
$ M6 j( k7 `5 ^$ y//------------------------------------------------------------------------------
7 W! f4 P* D* B7 O// Selection with type array" K+ m5 j& ~% `: Y5 S1 }
//------------------------------------------------------------------------------ L5 J0 w1 B. w; s' ]+ @% x% s
TaggedObject* MyClass::select_by_type()
/ h* p* B# F2 D9 p& |" c4 O{
4 Z( m) C( Z0 l) |1 ^ NXString message("Select an object by type:");- x, M7 z# F$ \) v
NXString title("Select object");/ ?& S) S( E2 Q3 P" m2 E
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 Q5 |) w/ T5 P3 r
bool keep_highlighted = 0;
. o; C; j! X/ A' \+ B% ]
/ D" J) H1 M" {7 C" ]: r( I# A3 ?5 ^8 R2 ]+ d6 F- s5 n
// Define type array, see Selection::SelectionType Enumeration
# P1 ? {1 a0 K" W // Uncomment or combine the desired types
: q) j! K9 `9 B; P: t% Q std::vector<Selection::SelectionType> typeArray(1);
' L. ]) X( n1 A4 C typeArray[0] = Selection::SelectionTypeAll;& L. n/ O7 K$ Q; D+ N
/*5 T% l9 ~- h9 T1 t
typeArray[0] = Selection::SelectionTypeFeatures;+ E0 w8 R9 W. [! B' L
typeArray[0] = Selection::SelectionTypeCurves;0 {) s9 b. A9 F! k8 ~+ w1 V# O
typeArray[0] = Selection::SelectionTypeFaces;/ ~7 {/ x/ e. v2 p' a* n( b; \
typeArray[0] = Selection::SelectionTypeEdges;
5 Z. q; m( R% c1 W typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
- }! Q k9 r, g, T' A */
) k1 l8 a t) C4 r& h8 D m- L, Q Point3d cursor;
V" i$ X8 u+ Q: f TaggedObject *object;. }, K+ N4 ]( s+ I
; F) {, |0 @% ]: @
, u5 n" b$ j( R1 ~' p) ~% t4 l* A: n
// Select objects using filter defined by type array
" |0 Y3 h0 ^0 I; G8 N7 d Selection::Response res = selmgr->SelectTaggedObject(
- ^! a4 Q$ q. r) A; j5 l9 C message, title, scope, keep_highlighted,
) ` |, F% _' [5 k9 Q- k9 Z& y typeArray, &object, &cursor );
, R4 b$ s. M1 r" j- ]
6 O7 L# G( p) E: S( V& s: }
1 H6 i$ X+ p4 K: q; L if( res == Selection::ResponseObjectSelected )
" Q" Z8 [/ K( T. d6 H' V% T' H& M {
3 f1 {/ j1 u% M! B" V0 m7 `. V7 J return object;+ ?" G% A8 C- i- o4 Y+ ?
}
9 w( r @7 E# Q0 B* a5 m! } return 0;/ C" a. H' u- D# D
}
2 }6 v( j5 R1 m) f- n% z' x, N' z9 r0 q9 T, a
* l5 C% ?% o. a' y
//------------------------------------------------------------------------------0 o1 c9 \" E$ u5 C! t! u+ x- Q
// Selection any objects, ^' I0 T! Q4 Y; N1 q2 m; f
//------------------------------------------------------------------------------
( R# W* n0 B0 Z, zstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()7 w9 Z' |/ r: R0 H% Z
{
7 m% p; [8 j% ~, n! T$ h5 B NXString message("Select any objects:");
" l# X9 H+ n# b# P# ~ NXString title("Select objects");
2 X. }9 V }1 _; T2 V$ w% F Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
$ c- M4 e- f9 ]/ E$ m. \ bool include_features = 0;
9 V, Y; _) [0 Q* I u bool keep_highlighted = 0;
: f8 v1 F8 F% N! S: A) P std::vector< NXOpen::TaggedObject * > objectArray;
+ M, G7 K9 S y) t9 q* j# ?5 L* ]
1 x' B/ E3 g8 ? s1 g0 {5 \: D // Select any object array
' h9 H" |: ]2 b Selection::Response res = selmgr->SelectTaggedObjects(, j9 l; C4 O n8 a I
message, title, scope, include_features, & w' a" J7 z1 T4 B
keep_highlighted, objectArray );0 H0 b" K0 T. ^4 M4 [9 m3 J
4 r# H0 r3 t' \) d5 A
$ @* a9 ]+ b' L" E* W
return objectArray;
0 f ~: W2 }! L}' u# T2 y a# `- W) l
( W- @' U( l" ^8 f5 j2 k
( u$ g4 b, ~; W Z0 j( I/ C9 Y0 \0 n; ^, E8 L
- }/ y+ v! c2 a
7 V8 X0 G2 U; W+ u7 s0 \+ D; P1 U, N
, Z9 I$ ?0 x' F- I" k& _ |
|