|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
+ U2 h' a: ]2 U" c& M很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
! v3 r7 U9 z$ s/ `1 O) a& Y如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
E# T4 Q3 ~' r3 r% v一些常见的类型和子类型如下:/ a. j% E" |7 l" i
* a% u. _& _0 E4 S# @( C6 w
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
$ \. J7 r0 E* P% Z: ~3 D实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
3 F! L: f7 o4 G% P/ L0 e: M# W' v
+ i w' |" @% \/ f- {8 U/ P
5 C2 }0 h1 P9 f' I" s0 \& `! r# s+ P
" K, X! E9 U( _选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
8 i3 \# I1 \4 t8 m. E
9 t2 F- q+ k5 q* u) h4 C8 P M4 e% U4 U1 N8 ?( m% W
" a1 p) N6 Y; S) O5 w8 r# I4 i1 O" F
- l W* j2 ], u8 P& c! X对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。( {& Q1 G) j% e+ V
& m' |* D* }/ R7 _1 ^9 c4 R E* B% m) G' h2 s5 d
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);1 ?4 m4 Z/ `2 i! n
# W* d$ `- u( V$ b
. L @' |! W' pAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
. ^. j9 ?9 p9 a
1 K% d) s# @+ x! @' C; H9 e' v1 j) f4 I% l, B( O2 d3 m
AddFilter (int type, int subType, int solidBodyType);
- X+ l9 [7 P- W! k9 O/ \
+ H$ i+ p. m4 x) n; m0 Y2 i' N! V$ W) R& m% @4 z2 ^5 O
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
4 I' R: M' o' Z/ W* S/ Z8 H) t: E6 ^ o6 r0 z! K: Z$ ^
9 k* V5 @* u: A3 G% ]
' Q7 K$ ~& _7 I G, B: X//------------------------------------------------------------------------------
. X, _2 C: J' A* B// Selection with mask- ?) r' l& ~4 B& `9 V' z
//------------------------------------------------------------------------------+ s1 j# C: w2 t( Q9 E$ n
TaggedObject* MyClass::select_by_mask()2 D# y8 h' }7 H: v
{: A- r, @8 B$ M0 p- ]/ ?6 I
NXString message("Select an object by mask:");
6 O% z/ R9 v" O5 T NXString title("Select object");
$ B( W- I E) y6 ^8 m- g Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 F- ^" m- k6 j }/ O
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
; c5 k$ y5 ?! W) _ ^; ] bool include_features = 0;0 o) f3 p4 V, K8 Z# R7 N: Q+ F" d
bool keep_highlighted = 0;
' [. Y6 @ ?8 a0 G9 ~5 D- D
$ D/ e3 E8 a' i* k! c3 `3 [& I) N; g+ a H
// Define the mask triple(s), see also uf_object_types.h.- N0 G- I; V" b& J6 @6 x! _8 x$ Q
// Uncomment or combine the desired mask triples9 f5 s! ~4 [; v8 {- M) L+ g
std::vector<Selection::MaskTriple> maskArray(1);
1 v* [0 I; _$ S maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies4 d+ r' {! d3 g2 k
/*
, X9 ]* R& D4 Y# g5 V maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
; C# I, f3 N7 r6 c$ \ maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges0 M5 @& @$ D# h
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
5 {0 z% O5 h3 n2 [0 H maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
' a: ]* N+ V, a% D3 t$ ^ maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects" M: @: x b- p: ~3 A" u
*/
( L2 `: X) N; F& I Point3d cursor;
1 n: Z: M& G: R7 F TaggedObject *object;
8 F% o* n6 D, G4 n1 V8 t% Y5 G( ~' x- ]& e0 \
0 T, q ]' |3 L9 W9 @* K7 f8 X! V
// Select objects using filter defined by maskArray triples% L ?8 x! i+ h" ?/ T& ?" I& M
Selection::Response res = selmgr->SelectTaggedObject(# v/ D" a: L$ }4 O# A' B
message, title, scope, action, include_features,
0 s" Y- T, J$ Y3 ^. D# W keep_highlighted, maskArray, &object, &cursor );3 o# p' e% i: W1 ~
0 H( u+ x2 w }# d4 V$ z* d
* a; u) w6 W# P: B& x. `7 \ if( res == Selection::ResponseObjectSelected )0 y8 {2 T- m0 v9 ]& A+ }0 n8 H
{
6 f3 I: Y; j" }% F* Q& M5 e return object;
H I$ T' p' p6 L) ^% l) U }
% p* ]7 T; I& ?1 K* C return 0;
* ~* }* L9 G- M' c}# e, n6 F e+ g
0 o, X; a; ?& \8 z. `* ^
1 O2 m3 F% I5 e$ q8 s; V//------------------------------------------------------------------------------) o {* k' r$ ]9 G. l1 g3 F! F- j: V
// Selection with type array) J% @ \8 H2 b) I, I: Z6 U+ ?
//------------------------------------------------------------------------------) [ b" ?& R) C: A- I8 x( H4 l
TaggedObject* MyClass::select_by_type()
. B V$ v2 @: _7 L{' P: T8 W8 N0 B Z6 i
NXString message("Select an object by type:");
; G# i$ u, E7 H. Q/ Z% W NXString title("Select object");. `. _( _6 z$ Z; M6 l5 {" i+ X: G
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 l H% J6 {4 x5 E8 w% L: e+ j: I/ r
bool keep_highlighted = 0;
/ z) V P' ~7 P K
+ Y3 ]% j7 j' S# R) E+ q+ G7 @& t: C0 x1 U$ F0 G1 B8 G" |. w+ T9 m& i
// Define type array, see Selection::SelectionType Enumeration" ]; g) `+ Y. y E8 ~
// Uncomment or combine the desired types
4 k1 U3 z: G6 K* D% u std::vector<Selection::SelectionType> typeArray(1);+ ?; K8 a0 x/ n5 `; | q/ j% R
typeArray[0] = Selection::SelectionTypeAll;
7 k$ V. ~! z/ F7 R7 K /* E5 ` [; f3 b, O/ H
typeArray[0] = Selection::SelectionTypeFeatures;
. \" `# E1 K$ k8 @- S9 X typeArray[0] = Selection::SelectionTypeCurves;5 W3 `0 Z, r) y! O2 H# E
typeArray[0] = Selection::SelectionTypeFaces;
" M7 p+ y* F- Q1 G; G1 a7 U typeArray[0] = Selection::SelectionTypeEdges;/ W6 p0 L' N# M
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
7 E0 o% M& R3 Y% N% d */
1 I K. f6 \0 e1 m) g+ `& ` z# p Point3d cursor;
" _% R q4 W( e1 B TaggedObject *object;
# t& g- A% e+ G8 h- S( o, T& l" |1 p6 `
* n; i9 {) u# z; v6 N' [) r. f6 g) j! w6 `# s% C3 J, w( z
// Select objects using filter defined by type array
9 R% [: ~$ Q) A0 H0 _ Selection::Response res = selmgr->SelectTaggedObject(* A" u. o8 [3 p; ~1 L- @ g4 ?9 J
message, title, scope, keep_highlighted, ]% a) x/ c- L* \5 [; I' Z
typeArray, &object, &cursor );9 F8 G2 C. ?: ^; g; n5 ^0 x
8 ?) p: }3 u/ @/ u8 H
' |4 C' j9 K8 e3 r9 a if( res == Selection::ResponseObjectSelected )) H {1 o* Z) p+ u
{
9 D7 r3 t) O; i+ V3 X. Q- d return object;
$ N% ~$ O; c; U: k( O4 L# v: N3 \ }/ f( K5 e+ ]: C2 J7 D
return 0;/ h( t/ Y) F/ ?9 J+ c
}" D; _* @6 R5 F+ r7 V
; k1 Y4 T. h0 d( W! B7 F8 D7 M4 i
3 L4 ^/ d. a$ ]+ h" c//------------------------------------------------------------------------------
' h" O( l3 [# X+ \. i- y5 x( t: R// Selection any objects
# R4 ~: n9 R$ y P) A- Z* a//------------------------------------------------------------------------------" B; K/ n/ a& t
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
3 Q3 o/ g. c4 [% }1 a{
9 Y! o/ \4 r5 X NXString message("Select any objects:");
& [7 F+ Q! {0 i9 l4 o( j NXString title("Select objects");; I) J# d1 S( v
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault; t5 |) p+ b3 q6 M3 D
bool include_features = 0;
8 [& }2 n) z2 p: R8 H: c bool keep_highlighted = 0;% ~* y# T% `4 \& f9 o: d
std::vector< NXOpen::TaggedObject * > objectArray;
1 v, Z# z- \6 f( F& N8 p
8 b, c7 Q4 q6 @' i1 }& M9 S+ T1 [ i" H
// Select any object array
9 o L. {0 T. | Selection::Response res = selmgr->SelectTaggedObjects(
( A9 Q7 ~8 V. j D$ o+ O message, title, scope, include_features,
6 W+ |8 A# y: F keep_highlighted, objectArray );
* R2 L- A: u6 C2 N0 Z! a4 V$ D' E1 H
! u5 k: ]5 l- V4 T$ Y+ }9 s; v6 ~# c- r7 K5 I C
return objectArray;
2 |3 U; ?7 X; }4 w) c. Z3 l- o( z}
) z& o4 U3 k; O; L# o* j( h* H; h. ^8 A5 s/ s7 T/ e
/ m' q+ } ^4 b1 N0 u- F
, a% A6 P5 R7 K' C O$ e0 r
! B! `+ g' Q6 t2 g; C9 i7 u) ~0 P, I- W
/ U: {2 g+ r) C, X1 G
2 e) U) l8 Q* d
$ O1 ?2 S! }% P9 W1 k) v |
|