|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX二次开发中选择对象mask triple的详细讲解
, F8 h0 P2 T! _4 U q很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
" x& V. }" l# ?2 E" ]' @1 X如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。5 b9 ^/ ]5 }- M! C( B! K
一些常见的类型和子类型如下:2 W' P2 U0 j! P. g' T
$ I' `8 U, Y2 M1 G- v
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
. F0 n6 w7 w1 D# w2 Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
- p+ D' B. A, w0 V8 s# w [! j0 y) P
+ u; x0 [; L1 M$ [6 ?- Q" }2 [' c+ a$ F7 ?
7 X) e0 ?# A4 q7 x* y
0 }2 X1 |6 B4 p( t! U选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
" j+ ^$ b o$ Z+ d' K
3 R/ V% _1 S# W- o; V2 g- n7 @3 t& A% o6 c2 a
7 e- f- x# `* j0 z: p* v3 f! I2 y0 L, X( [* r7 }& a5 m
( \, P8 E( _; q* W/ K对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
* y$ y N" n* N4 I
: H1 {; c* H' O7 J a+ X
$ @# b7 ^' V9 S: v/ y: o/ ~9 kSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
0 S- J8 W6 U. ~! a7 Z$ {+ Q0 l: C* w7 q/ Z
, f6 K) U+ j( g) r
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);- P" J9 }* \! m" U: o
6 s1 j1 k, H. {, w/ j4 L4 M2 J; T& e+ c% ?0 ?( F
AddFilter (int type, int subType, int solidBodyType);
" M& v9 V7 S% Y) U5 T
/ L4 S8 D$ ~2 M8 V! V3 ?- f! {$ U2 j5 h% P5 V2 h
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下: x" \' m/ x2 y" c& x
3 r! G* a9 F7 q: M7 j% d' N4 {! j5 C
( C' D8 l' D, f7 v, u( {* F5 i5 {) q0 @+ R
//------------------------------------------------------------------------------" w8 S+ |- z+ O# Z: E- e
// Selection with mask
( h% ?$ o9 k3 P: P//------------------------------------------------------------------------------; M. W$ K5 I0 s7 {* {
TaggedObject* MyClass::select_by_mask()
; f9 i6 U% O+ }( J! x8 N- ^{5 K& Z7 E/ V9 w4 w; ]6 q3 d
NXString message("Select an object by mask:");
& h. o& A% z4 S x NXString title("Select object");
3 W2 `! Y6 Z/ ^2 s% a Q- { Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
: G( V) W* c5 ~' D+ _! S# i Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
6 F. K8 n. ~( v2 u bool include_features = 0;
8 Y, T5 x) z/ ^5 L bool keep_highlighted = 0;- J8 \* k) |( V" o" p7 G1 U
9 b1 [ V8 { ] B7 D8 q- @/ O( a" M" N- Z4 q
// Define the mask triple(s), see also uf_object_types.h.( l. p9 Z1 i+ Y z! q' F
// Uncomment or combine the desired mask triples
; m4 d3 ~6 b$ H, w7 w std::vector<Selection::MaskTriple> maskArray(1);: F5 Y' y2 F& ^0 G8 Y5 X- S
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies" H0 U7 x. f' W" V) u) |0 R
/*: Z* |8 s S9 B$ y5 a$ p
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
: L* t* }; j7 Z& T8 I maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
" s# w. _9 ~. z8 i5 q maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
, `% d5 `! T9 F* w) i$ y maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines7 J3 }* Z( d8 e: y- \; j
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
8 @8 Y/ e B1 S0 A9 h( H: {9 R */ w, F7 f" ^5 f; B3 R- o6 x
Point3d cursor;
# f5 u3 T; `6 p8 B7 U TaggedObject *object;
- j0 X* j6 E- c9 X) _$ C2 Q* h
+ g% Q5 R" C5 K# O5 s* |) Y% G1 I' p7 S$ l5 U; O3 g' G
// Select objects using filter defined by maskArray triples9 o% ?/ X, q6 \5 h1 K. m
Selection::Response res = selmgr->SelectTaggedObject(8 w- v/ S+ O: r; S# _) f8 E
message, title, scope, action, include_features,' [5 W) t$ V1 I! Z9 i
keep_highlighted, maskArray, &object, &cursor );
8 ]! d$ P6 \$ `
2 `. k3 i* @- g/ D. C h4 H3 m/ N1 k8 m* O1 Y# Z3 M
if( res == Selection::ResponseObjectSelected )' A3 u0 ~3 P7 d+ Z( L
{9 M7 B) s9 I2 N9 s; m
return object;
k( W; t/ x. v; v }
! A, G0 ?9 i' p5 F9 |1 P l return 0;
: k- s5 Q3 w0 {4 H}+ h& \) S" x' v
. a+ J" e9 J% W u
+ t# ^, O4 N& C. Y7 i9 V
//------------------------------------------------------------------------------
. G. G+ P& _1 H k// Selection with type array9 ~& M% o9 }# t, G# _, Y8 O+ R$ t S
//------------------------------------------------------------------------------
# j9 i$ e B% A$ NTaggedObject* MyClass::select_by_type()& z; U) b, ?8 t" e' Q
{
3 n j* ^: o1 t4 ^ NXString message("Select an object by type:");
* B1 P, e6 r1 X0 G: K6 ?- [ NXString title("Select object");& f8 H( h! B# b- Y0 z& _
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;: p3 Z6 U' R. l
bool keep_highlighted = 0;" E" v$ S4 c$ ?" H) ~! s# d. X% E
. W/ `6 B& }/ E f3 ^% ?: V
, M, i9 ]/ v( @9 w
// Define type array, see Selection::SelectionType Enumeration
1 ?( t$ d$ f: A6 S, r% ~ // Uncomment or combine the desired types5 d3 ^7 j+ G/ ~
std::vector<Selection::SelectionType> typeArray(1);; G% }5 |& ]( g# A$ i$ w' I
typeArray[0] = Selection::SelectionTypeAll;
; @% h9 z) q/ E% m /*
5 i( S% t5 x( I typeArray[0] = Selection::SelectionTypeFeatures;( v3 {; }9 d/ T/ S
typeArray[0] = Selection::SelectionTypeCurves;$ K7 v, L2 u. T$ |' V# x
typeArray[0] = Selection::SelectionTypeFaces;- w: U% }, s Z+ O# X c
typeArray[0] = Selection::SelectionTypeEdges;
) _. j9 Q" s. S% e( X( O' p typeArray[0] = Selection::SelectionTypeCurvesAndEdges;9 Y; k" [* `0 J- h
*/
! [% m# e) j; @3 q6 O7 V5 x Point3d cursor;' u1 F5 l0 S. ?3 W P* }
TaggedObject *object;, e9 t; d9 e- u! W
' v# l7 w, K9 y+ E. z) F# A& Z# ]: a9 W# p1 u
// Select objects using filter defined by type array
- L0 P- N* P# E6 a" Q Selection::Response res = selmgr->SelectTaggedObject(; s! K. W. U. _9 z2 K, R4 A2 T1 V6 K' H% G
message, title, scope, keep_highlighted, . e/ d4 f( B$ M$ `, G4 |3 w7 c+ a
typeArray, &object, &cursor );6 H Q+ u( b$ }" O
A) z, ^" D+ O" S _; K5 `5 G! x( f' [, Z+ v: b- W9 r! H
if( res == Selection::ResponseObjectSelected )6 G$ ~/ L% a, r8 t: W+ }
{
) m. c2 \2 _7 H( L return object;
$ C7 b- h s9 f. ^. m }
+ A$ i! A1 ]3 r/ f return 0;4 i% a' ?; G) w7 T4 N
}
# E( `" F1 }( e, s. a* _; X" K6 ?
. L% n' ]7 f; n
. D9 s0 M2 ?1 Z: e( I//------------------------------------------------------------------------------
P6 F, n$ Y: C# S. t' u, g6 V) p// Selection any objects
+ X6 X; E6 C7 ^4 z//------------------------------------------------------------------------------0 i/ s& L3 m/ P# C. W
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
9 Q4 g$ v3 N2 l- [: M9 Q{
" ^ [" ]. H W NXString message("Select any objects:");
; B$ a' s+ h4 h/ ~. ?$ o NXString title("Select objects");9 }% `# e: B, F; _
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;' [) d* J+ J; ~$ @& o+ h' X1 X% A
bool include_features = 0;
. K* i# R' j8 v( ^- s5 c bool keep_highlighted = 0;
) X* U% |5 E) k9 S% g( y; N* G std::vector< NXOpen::TaggedObject * > objectArray;* {* M" q0 J3 N t* [
8 `) N5 B. f$ o8 H! K) v6 ~) B8 q& s
// Select any object array' _/ ^4 C0 t+ d$ T5 M$ ^7 K
Selection::Response res = selmgr->SelectTaggedObjects(
6 @7 B+ a( ]$ _: I$ J5 D5 |$ t0 e message, title, scope, include_features, 7 {! A) _" {: L$ I+ M: s4 |
keep_highlighted, objectArray );3 J; n% ?2 U8 @, U" |
0 B$ ~7 I7 C, J( G3 R, \5 p" K
return objectArray;
8 F4 e5 A; w8 W h/ X}
+ c* V: w7 J+ M% E9 J( m F% i
/ v2 v* j$ L. a7 K* R1 G. u) |! O- Q; a4 d& O4 O
3 U3 |/ H6 `* z$ a4 x
3 E1 E( L, i9 \5 N( F# \" k8 x2 c, H6 L, O5 h
6 k/ h- }# L1 C' ^7 R
1 q9 ]- E. a$ W* Y! q# x |
|