|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX二次开发中选择对象mask triple的详细讲解7 E0 c5 m# Z% F7 r
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。3 d( F2 \3 V0 ]: ]& \
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
$ U3 s7 Y4 @( X5 Z一些常见的类型和子类型如下:( }: `6 z' G" F
% Y( _- H7 p+ l# d' c8 n' Q) F如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
9 v7 D! O- y/ ^4 A( p9 a" {' d实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 { T7 C% L5 r0 p0 t
- e; Z1 d8 f0 C$ S" }% ]" f$ \
( T' G% S- E9 ~9 j: W' J
3 U( {5 v- d9 {1 M# C4 q$ P- D* X: j4 v! g
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。0 q9 G, U0 ]: ~* M% g- h
$ s6 z3 r7 e2 L
% n9 S$ m4 J# _# j* P4 h+ {
* r4 M7 n$ W9 n' [
# p, g% v$ h2 g) e. g7 a9 ?
# F* g* X& @, g5 r q o' C
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。' h( @$ b0 E+ ~! U( e$ d
; [2 [# W! }; w: s3 h" W) X! l
" ~* \7 e+ h# CSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
/ }$ b- x7 [! L
" n: B) l: j: K% g' p J! a# \
- w5 e/ b, x9 U- o7 c% {AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);+ x1 ?9 U) T9 W; i3 p+ o* T
0 C/ t2 x5 A# \
, E3 m2 |7 u6 K3 l3 W b" {AddFilter (int type, int subType, int solidBodyType);2 e3 e2 R; P. S& g0 _
8 M$ U# [ _7 |7 V
% d5 {& c& {) e" ~4 m2 z
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:& Z. f3 Y1 g$ M2 ^
- K! h* |% v' j" S4 F2 e; x' @" ~3 N9 P- d, q$ n8 J
. p3 P. E- q1 q& C: {" t# z, t//------------------------------------------------------------------------------
& P; b( v& I- T$ h8 I// Selection with mask
) i) a# |% _& w* ^7 K: A( x//------------------------------------------------------------------------------6 d5 U% \: J5 K, a6 T1 C9 j4 L3 t
TaggedObject* MyClass::select_by_mask()
0 k, y$ y2 D. ]1 D) q, x{* b8 P" @7 B+ q; I% D; ~4 {! \
NXString message("Select an object by mask:");
) T8 `9 [; G" f( S NXString title("Select object");7 ], h ]! v. o {& I6 I, b
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;, g4 y- T8 z5 P- M6 E9 Z" n4 w3 U
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;- ?+ V( B1 A, `& l) L& k) K# y0 ]
bool include_features = 0;
8 m' F. d* z" W% p- C. n bool keep_highlighted = 0;
9 N7 H8 t. j D& y- O) z
@' h. Y" C- b# Q* |' j
( f! x, x. s; K+ i( w! U \ // Define the mask triple(s), see also uf_object_types.h.
( M& p3 N( n/ ^2 a. v- j% A // Uncomment or combine the desired mask triples- |" ]: G) e K( i3 e1 \8 k
std::vector<Selection::MaskTriple> maskArray(1);$ X* q- t. m m$ r' R
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
) j. U- x. ~" x3 F: I/ O8 ]. k" _ /*
$ b( _- ^) f; y* O% A maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces! D4 ^& Y8 m# \
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges1 F' x; r# j z: r, }
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
# O4 W) g5 @7 i maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
! E: s6 Y7 z+ }# W) e maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects* p0 M6 B1 z4 g
*/
% m) o7 b. K( U$ P- j- M) y2 c Point3d cursor;) p) q2 } H$ Q; X/ C5 z, A
TaggedObject *object;. B, \2 c* C/ T4 Z% o# g. Q& O
& V# H( g+ A- H: \* ?. f
; X# |/ q& A7 _ // Select objects using filter defined by maskArray triples& F. f2 i. |* I) M
Selection::Response res = selmgr->SelectTaggedObject(
4 K' P1 G$ l; a/ g message, title, scope, action, include_features,
$ Q8 n! X; F6 `" l1 y* v keep_highlighted, maskArray, &object, &cursor );
* r: S, S9 _( ?5 R3 X: n
! b) M' E& M7 }, c1 o1 v. R. E3 q9 b, E5 A: V8 H9 ?
if( res == Selection::ResponseObjectSelected )$ W- a( ~6 r. P/ v
{
& E: r# m- O. E% U0 j" X$ l return object;6 N/ }" {+ Z9 o* O
}% e& [% F& j2 ]
return 0;
L* H; ]6 v" V+ m* @/ R}( g( c" U+ M* _6 H3 B
: l* i2 G- a8 _
6 p% D7 g/ y) J% W% z. a//------------------------------------------------------------------------------
* U( b( n6 b; _+ D( H$ @// Selection with type array
; G% ^ E! {# x2 `6 c//------------------------------------------------------------------------------
* I) p4 \, t# S- u" O `TaggedObject* MyClass::select_by_type()* T% P' O, a4 w0 A0 C
{
* a% V6 f7 E. | NXString message("Select an object by type:");3 e+ e5 |$ y% @
NXString title("Select object");
9 o; r" t. {% H; ] Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
u7 K: }' y9 }3 l9 b, c bool keep_highlighted = 0;0 o* ]& f' Z& d8 y7 \1 z9 f
; O$ u6 ~1 ^7 H; I: g+ I6 P7 ]( ^0 }2 K c5 r
// Define type array, see Selection::SelectionType Enumeration( @; H8 b' ^* l& Y; q: {2 p+ H- c
// Uncomment or combine the desired types0 p1 R) s! Y( o: a! v
std::vector<Selection::SelectionType> typeArray(1);
. ?( [4 B9 g) l3 z/ `& o* n2 o typeArray[0] = Selection::SelectionTypeAll;
) {4 p" e. _( I1 M6 K /*
4 d7 I+ t- C1 m+ ] typeArray[0] = Selection::SelectionTypeFeatures;
" r. c$ L N' R( c" Y& r2 e typeArray[0] = Selection::SelectionTypeCurves;1 J5 o+ P. R, _
typeArray[0] = Selection::SelectionTypeFaces;3 s! n8 q& Z" z3 w `9 C
typeArray[0] = Selection::SelectionTypeEdges;
& t! l" L5 f- ]) f# H. z$ [, W7 o typeArray[0] = Selection::SelectionTypeCurvesAndEdges;4 v, R! |0 L5 N6 c( W
*/4 \* {- G3 ?$ e4 e. y1 Y) J) q
Point3d cursor;
0 s; B d0 X$ b9 H: z TaggedObject *object;8 q9 |1 w0 b& I9 E" d7 R
6 L; e+ U+ A& Z; X4 U
9 v. v+ x0 f; Q! l1 w! w* m; `+ z1 G // Select objects using filter defined by type array
2 k# g9 \- e2 P- s5 o- w! w9 a Selection::Response res = selmgr->SelectTaggedObject(
: L+ z3 H+ h2 ~) G/ H message, title, scope, keep_highlighted,
) W- K1 J! C! M/ ]/ m typeArray, &object, &cursor );
2 `& s, s" \6 X# e% C7 Q7 v4 Q$ e4 i2 N9 m6 o
- }2 _- K( m8 L3 G4 i% { if( res == Selection::ResponseObjectSelected )! {+ s' {- h4 H d& l7 }
{
" F3 [2 }, V$ H; l- n7 g return object;
" ~- R- b) y7 s; }! E% K. A: x }" @' i; C* W) I; ^/ \8 v F
return 0;5 K, L7 X! |/ k: e5 A+ Q* t
}
/ j/ q* B% N# H3 n' M" h) {
5 Y9 A- w% z3 U4 q
, C2 M, | K3 P+ Y//------------------------------------------------------------------------------. @$ n8 v4 Y1 r3 [6 d5 g+ o) X
// Selection any objects6 n5 R3 [' `) d
//------------------------------------------------------------------------------
7 y- C) K, A7 pstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
9 f8 b- K8 O K f( m0 G{4 H9 P1 @4 q# \; [
NXString message("Select any objects:");
" C1 d$ h9 q1 o. Q6 P6 W NXString title("Select objects");
! J$ c' I y8 n% U/ c Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;/ H& j% T7 Q0 H) M" J6 X' w
bool include_features = 0;
0 h9 O+ t' ~ o% m) _ bool keep_highlighted = 0;% A& k4 U# f4 k$ t
std::vector< NXOpen::TaggedObject * > objectArray;/ d1 o2 u( |: g4 J
0 o: g" |7 \8 d' Q0 F A( P% [) @! \
: P' Y+ {2 e6 e1 a, b$ T // Select any object array
/ L8 Q* Z% C; Z. T Selection::Response res = selmgr->SelectTaggedObjects(
( N: v2 C; t9 M message, title, scope, include_features,
* y& Q2 l4 F' \- A" D keep_highlighted, objectArray );
4 ?) `, n. ], T( f2 W& C- ]) B! |
1 i0 f8 I: m- n3 r7 b: s; g* |6 v6 \& V- E+ y
return objectArray;" H1 T% q! L3 M8 E; p
}% c5 ^$ q8 K3 D4 E B+ j6 B
7 ^6 i. B0 @$ X( }* m$ A7 E
+ d! G3 Z5 u2 M) S q
4 [' d: y1 W, v. `0 S+ b7 ?! p: h+ x% f6 l2 d; R0 g0 E+ A8 O* ], Q
5 |& m" e8 @8 i z8 J" n9 ~* P2 [8 ~5 f+ ?7 v* u+ g3 Z6 h* h2 Y
) i' @" q$ \8 N: y% N# m |
|