查看: 4109|回复: 0

[资料分享] 关于NX二次开发中选择对象mask triple的详细讲解

[复制链接]

4

主题

3

回帖

46

积分

管理员

积分
46
发表于 2017-10-25 16:33:48 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×
关于NX二次开发中选择对象mask triple的详细讲解7 E0 c5 m# Z% F7 r
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。3 d( F2 \3 V0 ]: ]& \
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
$ U3 s7 Y4 @( X5 Z一些常见的类型和子类型如下:( }: `6 z' G" F
QQ截图20171025161410.png
% Y( _- H7 p+ l# d' c8 n' Q) F如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
9 v7 D! O- y/ ^4 A( p9 a" {' d实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 {  T7 C% L5 r0 p0 t
- e; Z1 d8 f0 C$ S" }% ]" f$ \
QQ截图20171025161432.png ( T' G% S- E9 ~9 j: W' J

3 U( {5 v- d9 {1 M# C
4 q$ P- D* X: j4 v! g
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。0 q9 G, U0 ]: ~* M% g- h
$ s6 z3 r7 e2 L

% n9 S$ m4 J# _# j* P4 h+ { QQ截图20171025162656.png * r4 M7 n$ W9 n' [
# p, g% v$ h2 g) e. g7 a9 ?
# F* g* X& @, g5 r  q  o' C
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。' h( @$ b0 E+ ~! U( e$ d

; [2 [# W! }; w: s3 h" W) X! l
" ~* \7 e+ h# CSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
/ }$ b- x7 [! L
" n: B) l: j: K% g' p  J! a# \
- w5 e/ b, x9 U- o7 c% {AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);+ x1 ?9 U) T9 W; i3 p+ o* T
0 C/ t2 x5 A# \

, E3 m2 |7 u6 K3 l3 W  b" {AddFilter (int type, int subType, int solidBodyType);2 e3 e2 R; P. S& g0 _
8 M$ U# [  _7 |7 V
% d5 {& c& {) e" ~4 m2 z
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:& Z. f3 Y1 g$ M2 ^

- K! h* |% v' j" S4 F2 e; x' @" ~3 N9 P- d, q$ n8 J

. p3 P. E- q1 q& C: {" t# z, t//------------------------------------------------------------------------------
& P; b( v& I- T$ h8 I// Selection with mask
) i) a# |% _& w* ^7 K: A( x//------------------------------------------------------------------------------6 d5 U% \: J5 K, a6 T1 C9 j4 L3 t
TaggedObject* MyClass::select_by_mask()
0 k, y$ y2 D. ]1 D) q, x{* b8 P" @7 B+ q; I% D; ~4 {! \
        NXString message("Select an object by mask:");
) T8 `9 [; G" f( S        NXString title("Select object");7 ], h  ]! v. o  {& I6 I, b
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;, g4 y- T8 z5 P- M6 E9 Z" n4 w3 U
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;- ?+ V( B1 A, `& l) L& k) K# y0 ]
        bool include_features = 0;
8 m' F. d* z" W% p- C. n        bool keep_highlighted = 0;
9 N7 H8 t. j  D& y- O) z
  @' h. Y" C- b# Q* |' j

( f! x, x. s; K+ i( w! U  \        // Define the mask triple(s), see also uf_object_types.h.
( M& p3 N( n/ ^2 a. v- j% A        // Uncomment or combine the desired mask triples- |" ]: G) e  K( i3 e1 \8 k
        std::vector<Selection::MaskTriple> maskArray(1);$ X* q- t. m  m$ r' R
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
) j. U- x. ~" x3 F: I/ O8 ]. k" _        /*
$ b( _- ^) f; y* O% A        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces! D4 ^& Y8 m# \
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges1 F' x; r# j  z: r, }
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
# O4 W) g5 @7 i        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
! E: s6 Y7 z+ }# W) e        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects* p0 M6 B1 z4 g
        */
% m) o7 b. K( U$ P- j- M) y2 c        Point3d cursor;) p) q2 }  H$ Q; X/ C5 z, A
        TaggedObject *object;. B, \2 c* C/ T4 Z% o# g. Q& O

& V# H( g+ A- H: \* ?. f

; X# |/ q& A7 _        // Select objects using filter defined by maskArray triples& F. f2 i. |* I) M
        Selection::Response res = selmgr->SelectTaggedObject(
4 K' P1 G$ l; a/ g                        message, title, scope, action, include_features,
$ Q8 n! X; F6 `" l1 y* v            keep_highlighted, maskArray, &object, &cursor );
* r: S, S9 _( ?5 R3 X: n
! b) M' E& M7 }, c
1 o1 v. R. E3 q9 b, E5 A: V8 H9 ?
        if( res == Selection::ResponseObjectSelected )$ W- a( ~6 r. P/ v
        {
& E: r# m- O. E% U0 j" X$ l                return object;6 N/ }" {+ Z9 o* O
        }% e& [% F& j2 ]
        return 0;
  L* H; ]6 v" V+ m* @/ R}( g( c" U+ M* _6 H3 B
: l* i2 G- a8 _

6 p% D7 g/ y) J% W% z. a//------------------------------------------------------------------------------
* U( b( n6 b; _+ D( H$ @// Selection with type array
; G% ^  E! {# x2 `6 c//------------------------------------------------------------------------------
* I) p4 \, t# S- u" O  `TaggedObject* MyClass::select_by_type()* T% P' O, a4 w0 A0 C
{
* a% V6 f7 E. |        NXString message("Select an object by type:");3 e+ e5 |$ y% @
        NXString title("Select object");
9 o; r" t. {% H; ]        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
  u7 K: }' y9 }3 l9 b, c        bool keep_highlighted = 0;0 o* ]& f' Z& d8 y7 \1 z9 f

; O$ u6 ~1 ^7 H; I
: g+ I6 P7 ]( ^0 }2 K  c5 r
        // Define type array, see Selection::SelectionType Enumeration( @; H8 b' ^* l& Y; q: {2 p+ H- c
        // Uncomment or combine the desired types0 p1 R) s! Y( o: a! v
        std::vector<Selection::SelectionType> typeArray(1);
. ?( [4 B9 g) l3 z/ `& o* n2 o        typeArray[0] = Selection::SelectionTypeAll;
) {4 p" e. _( I1 M6 K        /*
4 d7 I+ t- C1 m+ ]        typeArray[0] = Selection::SelectionTypeFeatures;
" r. c$ L  N' R( c" Y& r2 e        typeArray[0] = Selection::SelectionTypeCurves;1 J5 o+ P. R, _
        typeArray[0] = Selection::SelectionTypeFaces;3 s! n8 q& Z" z3 w  `9 C
        typeArray[0] = Selection::SelectionTypeEdges;
& t! l" L5 f- ]) f# H. z$ [, W7 o        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;4 v, R! |0 L5 N6 c( W
        */4 \* {- G3 ?$ e4 e. y1 Y) J) q
        Point3d cursor;
0 s; B  d0 X$ b9 H: z        TaggedObject *object;8 q9 |1 w0 b& I9 E" d7 R
6 L; e+ U+ A& Z; X4 U

9 v. v+ x0 f; Q! l1 w! w* m; `+ z1 G        // Select objects using filter defined by type array
2 k# g9 \- e2 P- s5 o- w! w9 a        Selection::Response res = selmgr->SelectTaggedObject(
: L+ z3 H+ h2 ~) G/ H                        message, title, scope, keep_highlighted,
) W- K1 J! C! M/ ]/ m                        typeArray, &object, &cursor );
2 `& s, s" \6 X# e% C7 Q7 v4 Q$ e4 i2 N9 m6 o

- }2 _- K( m8 L3 G4 i% {        if( res == Selection::ResponseObjectSelected )! {+ s' {- h4 H  d& l7 }
        {
" F3 [2 }, V$ H; l- n7 g                return object;
" ~- R- b) y7 s; }! E% K. A: x        }" @' i; C* W) I; ^/ \8 v  F
        return 0;5 K, L7 X! |/ k: e5 A+ Q* t
}
/ j/ q* B% N# H3 n' M" h) {
5 Y9 A- w% z3 U4 q

, C2 M, |  K3 P+ Y//------------------------------------------------------------------------------. @$ n8 v4 Y1 r3 [6 d5 g+ o) X
// Selection any objects6 n5 R3 [' `) d
//------------------------------------------------------------------------------
7 y- C) K, A7 pstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
9 f8 b- K8 O  K  f( m0 G{4 H9 P1 @4 q# \; [
        NXString message("Select any objects:");
" C1 d$ h9 q1 o. Q6 P6 W        NXString title("Select objects");
! J$ c' I  y8 n% U/ c        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;/ H& j% T7 Q0 H) M" J6 X' w
        bool include_features = 0;        
0 h9 O+ t' ~  o% m) _        bool keep_highlighted = 0;% A& k4 U# f4 k$ t
        std::vector< NXOpen::TaggedObject * > objectArray;/ d1 o2 u( |: g4 J

0 o: g" |7 \8 d' Q0 F  A( P% [) @! \

: P' Y+ {2 e6 e1 a, b$ T        // Select any object array
/ L8 Q* Z% C; Z. T        Selection::Response res = selmgr->SelectTaggedObjects(
( N: v2 C; t9 M                        message, title, scope, include_features,
* y& Q2 l4 F' \- A" D                        keep_highlighted, objectArray );
4 ?) `, n. ], T( f2 W& C- ]) B! |
1 i0 f8 I: m- n3 r7 b: s; g
* |6 v6 \& V- E+ y
        return objectArray;" H1 T% q! L3 M8 E; p
}% c5 ^$ q8 K3 D4 E  B+ j6 B
7 ^6 i. B0 @$ X( }* m$ A7 E
+ d! G3 Z5 u2 M) S  q

4 [' d: y1 W, v. `0 S+ b7 ?! p: h
+ x% f6 l2 d; R0 g0 E+ A8 O* ], Q

5 |& m" e8 @8 i  z8 J" n9 ~* P
2 [8 ~5 f+ ?7 v* u+ g3 Z6 h* h2 Y

) i' @" q$ \8 N: y% N# m
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部