|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解) j# R& s5 U! w7 G% \9 A* _
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。( }& _7 e+ V9 L) l _1 W
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。7 A( i% A* S3 N7 B& R/ G
一些常见的类型和子类型如下:
/ c2 E6 {! S/ V) l7 F0 n
. H V- `8 `2 ?" a5 \ K: Y5 N
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。, M' F# c8 F. l* _1 b# G' J: }
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
e5 L7 I" w6 P( F- G' F! K% B2 X2 }; G2 K. X* J
- L" G. V5 B: [9 V" Q, Q
" r' j+ V, q" l- X' i7 q( }( I* `& ~3 D, N* V/ B) n: B
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。* c4 F0 M! S6 o/ m2 x8 J
6 r' F; J) F5 m) t5 E; m! N0 _' z5 T2 P9 i1 Q* t* r
1 w G5 g3 ~( j2 G+ f
3 t, s3 Q, H! c8 T% D$ A+ c
9 [) G2 \7 t: g0 k/ a$ E
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
/ m: c" \$ r( x I* l; P, \0 X9 P$ o1 q/ I5 M5 a
2 R% D( _# M5 T
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
3 |: V$ V5 K0 s/ S9 J. I2 e( ?. ^3 E
& C. V3 {' M% b n; C0 k- s
" Z: F! v0 T. u8 \: TAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
# U! t1 X* S" u0 M. a+ C6 v. \) D& d. q$ l; V8 n4 A9 Q8 _
" ]% |% Q' p0 U+ `AddFilter (int type, int subType, int solidBodyType); N# C% D. J# s+ i! T e- c
& s$ W0 b& D! x7 C" a( Y. z) M1 x; ^' G; o0 ^1 G; K2 ~* a
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
/ P) i; u. K8 B( _$ F( O% C. a0 o" P! ~/ C3 R) s9 ~
1 A# R8 P& [3 @0 D6 |, l: f
; p9 I/ D9 F) o, t8 x//------------------------------------------------------------------------------
* s3 X9 X; O1 i// Selection with mask
n2 j' X# l0 f6 e, Y1 p//------------------------------------------------------------------------------
/ }- F' `& M6 M" ^( g! H, `# [TaggedObject* MyClass::select_by_mask()
, C9 {; T8 L h1 i Q0 K{! h0 r7 y3 {& i( P; F1 w% X$ R
NXString message("Select an object by mask:");( K7 D7 N0 v w0 N& t/ Z
NXString title("Select object");* D2 b) V V$ E4 i0 j% x
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
/ O; V1 w; [; W Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;3 z4 x0 O( A, A b& M5 ^4 Q1 z
bool include_features = 0;; O! A$ N* @* Y. n; y: n
bool keep_highlighted = 0;: ?* B0 |, Z$ Z; `7 _& M* k, ^
6 }; W) I" l5 B( `; ?$ r( g
( q# c( J; r, x1 V3 g$ r // Define the mask triple(s), see also uf_object_types.h.2 A3 D3 h. k8 P/ Q
// Uncomment or combine the desired mask triples9 t' [# i S. a6 r! W# r m+ x
std::vector<Selection::MaskTriple> maskArray(1);
( D. @: f* }* c- M maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies9 P) s) k3 u8 \3 f: u0 v B# _
/*
. y1 y/ q: X; k! F% C1 f: @ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
( `2 K0 P7 k/ [9 \: x) R7 w- c maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
$ u+ Y q$ P) D+ { maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components1 h3 w7 u& ~' O! P) j0 M8 V
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
- V9 z* _3 j) \3 y+ o* } maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects+ f# @% o _7 x# s8 U' g
*/
: I8 }7 L8 Q. c$ E6 P/ { Point3d cursor;
7 t7 G! y* R4 b9 S& B TaggedObject *object;
H- ?- n3 N* @9 N& ]1 f- h
2 ]6 f4 f( G4 h1 z2 L' G
. k) z$ n& f/ m B/ Y4 N6 Y // Select objects using filter defined by maskArray triples
6 K2 s" {( M5 D& u. [8 J Selection::Response res = selmgr->SelectTaggedObject(. z6 w9 |% K4 K _6 l- n# s- H
message, title, scope, action, include_features,4 L, j' D( z: j c2 a) N1 `2 |) X9 Y$ y
keep_highlighted, maskArray, &object, &cursor );! _5 k7 n# ~2 V2 m6 C
- u4 G8 I/ i+ p( q4 a! k0 d7 U. l3 t; j8 R
if( res == Selection::ResponseObjectSelected )
0 }" [4 v$ @6 F7 I% e {
: \2 Z# V1 \ o9 Q6 X6 C/ M return object;8 c5 K% ]( q1 h X. M% i$ y1 E8 C8 _
}
4 O L/ v r1 `+ m6 X4 M return 0;
% [" u/ Z4 Y8 z7 b0 V5 Z& A}
$ `7 J- P, b$ g" q! r) w
* d) ~5 N& }: H. Y9 V' R
5 ?; b. S1 w$ ]//------------------------------------------------------------------------------
! T$ |# J7 A7 h6 m2 l; K# @$ e# [// Selection with type array1 r! l# ~- x* g
//------------------------------------------------------------------------------' k2 o& e2 c/ [# ]; q
TaggedObject* MyClass::select_by_type(), |8 z5 f2 h R. J) @, E* v
{6 `3 v4 i' Y% Z# K1 k% y
NXString message("Select an object by type:");
5 Q+ S6 b( c8 y9 H* ?7 Z; F NXString title("Select object");
. W& O: t! r R8 y g8 j Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;& w( f( Q8 [6 b: d
bool keep_highlighted = 0;
( @) d7 @) S' _6 |+ w/ _* s4 L9 G: l' d* ^) s
+ J1 c/ C& S: T- z0 u/ }# G // Define type array, see Selection::SelectionType Enumeration6 G8 o; `6 _5 ^( Q0 Y9 `6 q
// Uncomment or combine the desired types: e1 j2 `9 Y' N# L3 x
std::vector<Selection::SelectionType> typeArray(1);
7 Q' }% j& z! N# `1 w5 C! C typeArray[0] = Selection::SelectionTypeAll;% }' _4 s& L! D2 }$ V
/* ?, Y& B% c5 t
typeArray[0] = Selection::SelectionTypeFeatures;
- [/ D7 n" T- {9 S typeArray[0] = Selection::SelectionTypeCurves;
- P" B4 I# ?# k9 ]& K( e typeArray[0] = Selection::SelectionTypeFaces;4 O2 g# |5 R7 S. e$ i. V) [' s
typeArray[0] = Selection::SelectionTypeEdges;" ?6 K7 e( ?' ^; _; V0 ?
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;3 S2 J/ R& ]3 n3 w$ c8 l, y
*/
( e$ D- n8 L' n7 b% w! O Point3d cursor;6 y. r! f3 j1 Z) P
TaggedObject *object;3 N8 U9 B( A% m. q# `& P
# T) q$ X0 [. c) S4 t& w
, p7 d- p0 E4 q8 K3 ~6 q // Select objects using filter defined by type array
" ~ h, m9 S- ]- b Selection::Response res = selmgr->SelectTaggedObject($ V% D( i! z6 `: G: P: u% W" V
message, title, scope, keep_highlighted, / w2 |3 {; i3 S9 ]
typeArray, &object, &cursor );
* B3 S# Y# O: z- P7 S$ |
* i8 V2 S/ C! h l- r
3 X, v2 D4 j/ Q8 C6 a1 }- @ if( res == Selection::ResponseObjectSelected )
1 Z6 }1 b+ `' L4 @' ]' u5 ] {! ^4 b1 f5 F7 ]0 u C. Y8 n
return object;
( N9 m6 v/ V$ K8 p" A' p- ? }# L' O9 @: M- {9 f- P: {& q
return 0;
; q3 @% }( d% M}8 q1 J' i5 ~& q# q$ `
5 f" }/ ~9 u$ E+ Q- U
y6 r8 C9 ~; X" L4 r8 Q: j//------------------------------------------------------------------------------) \/ f9 w* q. N8 d% e; l
// Selection any objects# ]; k6 v1 v+ u s F! x
//------------------------------------------------------------------------------
' W3 r) |- c* L" Z$ B* sstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects(). R2 ~& a# j+ t8 j0 ]; b5 l% x
{; o' ]/ r. b2 o* c, z
NXString message("Select any objects:");" y, {" q: x' X$ }
NXString title("Select objects");6 o8 ~4 }6 \6 P. v$ m' t
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;) `; m1 e c C% ?# P3 Z% H
bool include_features = 0; : E1 h/ a0 n, L( _
bool keep_highlighted = 0;: ]* S! Z, p7 R: A( X
std::vector< NXOpen::TaggedObject * > objectArray;
' `% R2 I+ ^, Z) w4 _1 X5 t2 S8 A! e2 s! w+ P( b5 }
1 X" w3 X) I/ y7 ]" [6 s // Select any object array0 i) @$ T, r" T, K/ I! M
Selection::Response res = selmgr->SelectTaggedObjects(
* {- Z" h8 S: P3 I# d$ {$ T( X message, title, scope, include_features, % A, D6 |" k& K5 f; Y+ C: O
keep_highlighted, objectArray );8 m2 h Q; C2 l5 E1 u5 S
3 l* C2 X0 H$ x& }
9 p+ H1 }& W0 d }$ q return objectArray;3 J! i! c! F# m p/ A! }5 k/ |
}
" S! a/ R' t( I& U- L. X1 _; \" m9 N: D0 _$ ~# ^6 o2 @, N
! q% J6 ?4 ?- l9 k2 w+ g& s
# V9 R! W) o; \
8 O3 U, r V6 b z \
: Z' d; w9 j) @' `* _% e U! u0 P; J5 Q& }
6 w1 [- g% [+ ^, J |
|