|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX二次开发中选择对象mask triple的详细讲解
+ U. B: A/ `" ]# w5 i很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
' a- b6 g; m [# j如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
1 s# _8 A6 I: ~+ f+ c一些常见的类型和子类型如下:! O9 O" P& m& D6 D4 I' r
, N. a$ w6 K) y; h3 ]如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
2 P# z5 T3 n9 n, B! ^实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。: f5 |5 Z/ T: f0 m; c3 X
. v& q' _0 K* \" f( [1 c
% a* K7 s V0 s1 V) r
. Z! x: w N n( |! n6 n6 g$ w
! {+ U8 P& J) [- u9 ^' }9 G# A选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。, u+ @$ {4 E9 P3 |( }, v
/ ^4 N9 X& U2 B6 U
4 a$ x0 ?4 f( w3 z+ z
& k; p S6 N P% N' W: t( C7 t
5 H8 t0 z) k2 d( T. v& [
5 U y; P" d+ v! R2 G对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。& W# v" J* s' O) a! n
( F% C7 H+ W# U* l; ]
( k. A0 r1 `" d9 g9 b
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);! d6 m# J2 B! D9 p% `: N
$ P5 Y& f7 G( k3 l
: \+ J( o- R+ u1 z. I$ k
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
+ m; {( M3 L- l2 V2 y' U
( O0 P% z% ~! b* @. n. }" r/ v/ a
$ d f- B, t9 L" ]AddFilter (int type, int subType, int solidBodyType);
/ e- K# T; G! Z9 S+ Z9 \# c3 k9 W; N6 I) y: ^7 d) Q
; C; t+ T. S" C" I! B; Y2 t
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:, D, B" G) C( ~
- A. f# s8 o. k; v7 H7 N& T }8 _ v
2 v, O9 y: M, i3 ]7 B9 D Y
1 F6 _0 X* ~8 U/ \$ B) u//------------------------------------------------------------------------------ Y0 e& x' b; C+ s' L9 N& H+ ~
// Selection with mask; ?4 W7 U5 ?& N& |+ b
//------------------------------------------------------------------------------
- J( N4 [2 V4 Q, BTaggedObject* MyClass::select_by_mask()
3 _, z5 l6 ^# |& G/ f9 y1 u{
2 g$ l: _: T' @, P NXString message("Select an object by mask:");
& h5 b7 h' p* ], m8 m NXString title("Select object");$ [+ j8 ~) g7 p$ d. D7 _
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
3 z* J4 L* D1 k% h a( [5 c S Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;# `* c& G$ G+ z- v: x h8 x
bool include_features = 0;
5 \+ |, O0 C0 n, G bool keep_highlighted = 0;9 d/ u( b$ ^/ x$ s' S3 S: M
3 C* [% Q& M5 O2 k$ x
; R8 G+ V+ h, a$ T0 d: r$ n
// Define the mask triple(s), see also uf_object_types.h.! m6 l$ C C$ _. I' ]
// Uncomment or combine the desired mask triples
2 e+ a \5 V9 S& F V4 l$ w std::vector<Selection::MaskTriple> maskArray(1);
' L' i$ q$ B! P maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies4 t$ L5 }& T5 B. X* ~- R
/*% P5 p0 p" N( [, A a0 _" i
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
1 g& p* X( v p# O maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges* w% K$ `( Z! g5 y( Y1 d( A& ^0 O
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
5 P L* D3 g: z maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines8 |$ q: [# V b1 l
maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
& B' f9 I& V$ r( H1 J! [, r% S8 F' V */
. v9 L# m% }- r& h/ n1 e, l3 ^7 q! g Point3d cursor;
, I- W1 v) ~- R) R) A9 v TaggedObject *object;6 r* \2 q& E5 l0 \! _
3 I1 M3 Q# A' V' _
4 R; K1 f6 B# \. c // Select objects using filter defined by maskArray triples- O% I# e$ E6 P0 p$ _0 d$ O) [: q" T1 V
Selection::Response res = selmgr->SelectTaggedObject() Q m7 k3 ~3 _8 y, _3 t' @5 v
message, title, scope, action, include_features,
1 v: ]4 q! ]1 e. `5 }7 N# @ keep_highlighted, maskArray, &object, &cursor );
. M, S$ \9 y4 L" [6 J( p# g) ^, i$ ~: r% a
6 X9 O. p1 s1 O2 V Y7 Y" }
if( res == Selection::ResponseObjectSelected )
# [$ L& M, F& t6 ]' P& C {+ u( O& D/ H. L. X9 F3 E5 S! r
return object;7 F) ^4 G0 j. A- r5 c
}
% K( q+ n t- l7 @# M- p: R return 0;
: u- \) ]1 M$ }/ m}: P* r4 j0 q& q: S1 _7 e: s! j! q
9 y( B, j6 |. G5 E' \( K
/ r7 J8 R+ C- e+ f: {//------------------------------------------------------------------------------
9 F- I. B9 S* P4 {5 u// Selection with type array8 c" q1 J, x1 r! V
//------------------------------------------------------------------------------
- p, _$ ?9 e& w/ U3 @8 aTaggedObject* MyClass::select_by_type()
3 A A3 S# C4 s8 y{
: E% }, ]9 Y7 [2 n m% p NXString message("Select an object by type:");
5 B) A& H7 y) X1 A4 f* e4 ~% p NXString title("Select object");' J- l; f2 l' l: R& h" o- H0 e5 @
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. |, m( y; p) A5 b8 q bool keep_highlighted = 0;) S: m8 l' H. P; n; C* v
: i. e9 G6 T; a: N: p
0 t8 z. c0 G+ H% ~- I* O
// Define type array, see Selection::SelectionType Enumeration
; T) B7 s" W, s r( s! r/ q // Uncomment or combine the desired types
# `! H5 D& D0 P# o- C- C std::vector<Selection::SelectionType> typeArray(1);
" q7 J- N9 D) e. ]1 | typeArray[0] = Selection::SelectionTypeAll;
1 D) I/ U! U. E /*
W z$ A8 B; V1 Z( ^, v' D( W typeArray[0] = Selection::SelectionTypeFeatures;3 g; g5 U! w. M8 l$ ^4 M8 K! a& H
typeArray[0] = Selection::SelectionTypeCurves;0 l; D0 k9 j* ^1 r5 w
typeArray[0] = Selection::SelectionTypeFaces;1 d) e' D8 ?- o7 z1 P1 ?, J: @4 V; I
typeArray[0] = Selection::SelectionTypeEdges;
4 Z- p3 ~9 N$ M1 r' I typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
0 E/ H- g2 Z& b: A$ \+ h */, j( e/ g; N- Y9 T! W4 H
Point3d cursor;
) z* }3 X: _/ s" `# Y! D TaggedObject *object;, B3 e. i. S0 k8 i. Y
2 W/ Y. T5 E& V: _
) w' h, J/ {& p# d; G5 V* |1 q // Select objects using filter defined by type array' P7 u' _& g+ R/ A
Selection::Response res = selmgr->SelectTaggedObject(: Y y: H4 E+ \& _5 B
message, title, scope, keep_highlighted, # _/ x' [+ Y: b, R. i/ L) L& k7 v
typeArray, &object, &cursor );
& V2 L3 ?4 M8 w9 Z* ?
p2 S* F: B; h6 y8 }" [
0 K+ T3 ~0 e/ k6 X: T4 O% g# D& r if( res == Selection::ResponseObjectSelected )
' \4 B0 U* B; I) y7 L5 S: H {
3 ^7 g6 O1 R8 T8 f, c' {3 p6 c return object;
, ]: i6 f0 O# u" e7 M }
* `+ e& l( ~: ^6 a+ ]. ~8 H return 0;
) i& L% F; i9 r/ ]1 t! C' r; @}
+ d* p% ?; q1 y g5 {) Q; y' a% I0 i
5 y; g0 `7 R( A5 c5 X0 a5 M- G# H4 v+ U* I4 m/ V
//------------------------------------------------------------------------------
7 x$ x6 H$ N( k) c @// Selection any objects
$ i# E3 o- B0 d: X* N* i d' B//------------------------------------------------------------------------------3 Q. C0 j/ }6 r* k1 Y# y
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' d( [* G+ P3 T7 f) M6 F; L{
! o0 U9 y. N' g5 v& R) _ NXString message("Select any objects:");
% @- [( ?5 h# P NXString title("Select objects");# R9 R5 b# v9 C0 t7 j! ?: `; a2 l- ?
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault; N) d' l) H& C
bool include_features = 0; 8 A/ \( s2 |) O
bool keep_highlighted = 0;
9 C0 E9 `0 ~5 ^7 X std::vector< NXOpen::TaggedObject * > objectArray; C/ G$ S( g( e# r4 c/ g; ]! z3 X3 X G
+ h) x( A% J# L- d# P' l
^+ U$ [+ P* f( H3 n5 Q$ p$ k7 r // Select any object array1 J& ?2 k5 x, B* i. X
Selection::Response res = selmgr->SelectTaggedObjects(
# X/ G. Q% X9 j' T4 R- W6 i message, title, scope, include_features,
) }5 q' l# q- G# f. K5 } keep_highlighted, objectArray );( G N( g. C* M+ j7 K; z( X' {" T
" s" {3 z# Z4 M, D# r
3 q7 i, `5 [2 b return objectArray;0 Z; |( m0 V. L+ n
}2 ]1 K/ l9 Z4 O/ E0 L
5 y) K/ D, w9 M3 y( `
# {; y9 e4 J$ {1 q" z
F7 k2 @% V6 }1 R6 Y ?# y, Z
4 M& N6 p+ j) Y Y- `9 U$ g1 K3 e7 B$ k
" |* t9 o1 E8 s- G2 ?; U
0 W( F- E) B8 I |
|