|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
0 a3 t8 ^4 O5 o1 m& G很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
8 v) U, M [ o- c! a- l O+ z如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。# O k: i5 _' I- E! q" F+ L& ?
一些常见的类型和子类型如下:
# w& z' g; `5 ?2 b0 `
, N* ^& m' }7 o% K8 U' N. T I如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
: `9 f, j% S2 f实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。% `+ ~3 ]$ y" t5 E- n
0 O6 h- V* P, V2 r M! o' E9 _' ]
$ g' S" O, ]: D& F' O3 \! |, @4 a# u6 e
* Q8 o& \# g( a& C$ ?# {: Z3 v; z
3 b# |) @, K6 [3 O0 y# h
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。( {, l6 n1 \4 c0 ~7 c8 W4 e5 _2 C
& M) c, P& j3 V9 e/ y( l0 i6 ^- \5 a8 G: Z# n8 t3 R8 R
' I3 g" R# r( ~' H$ W' |, ^+ J( Q/ }
, N$ a: f0 l7 Z& S; o/ Z! J
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
( \, |9 Y% t) u- F" l
3 v9 u- E0 V+ Q, g% S, r: G) q) J
# ]$ \5 N: p: mSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
2 W1 L7 C! o8 y8 K& S9 l( Z, w1 v2 j! N0 G9 W
/ i& Y8 H/ X$ K$ dAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);0 `- J, q$ r& O9 f2 {$ c
: \( n5 X2 W+ [: I1 D5 x X9 d2 k
* R+ q+ B& y; F; [1 d% Q
AddFilter (int type, int subType, int solidBodyType);
- b2 C$ L/ m8 k/ i$ V% I
. ]9 C! e( b' y# \: [% A
/ e/ m/ F Z* V7 R2 M. j* O对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
2 U0 X, w3 v. r2 K( T7 u4 L) r
$ a! m; C/ v! y( k- J& X( R" M) y) e# N& J) I& [9 A: W3 d0 t& [
" x. u: r( l2 a; t$ a! ~//------------------------------------------------------------------------------
5 b0 ^( |5 w. O! R6 Q// Selection with mask
* b# h0 ^( v) B//------------------------------------------------------------------------------
( q) p s/ H# w% f, F/ ETaggedObject* MyClass::select_by_mask()
! e- R- j6 ?) i7 d N7 v{
8 {+ E: I# }8 S1 [ NXString message("Select an object by mask:");
. \& q; V+ H1 @) i( k, j NXString title("Select object");" b* r: m: p. U+ m
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 x$ ^- a( U, y8 t! O& F2 ]9 H
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;% s% @/ Y+ r1 p$ @+ b4 A1 M$ }8 k- c- T
bool include_features = 0;
' Z8 q& k' P4 C: i. {2 N/ b. y bool keep_highlighted = 0;9 i! l9 Y+ p& @6 X' }! P. L
, b$ e1 e# l7 Y1 @/ ~' y
+ V8 H# Z$ f5 }7 }' R( I // Define the mask triple(s), see also uf_object_types.h.
( {6 a; e7 j) x8 h; ?1 ~ // Uncomment or combine the desired mask triples
8 W7 D' G3 W( X( ~ std::vector<Selection::MaskTriple> maskArray(1);
: z$ v& M' I2 c; ?7 K maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
7 ^2 ~+ w/ h- ?" U- R /*
( N+ Y* @* B5 G6 @+ P maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces% ?& ^* B1 |2 v4 G2 h& {2 l
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
0 r0 \% w9 L" u Q/ F3 C6 }. i% W maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
0 M! d& H& M$ C1 e7 G maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
' f& k }: K, B; [% \ maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects2 K' V8 E+ }+ n1 S* b
*/$ O) g) `5 O7 X& v
Point3d cursor;3 i9 h: Y. r5 ~; Y; H; m) S9 K2 `
TaggedObject *object;
; X: |+ i' y1 J# g3 y/ b- e& j- b9 s( w% J
; O" K4 n9 }; y6 x0 ^" I4 G // Select objects using filter defined by maskArray triples3 i) W* b6 ?* i" A4 h5 [- [
Selection::Response res = selmgr->SelectTaggedObject(
( \3 R; x6 P2 g- b/ e5 F$ r) b message, title, scope, action, include_features,
' `% O9 i/ Y+ S: a8 u, y: z keep_highlighted, maskArray, &object, &cursor );) D, d3 G3 x5 X8 k+ E2 U
4 I7 {8 `7 W' O, y) ~' F3 M* p( B
& p3 r' H! F. s5 g
if( res == Selection::ResponseObjectSelected ) Z( P. }1 U' b! p q. t, ?
{1 t5 \! ]3 C9 x9 ~
return object;* r0 J& U1 S% U7 M* n1 ^
}
0 P2 \ {. X3 X) S return 0;% d5 v6 w, P8 c0 V
}7 a) S& w1 q+ z) G+ G) b
$ L- H- v" H* z- `4 f& z: q) l
7 M" j& M/ m ~5 i$ K3 g3 S//------------------------------------------------------------------------------$ M8 ]! o$ `0 {" I' K: {6 L
// Selection with type array
$ [: @7 P0 `2 D//------------------------------------------------------------------------------
9 B( F: I5 h1 tTaggedObject* MyClass::select_by_type(), h" ^$ O% p3 d2 }
{. n- F$ }+ K. k3 U0 d
NXString message("Select an object by type:");7 W6 |! k; }1 Y6 [" D& q7 P2 V* y
NXString title("Select object");
% g9 [! s4 f% v6 l Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
6 F9 A9 o; b9 d2 ^: s bool keep_highlighted = 0;
Z$ L# p2 z" N9 K m2 @ l' k8 }7 _' m4 L% B& N+ ]3 x% B
9 V3 N" v X! d, j* Y: k8 a. K // Define type array, see Selection::SelectionType Enumeration
- G6 n) D" }1 L // Uncomment or combine the desired types
% u. Z0 v+ {5 s& t1 S, E std::vector<Selection::SelectionType> typeArray(1);8 L+ l+ Q9 I. \# z: N( z
typeArray[0] = Selection::SelectionTypeAll;
: Q* h$ b; h* \ /*2 M* s4 u: x* @* `, T; S' N1 ]
typeArray[0] = Selection::SelectionTypeFeatures;/ G! l X* Y8 i; D1 r7 N
typeArray[0] = Selection::SelectionTypeCurves;
1 w$ ]% ^$ G) [( V8 q) K typeArray[0] = Selection::SelectionTypeFaces;
, z, G' ^( l- k6 ~3 f5 F typeArray[0] = Selection::SelectionTypeEdges;* }" r) `8 Q- [) q
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
o5 h$ b9 E1 E3 d */$ t7 i4 K4 n- V3 V
Point3d cursor;3 R8 u7 N4 I( O6 J8 ]( p% i* P
TaggedObject *object;
4 _3 C! f" p: Z/ u9 i5 B6 m. L( v* i2 e9 X& W
9 K0 M/ ^ j% D7 x; G- l // Select objects using filter defined by type array" r+ n% S$ {( I0 b" g
Selection::Response res = selmgr->SelectTaggedObject(" L9 c. c5 `4 a& P2 w, c8 U2 R
message, title, scope, keep_highlighted,
! c5 ~3 D7 F! Z* M typeArray, &object, &cursor );+ q& ~7 W& g# \. L2 V1 i% S. r
3 H9 e, E2 s: |& {- x0 Z5 ]
1 c1 x" m, z2 W; m3 }6 {& V if( res == Selection::ResponseObjectSelected )
" M3 T, Q, O" Y" u6 p {' s7 A. E# u. M% Y5 S
return object;# {+ u. k8 ]2 m" Y' I
}5 J" f4 |8 i1 _! ~" V
return 0;' A. N1 U/ a- v- @
}
. j; q2 ?& `) {7 s0 Q* j, _# Y
% [$ D4 W/ H$ n6 F1 O1 S2 h4 B. f E6 e0 ~4 Y8 i- h7 x7 \: c
//------------------------------------------------------------------------------
* ^! Y# N$ ~2 \( B# z5 b// Selection any objects
8 o4 |1 r- t1 L+ W5 O% A! f) x//------------------------------------------------------------------------------
+ v2 Y1 U& g0 b+ K7 W' N9 rstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()6 ^0 B8 t" l1 k/ Z8 O
{
/ ?/ y6 Q' X% o5 F NXString message("Select any objects:");) v1 d( R! I- s" ?, G" O4 ^
NXString title("Select objects");% U: v0 w r7 Z+ T
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
5 J8 ~, N5 W2 i7 P! m' I* _ bool include_features = 0;
9 A2 i t2 k4 ~/ P) c1 M( ^ bool keep_highlighted = 0;
6 |9 W" |( U2 {8 @* @4 w+ Q3 A+ z std::vector< NXOpen::TaggedObject * > objectArray;! @8 Y# a& {. I# b+ Y2 h( h( ^
. d1 n/ z0 B3 O0 h
8 A7 L+ x9 Q* L4 m- c2 X" g // Select any object array
( e, ^4 R3 u8 a$ r1 a Selection::Response res = selmgr->SelectTaggedObjects($ A, I% x8 u! w: E
message, title, scope, include_features, ; S2 {4 j& L' C; v2 w
keep_highlighted, objectArray );: ^6 e/ h# m8 Z4 y; `' f% h
2 H- u( a n6 B0 K: x
, N1 W, I2 n9 x* T0 b0 S return objectArray;: q: b& d+ a. l2 S# h. r- M, Z
}; ]3 c) S2 L4 N
2 w& d9 J) z( f7 `# a$ `& z3 N4 E
" V# a( }! N7 s' f G
* I1 Q/ g/ W8 _9 |* q0 o6 e) i e- T0 r# n
6 O1 v: f4 D2 Z: k4 z! S
5 d7 M& f8 T, {* h/ r
( |) d0 T& z8 V* n! |' P0 P
|
|