|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
4 A8 `" A) C2 b' l, N很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。 u& Y9 h- ^, {$ k3 q
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。8 k" i0 w4 R. [/ F
一些常见的类型和子类型如下:
+ x6 J) x; b# ~! Q# x
" w9 `) L. U( V: s如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
+ {" ~' D1 |" _/ h A) J- L实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
: P5 b5 m1 x* m! k8 g9 H
9 @/ S: }' u5 m z% E
5 T# X2 e" w! u: w. a/ U
$ Q9 P4 ?5 Z7 `+ z. o
' g9 [, K- G6 R7 |& x5 t1 I选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
: Q- u* i4 f; `& m# B- Q- }4 D7 C% @' ]" _4 C
& X$ _3 _# }6 I7 H4 U1 v
9 s8 a A H+ M2 X) I7 q/ S# l
) S0 w& p3 K; z
; P: @5 w' z* g" l; b0 \4 v ]/ t对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
0 Q) n$ s- U9 l- c+ A1 G; u2 S
! ^% i# ]+ Z, x- P4 A, B
- X, N/ l5 I1 C5 U FSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);* M+ N" H8 @& y7 }2 \. u! N( X- J
4 p$ n) W2 ^3 E/ H7 Y2 d
7 }( q q, j8 g: u" E: Z" Y% UAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);' b/ U8 R$ f Q+ }* J1 S
/ C+ H; E$ D c! C9 j
6 s3 c( E' D0 z3 @+ q
AddFilter (int type, int subType, int solidBodyType);3 H2 C( B P" s1 V
8 _ Z8 S# V# N8 j) U& H/ S Z) t @8 D5 x3 O; a4 n
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
( M0 j8 h3 ~8 s7 `, h
; [3 z* s3 X$ \3 b& @& A, c. K* X4 s/ S1 b4 [. P
! s! t6 V. l2 C7 [+ I$ |% ^: R
//------------------------------------------------------------------------------( ^0 p' W6 ~ |/ r5 Y3 \
// Selection with mask- z" ^( ]' [& o
//------------------------------------------------------------------------------/ h4 p, w$ C. _
TaggedObject* MyClass::select_by_mask()% C' p# x1 s+ V/ x* |' m
{
7 I* ~9 P+ I- M+ V% J NXString message("Select an object by mask:");8 K# V* e7 D" h0 C/ u U0 c; S
NXString title("Select object");
) W9 Q' o% k. l6 k1 P, s Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 C& J# r: Y7 o# r4 S% f1 k
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
: O# k9 y1 g: k1 [0 I- t, ] bool include_features = 0;0 V* G2 c& `! g( M3 d7 q- f( ^
bool keep_highlighted = 0;( V- q3 m( y6 g5 C6 k
5 d ?1 G: |/ s* h8 B7 U. _& J
) a1 t7 S4 |( o: n& F; |% d4 H' E
// Define the mask triple(s), see also uf_object_types.h.) Q% r6 c z. c& D
// Uncomment or combine the desired mask triples
1 L4 m# s! G. o/ M0 T* | std::vector<Selection::MaskTriple> maskArray(1);# ?; x! z$ H/ k- Y# d9 c
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
9 L. O" B4 {. s8 f/ C7 ]: z3 Q8 U /*! _# B- f! s6 X! i3 ?0 h
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces" K! n) `8 w: M5 ^1 k* T$ S x& P8 J
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
" k& a. q! l4 n3 S maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
. d" l9 _" I! `4 w. c- i: S maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
- \3 J1 W8 |. @9 h' H4 @ maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
' B9 p7 ]' x, F7 G- S" F */
0 A) ]+ D3 \: L" m* K' Y9 ~ Point3d cursor;, p5 v8 K! u1 O. N
TaggedObject *object;) h2 k J6 b3 o0 |+ M4 k5 v
( o. Q% C1 R, s( H4 w+ F: ?$ R
) V! M6 m, }7 E8 I+ r1 v. t // Select objects using filter defined by maskArray triples$ p9 _8 z' [, O. N7 \
Selection::Response res = selmgr->SelectTaggedObject(
" v1 J; \3 G5 f7 v9 Z% n message, title, scope, action, include_features,# A# G; e( b( g, B# T I5 G
keep_highlighted, maskArray, &object, &cursor );
# e" {) n& v" \
+ X( N W2 r: ]3 g
# Q4 r/ @' h N: [8 s; \2 x if( res == Selection::ResponseObjectSelected )+ e0 D: D" z- v9 W# N5 M; t
{
7 K% i6 t, H% A! ` o) F return object;2 p1 j: d! _9 X# A: b: m0 d2 Q
}+ V2 m" j# h" O7 ^( C8 `
return 0;9 O9 c) ^' [: K/ h0 M5 U; j
}1 {! ?* b3 B- }
/ N$ Z1 F) N: q4 x
$ b+ R4 @! b6 T# \0 i* W( G2 v4 _//------------------------------------------------------------------------------
, X7 |. F" k3 A) t- g- {// Selection with type array" Z, m! v' t. A6 f
//------------------------------------------------------------------------------/ T Z* k2 K) `
TaggedObject* MyClass::select_by_type()/ D8 r( g( o% }4 h4 O0 G: v& R
{2 e2 M) q, E1 s+ q
NXString message("Select an object by type:");
) Z1 Z/ {% |% v, E, d; ~ NXString title("Select object");6 G. J0 I7 V' }3 M. L: ?/ b
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;! ~* z) V3 r9 K3 W. f
bool keep_highlighted = 0;' C; v3 F$ Q( T: {8 p
! y3 b. {9 f8 E" C
% p" X$ W9 \) W9 I // Define type array, see Selection::SelectionType Enumeration
, n7 P0 A6 Z& f. R. x // Uncomment or combine the desired types2 R8 c6 A/ F3 W
std::vector<Selection::SelectionType> typeArray(1);% _" w( N, v+ s6 M9 l
typeArray[0] = Selection::SelectionTypeAll;
0 h1 l r5 F- S2 D, O /*
6 L/ s7 D( ^2 F" G" T! X7 V typeArray[0] = Selection::SelectionTypeFeatures;
* Q( y+ y$ O1 L* D7 w# A typeArray[0] = Selection::SelectionTypeCurves;# W; T5 B: Z$ K+ g: d; ^% H
typeArray[0] = Selection::SelectionTypeFaces;2 ^9 f8 q, F8 I% C% ^/ W* s
typeArray[0] = Selection::SelectionTypeEdges;4 F$ c+ Q: p+ ]; a1 E2 r
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;8 P* B1 e6 J& X! i3 q( d! @
*/8 P' w4 Y% j! T! h" G8 R/ r
Point3d cursor;+ G; M. D3 c) X- C# m, k2 J
TaggedObject *object;
& m: X; C2 D$ n9 b" _- [/ p1 e
# `3 ?! G0 b! g( }9 L+ M( D2 C, W+ ]5 p9 h: t/ S/ [9 E
// Select objects using filter defined by type array
! U, Y# K6 M5 t0 I; P4 W Selection::Response res = selmgr->SelectTaggedObject(
3 {2 F4 h, `1 Z! q6 J4 y message, title, scope, keep_highlighted, " M/ o' l5 Y3 b- S6 F7 B' U3 w
typeArray, &object, &cursor );9 @% x: v6 J8 G5 i3 \
# @- B# y8 @8 b
/ O7 J: P9 w, T! O, p/ p2 v4 M if( res == Selection::ResponseObjectSelected )
9 b8 t* F! j( @% h {+ b( O; [0 e" F0 U7 X, O# y
return object;
. O% m: M* g% p3 l8 [+ j/ l2 O }9 O& s. Y6 i' ~ }9 i( A
return 0;) K3 Z7 u* ]% {5 m, [
}
: M6 k) t3 O3 ?0 o3 {. \( t/ u7 T
! Q4 u% u8 Z$ Z; h' R# u6 D0 {" G. i
//------------------------------------------------------------------------------
0 j6 `% h x% B. {; }4 ^: k+ l// Selection any objects% _9 n* k9 z1 k8 i# u/ \- B3 n! x
//------------------------------------------------------------------------------
& T# ^0 b; i9 g) u c+ f' jstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
. y/ v) w1 Q0 J; M{
: E" S, K* B$ x1 I NXString message("Select any objects:");
1 m1 f% W: c* I2 v NXString title("Select objects");
/ t& Q& H G" ^4 y Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;$ I7 K9 S9 j$ D8 j
bool include_features = 0;
+ ^/ b; d# p7 { bool keep_highlighted = 0;% ~3 A; l7 N' E2 n7 ~
std::vector< NXOpen::TaggedObject * > objectArray;( A4 s' ?! }2 ?6 G, |
. o2 X# k& E, C. Q. {
& e9 R) ^: c) b% M2 o' Q) w // Select any object array
. r# p8 @0 ^1 B Selection::Response res = selmgr->SelectTaggedObjects(% ~4 G# S3 w; w6 f; R- Z- \
message, title, scope, include_features, 2 ^$ l* \8 l: I$ y$ D
keep_highlighted, objectArray );. L9 Q1 @, B7 V( @& ^2 ~
! A) I& T* K" r0 U' v! ^* i8 N4 x4 A! S$ i( q1 |
return objectArray;9 r! Z+ S# R- F- i) P6 ^
}' ?' U1 G4 A# p1 S4 S% A3 ]2 Q
- U. d3 p2 |% O; O
# K+ c( {2 P' }, a$ Y- x! s! ?' U( f& ~* C
% j, e+ T; R: }' |
5 M9 k+ Q% P# r/ u+ |: B
. U& ~% j5 }( V, X5 h) x' ]9 b! \6 t: p: L! ^( B/ g- o: }
|
|