|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
& n0 ], n% l; O* Y+ _% F" K很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
: g2 | N; U& B9 s' b7 }. Z如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
* ~8 \1 O! s- J一些常见的类型和子类型如下:7 \* a8 Z- T/ \$ V9 F# H
' S' H' E: M1 U: u w$ u
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。2 L$ f( ]6 M7 ~9 v
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。& k( f/ ~+ v0 m3 C/ Q: P2 W
& Q% Y$ c, K6 v5 v, c0 y0 m
, O+ M" ]- D: w/ x
& ]% b" n6 W, U
8 e( C/ \) Z0 G. h! B选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。& T9 E1 U9 J4 L: i' Q h
" u5 A' a: T5 [4 n$ D9 x
2 H- \- H4 @! z
: Q% H; p1 y* a; A; s1 l
7 j5 J& A+ R G% n( C7 _- M: X3 a# T, d1 c; P# O
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。; W, x! G* |6 k
3 L9 {2 Z9 _3 i1 K) m# m6 @1 ?4 c0 B2 J
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);7 z( g& M: m, O! Q& i
& @' C$ V! `- ?7 _% w P: f2 R) ~2 ~! ~' K) @# t
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
+ t# m( d. N3 h0 D/ H
R, Q: U( L2 `2 H6 A$ h- X- |7 y0 a+ }0 h3 e6 x7 y+ M
AddFilter (int type, int subType, int solidBodyType);; |6 F8 n! t( {
" ?1 m0 V: K4 u
$ ^- M6 Y; a1 S0 c1 c对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
5 n( P' N" x6 L
% d$ g0 {% d( J. ~/ p2 L4 O
7 n$ q2 t: V( r$ u
; ^& W. d0 f+ V I/ I1 L, M//------------------------------------------------------------------------------
, @# }! t, ^+ {$ g/ s1 @// Selection with mask
( J! P! Y0 ?; G7 T+ \//------------------------------------------------------------------------------3 {, E9 e) N' ]6 g% A( r. B
TaggedObject* MyClass::select_by_mask()
) t* o0 U1 H! A8 ~{
6 |2 `4 Z$ l. @, X2 t3 f$ U* R6 { NXString message("Select an object by mask:");
. k' R5 ^5 T* w$ G$ ~% {2 C! A NXString title("Select object");
( j9 S% Q8 u" i* w Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;) V1 T7 J' g9 `" b! w, [7 |$ D& e) \
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
, w" m; q$ |9 Q3 I# m bool include_features = 0;7 B: k& c S* P, h+ K0 N3 B1 k2 P
bool keep_highlighted = 0;
1 ~0 V0 {, w5 _ X7 D+ _, v' { Y' Z8 Y6 @2 ?
1 U# R: y/ u- Y // Define the mask triple(s), see also uf_object_types.h.
7 q' a' w; n6 K X1 M& p4 d9 n8 y // Uncomment or combine the desired mask triples
5 e) k; [8 F! i3 P$ I std::vector<Selection::MaskTriple> maskArray(1);$ l6 a% g8 ~. j# a6 B) H
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
" o; F- [1 O0 ]$ |' x: R /* w* L/ b6 v; k/ d% P. S0 Z1 \6 @
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces+ s1 g% N! `3 v' i
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
2 Q4 {3 w6 Y$ \2 W8 F maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components/ _. k1 Q4 N% T. n' O* d! y5 X5 k. V
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
3 l; ~+ ^/ h5 _9 ^- n$ u maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
: |7 r) o Z l1 W */$ f% ?0 {. k: f
Point3d cursor;6 L# i: \+ f9 a) L0 {0 v( t" E
TaggedObject *object;3 S1 L7 K& M" ?" p, F
; Z% ^+ B- A% t* W o
& U8 Y& Q/ p; v; A
// Select objects using filter defined by maskArray triples
. j2 k1 h' D, F. s* G Selection::Response res = selmgr->SelectTaggedObject(
$ V0 ^4 b% L' m! `) m message, title, scope, action, include_features,( Z1 b# q5 S3 @& Z0 B
keep_highlighted, maskArray, &object, &cursor ); P2 ~# s0 N' v2 w7 w% L! T7 |
% A! D" R& T* f, S0 o& j
- x8 A6 {* t) k- K; R [+ X if( res == Selection::ResponseObjectSelected )( h2 l5 B- ~/ g1 W- u
{
' t' Y, u# H: r& z+ { return object;
" Q, a' R, C1 S c# ^# A/ d }" O& Y# ^ h- I, P0 A5 {9 F& j5 @
return 0;# ]; W/ c7 B- ]+ H3 T+ @7 e
}
" d. `/ t1 f( r4 o' ^, \+ P" Y- U
7 ]% T# k9 _5 L0 @# f& e! l4 @- `5 W9 l J& n
//------------------------------------------------------------------------------
m: |8 z, j! Q# I; M// Selection with type array
8 n F! _6 K0 o' U5 W//------------------------------------------------------------------------------
. a1 V0 [! {- d' ^TaggedObject* MyClass::select_by_type()
' l( }- Q! Y* P4 r, M" a! l{7 ?- X [ Y. C7 [
NXString message("Select an object by type:");
8 _- f& \0 B P' _ NXString title("Select object");
/ T* r% p) Z$ i- F9 ^4 e Selection::SelectionScope scope = Selection::SelectionScopeUseDefault; t1 A# h" j6 ]: x- ^' _
bool keep_highlighted = 0;- n- N! n. ]6 j8 q( W
( e5 m$ T* E0 B2 k
( j6 Z' R1 a1 N // Define type array, see Selection::SelectionType Enumeration
0 r W% |' d' Q( i# a! s3 D // Uncomment or combine the desired types; l# |; i2 a7 \
std::vector<Selection::SelectionType> typeArray(1);
# m8 X5 ^7 Y! N o c1 t4 h typeArray[0] = Selection::SelectionTypeAll;: s. j8 ]; {/ Y: t2 s! W
/*, q. @4 W \# h/ k( C( V
typeArray[0] = Selection::SelectionTypeFeatures;* V; z! e. M) p1 e, c' l
typeArray[0] = Selection::SelectionTypeCurves;6 }* [: H" O: q; ?* a
typeArray[0] = Selection::SelectionTypeFaces;
7 f9 ]7 |* P6 |% F* A& _: r typeArray[0] = Selection::SelectionTypeEdges;
& m9 p! j) f: y1 C typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
; k5 C. |: a& j+ \7 C */
s, R& B" x, }( Y0 M Point3d cursor;- V* @) g5 @. ^2 W
TaggedObject *object;; U+ m; n$ h; v. f3 {$ |
1 h; G8 M( L8 m5 u- ~4 r7 J8 K4 l
! V: g2 V/ W; @; v2 @
// Select objects using filter defined by type array5 z5 X7 s8 W3 a/ n! m, X
Selection::Response res = selmgr->SelectTaggedObject(
( @' k F3 W9 k% M message, title, scope, keep_highlighted,
+ ~1 V' c/ a. \ typeArray, &object, &cursor );5 v4 u0 b( ?! V6 w2 S
6 Y6 Q3 o* ^, n9 | o% }. N' R
" J6 c" b- q8 b' ?7 m( } ^% L
if( res == Selection::ResponseObjectSelected )" K8 N/ U* F* l
{, B" R2 i. J7 Z" X" U6 U
return object;
7 G4 ?9 y ^% `9 |" [5 L }
0 {' Q `) G2 u+ S0 b* r4 T return 0;/ T" }* N$ o) P/ `. a
}( d% c* b5 [+ n" z& e
4 E; c3 Z7 O0 N6 Z
) N* P6 l) f% ]5 H! ~9 p//------------------------------------------------------------------------------
% U$ s8 v Z! ]0 H3 k// Selection any objects
, S4 K. M/ i2 q% w% n9 b//------------------------------------------------------------------------------
3 M; E7 T7 j+ h+ ]+ zstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
$ V- y" }) y6 u{
* f6 J3 O, F$ N1 {# O4 a) l NXString message("Select any objects:");
/ v# k: s; f$ p$ J NXString title("Select objects");' q$ l3 p4 t) K+ @) A" q; L
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 I- |9 i- f# w% [8 D1 J+ k( M
bool include_features = 0;
5 k) N% {5 m. J! t0 b bool keep_highlighted = 0;
h0 U) c) ?' _ std::vector< NXOpen::TaggedObject * > objectArray;
! t. ~! O+ `$ |4 ]" C
* ?) D7 M7 ^. ~" }; L
) F' f' O! ?1 ^ // Select any object array2 \7 u" ~% U, w0 F5 ^
Selection::Response res = selmgr->SelectTaggedObjects(* T& t' t5 h* F/ t3 u$ U
message, title, scope, include_features,
- d4 j6 Z9 B( Y& I keep_highlighted, objectArray );) A' f/ G$ F% u; D
2 V, B" F8 O; O0 E* p
6 U* c/ i# Y% [# x' f return objectArray;
: @* \+ b7 P9 S$ f, h0 j}; w4 i% C4 W+ P' B& X6 o9 [5 I
$ M# p0 n! L; G0 b1 |9 N
g) g# a3 i, P1 n+ ^" I7 z" s6 O7 s/ M" g& d4 d
4 Q4 g1 x5 A! h0 @4 T2 I {
5 D0 t4 U" w9 q/ O/ c" e$ k
# Q; [+ @& p4 k3 h' d1 K) M: t+ l
, \) a; h7 q1 \0 r0 A' m1 ~/ S |
|