|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解8 m+ g/ f& P" W
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。, i' R, i4 }! x) a6 b
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。1 p& |; l7 r' {2 `! _
一些常见的类型和子类型如下:
) Y3 Q/ e, N& d( k: |
$ \& [& ?+ [' a7 @如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。8 Z C+ F9 ^% g f4 q# b4 K
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
0 J5 R" v3 I% B+ O5 O/ F: w5 ^
% O5 x! R7 Z) |: K9 {
- r& F7 w& V1 S+ \* u) y" I
0 p4 j* t6 |. `6 }5 b* g8 \/ A& V( q/ ` }" c
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。' p- Q7 D2 `) V% N: J x
1 B5 L% ]' L0 R' r/ Y! X: j! l) {) j$ Y
( V- {3 E6 \$ x
6 G. T# N) J2 G3 A8 F( Y, X6 b$ L' L, D5 e6 k1 e$ U+ l
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
, N8 d) O' h' n7 W1 ?5 y0 k* e/ y x# V
& B, u" |1 ]8 [2 A7 U0 XSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
! g6 [0 N$ a, \* P ~; e/ H( }& }7 N1 c1 Q: ?3 O8 }7 i
0 c( U- L" R/ N% q, H$ t- b( L0 \AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);( e! x7 [/ d6 e \. H$ B v9 f
7 E& E1 T6 u* I
# H9 r3 x% O ^/ c+ a) ?
AddFilter (int type, int subType, int solidBodyType);+ t, Q) f. x/ \+ w0 r
1 Z( p! V# R; U
% B8 @, Y% R' i6 q' ]: V对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:4 C/ x/ u; R& V& y; ?% y; ]
3 g5 E* `6 t0 H$ n2 \7 q
6 @( h* d) @; s% j, u
" M( h6 t) H G3 q! y//------------------------------------------------------------------------------
2 d: k* r' q" u5 f- ^* W1 i// Selection with mask) j) _* Y) w' }6 z; x8 j
//------------------------------------------------------------------------------( ]+ X' a' E e, R5 F
TaggedObject* MyClass::select_by_mask()
& ?( P5 U& n2 r- X3 H; d$ O{
7 ]$ I1 k$ X) C, O. D. \ NXString message("Select an object by mask:");
6 q- a8 p# J, H' D) c9 U! d NXString title("Select object");
# M7 w! i4 `0 V* s9 i8 x+ U1 M& C Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
J# t9 e! x- g8 N' Z Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;' r: \) @& H; @& x* ~+ _ f
bool include_features = 0;
! Z R4 M& t' K/ z! D: G bool keep_highlighted = 0;& ?/ ^$ s, B, o( N6 p* {
: m* H4 }' I6 G* y
3 i* `! m! d9 t9 o% g // Define the mask triple(s), see also uf_object_types.h.
. M* J+ z- d4 S4 [ // Uncomment or combine the desired mask triples; e6 U0 F- A- W- P. H6 w6 ~ J
std::vector<Selection::MaskTriple> maskArray(1);
R0 N8 K' n9 a- H T) w maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies9 }# R8 w3 X2 N3 H. }7 J' V5 }# _
/*4 O: a3 `6 t' N9 Y' k; U
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces l/ l" h) [- N& J9 K; w7 @
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges- \8 h& j ?6 J B
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
' S+ ?/ }: g; }$ L9 o. f maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines/ ^% F, h, W3 u O7 u
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
0 e2 v0 u( _9 K3 l */ G# K5 q1 r1 d% T* W" f
Point3d cursor;
0 }* {! M/ H8 I! g! E) [- A5 j. [) O& w TaggedObject *object;+ w5 Q8 f {0 x* U- G2 D
& K9 F! Y- w& O' l
$ C A- n, c6 r" Z5 q6 c+ s // Select objects using filter defined by maskArray triples7 c) r n- K' S; P# m# M
Selection::Response res = selmgr->SelectTaggedObject(! R5 y7 ^+ a0 v: z2 w: Z# `
message, title, scope, action, include_features,( K7 E8 [* E: U+ G( x ?
keep_highlighted, maskArray, &object, &cursor );
: T% Q* I" \( A4 L, W/ p! W. U9 L, T6 _+ y% b5 d' }/ m2 {
( G8 p& Q: F; |, D
if( res == Selection::ResponseObjectSelected )& F& l# P {" p) i
{" r! F- P; u* i" ?+ Y
return object;- }. K8 q6 i; x/ z" G9 l- u- M8 E
}7 [- l0 [& H# N" @& {2 e
return 0;# W4 N0 Q' V, ]% l- `8 K6 ?; d5 |
}5 M' G5 ~" v9 T
" @$ m1 Z" m1 s3 K8 I, [+ }. h* Z3 c2 r1 w, j
//------------------------------------------------------------------------------; y- B4 Y+ M- M9 L5 E h% E
// Selection with type array
0 v5 w( X/ n1 j* w! E( {//------------------------------------------------------------------------------; h! } X( S4 ` ?; o" v- H
TaggedObject* MyClass::select_by_type()
* I3 v4 ]1 o% X2 F" s0 F% Z8 P{9 {5 [8 q ?, O
NXString message("Select an object by type:");
" B3 e' H% T0 Y z) p+ o8 D& l: B NXString title("Select object");
# R9 ]) G& j/ c Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
+ [( i; v9 X9 a" \8 m bool keep_highlighted = 0;
+ H8 Z) q: X* q: ]
2 S0 M3 s" z! Y) Q- G, N) m( A' u- u
// Define type array, see Selection::SelectionType Enumeration! V5 `, E& k6 ^' R
// Uncomment or combine the desired types; [# P" E5 a" d/ D2 \ N: R
std::vector<Selection::SelectionType> typeArray(1);
: ~4 m/ @) X) Y3 m! s! x2 E, U typeArray[0] = Selection::SelectionTypeAll;9 l$ K4 E" V2 Z. P' W( ]/ J+ u( S
/*
2 w6 M( V$ `! G; h4 R" ~4 l2 q typeArray[0] = Selection::SelectionTypeFeatures;0 ]* @, W, ?$ F) P) M; R) t
typeArray[0] = Selection::SelectionTypeCurves;
7 g' g: l8 e0 N+ Q+ ?: r& c! t5 m2 k typeArray[0] = Selection::SelectionTypeFaces;
. W! t4 E& Y% n9 d+ W; G typeArray[0] = Selection::SelectionTypeEdges;$ F7 \, V) {! V! ]7 T' }5 i
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
1 o' I$ G$ f {( p- j */
' _ `( ?$ M( J Point3d cursor;
, Z U8 B3 ?. ?' H TaggedObject *object;! S0 `4 j7 s- I7 ]% Q' s( K
2 c& K$ g" A% v/ v1 E% c
7 H- Y. N% A; z
// Select objects using filter defined by type array5 O$ K0 W4 M; G$ R6 d! R
Selection::Response res = selmgr->SelectTaggedObject(4 L& \; K! O6 I2 t- V
message, title, scope, keep_highlighted,
8 e9 {0 M1 [& d4 } typeArray, &object, &cursor );! |% H1 Q. h2 n8 L4 T
% A# D: w# g# Z9 W6 U( X$ Z
' Q- G: f; R5 h
if( res == Selection::ResponseObjectSelected )4 a& \, e" P6 b& h; I4 U
{1 E+ ]0 B9 _2 D9 o5 c6 p+ Q
return object;4 F) ^4 d4 l9 O
}
7 L' F& }; X t& i* u9 C4 l0 c# { return 0;4 k" c7 _) E. V; B2 C
}
& \$ S$ R2 ^+ R* p
9 @5 j- s' G" H! R, G, J# f( G! \1 F+ g2 U- {4 o0 o6 Q1 ~
//------------------------------------------------------------------------------& r6 C, z9 w/ y7 h0 R
// Selection any objects2 B, w, I5 Y' K( ~) A$ M k
//------------------------------------------------------------------------------7 B3 b3 ^' U5 H F
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()4 l& Q# f; u4 ^! A$ ^8 ^
{
) q; O4 t3 O9 @' L. T4 n( q3 } NXString message("Select any objects:");
& M5 k' x; \) o% ~) } NXString title("Select objects");
. o- b* W/ u. j# W; N6 g) U' f; ] Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
: m6 `% R% }* z bool include_features = 0; 4 Z6 Z3 s. N, D! K1 G
bool keep_highlighted = 0;
% y1 X" t. a+ Z, J l; @/ ] std::vector< NXOpen::TaggedObject * > objectArray;: v2 y5 R9 W) n& k5 N r* @
2 ?- C7 d2 o; \" s. w4 H* O& A7 @3 {% D( W, A
// Select any object array
+ b! m) z% R& q Selection::Response res = selmgr->SelectTaggedObjects(
: o1 ]' g9 Y: V6 T7 P message, title, scope, include_features, 1 M! c- w/ q6 ?2 r1 f
keep_highlighted, objectArray );2 H, g- }$ }5 r1 L' B
0 B7 W! ]* W+ t$ R3 F9 _: e: Y- f7 \
& O3 b* ~4 ^: u; w# Q
return objectArray;
# y4 }. ~" Z8 b+ q: M2 E}
5 Z: k5 R1 u5 v1 F$ L6 @3 o( }9 ^- U, B- m
3 H% j4 C, \: r
# `1 d) ^) Z- K d7 [4 Y! u/ c' C! X2 j
, l9 u* s8 t, j' P* O/ R) v. O& J; x2 _
) G4 O9 T$ I! u9 b+ t+ g9 V |
|