|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解5 y( N% U& p6 [3 `; V
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
1 N" B, F1 h# x7 p$ C1 R如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。9 U k! l" g: Z( U+ q
一些常见的类型和子类型如下:6 x7 j0 i, M* i; E& m" k! a+ E# k
; w+ H" q4 @4 r: D如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。; e) t' c- R6 ?* L) ?% [
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 B2 k' U7 A& V+ f& D5 s7 g
! C( `/ k0 H! ^5 g. z. y
) i% |7 i3 O' w; v: B4 E) }* P
+ Z4 X. Y8 l, B$ _- [) M" ?
3 f2 ?: |2 D! W& P% A/ x5 u$ V选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。5 B1 E" c; n7 \0 J
- z9 c& f- Z) J' x0 [' O
1 ?8 B) J8 j* |' g7 h- Y& N; V2 e
. i5 t0 S% o5 W/ t. [
# B1 Q9 F; ~$ _. }- ~0 p% r) I+ X; C& P' E! R: `' B7 {5 {
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' N7 R. e8 I+ A' |. U6 S% ?0 j$ M- Y- T6 k; Q
5 x E8 }' p6 _: }+ `8 X3 a8 K) FSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);. T; Z6 \! R, L' J* p! _( v
3 \" A$ q% w* x2 B3 w7 ^: ]1 z
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
3 J2 g7 o9 \; Z9 J6 M7 ~$ S! s3 i& P9 o: {; b! x/ Q R
8 s8 }& e h {" `/ F
AddFilter (int type, int subType, int solidBodyType);5 C8 V7 p: q! z# R [
2 F( {, |& D' Q. _" |5 e
3 E6 a6 V8 z" R- t对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
& D/ H6 n: J5 U; g1 F
( ?: a% O# v5 S5 j, V
- {* Z T. g' d) n$ i+ a: P
I2 @( C. j' V9 _//------------------------------------------------------------------------------# d7 |* n1 N( g4 B2 S
// Selection with mask' { r6 M- d# i9 [, L- u
//------------------------------------------------------------------------------" o+ S3 W# V1 c. y* E) g- ?5 ^! k+ y0 v
TaggedObject* MyClass::select_by_mask()
4 V: s4 A5 i+ Y2 `/ s# L" f$ G) e2 B. I{
6 t8 C8 G4 b$ s2 \( @ NXString message("Select an object by mask:");
4 X4 \5 ~* X- l# |9 B2 u& } NXString title("Select object");# p" j. e+ n3 y( }/ |9 P, [ E$ Z" j
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;9 b# V+ g# v- o5 M
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
& U1 I u9 X( b: t' P bool include_features = 0;
% ]# U7 g" C0 `8 x! p0 \ bool keep_highlighted = 0;
# Y0 R. e0 I M- M% O F# N, \- R# n8 e0 W
! X4 C+ d$ N* @ m8 k; D$ D
// Define the mask triple(s), see also uf_object_types.h.3 b' q% Y0 }6 J5 M$ d B: O6 J3 ~, W
// Uncomment or combine the desired mask triples
: h0 n8 H+ o' ^' x! ]8 ` std::vector<Selection::MaskTriple> maskArray(1);: K1 M% X$ E2 |( m7 W
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
6 p* \9 J6 v0 [, o /*
7 O! ~7 T/ R/ N; R% n! o+ C maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces4 p# v0 W+ C3 l# [- V$ x$ N& i
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
$ m# h/ b5 ~' a4 c& x maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
: J. G; f6 _) |6 I! B maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines1 O/ ~( P; N6 u5 }1 x: t
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
0 M9 W# ^$ i, d$ K( B */# _$ O# r" W5 n* K1 @9 x# y
Point3d cursor;6 f; k3 k; G8 d- I" J+ X
TaggedObject *object;
* _5 k9 p" d1 o! f; Y% W7 F& o3 H8 x* S' M; j: \4 m. R6 @& N/ n
* ]+ i5 D( o1 ~! Z" t9 L8 g // Select objects using filter defined by maskArray triples5 @5 c! L7 p* z- Y" S
Selection::Response res = selmgr->SelectTaggedObject(7 R) Y: R+ f7 ^! m- A
message, title, scope, action, include_features,
) g6 a, i4 Q2 ^5 a8 { keep_highlighted, maskArray, &object, &cursor );* ]8 A. z: f: Y
* X# i7 W, Y* v% T
7 D" u5 x. |0 T! s% F$ p1 D
if( res == Selection::ResponseObjectSelected )) ~9 i/ h" T5 U: x
{1 `, H2 X" O/ m% y; {( E& z! {
return object;& }8 ~" X$ j4 u x! r+ x: D
}; ^7 W4 D3 }; T( D+ {
return 0;
$ q: ], y! w5 g/ j$ O! x}
2 r- o+ O+ _) A/ ^/ C! W' R' T2 `/ L- s M. f; }
) m; ~+ c2 h* F4 s//------------------------------------------------------------------------------; m' U# h' q4 r3 ?% Q$ L/ ]
// Selection with type array! d5 x" j; h0 |
//------------------------------------------------------------------------------
- h7 I$ j6 t: ^( ]TaggedObject* MyClass::select_by_type()
U. d9 q. O. e$ E* A, {{2 u4 ^; k% D/ d4 ^' y5 k0 z# i8 Q
NXString message("Select an object by type:");; d1 O o$ z9 t/ S$ m# _
NXString title("Select object");
. z% t* ?3 B( d Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;, w1 G/ }6 t) u/ L# [) Q! K ^9 K
bool keep_highlighted = 0;
2 w& I' @6 S# M/ k. s9 |% u
1 h% y& \& _9 ?# m0 Y7 f; z1 F" g
// Define type array, see Selection::SelectionType Enumeration8 a0 P5 k# `' Z5 [4 A! J
// Uncomment or combine the desired types7 j' a/ j v: y
std::vector<Selection::SelectionType> typeArray(1);* X* d8 v" V3 o) L( K! H
typeArray[0] = Selection::SelectionTypeAll;
8 d) [: k+ h* n /*1 f4 p0 s0 ^" j" T8 Z* A
typeArray[0] = Selection::SelectionTypeFeatures;
# l' M. O& f H' f! j ] typeArray[0] = Selection::SelectionTypeCurves;
7 n8 e+ u1 t7 u/ p0 B typeArray[0] = Selection::SelectionTypeFaces;
" o' F" Y7 {3 O typeArray[0] = Selection::SelectionTypeEdges;% x d& e' {2 k5 w; T1 n
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
6 ^) g1 Q$ G7 F/ o$ d/ g& I */
; w- G |8 z# X# v, ~7 h( p Point3d cursor;, @; z' {2 f+ H& g- \9 S
TaggedObject *object;
; c9 ^! z- l% r( {; X! W* ? A' l* P M! W5 Z7 }. r
* S8 d. k5 t1 S) B- F5 y( m
// Select objects using filter defined by type array+ q! T$ v* P3 m0 L8 x8 H" t
Selection::Response res = selmgr->SelectTaggedObject(
2 @- H9 I5 f+ X' z message, title, scope, keep_highlighted, + s+ |3 K$ g G @7 z, L+ e
typeArray, &object, &cursor );+ X3 P& v2 g) ~9 H
& T& u% n9 q1 i- o5 U3 D) N5 {8 C d2 q, F' i+ B
if( res == Selection::ResponseObjectSelected )
! b5 |1 B; p: y u$ C2 C {
9 M; |6 c' h, B return object;
5 E2 a0 }5 ?9 p' ?6 v" E }1 W- S$ d- j* o# t! ?5 m
return 0;
2 L" j8 [2 k; A: Y# p}% t/ j% |' p. O9 U0 ~7 L
. E6 o1 Y' d" _
9 l) Z1 Y- G* q. B//------------------------------------------------------------------------------0 q* c, V( c: n* j0 e
// Selection any objects0 S& z( u" Z6 f/ b& ^1 b' G+ B
//------------------------------------------------------------------------------
! R8 n6 A4 m pstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
p1 e2 S" N. [6 ]' j* u9 R; P$ Y) X{
- B8 u, R# P( w NXString message("Select any objects:"); d8 I# r5 Q) {5 D: i
NXString title("Select objects");4 X1 ]% q0 Y5 b$ ^# p
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 m2 ?& v7 l$ w9 s0 `5 Y1 L
bool include_features = 0;
X' p8 B- G2 L% x/ O! ^2 S. M bool keep_highlighted = 0;
: @, Y3 @+ ^$ c1 m' J std::vector< NXOpen::TaggedObject * > objectArray;4 n y) D) R2 | w8 ]9 }$ s' F/ I
3 Y, a" V1 |" Q$ g
) q6 P; }3 m6 R: G // Select any object array1 K6 e2 V/ [% b. Q( @ _% z& h
Selection::Response res = selmgr->SelectTaggedObjects(9 ~2 }1 k, _6 R0 u+ r6 y3 T: e1 S( \
message, title, scope, include_features, 6 Y4 N; k; o* \% y. [2 e- v
keep_highlighted, objectArray );- j: b9 b0 g( z% ]3 l/ Q- E
W* v8 n# S! G6 V% K# J& C
5 e' d0 ?2 u2 Q' N" E' d
return objectArray;
; ^* L* W3 l' c% h6 O}
. c! F' s5 E7 ^! e1 h. ^
( q1 @: u/ ]/ b1 A& @
! A& z) _/ T0 r- Q
+ v* J e/ w, ?; s4 ?6 S( }2 T( o: a, }% t* q2 i! ` t
! N w% U" e0 W
6 d$ {6 J+ f0 t9 _5 r' x) {5 C/ Z' P. r" A! U# [& e8 U. X u
|
|