|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解4 u% l$ W- L" m3 X+ u* x4 Y. u' F; L0 v
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。% ]* W& i! G+ f3 N% g
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
7 p4 ~" T$ L+ h1 w' O4 h一些常见的类型和子类型如下:
, M. J! _; L" d
% A) T9 S/ o' U& o8 l( x如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
6 x/ z0 {# C1 _6 `; d5 v实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。/ E" `% A2 U) v
# R' d- H# ?" o9 \( k! h m" z5 W+ h
3 O- X3 E4 j0 g0 t9 Z m% q; B
8 o- C+ b- z3 @% q. E# ~ P, M
' Z3 B! j2 f! ]选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。1 |3 A( t2 d9 j& @
: I U3 a9 I# u8 P+ p
: }- T' B& O r! l; j
# [) p: \0 M! {( {
. k& L, F/ q5 |; K( y5 T0 g+ k# ?. }0 Q& W7 T) u
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。1 E. J6 B, m4 m; q I4 u5 z! @
+ E4 }4 s+ N) J5 s n0 {+ \5 F
0 M" N4 [* ?8 m* u3 KSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
4 L' n7 |0 ?; |" O! e4 J) w/ n) T3 b7 X. S
, n" z' q# O$ y! ]+ [, N& L, {
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes); |; f7 _8 Q0 V5 ?
$ I( m6 R6 I5 E0 J1 N
. S" m* X& E6 f/ D
AddFilter (int type, int subType, int solidBodyType);% q7 {3 F5 A4 X0 r
* n! g2 z& b) n1 t$ O* a
1 }: l% r9 J( W* D
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
2 G/ J, i( e9 ?- z+ e0 @* \- N* r9 }8 v% d: z2 z) [% @7 R; M
/ I, x( o; P6 }/ X
+ \7 P! @. y3 \& k1 X' h# v+ X//------------------------------------------------------------------------------
$ C6 }: V) y; \2 w0 p// Selection with mask
. U; x0 ?3 v0 X: I, G//------------------------------------------------------------------------------! E9 N" ~2 C( [3 i. Z
TaggedObject* MyClass::select_by_mask()# H, }8 c, M$ L/ ]
{: w3 O( F7 |# P) r6 K
NXString message("Select an object by mask:");
1 F. X6 V- X6 T% d i" _ NXString title("Select object");
+ \4 R3 ?. b" Q$ T+ T5 W/ p) w2 C Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;4 D: @: I$ i: i( |
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
! o7 k8 h2 P% b! \+ s! u. d2 B bool include_features = 0;
9 ?; _! C0 V0 o8 S1 {" s# P bool keep_highlighted = 0;
& _! L# r* ~6 K0 T. s! Y& h2 E K- V# V7 n5 i# P: x
' U" U4 e4 N# I
// Define the mask triple(s), see also uf_object_types.h.
) l/ T1 B# h2 v" c% L) c: a // Uncomment or combine the desired mask triples( L- }+ K& ?& b& P# O% ~0 f! o
std::vector<Selection::MaskTriple> maskArray(1);1 E6 \0 W8 f: H8 W, b
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
( j+ d& c$ w+ e0 w' x /*4 X; a3 ~5 a3 u/ W; c w) _
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces: P: q3 m( G5 y9 f: M
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
* v2 B. K8 R% G. i+ c# R: E3 f maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components' m2 V5 h) G2 c9 _& G& X8 S
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
0 u" c$ s3 a" L$ X6 K+ ] maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
3 _8 I$ |2 x, N */7 D4 W* n T) \
Point3d cursor;' Y4 v, [1 e5 Z" i
TaggedObject *object;5 ]) d* P2 {5 [5 p7 p
; S; i$ s7 j7 M" ]$ u
3 M2 T% { N0 v. T8 q4 c
// Select objects using filter defined by maskArray triples
* k) C8 e' I% i p5 U2 k, V7 r6 D Selection::Response res = selmgr->SelectTaggedObject( j- K0 H; _9 ]( y+ e
message, title, scope, action, include_features,& g' ?; s- b' T4 d9 l/ r
keep_highlighted, maskArray, &object, &cursor );
+ ~- b8 g* J# g; T9 f, u; [6 H, k/ z" I l |2 ^
$ @! v: h! i L" {" q if( res == Selection::ResponseObjectSelected )
) _# S2 G! ~5 z {" c0 K1 L) @9 N8 ^% K& q
return object;
# G. i2 _7 c4 T* b- ? }: Z8 Y* C6 e$ l# p
return 0;# Q$ I: \) q5 O5 ]' t; C# V
}9 U- h+ Y2 y" d1 q) V$ B
, I7 Y* A" N5 u
: ~/ _6 o) b" [5 W$ j1 `- w5 S
//------------------------------------------------------------------------------
2 H* h, a! H; ?8 G8 M, z// Selection with type array% O+ W9 C" Z; m3 `1 K' a8 X3 j! D% l$ A
//------------------------------------------------------------------------------
1 l k: `7 z: D5 I( d/ WTaggedObject* MyClass::select_by_type()1 \& |- T! U Q& F+ O
{2 c$ v A6 D) k& H$ a8 X
NXString message("Select an object by type:");
4 d% D# H8 g0 t; P4 G4 ? NXString title("Select object");
. P5 p/ H2 X/ [) h G( Z3 u Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
" L& y9 c9 Y* `) N( c bool keep_highlighted = 0;& g9 ]0 d, [# m4 [, S( |1 s( ]
$ Z4 ?* E3 j* w# R0 X
! o$ X2 {6 o, v. V7 u0 [
// Define type array, see Selection::SelectionType Enumeration& s7 ~1 I a' o; A* `# e2 J7 j
// Uncomment or combine the desired types
- S, G* C* ^0 K# S% S* Y3 { std::vector<Selection::SelectionType> typeArray(1);$ d5 K$ w% ]: G4 q
typeArray[0] = Selection::SelectionTypeAll;* {* B4 g! C7 B* i& N* T( I
/*! K; @; `5 R1 x( y# i: i% m
typeArray[0] = Selection::SelectionTypeFeatures;% U. {4 ]6 I1 T" r
typeArray[0] = Selection::SelectionTypeCurves;
$ d% z4 Q0 A* G typeArray[0] = Selection::SelectionTypeFaces;
/ ^% W% X9 ?# j1 l typeArray[0] = Selection::SelectionTypeEdges;% W# h5 G, f, M+ i1 E' Q7 O
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
$ s5 y2 C! W/ G6 ]3 x */2 Z* M7 ]" b4 B
Point3d cursor;
8 `, a' y! C. C2 b; Y TaggedObject *object;
: X5 q/ O; W/ `% a7 m
4 B8 F1 A' L* M* X9 U& L" ]% E- E3 J% k" u5 R7 I3 c
// Select objects using filter defined by type array1 j8 x1 P0 E* X! r0 }
Selection::Response res = selmgr->SelectTaggedObject($ Z6 ~! p2 ?1 @
message, title, scope, keep_highlighted, * r* p( J6 L: e/ D6 _
typeArray, &object, &cursor );
9 I4 ]& P4 {4 o6 R" T& a" n* _
; v4 z9 l; S2 L' [& r0 |! P
9 s# w! Z% q* o% l* ~# z- \ if( res == Selection::ResponseObjectSelected )$ i1 \- f$ u4 F+ l* d( x! ~
{4 F5 q) |1 z+ Z) A S( H
return object;, R( J ^, J9 D8 W/ W3 U
}
& b+ ~$ P; V( Q1 M k$ w! ^ return 0;
$ _4 M5 I9 G( j Q}
& y. A0 k1 N) ]! V. p& d- i3 v0 V
5 H0 `" Z# e; O) m+ l6 t$ S" C) n9 w( Z6 _& l2 K
//------------------------------------------------------------------------------( g+ x# i% b2 M/ H, u! i3 z
// Selection any objects- `4 a& ~1 X7 Z# e7 Q0 H6 e
//------------------------------------------------------------------------------3 B8 p" L) i% v4 V0 I( h6 N
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
9 @: Q) e- P" a: N5 `1 M: c{
5 w& `& A/ {9 V' u NXString message("Select any objects:");% r+ ?; j9 X# }2 A" C4 Q. d
NXString title("Select objects");
2 [2 e2 a! t+ m. |: \4 L# R Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
& p4 K6 T. l& l* m bool include_features = 0; 7 y+ k; i Z3 `+ {5 [; R
bool keep_highlighted = 0;$ M* E! V9 _5 G0 k" b0 R. @6 @# E6 W
std::vector< NXOpen::TaggedObject * > objectArray;! N$ t# ~. Q z$ k) V6 d
$ P5 E5 {9 G7 K0 v1 O
& N/ H- P! r# n$ V3 N
// Select any object array
8 k3 x2 F5 _+ D' o/ k4 ? Selection::Response res = selmgr->SelectTaggedObjects(. u: {- T/ o0 l1 y8 J
message, title, scope, include_features, 1 i' j t( t+ t, s9 T7 v- E; ^
keep_highlighted, objectArray );! V4 G0 t6 O# Z
. [% N1 g* k! u8 b- R; Q5 k
4 [ Z$ y) t3 B1 e5 |5 c
return objectArray;
4 e+ L3 h, m0 A! {) l! W}( e& k0 q3 M" Y' s
9 ~5 O; m9 V' R
$ [" m, N! C @
- k3 j8 g+ O2 l# }
( V6 ~$ x, r) e5 p
, D" C* \- I/ U& ^$ b$ h- |0 A
, t5 W% O% Q& w+ k
' w1 _2 ^) T7 `0 [: Z3 p |
|