|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
8 X# ^' n4 d" x+ i# t) r9 j5 _很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。: g3 Y) ^( n! ?) C
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
7 o6 @" z0 K3 |' p O一些常见的类型和子类型如下:
0 B6 s0 ^: S% Y
. d/ [- R( ?% W- a5 c% `( F如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
6 Y7 c# B0 q$ I2 ^7 J实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
- h. D: a2 Z+ n y8 B$ J b7 [+ \+ L; Y% y7 P/ Y: C3 W8 u
9 l1 o! V/ a% ^0 q+ G5 ~: N' p9 p
! B4 F, u/ B7 k5 ^7 _) C& T& O/ J: N' X* D1 `$ m
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。7 ~! m& f6 }# @
& P8 R+ x4 g! B) L& B0 C
$ m2 B6 f- u" X+ @7 w
+ ]0 B/ k1 @- a
& ~ t6 H* j- Y" k- y) I+ P( r& X
; }0 v3 l; l$ u, U对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
5 d1 k3 I6 b- G! w! { Y
( Q+ R- i! U9 A" }7 G# x1 G: M9 J, p# K0 j0 B' p/ t8 ?
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);5 e4 e4 N2 d$ L0 @+ ~( a. j
. v8 s7 a6 D0 H4 |9 f i9 N, \3 |2 F9 j
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);. L3 B3 U! c& r
) j$ e' J; b7 S* |) R; m
9 U! H- g; p$ H4 [; ?/ [
AddFilter (int type, int subType, int solidBodyType);
1 q. ~* C" g& A9 ^
" z: t W0 E, P
|/ n4 `& D4 Y& w# S# \& V; H% J6 G对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:8 _& u9 ]# l9 @0 u, `& I% }9 G
. d$ M) f" P) E6 y o+ p
8 C' g9 `% b. O% t3 T7 F, h
, }# ^& X# _, b//------------------------------------------------------------------------------: [: b# U7 k8 x1 k/ ^! T% f
// Selection with mask
" m# `; d h9 V8 a) x7 a$ i3 C4 I0 {//------------------------------------------------------------------------------
4 u( S' }) L: w( W) d9 b, _# [TaggedObject* MyClass::select_by_mask()
G5 \; P$ u/ Z( Z0 q6 J) W( r{
" R2 F2 f9 p9 i! w NXString message("Select an object by mask:");5 d. e8 k. q' {/ i
NXString title("Select object");
$ n0 d: A* S) @9 a" j Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
6 V8 h; l* X8 K7 R Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;& Z2 F) A6 s) C, q% ]2 m
bool include_features = 0;
- c+ V1 Z2 A7 l( L+ {9 G& ~3 ~2 E bool keep_highlighted = 0;8 j, Y+ l" S. G5 V+ ^4 G
! p8 f* } ^$ B# a/ |- @, {2 Y
/ X- h% E$ q! G( ]9 Z% r2 Y // Define the mask triple(s), see also uf_object_types.h.# K( J) e4 ?* |* H
// Uncomment or combine the desired mask triples
3 [6 I9 ^ z2 v' u1 y std::vector<Selection::MaskTriple> maskArray(1);
2 p9 z9 M& Z0 g+ [: |' a. O7 l maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies' Z: c _8 R- r& p5 G& D7 q" A
/*
9 G& z8 p1 f( u5 s5 Q" i i maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
4 K2 \* F& x9 \8 |& p# B maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
+ _$ p! X: r, ?0 h maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
- V8 e7 {* i+ h4 @( y' b maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
1 R7 `+ M) k. m* r5 V: E8 Y& \9 J maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
% K( J; W9 A& | */
4 s2 P/ q0 N' e) \* U Point3d cursor;/ s' A% a, z$ Z W( f3 T
TaggedObject *object;
% b4 v# m1 J- H/ ~9 s; T! N
9 l5 R P" B$ e3 a: c. ]' z9 g7 q( [9 v# g# O
// Select objects using filter defined by maskArray triples# l' s, ~' s( U! q. ]
Selection::Response res = selmgr->SelectTaggedObject(
4 B! S- q9 U. g% D4 ?1 u message, title, scope, action, include_features,
: n! L' k) A: z# n! C keep_highlighted, maskArray, &object, &cursor );( u$ p W, [! C+ c% K9 \* \4 n
0 Z, z2 b4 G( p9 p5 X# t& ]- ]( k% \9 o k, I/ T: g& S$ I
if( res == Selection::ResponseObjectSelected )
% _( z) U3 f' C4 F, ~2 z2 d {, o' f+ n0 e0 M6 g' H5 t/ ~9 G
return object;
6 x& {' W q( X4 G( l5 D }% i, h D& W0 `8 ^: ]- P; G
return 0;) P" S4 S6 i- k
}3 S$ V2 }# L5 {. N5 o2 d6 D5 P* a2 B
5 O. I! w& [3 H
# z1 |4 }3 z6 z! r//------------------------------------------------------------------------------1 r+ q. r) {. @
// Selection with type array
2 X" [* s. `2 w3 \% Y//------------------------------------------------------------------------------' g. a1 I! ^0 h: C
TaggedObject* MyClass::select_by_type()! I- U8 a8 o: O
{! @3 H: ~0 ]0 x* x9 V" d" X3 x5 O' u
NXString message("Select an object by type:"); {4 ?+ b0 c4 P }
NXString title("Select object");* x) Y5 g# Z! l* ^) N& m
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
& f3 q1 d; k% d) I0 V \% r9 V& U bool keep_highlighted = 0;5 t7 |) X f3 ] m
- T& b2 a& J6 V1 y2 h& ^5 l' Y E; u4 l
// Define type array, see Selection::SelectionType Enumeration
, _& d! J4 F6 _) \" l // Uncomment or combine the desired types& ~& \. D! \* q1 f6 e6 v2 v+ y
std::vector<Selection::SelectionType> typeArray(1);7 O$ p5 y* F% J7 ^
typeArray[0] = Selection::SelectionTypeAll;
8 N; C1 m! \: D* C& w /*
+ i# w7 t3 J; j0 u: ~ typeArray[0] = Selection::SelectionTypeFeatures;
# j! U- H% R2 I& q, F typeArray[0] = Selection::SelectionTypeCurves;
& W1 n5 k. _9 }1 t, ` typeArray[0] = Selection::SelectionTypeFaces;
$ S8 V% e% D t" ? typeArray[0] = Selection::SelectionTypeEdges;
6 x) o9 S3 R9 v. G typeArray[0] = Selection::SelectionTypeCurvesAndEdges;) h9 h% `, K/ b5 E4 a0 _
*/
8 v V" |8 v; C$ A* _; H Point3d cursor;
. ~+ ]+ X& a7 a0 A+ M TaggedObject *object;- M1 w+ d' b- j% l3 }( Q. d
- k, j! ~$ p" O% }1 ^
% p( Y, ^& J2 D2 | // Select objects using filter defined by type array+ J9 j$ w$ _% `# i" ~; \6 {5 s
Selection::Response res = selmgr->SelectTaggedObject(% ^6 Y% m- {, d s9 ]7 Q& o; ?3 A9 V
message, title, scope, keep_highlighted, & A) _* g7 }5 s6 h8 f3 B& W H
typeArray, &object, &cursor );7 C# x1 @) H% F9 p: G. ~5 b
5 A* [0 m- [7 ^/ Z0 S( g& A: p
; ^. m4 L! h8 H, P! F1 Z if( res == Selection::ResponseObjectSelected )
: z( u& V& {0 m2 D {3 a. X/ {$ Q& H- G! F" H5 U
return object;! w( B( \1 x$ U' c
}
( ]4 z, d# I, z! N+ e return 0;
6 u9 Z: z( l" b Q8 h}
& }4 ^& L7 z/ ~7 Q" v: d
+ f4 _# d& K5 ^; n. @* V* c; O6 ~5 B5 [+ Y# Y
//------------------------------------------------------------------------------
' B! }' D$ d% z/ z$ t! }0 s) w// Selection any objects
9 d, f, W" s9 L1 J//------------------------------------------------------------------------------
8 u9 ?+ A+ I4 s' S1 ^2 h+ z8 @# lstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
~& M9 y) q: I5 Q; W$ s{
% Z* P H7 Q$ m. {1 Y) u) r8 m NXString message("Select any objects:");" ]5 L+ F5 y# u/ m3 }
NXString title("Select objects");
) G4 i9 V7 E. }/ D& \. z$ Z+ c" F, o Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 _5 C) e( E, } g5 E+ k- ~
bool include_features = 0; * ~4 D& X# v; s8 Z+ J
bool keep_highlighted = 0;
$ r5 N& A2 X4 K' ?7 ^+ A std::vector< NXOpen::TaggedObject * > objectArray;
! ^2 q1 p, t6 t% S& H' x+ J2 Z+ V, B0 H2 l r
% [2 ~5 n; }* _9 v2 y) |. p$ W // Select any object array( v' u1 t; f9 _' W+ y6 h( W
Selection::Response res = selmgr->SelectTaggedObjects(
2 r6 q+ R3 B9 ~$ ]% O3 D- Y3 M' d message, title, scope, include_features,
m) |0 r7 Y) b, Z/ l) i" A keep_highlighted, objectArray );( v# O3 E+ [! G: a
. M) [& k/ A; u _* W P
" [) y% D3 D' L; d: Z6 M& A. @ return objectArray;+ y) d' a a5 l9 [: P
}: H9 b) Z2 o7 t( R4 T! s
! \5 q8 y$ p9 H: ^" L* R
! ^- F& ^4 _! O* p: [% D2 Y7 w7 Y6 h& r* u0 H/ K
" @) g; }/ ^8 ^6 p
% ~8 k+ e% H2 Q9 w
* n5 D3 B& d0 d8 M8 G3 a: C" ?1 l" p+ h' v) Y4 ?
|
|