|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
3 Y$ j# f" I, F9 j7 B7 _5 b: Z很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。! l9 L5 Y f7 P. A
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
& R0 |( l; ~7 n5 R$ Z一些常见的类型和子类型如下:% B/ W$ {5 w4 a9 ]- P4 l4 _' G
9 R! R3 Y- l6 n4 N如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
6 W0 p8 k7 B' G8 F实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。6 Y* g# G+ J1 w; V
+ O) c6 A! X. p2 U' ~! ^/ T
' U0 E+ \& e5 ^1 q% v0 i) T, R# A# ?' K3 G
8 g, p6 q- |1 a/ ~选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
* m+ C9 H1 ^0 k- l3 k# V6 B
$ ~; @# p! J& U1 V& `4 t8 F" f
6 q- ?. R) `9 A. p; w3 B' M+ ]7 x
z: t1 w% ~" b c* H0 E- I8 D, s2 z# d
% m- x8 O6 Z+ R2 x3 s$ H
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
0 M' T6 P6 s3 N% {9 u3 y5 N+ X
4 G Z/ l2 z% U' ?0 G% C& c7 I$ O4 V* E. F3 x6 O
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);$ o* B! B4 K3 p
2 s( _" @; P1 P% `$ n
6 { i3 i0 x' Q/ f/ P* ?. UAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);0 ~0 H7 y7 ~& m
2 M# _6 n. n6 v. x4 K, Y+ r" O% K, _
2 R2 Q' ~; f6 P7 H6 r- `/ Q# ? wAddFilter (int type, int subType, int solidBodyType);; |9 }3 J8 Y3 x
9 k, i E- e I+ d1 V; ~4 R# d. M2 Z2 ^8 w" I% n
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
. h! `& d0 g+ v) M; |3 ?$ s1 W) x3 `9 w8 y8 w/ c! I6 p2 l' X- m
" c5 D7 F. I, k4 ?; v! B9 b/ n' z t5 _( _ i9 u1 b$ N# q1 X/ g; a
//------------------------------------------------------------------------------; E9 a- D- ^) N. a& T8 l
// Selection with mask
! ^1 s. C: m0 s# \* _; [$ L( h//------------------------------------------------------------------------------
7 x) Q+ I# b s2 FTaggedObject* MyClass::select_by_mask()- Y# B p2 |& Q. w; j" \+ f1 J
{
. ]2 Z* C, }8 a2 v6 L7 s$ }/ x NXString message("Select an object by mask:");: `' \2 [% B' t- b9 m* `
NXString title("Select object");' g% c9 X# X( O0 k$ L& R* Y
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
# q- t9 f1 u) R% Q! g, X Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
' g: {: J4 M! ] bool include_features = 0;7 r. ~2 T5 D! j& \' c) I
bool keep_highlighted = 0;$ c k5 J& s" F
7 t* z2 z' K( ], u! U$ A6 M
! n: @7 s) Z* z- U H P // Define the mask triple(s), see also uf_object_types.h.
( m+ f/ E2 A0 X Z; Q. |9 A+ t4 W // Uncomment or combine the desired mask triples, F0 o3 L( G' _1 x3 z7 {
std::vector<Selection::MaskTriple> maskArray(1);3 E: l% Z% y2 r5 `7 ]2 L
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
$ q2 c! b0 _. I& y+ D; y /*4 t* U" O+ X4 r Z
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
U# t( |% S& `3 |1 ]" x' ~ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges8 L ]1 _) N1 x4 p6 G2 b
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components5 O- W+ W3 {: G* p
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines9 P2 c! r/ n, S+ h, e
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
. D) A$ {/ u0 q* S4 K+ J: ?8 l */; K$ A" p) u1 \; |8 J
Point3d cursor;
1 g6 s. d9 |7 w$ ?# A5 o' W! q7 { R TaggedObject *object;, i7 X0 L4 i5 N1 S2 B6 J: R7 L! C
% B$ S: S4 f( H* s
4 \% M; g! L5 [* i* l // Select objects using filter defined by maskArray triples* L2 a# w4 ~5 Z# K! }; I: H9 t
Selection::Response res = selmgr->SelectTaggedObject(% f* N& N+ D7 t) w7 l2 u
message, title, scope, action, include_features,6 y1 p9 ^9 D1 z+ J% m0 ^
keep_highlighted, maskArray, &object, &cursor );
5 L4 H" a: @4 l
2 m* q% A" a7 L: {$ b1 p/ O& A& |/ K) b s
if( res == Selection::ResponseObjectSelected )) U0 ?8 ?, M% H# e$ ~- D/ k, N) P
{
9 E* H3 M/ Q& g: Q* [ return object;
: R/ v; A7 r& c4 c! |; e! o3 T }
, _8 ~7 ~9 p. z+ b! S H1 a s return 0; B! }! z" | b1 N* n8 {5 K* r
}
3 O) n# j W, V& n, c% z; B, ~, {2 G) F+ T* h( `
* W6 [* W0 ?/ Z3 v# k. W
//------------------------------------------------------------------------------7 d+ j5 u2 ?8 h
// Selection with type array7 g9 @5 v( p, H3 {
//------------------------------------------------------------------------------
/ @. k% y) N& Z- R- C( YTaggedObject* MyClass::select_by_type()$ v1 J7 O; m" w1 F0 [9 z
{
) e r ~. o g NXString message("Select an object by type:");
- Q, u; M0 G3 k/ m NXString title("Select object");
( Z& d) ~9 L( _, j Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 T l' f& b1 z7 u+ s/ B
bool keep_highlighted = 0;
2 W U$ ^8 p0 N/ x" I/ a6 F' j9 g: P) W* i
8 f& ~. c" i( a2 H! u! a) E/ f+ A0 I // Define type array, see Selection::SelectionType Enumeration* c4 Z! e( }5 R5 @& d% Z
// Uncomment or combine the desired types
7 H: v" T$ L5 v7 k std::vector<Selection::SelectionType> typeArray(1);
; j# t* Y2 {- _) m, K# W- w L typeArray[0] = Selection::SelectionTypeAll;* p9 j0 R- n* Q$ I
/*
( U7 U6 |' N" y* k! S; `- k typeArray[0] = Selection::SelectionTypeFeatures;3 l, ?& A) J$ k* s: E- y
typeArray[0] = Selection::SelectionTypeCurves;% j3 t o& I7 f
typeArray[0] = Selection::SelectionTypeFaces;+ _0 s# E) y0 N; {* j( C9 f5 P
typeArray[0] = Selection::SelectionTypeEdges;. L$ P" a2 O7 k$ M3 s4 G8 \
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;$ f" L2 ], m% Z. Y* [, m' w4 e V8 ?
*/
" Z6 h9 n6 O2 M& r' a# E) q: h' [ Point3d cursor;
P7 O; k& n8 ?" M' E0 G" s TaggedObject *object;2 _! W4 y' M3 a/ F0 \" W9 E% R
/ d, o3 C |- j) j i/ ]% \/ M/ e i: Z3 V \9 ~' r# l
// Select objects using filter defined by type array2 n* ?, c, A" B5 Z& u
Selection::Response res = selmgr->SelectTaggedObject(1 c* U4 u3 a8 H2 T! W8 h. a
message, title, scope, keep_highlighted, ) @& G5 W4 D: ]& F
typeArray, &object, &cursor );& e) W& G- ?, Y( K! A
6 J6 z2 n9 m( H9 h. }* p
2 N3 h% C" j; ^6 W% `: w
if( res == Selection::ResponseObjectSelected )3 u5 U- v4 ~) q7 K: o6 D7 t
{' d. z) a$ [- _; ~' U% A/ {, o" n
return object;
0 q& e+ {0 d; c2 G5 W* E5 n! _4 T5 b }! U# u9 j" @* U- f& j
return 0;4 D: l2 ]4 Y# m; B
}
; e7 r" o# ?- `2 v3 B, C1 N+ Z1 ?! i+ d P: H9 ]) R) l1 }/ o
+ U8 a) e# X1 p! i//------------------------------------------------------------------------------
+ m: p" G. F5 q1 }+ W! e9 _// Selection any objects' ?; g. @/ N, C. n2 _+ w
//------------------------------------------------------------------------------
9 [! |3 ~( w ]7 |& \std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' K4 x, P& h# ~1 a( K6 z* u& t$ o! V9 \{
/ q. ]/ v4 t+ {9 o! a8 _ NXString message("Select any objects:");3 `+ g* r) \3 K1 U1 [* K
NXString title("Select objects");
& f7 M; ^& J$ s2 T& [9 F- F Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
+ M. C3 e$ b% b0 i; x& ^ bool include_features = 0;
2 U6 ^" x* X a+ F0 s bool keep_highlighted = 0;
8 J) X: u+ c: {* Q8 q6 B' N std::vector< NXOpen::TaggedObject * > objectArray;* r1 n) L1 B$ j" h
& g$ c$ R$ O( \9 j
, r/ D, ^/ T4 U // Select any object array- B: E: B' R5 A- Y
Selection::Response res = selmgr->SelectTaggedObjects(
5 H$ ~% O1 N3 P& y# G3 [- x message, title, scope, include_features, $ o+ V3 C6 L& ?) M9 ]3 T
keep_highlighted, objectArray );
0 |' S- d6 R, \0 |1 J& U- l+ y+ s7 B* w4 L& a: G3 ]
0 H- O8 d$ W2 F* e! d' w0 S9 S9 r
return objectArray;+ H# H; g' @2 x! c( p
}
6 v. R; Z3 [$ A! L6 E
4 n: x! T3 m6 C
2 r- D0 c9 @( X! b
1 l: @. H# a1 w# y1 j6 ^' S5 n9 n4 V
) D& C7 h. }( o' R* J% o
6 ?7 r5 l$ L; [/ a9 i) T; A$ B6 z! K5 I3 D
|
|