|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解9 X! y9 j9 w. |$ i4 a
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。. u2 Y& X6 F9 f, e
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
* b1 C6 h% K; F. Y# W( A一些常见的类型和子类型如下:4 h9 R% d+ i* V- U1 k- j
8 A v7 x% N' r5 h! Z
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。% E: a- ~8 F8 I' u: O% |' ^
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
1 M, n( M5 y( U; R/ |0 i0 A) I
. n0 T/ N3 D$ h% [# I* J6 v
& `: z' V+ V) o" v" C! _# \$ Q& v7 c
* A: O# T1 D2 n; n5 w+ ?1 q h" z
0 K8 g5 A: x$ a( M选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。+ z+ a0 w$ X& h$ j" Y0 x) h: [
7 F* j0 e( Y, V, E( m1 u: J
' T6 d$ b# R5 [: u
' Y# X& D4 |: m' i. V x0 g
( s5 ^! ~1 u, \3 T" Q, B% D* v" L0 t- S e' h
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
5 ?0 N1 O- j/ Y) H6 p8 [: F5 h. L* r+ w' H
" A: [2 y( K4 g9 GSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);8 x- d% U4 z) N) C: A/ k/ s
( Q! b7 G3 h# `9 i& }6 ~7 d) u5 R9 G, ~" a
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);( S1 V: O6 I: N8 P$ S
/ B0 w( B' l- v/ `$ T5 r: i* |$ a5 c: r2 u
AddFilter (int type, int subType, int solidBodyType);" g) ^9 ^ v* [3 ?& {' e0 e
- B; S% Z" d% A/ r$ i8 X4 i
/ n7 W. U9 k! j( G% e
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:1 U# l( v# D) Q
; f+ l7 `( X4 C0 m
$ b5 p4 |, ^' l$ l+ T6 r) ?$ m6 x0 H" R' Y- s% m
//------------------------------------------------------------------------------4 `' {+ G5 I! Y+ S
// Selection with mask
5 _% Y8 g8 R! F//------------------------------------------------------------------------------
7 ^) V, o7 T5 k, p# eTaggedObject* MyClass::select_by_mask()
9 E5 U; ^- k0 Z8 i2 D{
7 U; {/ W N' x( y. b NXString message("Select an object by mask:");# d& C3 S: o+ m+ T# F' |
NXString title("Select object");- l, |, f; u7 b7 o1 N$ }
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
* a$ p5 z+ i4 ^9 n( Z Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
6 _, R& `" G3 s8 Q bool include_features = 0;
( Y1 g8 I" d6 O0 P8 \3 g& | bool keep_highlighted = 0;
5 C+ w0 G! A( T& o+ K) W; ?7 K- J# U) a6 M) g, x$ A
4 t- ^# c6 w. C2 G // Define the mask triple(s), see also uf_object_types.h.
6 E9 Y. n. ~( P' \% G% [: E& _ // Uncomment or combine the desired mask triples
# X! g& L2 W' y5 x5 c+ p$ d std::vector<Selection::MaskTriple> maskArray(1); E' C/ i( J, o
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies; n- T( ~. ?, `; v! f3 _8 u# l
/*
4 h* Z. ]- |( d0 \ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
0 u8 b- i+ }* s8 j( u6 Z maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
" E! t! {9 h$ |- S maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components! v- _! i( E- F
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
2 |0 U3 ~# k8 d# p2 G/ q8 M maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects" K3 }8 N3 e s; n$ B3 L
*/; m2 a$ q; T ~: s- X
Point3d cursor;9 E. r" `8 ?) d1 o
TaggedObject *object;
8 C4 e2 B7 R u1 x! s
6 Y' U5 L9 R+ r/ R. A0 C3 J& v- I0 R& T
// Select objects using filter defined by maskArray triples
* c& t6 m+ t" P' J1 B; K Selection::Response res = selmgr->SelectTaggedObject(3 v( ^6 ^; M* u6 Z) E
message, title, scope, action, include_features,& h5 T6 y/ U$ B: L8 p+ I
keep_highlighted, maskArray, &object, &cursor );. j+ z) U! h* v8 I4 S
! ? `3 o8 P; `( w- F6 H+ F
^" k2 o6 m. e: [" D" A if( res == Selection::ResponseObjectSelected )4 k' c! S0 P' [9 Q/ x- U: ^
{
4 H: ^- o2 N9 i! l2 B. o, v" T return object;: `3 Z# z: N. e2 J0 E
}
& @9 R8 L' ]5 W% m6 I return 0;
: y* x) M# l' v4 h! J}
a' k7 D" v! ?( [2 j, e' z, P6 \
6 W; c m {' e' y
" |) P4 P7 r# w//------------------------------------------------------------------------------' t" ^9 ?5 N; E! z a* |: e
// Selection with type array
7 p2 e1 R! G8 t, I* F! U//------------------------------------------------------------------------------- b ]; a0 W% a
TaggedObject* MyClass::select_by_type()9 w- q) S/ g% K' C4 [
{& h' P0 p6 Y) P+ Q6 i
NXString message("Select an object by type:");2 f2 ]5 O5 n. G9 i" P1 h
NXString title("Select object");: h0 X" E- Z2 f) D
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;# r0 g! X3 D1 ]) f6 D8 d
bool keep_highlighted = 0;, i) U/ j. e& w3 R" ~ h
# H- P1 k, |) H; P5 J7 R9 x; w, b. i" z% @5 y8 d0 _
// Define type array, see Selection::SelectionType Enumeration
6 l2 `4 s9 A2 h% C/ j c, v3 |: L // Uncomment or combine the desired types- @# @) O9 a$ o
std::vector<Selection::SelectionType> typeArray(1);! b9 \5 r8 Y8 o4 T$ `4 c# e; }
typeArray[0] = Selection::SelectionTypeAll;
0 g: i. Y; ~" y. E; n5 c /*2 N6 c0 @- O- w/ ^- _( N/ C- K
typeArray[0] = Selection::SelectionTypeFeatures;5 g* I/ G/ p# D
typeArray[0] = Selection::SelectionTypeCurves;
) I" t4 L+ X8 r7 \ typeArray[0] = Selection::SelectionTypeFaces;
; A% h$ Q& o: O1 P& y$ m typeArray[0] = Selection::SelectionTypeEdges;
. o9 t* D. ^9 i% A6 ]- |3 \ typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
+ a6 u1 i" [! _! E/ i */
3 p/ ]0 O+ B Z8 I Point3d cursor;
) y& j% ?) B$ `9 e, ` TaggedObject *object;" j. H1 T& J1 u6 x2 F+ p
7 y8 O* X6 A( O0 O% [# K( i5 _. o
// Select objects using filter defined by type array
, j1 s4 H5 {0 Y& v Selection::Response res = selmgr->SelectTaggedObject(
# H; X/ P9 u- \. d! ~* G" e6 [ message, title, scope, keep_highlighted, , y/ C5 P. C& {0 ]
typeArray, &object, &cursor );
1 r8 ]0 b% L5 L$ `1 m/ g: O7 T+ Y8 ]/ ]" Z f
( ~ f! x J5 G5 p& `. _4 `; X
if( res == Selection::ResponseObjectSelected )
' Y1 U: A3 n7 U$ S; \ {# m0 b4 @9 B d2 s. ~
return object;. |4 ^ J9 N0 a
}
6 P( W. K6 B: {, p/ Q return 0;+ l/ ? ~; v5 @$ u* Q) R/ T4 Y
}/ {# N3 M+ x: @: g7 H; Z8 E3 _0 B
v6 b/ E' T% J ^" C* m1 g' h0 p) J. z/ {1 f: A
//------------------------------------------------------------------------------0 D9 M! p: D- N
// Selection any objects
; ?# B3 y7 B- e# r6 f//------------------------------------------------------------------------------
6 ^" V+ b" I- M0 Y4 g+ l; _- Gstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects(), v* ]3 v3 N' g9 v; i5 k
{+ C3 X% g; C1 H u, i0 M
NXString message("Select any objects:");$ |) D; Z4 m* C7 h9 W& }9 w$ M# y
NXString title("Select objects");
1 r6 G9 ]: E; S; L: t/ N Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 @0 y. s8 `) M
bool include_features = 0; / l2 m, K, H8 }/ |
bool keep_highlighted = 0;' G/ ]7 C/ u2 q
std::vector< NXOpen::TaggedObject * > objectArray;
) b o- x/ z( `# o! M
! _! \' P. A2 x3 X7 |& Q7 w3 {1 |. w$ d0 r9 Q) P+ z4 `
// Select any object array
+ y& m7 w" j- i- K Selection::Response res = selmgr->SelectTaggedObjects( a }; e* l9 V% e) t/ m/ D7 U
message, title, scope, include_features,
8 y/ L" X$ N% M: r- J" C% k% _ keep_highlighted, objectArray );5 m0 B$ Z/ s/ j; r) e) c
7 C+ T2 r0 x) n" j
* `- Z/ c% L( c return objectArray;
/ v5 W1 W2 T; H! W7 C( k1 J}
9 i6 y& j0 P: O. N, E
4 y0 O$ @- Q! A& b
- {5 E( B/ N2 f7 @( v1 g) \- N/ H c$ ~" o# Z' Z2 F
- S1 J1 y: h o7 m
$ ~& W3 G8 h ?3 j* @* ?( {1 M* \/ b- }, D) h6 P; p# M
( ?' _" P3 N" b# R& [/ m |
|