|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
4 X+ n; o7 q' E# N0 G/ G4 r很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。" F( T) M& r9 a/ w! J1 A
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。. W0 _8 \5 g! I' l( x8 L: Z3 H
一些常见的类型和子类型如下:( L& u f5 g3 z0 s
" v; w4 {& |: y! K& }. P1 Z; h" P
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。6 ?! B! V% i) H
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
! H/ c& e1 ]4 f% o9 A0 ?- \! d. W
8 v' N" ~( B( q ~ c& |
- E0 D6 d" L' k1 K f, y- c1 u+ l5 @4 _
4 A* R. T2 l9 i/ t" ~# a
) S. u4 P9 }: ~选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
, }$ y" q( h3 P \# Z/ u$ V6 z" M# I. A, K$ z
1 I: A, Q/ {- L2 O, v
: A: H/ H' l4 F$ s; d, a
E' b3 ?' w8 i+ v3 i
3 Y2 ]3 ?' B6 } |7 b对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。: F. w! N, S" \6 e
2 K0 [( r s2 A3 @: B j+ k" {4 D6 l1 t9 n$ F* j
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
/ E; F! v4 }# l* K% h4 \3 ^$ O: O3 |, Q9 C$ C8 T
0 W6 d/ A6 U% MAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);5 @7 H3 C1 ~6 Z
, R% e4 P/ l' ? \+ e% @; g8 I
% h7 r+ d$ F, e' W0 i: ]AddFilter (int type, int subType, int solidBodyType);5 X( \! @, d7 X7 B/ O1 s
. m9 j7 E- c( v+ `# q$ q) f2 R+ K4 m+ S1 E6 _; C
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:" [ b( D3 S' G4 F' `* a M: d
: F. c* v. w. L7 }% _) q
6 w) R) Q; L @8 j
$ {; n" \* x# r, [4 \7 R//------------------------------------------------------------------------------
' {4 v& Z1 m I7 T0 j// Selection with mask7 \4 B4 E1 ?* n3 E6 K# _
//------------------------------------------------------------------------------) v- Y: n- N2 t( x: q
TaggedObject* MyClass::select_by_mask()! k2 C; ?. G/ B9 L) d& e
{, f: A; X* c4 G2 @
NXString message("Select an object by mask:");: m( G/ I( ^ O- S
NXString title("Select object");/ r& [+ d+ ~* {- @
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. j- Q! F$ P& S Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
* O: G' c& ?2 _; V; U" h bool include_features = 0; f) _: |) z" w# z/ z
bool keep_highlighted = 0;
1 f3 g2 y; X6 v' l4 b% u
% @8 O! {$ `0 B6 z) i* o4 r7 B4 `1 l1 L# S0 o; ?6 F$ ?& R
// Define the mask triple(s), see also uf_object_types.h.; I6 ? e$ i. o6 l2 V$ ?
// Uncomment or combine the desired mask triples
. n" `8 H$ {4 X std::vector<Selection::MaskTriple> maskArray(1);; m- y' d$ M! @
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
% r1 z& z. Q1 g- B /*: r' X: N" `" e2 y1 M
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
5 X' p! x& D* e2 k maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
2 B' T8 }( v$ h5 d* T maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
2 C. z' _3 H1 i3 S0 @/ D maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
( w) d0 G6 o/ B$ P1 Y+ v maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
; @6 \& n, s3 [% s7 V, _- ^/ y */4 W4 e% y! Z2 e& |
Point3d cursor;
3 F+ \% s v1 T/ X& [! h8 h. } TaggedObject *object;
3 s) O% Z" D1 B. u/ k: z. O' s
1 Z0 _. c; O+ |! M1 c" o/ ?' C0 Z% r. ?( G# X
// Select objects using filter defined by maskArray triples
6 x$ z" |/ c. h! A9 g( ~* I Selection::Response res = selmgr->SelectTaggedObject(( C/ F" S f2 @
message, title, scope, action, include_features,! Q$ N2 m( Y7 C& f; p, j
keep_highlighted, maskArray, &object, &cursor );
+ t, r9 H5 }* @3 t4 P/ e3 |+ H+ ~8 t( T0 ^: n
7 C+ n* G! p2 g3 \6 r5 ` if( res == Selection::ResponseObjectSelected )$ P9 c9 I) N4 @$ Q+ k4 n# d+ B& a
{
3 K" {) v, O7 C( H7 T7 K return object;0 P* s2 a9 W& m6 O
}( {6 n' R' G4 N& p
return 0;
0 v- v8 b8 N6 T1 H$ m}
& d$ w! L, [" t1 H( F' [; k0 q1 r* d! [% I
: }( a! S! k$ o9 P, q |; {//------------------------------------------------------------------------------
6 A' x7 l& V5 N// Selection with type array& ^2 ~: k: U2 d. @& z; C
//------------------------------------------------------------------------------
3 v/ u7 t/ V* w) gTaggedObject* MyClass::select_by_type()
: m6 O) j8 A3 r{
. m H7 C" N' E a8 ^ NXString message("Select an object by type:");
5 K( E" L- R) a4 ~. T/ b NXString title("Select object");
0 {. g8 y) R8 {! d7 r# E Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
: S0 a( X( F U$ V bool keep_highlighted = 0;
+ w0 l7 @9 n8 I8 K8 s6 Y. J \* w
3 \5 v+ A& @: c7 _" S& A! `3 J% |' v) ]- G: p% s: u& f
// Define type array, see Selection::SelectionType Enumeration
, A2 ~. k% V- P0 [/ p8 g% S% b: m" n // Uncomment or combine the desired types
& a `4 R5 J* Y( I" t# ]8 ^" p std::vector<Selection::SelectionType> typeArray(1);
$ t" ?& g& Z% t. l typeArray[0] = Selection::SelectionTypeAll;( m, c0 t/ R! y
/** [7 D. P, V# x: z! O5 c! r
typeArray[0] = Selection::SelectionTypeFeatures;
% u9 S1 b8 l5 ^& c- L& M$ [ typeArray[0] = Selection::SelectionTypeCurves;
/ I. W) S3 k( a' Y4 b( O) P typeArray[0] = Selection::SelectionTypeFaces;
$ [/ c3 `( D6 s, r" F- `2 R typeArray[0] = Selection::SelectionTypeEdges;
6 |5 @1 s; z3 ]+ s9 k( D) t. a- l typeArray[0] = Selection::SelectionTypeCurvesAndEdges;+ O! e9 ~/ r* ^0 O3 F* W# p
*/; u7 K8 n) m5 D% D1 S) l
Point3d cursor;
' ?& v% s; T* Y \* `$ u# y, b TaggedObject *object;
8 s+ _" F# i l
# I* X( z! L# T! A5 y
0 J$ X" R3 ]$ S8 Q // Select objects using filter defined by type array" p4 Z0 j, r) K" U% N
Selection::Response res = selmgr->SelectTaggedObject(" _4 Q' i# q) S# @3 d6 z5 Y& @0 c
message, title, scope, keep_highlighted,
: H! r0 K# t( J% W* h4 g typeArray, &object, &cursor );
8 ~6 R$ U- f0 j: F% Y/ G: k7 P5 F% i# c8 c s# {3 z z
* i. V- P) b; H1 v) v$ n) M. d2 H if( res == Selection::ResponseObjectSelected )
! v; H$ u# L, F" N {* p! G' }: M8 p2 B
return object;
, @- J2 g! \( t+ k7 D4 C$ N8 h$ ~ }+ t( \" Q* d4 U: O: I, r& `; o
return 0;
/ @$ v- e' X; e: d5 F}5 m& O1 r+ |- x( z( |3 H; D" M5 `
! } p' R* \! n" v: r
$ \. N6 Y, m7 I2 l& Z) J- c//------------------------------------------------------------------------------
5 y& h1 ~ p, S% Q. x0 ^* j// Selection any objects8 h! ] k( \& S/ c1 S
//------------------------------------------------------------------------------
( B l; @2 _+ V# V' jstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
, m# }, ?8 @: p# z+ ], Z{, M" q; \* K2 C. W# i7 Y
NXString message("Select any objects:");" @6 K9 `. F% J% g0 T) q
NXString title("Select objects");
4 n2 R6 e( x) y' g Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;* ~2 p. E U& {5 P
bool include_features = 0;
2 ^% \: v, G7 I4 H$ k bool keep_highlighted = 0;
4 a. u& M& r a1 G2 W' K+ C) ?7 s std::vector< NXOpen::TaggedObject * > objectArray;& w! a$ p8 ?1 C' _; _
/ f' X% b" j4 H5 a" L
5 K8 Y4 a$ u8 W# ` // Select any object array7 P9 A( u& K0 r
Selection::Response res = selmgr->SelectTaggedObjects(+ ?3 _8 `+ X% G/ F; m
message, title, scope, include_features,
. m. ^! ~ T3 S6 }' f keep_highlighted, objectArray );. @5 m: E# @5 V
$ X$ D9 Q- E& m7 ?# P2 y% w1 x! y( T5 [. E
return objectArray;* G5 J7 m9 ^1 P& V+ d' s
}
- m7 j' W% h2 g# M8 y" h7 a, t8 z8 m X+ b+ h5 C1 [
2 v! @+ F9 C. x% b8 n! U. n$ t9 `, }- k* u* s W3 v' M
$ l- D; O/ _; `. |8 o3 N* r) w. P
1 m7 t. \$ }# Y5 S7 I0 l
2 j3 E: k4 R& z* R0 {% A& p* G
|
|