|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX二次开发中选择对象mask triple的详细讲解
& e, [! W/ a, G1 |很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。9 R4 t) |- C9 W8 _; r5 i+ D% s
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
" {; S5 C2 V6 g/ z; ^6 ~0 W一些常见的类型和子类型如下:% _. H) |/ b1 _: D2 ~
/ e9 G s' S& }) R
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。 Q* _5 o* N) E1 ~
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。( w% `% C# D& Q# E
) D4 I% v- E5 p; Z; b
7 V5 C) ^# ~% O% e f* y9 n6 R! Z8 j: p
. Q& m( A0 Y) `" ~0 h
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
' f# r% s2 h3 R: S
! m g, X3 b6 {0 j& h; h& M4 ?! S i
1 g" \9 x Z6 o6 T
: e( ?0 q& D0 I5 ]/ p" D# `, u5 C( A: m1 W6 B! Z7 l
" i3 R" F6 G# P; r' a2 _6 m对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。3 c+ ^: r2 `+ {8 v7 J4 P. ]" t
; x% }, u+ x: \' a. u1 J/ }- F+ M- P
2 a2 \0 s, j# N( S1 o8 b5 n- ~SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);5 Q; F2 q8 q7 r, w3 u) K
: I8 V' P8 b$ e. `1 c" h
Y4 |1 t& B+ c3 @: L5 b O
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);( U" a# P+ ^& T/ P
/ {6 A( {/ t6 x, `5 q1 _, i3 Q/ b
" J* c. ]8 n/ P- ZAddFilter (int type, int subType, int solidBodyType);% c4 {7 r2 R3 _- Z2 w
7 d3 v, W7 g9 C! k
6 K# z' H# G5 i) l- ?对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:6 e; \) e$ r* X. g# l G
* o6 `( j7 m4 z) e2 ~3 M; I/ M5 L+ z) b: s: a8 ^0 p
- c+ ]' v" b2 p% i& @5 d//------------------------------------------------------------------------------
$ P7 a' [( q/ S# Z) I// Selection with mask
5 `6 Z) _ X$ O* a+ T% Z* x//------------------------------------------------------------------------------% h& {% o1 H- u. s6 B
TaggedObject* MyClass::select_by_mask()$ \) F5 R# L! I% k, o2 c. {) v
{
o3 R! ]& X4 I# C# G% _ NXString message("Select an object by mask:");
3 W3 l7 u- v$ A0 ` x7 i9 C7 I2 C; N NXString title("Select object");
! z+ c5 v0 D. z6 _ Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;! N/ z, B7 u' Q7 j
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
0 ]1 T) ^" J$ z4 }5 u bool include_features = 0;8 ~/ I r9 C2 _+ f
bool keep_highlighted = 0;2 B4 a/ w( p8 K; ^
5 X7 n; X7 m [2 E
5 V6 c1 e+ }8 C* \+ Z. [ // Define the mask triple(s), see also uf_object_types.h.' o' ~4 C( D7 l _
// Uncomment or combine the desired mask triples
9 y$ {7 E( w, ?% U std::vector<Selection::MaskTriple> maskArray(1);+ \6 ~2 Z& T5 u* q0 t* U' ~
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
- y" B2 }4 X" W2 b& A' e5 s6 p% W( T /*8 v' |3 @$ A, k) q
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces, p2 h; C" i7 F1 g, k; c5 m
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
' D. Z$ z, f, p' d7 h maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
4 Z `0 ? X, I: l4 `0 A- ^. R1 [3 {7 ~ maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
# g/ e! P, c+ O maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects* D1 E$ ~, q& e# n9 i+ q
*/: f% D* ]. u3 n y7 H$ |( g
Point3d cursor;
$ X5 F2 g% M K# ? TaggedObject *object;; M8 V" F `1 x# C& K j
! Y: X. P' h1 Q' m9 L
# P/ y3 Y0 p& x8 |4 ^4 d! Y; @ // Select objects using filter defined by maskArray triples
3 P! `9 M; f, F9 ` Selection::Response res = selmgr->SelectTaggedObject(+ h. h) A% `5 U/ A$ L, H3 h$ e
message, title, scope, action, include_features,
" ^. X; {& n, \! M- N- g3 P3 _! { keep_highlighted, maskArray, &object, &cursor );$ A) {. T! z: u% k5 `
6 |) l D- v3 x; r3 b0 ~5 B( X: @
/ T- f/ n7 f% t! E if( res == Selection::ResponseObjectSelected )
3 [$ I6 g5 l- e8 F {% M, m1 n9 t5 f0 ^
return object;. p. K( G9 e7 P( I3 i$ p
}
: b/ N/ E" y2 D* \% y9 f% d) o" ^ return 0;6 p0 I* n; ~& `. P
}+ G1 f4 l8 Z% W6 B3 O% t
* y' l" T. T5 ~# R& J: B# O
5 Q& t# e' A$ c( V+ U
//------------------------------------------------------------------------------
) w% b7 F3 _3 E& T! N& V' P% P// Selection with type array% v! m5 x$ u' n" o5 L* h
//------------------------------------------------------------------------------" h# ]' l" U: q7 N* _8 L2 h* B6 }
TaggedObject* MyClass::select_by_type()* [& h& K) O% t- l3 v% j
{
% q; X: Y4 O7 Z3 X( ~+ `) w+ k8 ~% ] NXString message("Select an object by type:");- p) L4 W! h, j0 {& \
NXString title("Select object");
' \: G p# M8 T4 L2 T$ u. W5 d Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
% M2 e5 q1 T$ y/ ^0 _ bool keep_highlighted = 0;: w& G2 Y6 [. h1 [
& l! x) b* c* ?) V
, {" ?. v6 ~; w" B; g% C
// Define type array, see Selection::SelectionType Enumeration" o0 T/ Q, S4 P6 D
// Uncomment or combine the desired types9 [! o' p" _5 s/ L+ \
std::vector<Selection::SelectionType> typeArray(1);
& @7 ?8 x, l: g( s O* W p( b typeArray[0] = Selection::SelectionTypeAll;3 `/ @5 v# ~5 V$ t* D9 [3 w
/*- |5 @, `0 T; ~9 M V
typeArray[0] = Selection::SelectionTypeFeatures;
% V& M n; Z% W; n' |7 H typeArray[0] = Selection::SelectionTypeCurves;
1 [4 M9 x1 a p' R. x, i! I typeArray[0] = Selection::SelectionTypeFaces;
+ ] l( d6 h) R2 h typeArray[0] = Selection::SelectionTypeEdges;; v( o: x) i* l4 Y+ s
typeArray[0] = Selection::SelectionTypeCurvesAndEdges;! w4 B! i0 L: {7 E0 c: s
*/# U5 q2 L' n; A6 |
Point3d cursor;$ a& `' Z% B1 }; T- S2 m
TaggedObject *object;
& M2 j$ B" G0 Z' x+ y* K2 }% p. d4 N: O Q* [" N7 E, ~
# B/ ?" z; C. K" U
// Select objects using filter defined by type array
0 p2 H% U2 i. j1 Z* s Selection::Response res = selmgr->SelectTaggedObject(
$ e$ M) z+ y+ l2 W8 R message, title, scope, keep_highlighted,
( p( f R$ V. ?& [ typeArray, &object, &cursor );
; U! W7 c) C2 R5 `, c4 B/ f1 c3 J. d( T4 ^3 G4 S7 g, r0 H. Y
; T/ }5 O$ h4 j; t if( res == Selection::ResponseObjectSelected )
) }: _4 i5 ~ I k. ^ {
% u9 f. c: h& K# w9 u. z' `" ?) o return object;6 P6 Q! q. r0 E; P
}# G6 O7 _5 X% d
return 0;8 Y9 Q5 Y* P. p& l7 c# J
}
; u o: ? y5 G
& a( x/ g% z! u$ d9 `. a- g8 r. _' _- H# {
//------------------------------------------------------------------------------! m8 f1 ]0 L: X+ r( t; F
// Selection any objects+ E0 J) ?* ?# u% i2 B
//------------------------------------------------------------------------------; C& f, C+ }# _+ ]
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()9 o. U( [' w; Q0 H8 f" i( ~
{
* A* E' [0 y. o( \0 d5 q NXString message("Select any objects:");
( C' [1 B' E2 z* o1 H2 {5 V/ a NXString title("Select objects");
! E% n b0 W8 z( W Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
% C# v( W. e6 u; @9 x e$ a bool include_features = 0;
) Y- V! A6 c: Q: A, P% f bool keep_highlighted = 0;
2 M% i2 k, n8 m8 C std::vector< NXOpen::TaggedObject * > objectArray;
" `6 K# ?0 h2 S/ m
% w- W5 Z4 O( E
% m7 v4 u& e k6 Y // Select any object array% D( K# w, e. v. R/ A$ ~# w* D
Selection::Response res = selmgr->SelectTaggedObjects(9 O" C Q7 u" H& \ f
message, title, scope, include_features,
$ h5 a; G; Y ` keep_highlighted, objectArray ); G* e' \- F2 z# W3 T
9 l9 A% ?5 F: K5 V
2 Z1 t; [( I2 N3 u8 g
return objectArray;
' [2 U4 B( O" V. m; e# y3 `) x K* P}
. F6 a) t* k0 w/ c: l
* ]) @ I# n; G/ T" I: p( D2 q' s2 k3 A
$ V5 I5 s3 A9 r2 k; i3 V9 T3 F5 h
( n& S: F) K# B1 p) e& X" g7 C) s Y- J; F$ \. t
# \/ W/ E; D& o5 W |
|