|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX二次开发中选择对象mask triple的详细讲解
- K; g- P) ~+ e" J: S- Q很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
4 G% h! b. Y. O/ r/ J2 E如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
/ k& T9 f6 K! n一些常见的类型和子类型如下:7 s0 H5 w. L/ @8 r1 ~$ v
/ `3 s0 d* H- g5 @/ r* v( c- f
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。 r6 `& P) O1 b; s
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& }$ M3 P2 V; T* C' c1 i
/ t' Y( y* w0 a
# S6 x; m, H! f
5 g$ z# W3 O) ~- s- L+ Z9 J' s0 P
% X9 G l) p- o2 m# Z5 }2 f选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
) a8 h9 T3 o) Y5 [/ D/ d j% }6 o l8 ]# B! E0 \' K2 i3 Z5 w
/ `: ]. M$ j2 q3 D
% I9 ?: y, b& }. \% `* d
( @/ g6 o5 n( h2 o1 g* b
& M! g) r/ p: m6 `对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。1 e2 E! |! R6 Y6 c
0 h: E3 K# U% w7 P- j
) R3 t0 a6 l1 ~( t5 |6 ?- TSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);1 ?& K: S' K* R5 S$ O
8 D9 W) r) Z3 v3 U E
: _( m) D6 c* M6 v; ?AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
2 v/ c' L- J9 P! e4 ]
: @- Z, }; ]9 \& G% a- f' w+ A$ P4 _3 R4 @; ~( G
AddFilter (int type, int subType, int solidBodyType);
1 G2 M8 m: U$ f/ M( X9 S( @& ], \ R- s
, t. @ Y3 M2 s: X对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
2 a# E" |: v. r/ [' r7 ?, i _7 y( r4 D: S- E& _
' b. g Q! }5 T' e9 @
7 _, p5 A8 R' u- y& Q//------------------------------------------------------------------------------; J& S/ T8 L4 Q$ }, G
// Selection with mask
' k, D% K3 \1 E$ X" n//------------------------------------------------------------------------------" J- ^/ Y5 u% q) c: U
TaggedObject* MyClass::select_by_mask()
5 E9 g6 f- ?$ u% M' P{- d+ x+ n1 K* K# e
NXString message("Select an object by mask:");
, P4 i7 K: t; ?' ~4 ^4 F4 O8 @ NXString title("Select object");+ I" f% F% \6 G$ K( N; G2 l0 f+ }6 }
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. ]6 E, k/ }) Z* P( V) I' n Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
3 @; Q; I4 q% I' Q; j bool include_features = 0;
: x+ @: R: m' m9 b6 p bool keep_highlighted = 0;
3 [" E7 I- y( f: E& l9 G
6 h2 D, |: C! ?9 H6 F' K
& `* \7 T5 G/ H( f" ^0 W // Define the mask triple(s), see also uf_object_types.h.
+ r5 h3 t6 P8 u) S% a // Uncomment or combine the desired mask triples
/ I' {1 \) C/ ]: I# U/ u std::vector<Selection::MaskTriple> maskArray(1);
7 |! ? h# O" E& o2 u maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies8 C0 |0 u+ T! ^9 @
/*
/ L7 @5 X& A1 V+ M maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces) Z" C% q0 [; L0 M1 @- T
maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges3 ^% ^0 W, G0 Y; j
maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components! F' F$ k8 W7 f7 S% M6 l8 r( _
maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
, \' \ h" u; L# F! I2 b' H# N l maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects7 O. p, W! V5 r6 J2 E. d# G
*/2 R7 c8 x# R' e) }* e( [$ C! p
Point3d cursor;
u" I: C! @9 e) W: K2 [5 } TaggedObject *object;/ B- x3 P, ~5 @3 ]( g( A; m
# ^# h& l# D' c1 \; f
5 W$ ~* r. V' l // Select objects using filter defined by maskArray triples
5 w/ ?' C+ g# G Selection::Response res = selmgr->SelectTaggedObject(
6 r: @8 v# s$ j7 ~$ q: P( I7 Y message, title, scope, action, include_features,( k I" }% q5 H
keep_highlighted, maskArray, &object, &cursor ); U9 O/ g5 \: ~ X7 m+ E% R
8 V$ w& v( Y1 ]3 A. o# \ E
5 j- O2 t* U8 a+ a0 `) w8 C if( res == Selection::ResponseObjectSelected )6 g* _) a2 x3 g0 C2 _
{
6 u6 K: V, X; I% q' E return object;
1 C0 P. T$ }& u9 Z* j }
: n$ z8 U9 j- \6 }; Z$ o3 U3 @ return 0;4 Y1 W( z' @$ A6 A- {3 W; {
}
0 @2 [! a. ~, Y, h8 [# n5 P9 l* P* T6 [* @# J0 G' w0 [" h
; v# D* _1 \% W3 y//------------------------------------------------------------------------------
0 j0 y2 \5 V3 r" y// Selection with type array
: G4 p d, C7 r% b* Z/ m//------------------------------------------------------------------------------: h7 J# Y9 q* K# v6 R/ V
TaggedObject* MyClass::select_by_type()
& V3 |1 x$ {. x{
! b2 i: z7 i: } NXString message("Select an object by type:");
8 F) U# B U" B. z8 O/ D& }3 ~ NXString title("Select object");7 W, I) Z" h; A3 I+ A% t9 c+ [
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
( l7 i2 e% r( k2 F bool keep_highlighted = 0;$ \$ _1 l: s% Q( O
9 R, S5 S: B! V& g
% B! g2 E. G9 `) E
// Define type array, see Selection::SelectionType Enumeration
8 m) \- K: [' R; e. `; u // Uncomment or combine the desired types; ?/ w( l- @0 S% o9 f# P
std::vector<Selection::SelectionType> typeArray(1);# Y; V' Z5 b* R( Z( W; U
typeArray[0] = Selection::SelectionTypeAll;4 v: d7 c Y7 \. B! o5 i" m' {
/*' K: A, w+ F+ W' \/ p
typeArray[0] = Selection::SelectionTypeFeatures;+ r! Y" g4 h5 b. T3 p
typeArray[0] = Selection::SelectionTypeCurves;4 k" m# C8 T! [3 i. R: a9 L
typeArray[0] = Selection::SelectionTypeFaces;
4 M& K X! [# Z V! I typeArray[0] = Selection::SelectionTypeEdges;
$ P, s5 U1 b9 L typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
3 `% g H8 l5 |4 A */
8 y. B& U& C8 `# b5 \, q1 j4 k Point3d cursor;2 J" [# e) r# t# U. h8 L0 P0 k
TaggedObject *object;
& k0 i, W2 x% B/ {6 M
0 \) U' _, G2 v/ S6 T# g6 `0 a5 _/ w8 z
3 C7 f( b6 h& x1 M+ J // Select objects using filter defined by type array
1 m3 z7 j; F. n& y4 [& [0 D Selection::Response res = selmgr->SelectTaggedObject(! T2 F: [$ l9 \7 C; {0 t2 o D/ R
message, title, scope, keep_highlighted, n/ k* }; c" O2 p: ?% m
typeArray, &object, &cursor );
2 O- W& T4 `3 ^9 m* \2 s+ g. x) ?( q( A& u o+ k3 @! w
, E; y- k# M" Q- U* F" e4 M if( res == Selection::ResponseObjectSelected ): q( w3 b. L' ^5 i+ W$ c% f
{- y- s: O+ _; q
return object;
$ [9 d" z1 S% }+ i j i+ k }
( g% Z6 C ^/ J- C, {/ O return 0;
. ~! x( ~ | H2 x& W9 y}
0 y3 k/ e0 ]1 y4 Y) h8 f9 ~+ a- J4 u
8 y# b( `* h4 x8 H$ C
//------------------------------------------------------------------------------$ W. P, K0 B) Q* _- I$ D( S
// Selection any objects
' s! d0 f1 |. F6 p( e6 R//------------------------------------------------------------------------------
* u" [0 K2 N9 M6 h( T0 y& Mstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' b) c! U- _+ H* h% k4 V{) \: ~" @. b$ G5 B9 y8 q
NXString message("Select any objects:");4 d7 J. p0 m. c3 `4 Z
NXString title("Select objects");6 N: h* }% h8 o
Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
- c% _1 F; d% w2 b6 S' L& k9 v bool include_features = 0;
+ W! A e, B3 X& Q3 R7 y8 m% L- o bool keep_highlighted = 0;
5 i8 R w+ \& [. }7 t# _9 v3 g6 H std::vector< NXOpen::TaggedObject * > objectArray;
* p4 {! c8 i3 {1 a. |0 X% |% q t4 v' |% C
& y2 r% [0 r3 y2 }4 a- \! _- a4 ]2 a( g // Select any object array
. ^4 \) k0 \/ Y& u1 R7 ]; \& g Selection::Response res = selmgr->SelectTaggedObjects(& g9 h" g3 ]! n* i/ Y% r
message, title, scope, include_features,
* ]; s9 w+ S5 U! e0 ` @* j keep_highlighted, objectArray );) J. o) ?" f$ v" e z* p
7 e) L! ^; {) M1 \
: b8 x7 O& k+ d& _1 ]1 A return objectArray;4 e; c# Y0 u$ w
}
3 v5 q& l R, j; Z; c* e& O% I% e/ I3 \
! U! _ L2 a! N. }4 I7 B
, e! v# @8 I# v( q. v
/ l, ]5 r' f7 e. A# m1 l* n8 G( h8 n+ a7 i
9 B% N' C4 b M2 ]3 V2 V E2 Q9 y/ _4 B6 K
|
|