|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
' D! r( ~2 C2 U: C很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
- [3 g* V. X# X$ ~4 `. ]如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。9 [1 k; a9 }% Q ~
一些常见的类型和子类型如下:
5 j8 n6 H, s; V* a( I, _& ]
4 ?* F8 w, Q/ X& {8 Q' X- M% w
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
( ^# l1 I% S9 a; @: O6 w实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
2 {8 {; P( _9 N( d! d$ A/ b4 H8 l5 d" C, T- p
" w% u0 U, ]5 X4 L# C
6 u' B! j% S4 O: s1 C
! R9 l3 y( \. k, X选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。' j+ f- H5 b3 N$ w& J" P
3 r9 f# V' F# n. x( z! ?5 Y
8 ~3 U9 @+ J O8 c) N$ {! k
4 q n5 B( L( a4 Q; b0 K; _
" r* A" ]3 m( c
: _% i; I* p* ]5 {6 b对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' D5 P) ]. h2 |# t2 e/ X
. A4 D8 L2 _6 {) a7 N
0 v. C- R6 U: t* [1 E$ TSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);0 T* X- Z2 l2 g6 ~; U+ G
$ g1 W) j2 ~5 {2 W& ^7 W4 |, D/ X! e* y2 q' p) h- G
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
$ J9 U, [2 j5 S+ b4 T4 o* C: S( K; _+ T
# Z& o, h- C: `. l& C9 Z$ ]. G
AddFilter (int type, int subType, int solidBodyType);
4 e( p9 M- O# C' g1 E4 }8 X
. p% l4 a# U6 c, D3 }( M+ h% Z! c& A; b) ~& {) |3 V
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下: X. K6 R: p" J) c6 z7 ~
" D d/ A. G$ A& o
) [2 f8 Z4 ]" m8 T* z P5 D5 @0 f0 w$ H/ N6 D/ h% Z/ b/ i
//------------------------------------------------------------------------------& v% |+ x1 b9 k1 Z$ w
// Selection with mask
4 b+ L; I1 i( d$ ?# ]2 p+ u( [8 k2 k//------------------------------------------------------------------------------
- a! [2 q" K" R3 FTaggedObject* MyClass::select_by_mask()% c7 x1 U* A# e& O) d! [; m
{0 j) Z$ @% l8 \3 d$ }: @) [
NXString message("Select an object by mask:"); Q8 Q' k8 S9 J" _: V7 r# p5 C
NXString title("Select object");( U& t1 g& h) U
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;! l% n! B6 t2 ?3 q( J: Z
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
6 x. ?: a! W* o8 s3 ? bool include_features = 0;
7 B: ?' ]6 H$ m: y2 A bool keep_highlighted = 0;% z+ n, `1 N& c! C& [3 I
, q9 w% v7 ?! L! d; W( k+ p/ ^. O" [% M/ f9 F f6 n3 z
// Define the mask triple(s), see also uf_object_types.h.
/ k/ `" `* ?5 e/ w // Uncomment or combine the desired mask triples3 D2 y' N8 Y/ Q) Y% V
std::vector<Selection::MaskTriple> maskArray(1);
9 C2 B+ Q# t1 [0 A% j { maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies/ f' e: ~& h& \# X
/*
, {7 H: }9 }' D# \, q4 ?6 G9 T1 T! l maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces( j9 `! ]" g! W
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
% V, W: s% _4 p& P maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components: L! y$ B( z0 C& @
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
1 M. }, @$ K" I maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
9 E* l0 V3 B1 I9 j& y2 X *// `1 m2 r5 C4 @5 |, w1 J( t
Point3d cursor;/ ] M: h" S& L% F$ f, P
TaggedObject *object;3 ?, W9 P, g6 f" h" \7 Z: l2 K
0 y$ f! Y O! P( p0 H5 G! h
( Q+ q' c# h: f* u1 g
// Select objects using filter defined by maskArray triples2 o4 B6 s/ \6 f6 n( T9 V
Selection::Response res = selmgr->SelectTaggedObject(# ^9 w( o3 E2 V* ]# U ^
message, title, scope, action, include_features,+ R( V- ~, K6 z$ c9 ^6 a
keep_highlighted, maskArray, &object, &cursor );
^3 |: D T7 v
A+ [6 o* u% _0 x: m. X2 z0 C
) X. a8 e( D! o: O8 p0 l( J9 \ if( res == Selection::ResponseObjectSelected )
3 A7 a# P0 m* `* G& z5 ]3 x {
+ B+ ^: z& S' f* S return object;
" U3 i% u5 |# i0 z" t }
/ V, `, }1 s4 g4 @ T return 0;
) l$ X( D9 e' _3 z y}7 {: z7 X" z* W; q4 |6 L* N3 _
5 l( x6 [! ?# |
9 p1 U7 F" ^( m' _" t//------------------------------------------------------------------------------
0 c3 g" B4 Y" J/ O9 G- s1 k( j// Selection with type array W" P& T, p: W" J& ^; P( v
//------------------------------------------------------------------------------4 q% S; {$ t0 v' h. c1 p% t) J
TaggedObject* MyClass::select_by_type()
$ u; W+ W1 E& C% B8 K3 N# s- v{
, i4 W, o7 f- _. t% p/ y1 c NXString message("Select an object by type:");' u5 N$ {; U! X5 P% }
NXString title("Select object");
5 `, l1 b3 a8 s) E { Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
8 g! F4 S E8 B1 c bool keep_highlighted = 0;
& {$ M2 X+ H/ w/ G, r+ ?
! d/ L, M9 h6 D
1 o5 ?* Z# w+ J* b9 I/ i0 z! s // Define type array, see Selection::SelectionType Enumeration& M/ ?& D5 G) D% ~/ R! G9 E- m
// Uncomment or combine the desired types2 }; [- T$ i4 o/ r. z1 e" O
std::vector<Selection::SelectionType> typeArray(1);3 l/ n# Z! d- k! c w
typeArray[0] = Selection::SelectionTypeAll;$ l9 c9 N" j5 f5 Y" _/ |+ ?
/*
/ ~9 f- ^( `9 b' r% p4 l, M6 U typeArray[0] = Selection::SelectionTypeFeatures;
0 P9 Q6 o2 Z5 d- ?8 R" P' w typeArray[0] = Selection::SelectionTypeCurves;
( j! c. ?. ]; B5 V6 I/ O typeArray[0] = Selection::SelectionTypeFaces;
9 l+ c+ L9 O6 t) k typeArray[0] = Selection::SelectionTypeEdges;2 [) W5 @' }1 w0 B$ J
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;; }, \( ?" F* y! k7 K+ c
*// I* p2 W7 H3 Q, j
Point3d cursor;: i! t- e( y; l$ C5 | V
TaggedObject *object;
8 n. r( A, L- `. B6 P
1 V7 A0 d$ g4 S W# C6 n; |" n3 @. _3 F' W) ?( V( D ]% b
// Select objects using filter defined by type array# d! S( N5 ? G* s3 h9 J# ^
Selection::Response res = selmgr->SelectTaggedObject(
6 B# z$ ` J$ K( y7 ~ message, title, scope, keep_highlighted,
) U+ H, X* u: W L' P' X typeArray, &object, &cursor );6 C/ S( e* ~' K
3 O1 l& G0 d' y3 A7 ?
6 J8 Z7 c/ X5 A) b6 p if( res == Selection::ResponseObjectSelected )
* ?1 [$ T0 i. y C {3 E) G* \7 ?6 ?& Q) s
return object;
' X' W2 G: M+ `' o }
) ]+ ?* G, j' V5 a- F2 J+ J return 0;
0 m+ Y% F# l: F9 G}, \7 F9 p+ Y- B
! Z9 r; ^+ y) H; M& u N( M
+ H s- y' P. u; u//------------------------------------------------------------------------------
: [ a& K7 `7 B7 t% Z// Selection any objects
+ L5 d* _" V d6 W7 Y0 L//------------------------------------------------------------------------------
# ?" e* Y3 L% F7 _3 ostd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
! ^! j& g. \ \# N% [{! B- F U% r% ~( i p% D
NXString message("Select any objects:");
& X. z5 m+ N: O NXString title("Select objects");3 o- X" E; i3 W: f) @8 r
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
! c2 n7 P2 X! @) N0 S: w. I bool include_features = 0; 9 l9 T$ t0 J& Z* q. j
bool keep_highlighted = 0;
( {. c" r0 j# o" X3 o. [0 w std::vector< NXOpen::TaggedObject * > objectArray;
0 R9 a: q; V# X7 T2 x7 M7 O' v
; P! }' Y" X! k2 ?& c' {! a" m f8 ?' u9 D" H2 x% ?) {, [
// Select any object array0 w% L2 P, @) f, s4 I, k7 p
Selection::Response res = selmgr->SelectTaggedObjects(
# ~+ ]$ C0 q; _: i; I: f3 c$ }% h+ m message, title, scope, include_features,
. N; A) S4 R0 g' O4 E% y8 \ keep_highlighted, objectArray );/ Z, z& r" S; g5 S3 b$ i$ h' S/ a
& T, r1 u3 v& U" C8 W
: R, g/ B. g3 f; C9 N% L/ F return objectArray;
R: ~; } U9 U( J& N$ I* P' k}
' ?) V9 N$ ^$ c; k. i# A4 }" Q6 O0 O$ j# }; i2 b
2 T1 A3 w7 b [, m8 L( C8 }) k
3 a7 y$ f$ d' D/ B, S3 ?$ [
7 |( o; k2 ~( V% B X! R( _
5 x7 l9 F" [/ v: }7 A1 z: i! X H! t2 Z0 M" e% q8 T, l
* d$ Q1 k8 b# P0 A5 X |
|