|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
9 z' k. N4 s* ~1 P e很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。- w5 r/ H: j6 {
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
% I% y8 @ V; y2 ?3 d+ h _, O一些常见的类型和子类型如下:& f% }4 m! R0 v) m
% o) B4 ^5 D7 h如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。+ g; ?" u( n3 p- ]
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。% X2 d& U+ [2 r8 K) D6 m/ o+ }% T, t
6 j5 l8 J" T, A9 O6 ^8 ^3 W. R
Y6 @; j$ ] D' M* J0 L6 ~/ ^
/ b- Z6 t. R0 w0 t2 X" v
$ D0 j' [/ X( b s
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。0 b4 {' O( N# X- [: ]% d
2 X2 \+ s% Q- I) A1 Y2 _
; U" L3 R* x9 l& w. ]
4 b% N) i4 ]# r
/ r7 M! l1 E& B. e s& j U: X1 [4 t+ z
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
/ n7 _' {1 U4 ^& I U0 A- b
% p& ~( D1 t0 W9 _ H. h2 [
! F/ l1 {0 {" cSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
4 K/ q/ X# _& Y7 f9 }
, |7 T4 p- j$ G( d- u) Q' z+ N1 w
8 H) o, P) \% Y8 I: zAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
* q+ F& j" b$ g% `
6 t& F! \# c D0 X" }7 a2 g+ ]/ R/ o4 z9 H7 @9 F/ G5 h
AddFilter (int type, int subType, int solidBodyType);5 R& I7 {$ C: D9 ]; |. Z# N
3 ~. n+ W/ m3 l7 g8 N' B% v7 w# ~
% T3 t, z3 V) s8 z8 M6 e对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
* s: U( [( Q4 V% I9 n6 e
w) X4 o. } l4 {% o1 p' k- |; E# [! }( O8 k
/ g1 ~$ _# g, V& ^" Z. p: L//------------------------------------------------------------------------------4 w( b9 {- g8 h- a
// Selection with mask
8 m: U6 h1 y' P- \, M/ ^//------------------------------------------------------------------------------
" _ A3 ]: }4 f. _# [8 wTaggedObject* MyClass::select_by_mask()
% N8 l/ n& }- i3 ?- v0 [5 l9 V2 D{! b) C: S C) N! ^
NXString message("Select an object by mask:");
1 l/ R+ C9 ~7 v8 I6 N) c NXString title("Select object");) @0 {( z4 |: G9 v6 V$ e& `
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
4 C9 D% _: K! I" e Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
# _ Y3 S" ]: ]" i3 M' V bool include_features = 0;
# l) [5 s [$ Q bool keep_highlighted = 0;
- |' M0 D2 n1 r ?- V7 S: G$ O. q+ [9 n/ c: j
- O0 L3 U: J6 m0 _4 Z1 I# E // Define the mask triple(s), see also uf_object_types.h.( j/ I U4 C$ X' v# u
// Uncomment or combine the desired mask triples, q* o* t% \+ E7 G" ~2 Z
std::vector<Selection::MaskTriple> maskArray(1);, q4 ~7 [/ u+ ^4 t' n- h
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
* E& |. K2 e3 ^) U6 @ h5 { /*
0 d* q# N2 r9 N, B maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces! e1 C2 y8 N$ u
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges6 Y# C t9 p9 ]% f% |- E# |
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
! |; @5 M+ S/ r! A+ F2 M8 m9 |2 L maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines& f& x# a- ^1 E% s i, |
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects1 H$ w& T8 {; R% K) e8 @ w
*/2 V6 o! Z+ [, I: S' n- _
Point3d cursor;
7 G, q3 n2 `1 U+ C- ]2 n; h3 k/ { TaggedObject *object; f, E" Q1 G0 n# B
; r+ N6 F# }( W4 { m- l% e+ q, Y8 h2 G2 B8 `8 e
// Select objects using filter defined by maskArray triples! l' I& x0 a, _& y. y+ q v# `
Selection::Response res = selmgr->SelectTaggedObject(& n. t. w8 Y1 ?; L) R5 A- r' `
message, title, scope, action, include_features,
* t% {: s* i" ?4 }/ n3 `3 ^8 X keep_highlighted, maskArray, &object, &cursor );) s0 ^4 C( v4 ^2 R5 u
, Q) s0 D7 r# ]# ^( r# G
5 e2 P N y9 v; D+ l4 e! _ if( res == Selection::ResponseObjectSelected )! o7 r6 A' q0 P4 }5 ~3 s
{9 s: S: A$ F, ]3 Z$ Z$ ]
return object;
B) O7 v# v8 {5 k* L* M }
" Q5 `+ c. i4 Q% p+ K* z7 g return 0;8 p+ x6 D3 G2 N" h1 z
}! b& G5 F! W0 E, j( M& t% T- l9 E
5 M7 Q# ?. g* }/ |' i `
/ X( S5 I3 l/ Z! ~
//------------------------------------------------------------------------------4 q. f9 `% {/ C2 @! l$ w: L
// Selection with type array! s* g& e' r U9 s& g
//------------------------------------------------------------------------------3 Q9 _6 f$ b5 }9 l: N4 u0 i
TaggedObject* MyClass::select_by_type()* u* } ^- R( P0 f
{+ _* M! A2 C- d/ ], q' o
NXString message("Select an object by type:");! U' _; L5 p* @2 N. [3 \0 F
NXString title("Select object");+ m, c- {) X: ?# s: H% G
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
* V+ U9 l- W$ l+ X0 R. T0 L bool keep_highlighted = 0;$ L' @- D- c& J9 ^
) u: J0 N/ e% L+ T5 h9 o+ O4 c; {/ u
9 L' ]( Z, L' ^3 E [
// Define type array, see Selection::SelectionType Enumeration( q7 L# ]- x3 a g4 ?
// Uncomment or combine the desired types
% {( Q* [( `7 |! t; J b std::vector<Selection::SelectionType> typeArray(1);( T% o: h, U z3 d
typeArray[0] = Selection::SelectionTypeAll;
. o" ^+ i+ W# `& C /*) c; b, V7 d3 [1 C
typeArray[0] = Selection::SelectionTypeFeatures;
2 M2 {) ?2 H9 q) \, g+ @ typeArray[0] = Selection::SelectionTypeCurves;
! h& t9 S1 v9 ~0 Z typeArray[0] = Selection::SelectionTypeFaces;) c% l' \% X; g
typeArray[0] = Selection::SelectionTypeEdges;
7 {; V; |# U2 o" H, u typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
: E3 W; [; O: l1 I4 q5 e */
0 g& w& Q& O8 i. R: h- t$ F; { Point3d cursor;
$ M5 K# G# Q: [4 g TaggedObject *object;0 f- |* R& ^0 G
9 C1 b* K1 y- f
+ |/ q4 d, Y& `. t5 R {5 D' k
// Select objects using filter defined by type array. a4 z" Z5 J, c! b g. i0 @9 k
Selection::Response res = selmgr->SelectTaggedObject(
4 d- i- h7 F, L8 \) E6 h message, title, scope, keep_highlighted, " p9 X9 }5 @4 B# I# t" i5 r
typeArray, &object, &cursor );
0 ^) F0 |% R0 C" W4 T# [* r3 K$ F+ u2 E+ \
$ R6 |# r5 h/ K8 l if( res == Selection::ResponseObjectSelected )4 \& Y6 I9 s5 O# w$ D
{
$ Q' C. |3 j6 F# }6 c N7 y1 R' { return object;
9 G) }5 P( a* }" T6 F- p }+ b1 e) y, Q- U
return 0;- o% L) b) D, O0 b% n: n
}
' q3 J4 J% n# k: G+ C. r7 I3 e' G7 M
- X2 X, e. ]! H0 P9 r//------------------------------------------------------------------------------
; \5 l" U$ D5 P$ o/ K: u# x$ h2 A// Selection any objects2 S( x/ L. L6 X+ q$ _
//------------------------------------------------------------------------------
+ U8 h6 O5 _; x& Gstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' r3 D0 K2 G* c9 h4 p4 L{
* i# d& e& h" g' I# l( n NXString message("Select any objects:");
) c1 z8 }# @! g- \6 \2 } NXString title("Select objects");2 q. W& p' P4 I" k1 m( }
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
& `! W) |/ E C4 p6 a* H bool include_features = 0; 4 |5 J5 r% R3 E( v. k8 W, R
bool keep_highlighted = 0;
- k. k/ l/ T5 k7 o5 V. N. W' A std::vector< NXOpen::TaggedObject * > objectArray;
1 O# r3 x% k* H/ \/ `* \" b
* J- p0 P- U# q5 _$ g) G' G
8 W9 ]! }( _& u9 f& U // Select any object array
B) F% a8 T0 \ Selection::Response res = selmgr->SelectTaggedObjects(
) ]8 W$ @2 _1 {) e0 N& ]( b1 J message, title, scope, include_features, ( H( Z- B5 D! D! Z$ b9 \6 v. F! h; {' n5 X
keep_highlighted, objectArray );3 d7 w( F: u3 s' Z
' @# c9 t* }7 t/ ~& d, i; X( m; i
8 K4 G0 M1 I& B+ Q2 G return objectArray;; v: F9 m+ Z# p- Z3 _
}
3 m- `9 Y( S5 O/ ]9 r" E$ J# y4 }* m6 V) H
' V; S8 V( R& \! B" N; T3 T! u$ P
U+ [0 ~) H: l/ H
0 Y3 D7 b3 j5 L! [
/ D0 c) w! S. A9 J7 K# ?1 f* l4 ?
" M* b6 b" ~* a3 y( i7 T1 q6 _( s# C
|
|