|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX二次开发中选择对象mask triple的详细讲解6 t% {8 E! N7 O2 R8 b" I1 c ]# j* m
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。6 `# ? y* M3 Q8 f/ h
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
4 M# K @7 `8 F! @, |一些常见的类型和子类型如下:* {3 E5 o; g2 j6 W9 m
" h$ b% x6 i& Z" r% ]; N( A
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。 N% H. M# z# T: I1 T2 N, o; T
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& ?& a; J9 v5 h; F0 ~9 k0 m Y8 D8 W( U
. P9 r1 h- l: `$ L
1 O! q _$ G5 _* F
+ m! a/ y6 o5 M8 p选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。- P6 M* n+ l; B( W1 U; U
( i9 |! G% D% B* s
" g9 g6 \% z T% ?4 i; l( h4 B+ H
/ \' O, J; E8 a( U r6 @" J9 q* ^, R1 |5 ^2 G, E; h( G3 a1 F* w ]
" l3 x# M3 h% \. E: A& P0 _+ Y) Y7 j对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。( ]6 X1 d. p0 U
- C$ h# ~9 w! ~4 Y8 P8 e0 ]8 p2 D7 d
" C5 e: D5 }/ g7 P$ H4 _+ h5 w# F( v
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);9 C* _0 W1 s& i9 w
* _5 M2 D) {: B: l% M& q
8 _; x+ \# h, u* K! G+ w2 s& `
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);2 U- i N) Q7 ?4 q7 k- K
" c, {" w% |: a* V8 U! y
0 x) {6 k" i* Q7 y* ~3 B0 z) VAddFilter (int type, int subType, int solidBodyType);7 [$ N8 M8 y( y1 c( ]$ a/ f \2 t
) b6 ^3 k. Y# @& [* b2 v
) l0 H0 z0 X- W对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:1 e# n! z E! q" w' k. W2 x
# n- O# `8 U8 d5 |
) E6 I, n0 ^- A7 |& Y3 R/ @7 O6 C* ~; W
//------------------------------------------------------------------------------
. s6 z6 o4 y" `. f// Selection with mask( _) c) Y; r2 A
//------------------------------------------------------------------------------* z( [0 |4 Y0 L2 y. g
TaggedObject* MyClass::select_by_mask()5 l c: g4 ?- z* i
{
$ E1 r* t3 V, J+ v7 X. D NXString message("Select an object by mask:");
, \6 L; o( a% I NXString title("Select object");
; [2 [; H( a. M& } x Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
, Y5 W4 C! E8 w2 k; B/ s2 P: A Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;! m! w' K$ e# a4 @
bool include_features = 0;' T' L+ r6 q8 i! N! A+ _7 V6 s
bool keep_highlighted = 0;
3 n4 J6 ]9 y+ J- K/ _- E' N
% v. @( [8 {+ ~/ V6 k! e8 K# W9 a, f/ T* s( B9 {1 ]9 ?
// Define the mask triple(s), see also uf_object_types.h.
9 W7 q. E3 X1 v: n/ E8 T // Uncomment or combine the desired mask triples- a4 _0 M- A5 x
std::vector<Selection::MaskTriple> maskArray(1);6 B1 a& [% O+ x2 s0 t( K
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies9 a [2 D9 d+ N( N8 i8 x+ Y* @
/*
5 N/ [6 U6 w" x8 ?0 G2 r& w maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
$ h& W, j+ R8 \ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
( t6 w1 |+ `, k$ z maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components9 w* ^# b8 |9 o% `
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
) O+ @, E! j! `- y$ } maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
~! I6 D) b! W8 [* S& S' Y9 ~ */5 A3 |$ ~! \0 p% w: l' ?. P
Point3d cursor;
# ]$ U6 ^1 A7 @ TaggedObject *object;
) ?, u g$ F6 y7 O% E4 T1 M2 N2 a8 @2 t/ x: M* `+ w3 E
* C7 ~$ ?/ T! ~( @1 K+ G8 W // Select objects using filter defined by maskArray triples
7 h1 A5 f% a0 G$ I- [ Selection::Response res = selmgr->SelectTaggedObject(
* r6 N. x/ @# ~3 c message, title, scope, action, include_features,9 J5 F, e( G, N" L# ~
keep_highlighted, maskArray, &object, &cursor );1 D5 |1 c4 e+ b, |% B O7 z
+ A8 m" q- F5 e/ V _; i: A- `
, N; B* e* K2 h6 A) S" G2 P if( res == Selection::ResponseObjectSelected )
. B4 E0 P/ P# B {
2 m+ B+ I6 U3 x4 Z) m* b5 z3 i b( | return object;/ v$ g% F! s; {0 ~% @' h9 B
}
4 i0 h' B. `% }4 w1 Y return 0;7 y# r' a% J. l
}
2 q4 D, @4 t" L+ p" z l$ o
) M$ E' B5 p' z z% h% x! p( q" w
//------------------------------------------------------------------------------
* C4 ]1 t+ \2 _, m& K$ s3 w D; Y// Selection with type array
0 l* Y# l# o# W( M8 p. w4 h//------------------------------------------------------------------------------3 T ~6 m- n& _) w$ u
TaggedObject* MyClass::select_by_type()4 i4 c+ j E: q. P/ B% ^- ?* Y
{
3 b0 R. i8 W" O9 Z9 ^ NXString message("Select an object by type:");% i# C" W$ p# b# ^! L
NXString title("Select object");
) p6 i6 a' P# P# {$ y! Q2 g* {& q Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;2 \# P- k9 F W9 {5 w% ^3 B B
bool keep_highlighted = 0;
( M6 I$ i c5 i! w2 m+ _, D2 \* X% N- V1 Z6 F
4 b* q: o7 `+ g5 T; r& v
// Define type array, see Selection::SelectionType Enumeration
' Y5 M" B& {' W0 R. s/ ~ // Uncomment or combine the desired types
5 x1 Y' o4 V: k9 Z2 ^. E: w1 x5 b std::vector<Selection::SelectionType> typeArray(1);; S, ]( w7 ^# p2 e. M; R
typeArray[0] = Selection::SelectionTypeAll;
" `9 t& y( d$ T3 n4 i /*- ~6 E I) v1 ]' C- L& p, d
typeArray[0] = Selection::SelectionTypeFeatures;
* ]) N2 N* c: n0 J typeArray[0] = Selection::SelectionTypeCurves;
, D' J6 U* Z) I/ f$ H+ M typeArray[0] = Selection::SelectionTypeFaces;# y. l+ w3 T2 d# Y8 M q
typeArray[0] = Selection::SelectionTypeEdges;! ]5 c' B9 {& C% I1 m
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;; B0 I5 v% Y4 f+ g2 u9 u M
*/: w, C' U' \- b
Point3d cursor;: G2 j* p: G2 n" Z$ i) q
TaggedObject *object;7 L# N5 r Q. }, Y) G9 z
4 C. ~% y9 T4 A: ` H, p" ]; b1 Y# g3 L$ Z1 x% E# g& m5 h
// Select objects using filter defined by type array
! q! j1 N6 m7 b( B+ `) G. i8 z Selection::Response res = selmgr->SelectTaggedObject(# P/ }# W `& }, A; T& L+ n' Y
message, title, scope, keep_highlighted, 7 |8 p. X' Z1 v/ ]; |
typeArray, &object, &cursor );5 {3 `% o! F5 J
% T. B& ], x2 U' F! E/ o
4 N; E u# K" u7 B" ~ if( res == Selection::ResponseObjectSelected )5 ^5 V3 _) s9 N" G$ x8 X
{3 S) ^ O0 ?3 R: a* U
return object;
: O% \: K& I6 ^ }
7 f, e* [% @$ r' ~7 e return 0;" N% z+ s$ n% V
}6 P* E2 I8 i! a0 t, d% e, F; ?
" u3 g% C+ t* C5 w' ^' w& d) z
: u, b5 u6 |/ _) Q3 h9 e//------------------------------------------------------------------------------
3 Z7 K! [6 U4 t# A% f& h/ |& i// Selection any objects+ T$ H6 f* v/ o. f- R
//------------------------------------------------------------------------------
# e$ u+ ^/ @: ~6 [+ _( z; L" l3 q6 Fstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
/ |. k# [ T% A( e( L: D{& g$ ]4 ]# C& W: _; t/ o* U
NXString message("Select any objects:");- d3 X- A! k, k0 f+ D8 }
NXString title("Select objects");, L1 N a' s7 T4 F7 r
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
2 T4 U3 C2 K% _ bool include_features = 0; 1 ^' Q: Q) y7 _: Z: I! }4 ^
bool keep_highlighted = 0;" j3 Y. X1 c. Q( ^( {4 r/ I
std::vector< NXOpen::TaggedObject * > objectArray;" z3 x( z7 X% [+ J
6 t: {6 e& l" i. R# u, c* d7 y
$ U& S0 c/ U; n: t& U9 b4 \
// Select any object array
. w. W( E- f/ w t3 R: n! f. c Selection::Response res = selmgr->SelectTaggedObjects(
# e/ D* g$ G: v message, title, scope, include_features, 4 O0 g0 ^, f) \( K& @
keep_highlighted, objectArray );
+ b( Z3 {5 C2 B, W
* I6 c! m' P& a6 y9 p
" V$ T! b, V k3 o& P return objectArray;
9 y8 Q; Z; @+ v F" O+ ?}- W5 _& P2 T( [5 D# j+ O8 ^
! _" ]) X4 d. W3 ?/ |) v0 n1 a8 K/ h: k3 D; ~' q
, R$ Y4 U; }1 X0 E! @1 i; E6 j
5 k4 Z1 p, @. v1 q
0 @! _0 i2 Z3 {7 w; t( U4 a; Q! \ I: k
- C/ ]4 X' W+ x8 ?) s$ d1 h; B* e" T; ]2 _1 X/ G$ _5 u
|
|