|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX二次开发中选择对象mask triple的详细讲解
: D8 e# M, ?" z# S4 [/ m很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
5 I* v. j( Z6 i7 T0 W5 A$ J3 O+ q如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
$ `6 ^4 n1 x" o0 ]( Q H) e! t* U一些常见的类型和子类型如下:
* J/ f! T+ Q$ v) Z. A( N+ \
. o( j9 s: n. X, Z如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
M$ l; E e% q( S& h9 N# _: V' o% H" M实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。6 S; f. f! l; I+ }/ x( j( N
) p# e- i6 L5 N8 T# `' ?3 H
7 K2 Q* H% M; X- ]
" Q" g5 z0 B" r0 \# n- E
4 G. W# N% q: \4 o/ m1 D+ m
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
1 ~" g- F9 }" P! G% m( N& a2 k
8 H* J! k. D5 J5 A! v" Z8 Z) D* z {1 ^! D3 d0 q. o
( I# p% Z; a8 R) b+ o! H$ M! V5 K3 l
$ \# Y. c+ ^/ ]6 k9 z对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
$ L6 S2 Z7 a# \* o1 U4 g( u8 h% d/ X7 E
$ L( @0 N9 j% o' r8 ?
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
; j' f$ x1 _. E4 H% C" x
6 s5 M/ A/ J* J: V% R
# X& J0 _# c1 X- }, [AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
5 p. S. A- \2 n
/ t' U1 {: i+ v* t# A' d% y; c( w* G* u. `
AddFilter (int type, int subType, int solidBodyType);
! ]4 a5 i* d; ^, b" M
6 b" X3 b- ~/ x3 c4 `
3 Z8 q$ R4 O% ]) v5 U) G+ s4 w* D y" _对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:: T, c+ w& \1 c% D% J- N4 N
5 J+ \% }6 Z5 Z
@ B/ N. G# b) i5 T( v7 m% s6 ?- M% F5 w# f, v! Q
//------------------------------------------------------------------------------
8 ~( f" P3 K. ?0 }// Selection with mask
3 l' {4 s: G# q: b: F3 n: _//------------------------------------------------------------------------------+ m; p' F4 q2 L& n2 k
TaggedObject* MyClass::select_by_mask()
$ O% |; k# g4 L{/ J* f+ ~+ ^! I& a# z M$ i+ f
NXString message("Select an object by mask:");: V; p+ p1 Y P$ N6 k: ] A
NXString title("Select object");; c n/ ]/ @0 b' L* C9 |8 u' l
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 W/ H( P, l3 o9 a7 E' J$ _
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
9 p( l; {. C" D- O4 w; y1 c6 Y( B% \ bool include_features = 0;
% t8 `7 j: S4 r1 G9 c0 u bool keep_highlighted = 0;& b6 Q2 k* b) B) L* n( ]2 N
3 F3 X% B, U# b9 w& ^0 B E4 w, g" g4 U, F
// Define the mask triple(s), see also uf_object_types.h.
+ g+ W. s* T/ t r% e/ x // Uncomment or combine the desired mask triples+ R+ n% A0 R% f6 \* w, a* A% K
std::vector<Selection::MaskTriple> maskArray(1);
" A+ \/ H1 C( f1 T: `2 ]; c. W) B maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
0 _, B0 j( C( G6 A% M7 d# \ /*; n: \' W' e& X( n0 G4 q
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces% x1 ?4 a3 J! J! {
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
/ A& e" Z- Z n3 r- ~" E. U8 G maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
7 _1 N4 Q2 w' }, p) ] maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines. } H6 Q6 ~7 _* A
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects. e; B" e( T$ q5 D
*/
3 x g+ Q; [5 O. w" u7 e& n Point3d cursor;
( E- R+ |- Z& }0 a) U8 E TaggedObject *object;
) H( X4 x& w; J- F) e, Y
8 w7 q" f4 @/ [, ?2 m2 f5 C! f& z5 d
// Select objects using filter defined by maskArray triples( W) N" F. d( v
Selection::Response res = selmgr->SelectTaggedObject(
6 {9 ^7 Q' V0 L5 @$ R( } }9 P1 B1 d. i message, title, scope, action, include_features,
& x5 f6 q" t, B3 @( l keep_highlighted, maskArray, &object, &cursor );
1 r0 \* a7 {0 e7 ~ W$ W) Y
. m8 ] _ G) A0 {6 V+ g; ]
; k. ]* V3 J5 W& U if( res == Selection::ResponseObjectSelected )
0 X, E+ c2 N* \! K( ^ {9 E( o+ m# x3 l+ e
return object;
* A& R" h: R, o }+ w r) }! s/ U5 {
return 0;3 T% q+ [# I! y$ s: \
}
3 k- F1 O) L& ?, W6 D" P9 D) e+ c3 a2 i7 @5 R4 ^. e+ x
& o% d) ?2 K' ?0 D, o5 {//------------------------------------------------------------------------------
0 V. `+ M0 R; K" E) d; U- c$ B, V// Selection with type array6 f0 z3 I* y ?: z; }7 c
//------------------------------------------------------------------------------) Z6 \8 z; H& F3 e
TaggedObject* MyClass::select_by_type(): g* T& d M. V, T$ D1 o. x
{/ k7 e! ~0 B$ Z* u% l+ Q
NXString message("Select an object by type:");
) }0 |! d! h7 k' M$ N NXString title("Select object");1 P! @( T) B- V; s( E* n2 ~2 z
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
( W9 { U( D4 c! J$ p/ G bool keep_highlighted = 0;( D% `2 u! j- i6 ^3 X& @
5 u. }4 s- I; t: L0 C/ S
% z& u0 _6 P) z: S, U // Define type array, see Selection::SelectionType Enumeration! ~5 [3 V8 \4 z+ R( n0 m
// Uncomment or combine the desired types
2 t8 k, y. L! N8 K3 y std::vector<Selection::SelectionType> typeArray(1);
x1 R. h. X4 w; @ V( C# r typeArray[0] = Selection::SelectionTypeAll;! O' F; e' @4 F4 e+ R5 k
/*
) s& @% h% n- K% p typeArray[0] = Selection::SelectionTypeFeatures;
' k9 p6 C ~9 k* `1 K( c typeArray[0] = Selection::SelectionTypeCurves;$ ], ^8 G% U3 \0 u/ T
typeArray[0] = Selection::SelectionTypeFaces;
( {2 K! E" \7 B' c' c3 o! f- q typeArray[0] = Selection::SelectionTypeEdges;
$ y' z3 W0 J. [8 \ z2 u% T typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
& }9 N% j3 x9 Y* ^% I- g- ~ */6 ?2 z4 B. s; ^1 O
Point3d cursor;
& s7 ?. K2 k6 B6 Y8 Y4 m0 B; ?$ U1 D3 | TaggedObject *object;6 g& t% c- V8 o* j! {
% G6 f- H4 D/ F
- e, H0 e- S. ~8 B' A$ B" ? // Select objects using filter defined by type array
- E/ c6 v, X) y1 K& }0 n8 K2 A Selection::Response res = selmgr->SelectTaggedObject(
9 E- h" \. a2 `/ i8 d( g, p, R message, title, scope, keep_highlighted, . F2 u. [3 T' X3 N/ C* ?' U0 b$ O
typeArray, &object, &cursor );: g2 K. ]; K4 W4 y0 E3 R j
) N7 w. d# |( R2 O1 H2 k- x8 f. j0 u$ x8 m6 G7 \! c6 W
if( res == Selection::ResponseObjectSelected )
$ z8 W9 a. w* K! G$ k {' Z# V& t9 C1 z3 }/ O- Q
return object;
8 L: \* q. |& J* g }
6 a5 U) d c" Q q2 M5 c1 b return 0;
; Z/ `/ J1 D0 }9 q}
$ X) y1 s2 z, E5 q" ?! R3 Y9 E
+ _; t/ U4 i& d+ F7 A1 X3 e7 N Z4 _5 |* [+ y
//------------------------------------------------------------------------------% a# e* l* e/ Z8 `
// Selection any objects. x( p W5 b6 I i$ H
//------------------------------------------------------------------------------
8 @# q% W I- p" d' \' `std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()3 V2 {7 `5 j! [/ p# W/ ]
{( ^5 L" |6 L& r
NXString message("Select any objects:");
! N9 Z2 i' M( F NXString title("Select objects");7 S' K/ A+ A' J" j6 Z% W* e
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;; r& p" ^6 x5 O0 X) f; P9 h4 c
bool include_features = 0; 4 S# k6 g+ p$ v3 x. V, F! T
bool keep_highlighted = 0;% q$ M+ I' D, Q- M4 E/ W
std::vector< NXOpen::TaggedObject * > objectArray;
( d4 `& x5 M7 L l% `3 B: S3 Z6 X8 O
: d7 B9 d! q4 u4 a+ g( n
// Select any object array
/ y2 v% z+ c: k! }; S/ L5 {3 n Selection::Response res = selmgr->SelectTaggedObjects(3 D* H2 U, [* }6 M, K
message, title, scope, include_features,
" f) G. D E: I& Z9 @ keep_highlighted, objectArray );
# ~2 m: `" l- i! k9 _; w0 T0 h1 {& G/ P1 }* ?
. R6 P6 a7 }* o
return objectArray;
8 e% i' U; T; `7 ?: N# }}
* _' J" T w. l( o; [# Q" ]/ ]+ u4 k" E: K' v
8 Q. B6 H# Z. T" \
/ D, ~9 r) u" T" G) A: x
5 {2 i$ |! l* G$ w" Z. U. i3 f' I: Z6 |, @. U2 h
( S% Y7 S% t$ D5 |
- L5 F" F5 ^8 o4 y, `; S |
|