|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
* q' h/ b1 v+ K4 i很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
$ [( M( ?5 S6 J+ V- V @- M; y如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。5 o: r7 k+ y9 V- i+ Y1 q
一些常见的类型和子类型如下:
$ Y) E& V- @1 t3 H% h
+ Z+ u- Z T9 I. C7 v, f+ t如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
( k: g, x+ e P( l% O, N9 J7 Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
; f- }/ m7 ]9 W G+ U5 z o( [% @* A( R/ k" h3 n
4 L' \$ `: X7 d# ]* o1 M
& h/ X6 b- K+ L2 i" G
; [( A" c7 N) J/ u4 p* Z
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
g8 ?8 ^- @' a- e/ u; ~: j8 p5 A! U- |" y
& B( R& C) U p
2 \# r4 `* t, h& P/ F
" P6 ^" ~" O# p7 P" M5 u5 t# Y: |5 Z
) l+ B4 U V. F# o) k& E对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。) ~+ o2 T5 W+ Q/ w3 Q- Q
" W1 r( Y8 ^1 b+ I
$ n5 l- V, t* x3 tSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);' {; Z! d g' L, X9 Q
& M5 `+ @4 U, ~& N( E5 m
* A; o( V: D3 n6 ^ H9 @& J
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
# R7 m x" w5 B* `& M
$ k- p1 p2 K4 d$ E- L, w1 ^7 T. V
AddFilter (int type, int subType, int solidBodyType);3 @6 |5 x7 h0 U* P3 h% C" n
( j x/ Y9 W6 l) R* U
0 @0 H, L( [, y2 h' V( c5 z对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:. f( H( `: A& N1 @8 m
- M7 \5 a) e2 v
( f( E( C/ K0 o
# G/ N" B( D. T6 ^2 L//------------------------------------------------------------------------------
7 h, w. f1 P$ [2 ^! L# A: i// Selection with mask
2 r- v8 d* E% V. M0 z//------------------------------------------------------------------------------
4 F A9 a- j! g2 p$ `* L3 v9 iTaggedObject* MyClass::select_by_mask()3 X; c. y0 K$ n+ I' n8 ?
{, \& z) u2 j/ ~1 E$ C
NXString message("Select an object by mask:");
& j1 T5 A G' i E, t+ Q NXString title("Select object");
) O& C. x/ ?2 g1 v# G0 ~* R Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 |& T4 d. \ d( J" O5 Q/ Z
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;+ V- ]8 z. I( ^ k( s% c
bool include_features = 0;
) x" ^5 Q3 f4 Q3 h) A% Z bool keep_highlighted = 0;
1 H- d* @; D/ y" H0 e+ x2 z' q7 T; r0 c, v% g3 x' {
& \5 {# l3 o& y. w5 G
// Define the mask triple(s), see also uf_object_types.h.
4 B, J" `& m" F" e2 g // Uncomment or combine the desired mask triples
( a' u$ W6 |4 N$ l) M/ k' I std::vector<Selection::MaskTriple> maskArray(1);
( {" t; Q3 G3 ]: @& Z maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies; o0 G; q/ ~; V5 x& [
/*
+ o; L8 M( @/ c$ J g, w; } maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
( B# Z* i- J) D# o5 P maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges+ ]) G" z! q+ D: s# @. b: x
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
5 `0 O/ G2 j2 W' G4 I6 l maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
. E) U4 S; O3 e6 x& j' g maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects" }8 s( Q- r7 N* N, j
*/, d P2 O( b! D) t1 i# [
Point3d cursor;" s: {' K: K! X, p
TaggedObject *object;2 @' @( w; h# c, I U2 h2 z
0 E/ Q! C0 v9 B& O6 `* b N7 a6 S, d( M
// Select objects using filter defined by maskArray triples4 }+ s+ b0 c8 G1 O5 k
Selection::Response res = selmgr->SelectTaggedObject(
9 k& ~6 C7 r. }( K8 k# t message, title, scope, action, include_features,
- ~3 n( o' Y& ? keep_highlighted, maskArray, &object, &cursor );! G! \4 x& b4 ]3 V6 d/ P6 x; S
7 Z/ G; U5 ?. ^+ |& g
: J0 N1 F7 U, B! @3 P( H4 @ if( res == Selection::ResponseObjectSelected )+ |% t4 y+ h6 v
{2 G3 w9 S, m9 h6 j! C9 R) `
return object;0 {" X' {9 o5 N% N$ x
}+ C. f1 L. o/ ~/ L: Y! s7 t
return 0;
2 w! }0 N, t$ f}
: K: V% _2 D* s% Q6 a: q
: q4 Q1 x1 E: r* c- E( \
! X4 c3 u7 u$ D5 N8 W( b5 ?//------------------------------------------------------------------------------
, E1 `: n9 n1 y+ c' g: ^// Selection with type array/ _# b& ^9 y5 h+ C9 w1 B
//------------------------------------------------------------------------------2 x( V7 P$ N0 _) A, R
TaggedObject* MyClass::select_by_type()2 t5 g+ R, L6 a; T2 e; P
{
; [3 c( V, l( v6 [9 l NXString message("Select an object by type:");
# c; v, R( |% g( Q7 X5 } NXString title("Select object");7 N5 T: F m" V, z* [2 U& \+ ]
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( L8 b7 A+ D2 w) ?% O' T! ~5 S4 K
bool keep_highlighted = 0;
6 T8 I& \! ]- ?& M. R
9 D4 Q' ~- n, q0 }# x
$ i! T& N z* G5 h0 ] // Define type array, see Selection::SelectionType Enumeration* o* d8 A, Z1 a* R% K- V! S: `4 v
// Uncomment or combine the desired types
; B+ i. H; r! Y, _6 T std::vector<Selection::SelectionType> typeArray(1);3 c5 @7 p+ R+ r* a
typeArray[0] = Selection::SelectionTypeAll;
; u- _. W. ~, u$ z /*
- H; |5 V) b( m typeArray[0] = Selection::SelectionTypeFeatures;3 ? d% l6 M( W( G7 R4 I! Z
typeArray[0] = Selection::SelectionTypeCurves;
; X1 X2 V+ W5 ~$ w1 k- U* g$ G typeArray[0] = Selection::SelectionTypeFaces;
# u- r6 i Z- R5 l typeArray[0] = Selection::SelectionTypeEdges;) L; R( m2 F& Q# i( q
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;1 D+ I1 H8 t) _1 ^( A( |! V
*/
5 B( S Z( _) l4 {) [: k Point3d cursor;
5 z6 i- @7 l& B. ~ ^1 X TaggedObject *object;
4 {' ~: Y. p3 z6 ?: v# b: F/ a% u
/ i5 d0 X! i0 d3 S7 m // Select objects using filter defined by type array! o4 J2 L+ s7 H) m' p
Selection::Response res = selmgr->SelectTaggedObject(
' g- X" M* a" c: F. f message, title, scope, keep_highlighted,
0 C, D: C l+ E9 C+ [ typeArray, &object, &cursor );
* Y* [, g, R6 Y
1 E- I7 M% n; O6 z) w1 W- e; n$ ^- \: Y; D6 J/ r4 h
if( res == Selection::ResponseObjectSelected )
) ]& {9 M* O6 N. R* R* p! I {
& X3 m. U4 {$ N. p! s4 V3 J" T return object;! T1 k \5 g9 B- W2 M
}0 f4 h* } V0 {8 V
return 0;
) A1 N# s, T- |% r" M F}) `0 v1 T* N$ L5 X! [
) W9 L5 n9 K$ ^9 O
. ]+ o N! c0 e//------------------------------------------------------------------------------
" E6 L$ d& U2 ?5 x' Y L6 V// Selection any objects# r( z+ A$ T# c6 p# x; n* D9 k
//------------------------------------------------------------------------------
8 Y6 g" ^1 _9 K' Q1 z: E8 K, Istd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()' [8 h' g! i' |, v
{* \8 j' p6 |- V- S1 p
NXString message("Select any objects:");
3 B! `/ ^9 ~ B( i" F2 F h NXString title("Select objects");
) W& U0 G, @8 w8 z Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 j' s0 n& @. x: s+ [7 p
bool include_features = 0; ; q2 D7 y) K& [) G, E( E
bool keep_highlighted = 0;0 R$ }5 D, S' W% E* F& R# K2 S
std::vector< NXOpen::TaggedObject * > objectArray;0 Y* b, [- i) S$ } g
0 {9 l/ b2 V% ]* o- n1 X# p, S
3 R/ H. T3 d$ e: r7 L9 f' v: l: B // Select any object array
' ^, }9 g2 A2 b0 r4 A, g( m Selection::Response res = selmgr->SelectTaggedObjects(
: Y7 M% ~1 E v- P/ i message, title, scope, include_features,
$ l# U5 R3 n1 x5 F) c* l- T0 O0 l- A keep_highlighted, objectArray );1 Y2 D1 I- S! e, C5 F
' D: M' ~ F% ?, A7 s: K7 E, n1 x5 p1 D" h/ k
return objectArray;
6 v$ j5 {& l' q' h( f4 |7 n}
. e* M4 n/ _4 }9 D0 ?) J
* i8 P: G* Z8 H8 @# u
1 h; l4 z9 G+ ~, w+ R; t1 |+ V0 f. N. X6 n. N/ @ O
: d# Y2 J5 z" Y& ~, @: d# J6 m8 x8 U9 Q' p) K4 C* z$ I- \
1 A' w; \4 r: i! e1 r
+ G; h3 n; D; g; n
|
|