|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解9 f5 \( \& y% P3 T* N$ Z7 @3 ?0 J7 l
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。# D# g, Y/ z# n5 y6 p
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。1 j# z: [) M7 O$ n- Z) \, N: S
一些常见的类型和子类型如下:
, G6 W% z$ L( y; o0 n( ]
( t9 K) U6 o! f4 Q4 q- u1 m0 E$ `如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。" i' n) i0 b5 L4 V; A- [
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& v: u$ j% U( q6 |
0 h9 [2 S% w6 C" I5 _4 M9 t& k
; U1 V& ?5 U8 _* Q" i; l
" J4 H0 q" u, @+ J8 O$ A% y
9 P/ A! i, W# c; m( Q: x- l/ P
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。" Z5 o4 }9 U! g2 a6 u
5 x; f- S8 N4 s1 k" V- c# Q
0 Y, H$ @6 f* A+ D. f9 }
. r9 z5 V0 ^3 I' U3 A2 v
* _2 j" F5 q# R0 D" w, {/ U) I5 f$ B* |5 i5 `
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
7 C1 K9 R, Q/ R% t* g0 H; Z n" a/ X9 Z
+ \9 U3 O/ m! n& i( FSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
6 b: t& Y" W* A; a$ t/ e/ |! n7 {$ T) ]- v; U
' X6 W0 e6 F' Y1 ]" c' N
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);) ~: f( j( M B. F) S
8 _7 _+ i8 k9 s7 ~
( o* s: `) @' K1 A- m. Z9 y
AddFilter (int type, int subType, int solidBodyType);
# e9 p. s; a2 A- l8 x# k. a2 E( i. P/ H1 ^
+ ]& L% k8 [, y' a. R+ u
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:5 O+ e1 I2 C( A& W( `" y
. a8 i. f+ |$ B" M
+ k( l8 U8 v: K) i6 y
5 T+ x8 e. `: P5 G: x. Y' Y+ c//------------------------------------------------------------------------------% X* M- T. W) A; N3 o; X
// Selection with mask: _4 q, M2 r& ^$ @6 [2 P% i
//------------------------------------------------------------------------------
- h* Y* P; E/ T+ l* r6 u) RTaggedObject* MyClass::select_by_mask()9 I& B8 f* V2 `" q
{
( _$ D3 h2 \ A/ S) W NXString message("Select an object by mask:");
. q" R, j c# o8 j, |) j# w! i NXString title("Select object");( B7 J, q/ W- L* z0 W3 S
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;+ ~, C6 d% K7 a+ o
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
6 z* X7 [) w6 @' n7 H K, x' } bool include_features = 0;
1 h4 N3 z G! b; m( B$ j! y; {3 H bool keep_highlighted = 0;
8 q! Y) G. ~. p' j5 g
! w3 `8 Z4 H/ F: F9 \4 A: e; N3 V* `' a
// Define the mask triple(s), see also uf_object_types.h.
9 I% K$ Q5 q6 B$ r // Uncomment or combine the desired mask triples0 m# J' S3 P2 v% |- V) o$ v
std::vector<Selection::MaskTriple> maskArray(1);
7 {7 z' z y. V& [$ E# W( q maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
9 _) G; \( J2 x- s /*! O8 H* r' m7 W1 [! V+ s) W" \ \
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces/ H- z Q5 } q2 P% Y8 W6 C
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
: l3 L- H6 Z/ x1 J8 p; } maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
& o- u1 c: [6 A @ maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
- ]# [5 n n9 w# [- ^) A% H maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
9 D/ l, C) l5 ~- m0 k' I# p% @9 F */7 b0 C5 Z" T! Q, o) v6 c( M3 l" Q, x" g
Point3d cursor;+ y U: j# ]% d* E4 o: d1 N
TaggedObject *object;
9 p5 F' p( E2 w; V d( Q5 p
. i0 { J* z9 t8 ~1 I
: P9 T9 X0 Q) t* x. b9 m // Select objects using filter defined by maskArray triples
: [4 j% j5 y" R O Selection::Response res = selmgr->SelectTaggedObject(
$ q9 W( c/ i5 U3 X' k5 g& f1 F message, title, scope, action, include_features,. N! a9 B! Z! m% b/ S
keep_highlighted, maskArray, &object, &cursor );
( F. M) X3 r: |$ i; f8 \- G/ S, K% R
! V8 i4 \) w& A. o if( res == Selection::ResponseObjectSelected )7 Q$ j8 G' v* ?: ^/ ]
{
! S$ n! P5 w3 a) N; h. _! h return object;
# P4 G5 y7 y$ `2 R" e u }
( z" L9 d9 S- u8 f$ @- o return 0;& e! M% ]6 P8 _) V
}" t4 G& Y, \. I1 T! ]( f! e/ B
M% Z8 X# w8 _2 o0 v. {/ u
) H7 R: W/ h. ` g4 e( K1 |% i//------------------------------------------------------------------------------
- A/ U" Q; @7 M+ N% q8 b* b0 h6 ?// Selection with type array
0 n$ T: r# }% h//------------------------------------------------------------------------------3 L( q" q9 U0 q7 G0 r9 I' f/ z
TaggedObject* MyClass::select_by_type()
: v4 B! C! j2 J9 ]1 p" v{
( y. V% ^* R6 i/ d NXString message("Select an object by type:");
( _8 J1 ~) W& s3 S5 J" P- E% } NXString title("Select object");! N! u( h) n1 A2 O
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
/ {6 d: u r$ g1 v bool keep_highlighted = 0;
" \8 R! f: J( s! H# L3 `: v6 ?* |8 P1 B) u
: ]; K& p6 k5 j% z! A
// Define type array, see Selection::SelectionType Enumeration
( g& v% i$ n8 ]9 w( j$ b0 U2 N // Uncomment or combine the desired types9 M; }& c6 O' }; b* ~
std::vector<Selection::SelectionType> typeArray(1);: G$ O3 }9 e3 t/ c( X; B
typeArray[0] = Selection::SelectionTypeAll;" m' t/ T$ X2 `! q
/*
: M. n% c6 M6 x$ R2 Q& M& f { K typeArray[0] = Selection::SelectionTypeFeatures;
9 j1 ^. _) G, f typeArray[0] = Selection::SelectionTypeCurves;
4 f! ^$ T9 _- C! f' Y/ v3 e K+ m typeArray[0] = Selection::SelectionTypeFaces;$ `; W8 L$ u, a
typeArray[0] = Selection::SelectionTypeEdges;
0 S; G! O- @: m7 D9 Z1 ^ typeArray[0] = Selection::SelectionTypeCurvesAndEdges;! o7 H8 v* g% r' x+ j3 b& ?$ @
*/( Q8 c5 Y8 W7 ]
Point3d cursor;
1 y" a" Q+ Z( V3 d% l% s TaggedObject *object;# [2 E& j9 j' o
7 | }* R6 F/ ~2 U0 G% \$ @
1 c; I( ^$ S5 B* |5 i // Select objects using filter defined by type array: u. ?- F& K3 q+ R- N o$ E
Selection::Response res = selmgr->SelectTaggedObject(3 U+ ~& m1 |. v6 K% P5 ~
message, title, scope, keep_highlighted,
" u+ T: n4 A- ~* |0 I& G( D typeArray, &object, &cursor );9 R7 C3 o( h2 v. B7 h
* [* u$ W2 L$ B5 p# J: L1 S* b
& x \' q$ e- Z* G! [ K. h& M if( res == Selection::ResponseObjectSelected ): g; x2 R* s& j! q: z* r
{( n* n# D$ Y* ?1 a) k
return object;5 s. p( b X1 |5 X, h8 k
}
1 o Z4 R, V5 l1 Y8 l/ X return 0;7 a5 t* Y" P4 E" k5 z3 v) R
}2 o" s. e1 @' N0 k: p
4 D- a8 c! ] V* m n0 N* T3 P/ Y4 I$ r( l: f
//------------------------------------------------------------------------------
# ^. y1 ]0 ~; Y// Selection any objects
9 r& e. C5 o: a2 `2 q5 l& T M//------------------------------------------------------------------------------* M% l% A- ~ A: |9 N ]
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
. n% z2 P9 w( [{4 ?3 x1 n. ]' D1 V
NXString message("Select any objects:");
0 ? [2 {5 R; `& a- A NXString title("Select objects");
3 T! j7 l+ P; _ Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
0 A( u3 P8 `" d$ W0 h b bool include_features = 0; " X7 F% K4 w- E# g2 U( H8 [
bool keep_highlighted = 0;$ D" F) z |+ A: _" b8 Z$ Q) U& f
std::vector< NXOpen::TaggedObject * > objectArray;0 f- R/ R! \. J4 L) |7 `
0 l. U" |+ w6 o7 L* A; w7 ?' `
& B' W- N" {: t' ?& o, l // Select any object array
+ k6 o Z* U2 a2 B# G, b4 ` Selection::Response res = selmgr->SelectTaggedObjects(; P- }) T: v6 q: r0 z
message, title, scope, include_features,
- t7 H0 s* |( { keep_highlighted, objectArray );
3 Y+ C3 d3 l; R( p0 ]
- r1 }. n# q: l
7 F. \3 P* Q4 l/ u; v4 C: m return objectArray;
" _6 A" |# \3 t- n7 L5 Z- m8 r}
3 _9 M& Q4 `" p: D
+ \" k" X& O& _' p
1 b2 _ k8 q2 d l+ l! N; W
4 g' l% ~% k4 N# }3 a" W4 d4 N/ P
% k$ m6 b0 T8 ]! m* f
. N) A! Y( e& A* h) K# V7 G
5 S1 f0 O0 a+ _, Y4 k* ^8 K8 x9 Q& L, [
|
|