|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
) |) L2 V- g0 y4 r" X! y) O4 ^8 W( a很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。( A9 v8 I" P% j. Y' k' o
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
9 N( v2 o% z5 o% s2 l% U6 f. F一些常见的类型和子类型如下:. @+ L! _5 d% M# ^
! O# N& Z* y' Q" X; L! m6 @9 E
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。% q( Z7 I+ R7 E* i
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。% x" C; J1 A# |1 H# W0 P
# ?' y: s* v1 V3 V2 G5 _" u- P
2 ]8 }8 p3 Q1 I0 X5 Q* E+ P
# ]9 H6 R0 m& Y# B
5 ]( ?& Z$ ?8 A/ L) @, X* R选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
9 w: L- z! b9 z2 b: ]& r
2 P+ L* K- w0 T7 [3 {! ^8 t- p( B& v! y8 T
- }) [$ W4 T' ^% {. p5 m
J# u. p; E: }- ?4 X/ Z
' r, z; G1 o0 t3 m) N' ]) F对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' f- W4 ?. W; K% ?$ N; O' d5 b$ c3 m
; ]* s3 n+ P$ \/ U+ _6 z' z
& \$ s" X" L1 L. K7 j) r! ]. oSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
3 K; K4 U; ~ ?2 T; Z p6 t' j- O: ], i* o, v/ c
1 V- ?1 Y) {8 H" Q
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
R3 B; J4 P4 R) e5 i% j) F
4 N) |. v$ G1 I' A9 ~
, V* |5 L- I# e# J. {7 v% u1 {AddFilter (int type, int subType, int solidBodyType);4 X* R( i2 n; ?# T1 U8 r
/ K8 I' U1 Y6 a, |. {! r
; b1 I4 p) ? M+ W; q9 ?: I5 W6 d
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:6 d3 r& W2 n8 D$ W% R
; j- ~8 y* t V* e8 l- b
( j2 x8 e J8 W+ r
. g2 b( Q% r: [2 ~6 I0 n2 ^//------------------------------------------------------------------------------ @) b0 E4 x2 ^+ c
// Selection with mask6 w+ X! ^9 r. L
//------------------------------------------------------------------------------& v' S7 z2 y' d
TaggedObject* MyClass::select_by_mask()$ O! a6 R* Y& O
{6 p) ~; L K& G; |- M% P
NXString message("Select an object by mask:");
$ X8 U) Q. }* p5 N4 O7 ?; A* L# { NXString title("Select object");
, U0 W$ E- [' _/ o. D Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
6 W: S8 n' s/ U) t' t Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;1 t) x# [$ e8 C/ o2 {8 o
bool include_features = 0;4 i( ?* L1 ? H! x5 R' K/ n4 ]
bool keep_highlighted = 0;
* f- |, g0 I, J6 r8 c. h$ P$ {- Y5 v# m
O1 T/ {# n# a0 N+ V3 F! ~
// Define the mask triple(s), see also uf_object_types.h.
% m( i' r& V* U; r0 @/ J // Uncomment or combine the desired mask triples
- N9 g: l0 p* N' E# ]( u) q std::vector<Selection::MaskTriple> maskArray(1);
4 O, B, X9 ]1 @7 a" i maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
; [$ F+ U5 ]# V( Z X /*. _) h& l* w) s4 _
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
: E& W# V1 m+ D- T0 ` maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
! t2 _" p5 n* r) h maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
9 l$ T6 `* o9 x5 ]- A0 U maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
' Z2 l! T* z) c7 j maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
7 H& g) V) r0 Q V8 D */
- B+ `" Z4 e0 U% w: ^ Point3d cursor;
( E0 r; {" Q" W8 e! i D/ ]6 i. T1 s TaggedObject *object;7 E6 n! b6 ?1 c; C2 y7 }
' S+ l4 u5 M- v9 c$ M: f+ C# u0 p/ _
8 b% m R7 K9 C! k. M // Select objects using filter defined by maskArray triples6 f' _, ^2 Z7 \; Z& r0 J; ^/ y
Selection::Response res = selmgr->SelectTaggedObject(
3 q" c! f" j; M message, title, scope, action, include_features,9 `2 [. a, z8 Y/ r4 a* D' t$ u
keep_highlighted, maskArray, &object, &cursor );3 Z- N- y5 f9 h5 y( l
- P; x0 Z9 D; T$ b% J, c8 R6 S6 n2 E' j' \
if( res == Selection::ResponseObjectSelected )1 K8 a8 a& O; _3 B
{
) H- y# N I( l. o2 g8 E return object;4 f9 k8 I7 W$ ~, {; |* \
}
5 S: U* K4 E4 K& |1 Z: M return 0;
$ n; S" N3 e' k7 r4 g}& F6 D4 n1 ?) U- D0 B. ]
% \( T# E! q: b. u' L
. U" p1 R/ t5 r$ H0 Q4 j//------------------------------------------------------------------------------& s* o' Y+ B F( |; N
// Selection with type array; ^3 k: O- V6 @) N3 J
//------------------------------------------------------------------------------: u) F; k5 {6 G9 P4 M$ y# ]) L' Y2 D
TaggedObject* MyClass::select_by_type()0 o* w9 U. ~1 `8 y8 I
{, W9 i, c/ K2 g8 [
NXString message("Select an object by type:");. U: T3 Q$ d$ y9 }8 _# v h6 g/ r
NXString title("Select object");
7 A' G- L) o; L! g Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;7 m3 ]* L. Y5 @# e8 @! A0 d
bool keep_highlighted = 0;4 c2 l# S0 j- f9 P2 W7 q
% e8 ]5 ]) o# w6 @& T" z
: Z' n! z& L0 e& v, u. f. k. x! \
// Define type array, see Selection::SelectionType Enumeration6 y/ ^$ r; G. D% z
// Uncomment or combine the desired types/ H( O. p0 F4 E6 ^
std::vector<Selection::SelectionType> typeArray(1);
1 a, x' k. q; f typeArray[0] = Selection::SelectionTypeAll;
2 m- ^5 G+ ^7 l' T' f( S8 f /*9 O% P* O& q0 D6 c5 R% E! S
typeArray[0] = Selection::SelectionTypeFeatures;8 v1 Q- T+ @; }; Q; s. e
typeArray[0] = Selection::SelectionTypeCurves;5 H, a+ L4 N2 I) T
typeArray[0] = Selection::SelectionTypeFaces;
1 T, a" L. I+ l$ s* ^8 w typeArray[0] = Selection::SelectionTypeEdges;
4 M6 k( w* `1 M) Q0 x: d typeArray[0] = Selection::SelectionTypeCurvesAndEdges;' o3 v# |# k! M+ @. ?9 ` S
*/
) p$ a# U1 K" i* ^8 D Point3d cursor;! k% w; i/ s0 }3 `; \: h% l
TaggedObject *object;. K- E; h8 i) o6 G
3 y- E; R0 w" y" j. O( p* h( ~: V/ A# ]
// Select objects using filter defined by type array
l" ?5 y4 f7 |' E" L6 _2 W Selection::Response res = selmgr->SelectTaggedObject(1 b" ~- U6 P' F
message, title, scope, keep_highlighted,
: n- z7 R2 {' l! F8 l3 U4 R1 W typeArray, &object, &cursor );4 \2 l: n7 s+ P1 V4 }
; T6 F A3 ?# A V" K6 X" |5 S" P' y& t! d) [* K' {/ D
if( res == Selection::ResponseObjectSelected )" l, S. O8 \& [
{
3 n; E! M" F+ L! a8 c, J return object;5 ~3 x- m% e) x# C- J9 M3 o
}' c) h: ?7 t t7 V( M1 C2 m
return 0;
; m3 A, h8 E" M% J7 {. S}
1 [7 u5 s* Q! J5 q
+ ~+ O5 x# b/ _( z
9 f2 t* K& v3 t T1 a& Q! V//------------------------------------------------------------------------------0 r+ @, K- w2 d. |& }
// Selection any objects5 E4 ?9 R1 r5 K- P0 z- U: K' z0 P4 N2 O8 H
//------------------------------------------------------------------------------) a% k. H/ P' e3 [# b) t+ H
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()9 g9 t7 e% J: g9 M: p
{9 k2 r' @' G8 }8 V
NXString message("Select any objects:");; L* f# M- b5 o" U( v& `
NXString title("Select objects");
' m; A) I2 O( F4 h4 w- D6 z6 M Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( b5 U) G* X7 g2 o, C2 P+ @
bool include_features = 0; $ F# W! b0 ]6 w: @
bool keep_highlighted = 0;9 u6 s1 G: e$ E. x$ t- n
std::vector< NXOpen::TaggedObject * > objectArray;6 m: @: y2 q6 s3 ]1 g1 D4 f
! S2 b6 h9 j* q
4 H: x7 J7 s+ a+ }$ _8 }' t // Select any object array2 v- Y! c' J- v: W8 U: u4 U
Selection::Response res = selmgr->SelectTaggedObjects(3 S$ O0 @" Q5 E# I F
message, title, scope, include_features,
7 t" ^! @5 x2 G3 T+ W5 O2 Y keep_highlighted, objectArray );* O- K% d1 K3 r6 ^ w
5 R! ^* ?& N. L, J
. T2 H, X/ i5 P- d# n2 i
return objectArray;
1 d: C, Y5 X0 T& p* E+ Q# v}# U+ w7 g- b4 A* D/ {& Y
! g5 O% ]; t0 M8 i5 Y6 k, h, Y! v" ~) h& y' V6 e
$ k& J! n! t* a9 c" |) `7 T) I. J6 V0 ] u6 c0 ~: f
: v4 N1 j# s2 r+ B K' d( v
% G0 `* u- |, O- R7 C) E ~7 D1 D; V" ^8 N
|
|