查看: 4054|回复: 0

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

[复制链接]

4

主题

3

回帖

40

积分

管理员

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

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

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

×
关于NX二次开发中选择对象mask triple的详细讲解
: D8 e# M, ?" z# S4 [/ m很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
5 I* v. j( Z6 i7 T0 W5 A$ J3 O+ q如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
$ `6 ^4 n1 x" o0 ]( Q  H) e! t* U一些常见的类型和子类型如下:
* J/ f! T+ Q$ v) Z. A( N+ \ QQ截图20171025161410.png
. o( j9 s: n. X, Z如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
  M$ l; E  e% q( S& h9 N# _: V' o% H" M实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。6 S; f. f! l; I+ }/ x( j( N
) p# e- i6 L5 N8 T# `' ?3 H
QQ截图20171025161432.png 7 K2 Q* H% M; X- ]
" Q" g5 z0 B" r0 \# n- E
4 G. W# N% q: \4 o/ m1 D+ m
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
1 ~" g- F9 }" P! G% m( N& a2 k
8 H* J! k. D5 J5 A! v" Z8 Z) D* z
  {1 ^! D3 d0 q. o
QQ截图20171025162656.png
( I# p% Z; a8 R) b+ o! H$ M! V5 K3 l

$ \# Y. c+ ^/ ]6 k9 z对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
$ L6 S2 Z7 a# \* o1 U4 g( u8 h% d/ X7 E
$ L( @0 N9 j% o' r8 ?
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
; j' f$ x1 _. E4 H% C" x
6 s5 M/ A/ J* J: V% R
# X& J0 _# c1 X- }, [AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
5 p. S. A- \2 n
/ t' U1 {: i+ v* t# A' d% y; c( w* G* u. `
AddFilter (int type, int subType, int solidBodyType);
! ]4 a5 i* d; ^, b" M
6 b" X3 b- ~/ x3 c4 `

3 Z8 q$ R4 O% ]) v5 U) G+ s4 w* D  y" _对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:: T, c+ w& \1 c% D% J- N4 N
5 J+ \% }6 Z5 Z

  @  B/ N. G# b) i5 T( v7 m
% s6 ?- M% F5 w# f, v! Q
//------------------------------------------------------------------------------
8 ~( f" P3 K. ?0 }// Selection with mask
3 l' {4 s: G# q: b: F3 n: _//------------------------------------------------------------------------------+ m; p' F4 q2 L& n2 k
TaggedObject* MyClass::select_by_mask()
$ O% |; k# g4 L{/ J* f+ ~+ ^! I& a# z  M$ i+ f
        NXString message("Select an object by mask:");: V; p+ p1 Y  P$ N6 k: ]  A
        NXString title("Select object");; c  n/ ]/ @0 b' L* C9 |8 u' l
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 W/ H( P, l3 o9 a7 E' J$ _
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
9 p( l; {. C" D- O4 w; y1 c6 Y( B% \        bool include_features = 0;
% t8 `7 j: S4 r1 G9 c0 u        bool keep_highlighted = 0;& b6 Q2 k* b) B) L* n( ]2 N

3 F3 X% B, U# b9 w& ^
0 B  E4 w, g" g4 U, F
        // Define the mask triple(s), see also uf_object_types.h.
+ g+ W. s* T/ t  r% e/ x        // Uncomment or combine the desired mask triples+ R+ n% A0 R% f6 \* w, a* A% K
        std::vector<Selection::MaskTriple> maskArray(1);
" A+ \/ H1 C( f1 T: `2 ]; c. W) B        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
0 _, B0 j( C( G6 A% M7 d# \        /*; n: \' W' e& X( n0 G4 q
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces% x1 ?4 a3 J! J! {
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
/ A& e" Z- Z  n3 r- ~" E. U8 G        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
7 _1 N4 Q2 w' }, p) ]        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines. }  H6 Q6 ~7 _* A
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects. e; B" e( T$ q5 D
        */
3 x  g+ Q; [5 O. w" u7 e& n        Point3d cursor;
( E- R+ |- Z& }0 a) U8 E        TaggedObject *object;
) H( X4 x& w; J- F) e, Y
8 w7 q" f4 @/ [, ?
2 m2 f5 C! f& z5 d
        // Select objects using filter defined by maskArray triples( W) N" F. d( v
        Selection::Response res = selmgr->SelectTaggedObject(
6 {9 ^7 Q' V0 L5 @$ R( }  }9 P1 B1 d. i                        message, title, scope, action, include_features,
& x5 f6 q" t, B3 @( l            keep_highlighted, maskArray, &object, &cursor );
1 r0 \* a7 {0 e7 ~  W$ W) Y
. m8 ]  _  G) A0 {6 V+ g; ]

; k. ]* V3 J5 W& U        if( res == Selection::ResponseObjectSelected )
0 X, E+ c2 N* \! K( ^        {9 E( o+ m# x3 l+ e
                return object;
* A& R" h: R, o        }+ w  r) }! s/ U5 {
        return 0;3 T% q+ [# I! y$ s: \
}
3 k- F1 O) L& ?, W6 D" P9 D) e+ c3 a2 i7 @5 R4 ^. e+ x

& o% d) ?2 K' ?0 D, o5 {//------------------------------------------------------------------------------
0 V. `+ M0 R; K" E) d; U- c$ B, V// Selection with type array6 f0 z3 I* y  ?: z; }7 c
//------------------------------------------------------------------------------) Z6 \8 z; H& F3 e
TaggedObject* MyClass::select_by_type(): g* T& d  M. V, T$ D1 o. x
{/ k7 e! ~0 B$ Z* u% l+ Q
        NXString message("Select an object by type:");
) }0 |! d! h7 k' M$ N        NXString title("Select object");1 P! @( T) B- V; s( E* n2 ~2 z
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
( W9 {  U( D4 c! J$ p/ G        bool keep_highlighted = 0;( D% `2 u! j- i6 ^3 X& @
5 u. }4 s- I; t: L0 C/ S

% z& u0 _6 P) z: S, U        // Define type array, see Selection::SelectionType Enumeration! ~5 [3 V8 \4 z+ R( n0 m
        // Uncomment or combine the desired types
2 t8 k, y. L! N8 K3 y        std::vector<Selection::SelectionType> typeArray(1);
  x1 R. h. X4 w; @  V( C# r        typeArray[0] = Selection::SelectionTypeAll;! O' F; e' @4 F4 e+ R5 k
        /*
) s& @% h% n- K% p        typeArray[0] = Selection::SelectionTypeFeatures;
' k9 p6 C  ~9 k* `1 K( c        typeArray[0] = Selection::SelectionTypeCurves;$ ], ^8 G% U3 \0 u/ T
        typeArray[0] = Selection::SelectionTypeFaces;
( {2 K! E" \7 B' c' c3 o! f- q        typeArray[0] = Selection::SelectionTypeEdges;
$ y' z3 W0 J. [8 \  z2 u% T        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
& }9 N% j3 x9 Y* ^% I- g- ~        */6 ?2 z4 B. s; ^1 O
        Point3d cursor;
& s7 ?. K2 k6 B6 Y8 Y4 m0 B; ?$ U1 D3 |        TaggedObject *object;6 g& t% c- V8 o* j! {
% G6 f- H4 D/ F

- e, H0 e- S. ~8 B' A$ B" ?        // Select objects using filter defined by type array
- E/ c6 v, X) y1 K& }0 n8 K2 A        Selection::Response res = selmgr->SelectTaggedObject(
9 E- h" \. a2 `/ i8 d( g, p, R                        message, title, scope, keep_highlighted, . F2 u. [3 T' X3 N/ C* ?' U0 b$ O
                        typeArray, &object, &cursor );: g2 K. ]; K4 W4 y0 E3 R  j

) N7 w. d# |( R2 O1 H
2 k- x8 f. j0 u$ x8 m6 G7 \! c6 W
        if( res == Selection::ResponseObjectSelected )
$ z8 W9 a. w* K! G$ k        {' Z# V& t9 C1 z3 }/ O- Q
                return object;
8 L: \* q. |& J* g        }
6 a5 U) d  c" Q  q2 M5 c1 b        return 0;
; Z/ `/ J1 D0 }9 q}
$ X) y1 s2 z, E5 q" ?! R3 Y9 E
+ _; t/ U4 i& d+ F7 A
1 X3 e7 N  Z4 _5 |* [+ y
//------------------------------------------------------------------------------% a# e* l* e/ Z8 `
// Selection any objects. x( p  W5 b6 I  i$ H
//------------------------------------------------------------------------------
8 @# q% W  I- p" d' \' `std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()3 V2 {7 `5 j! [/ p# W/ ]
{( ^5 L" |6 L& r
        NXString message("Select any objects:");
! N9 Z2 i' M( F        NXString title("Select objects");7 S' K/ A+ A' J" j6 Z% W* e
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;; r& p" ^6 x5 O0 X) f; P9 h4 c
        bool include_features = 0;        4 S# k6 g+ p$ v3 x. V, F! T
        bool keep_highlighted = 0;% q$ M+ I' D, Q- M4 E/ W
        std::vector< NXOpen::TaggedObject * > objectArray;
( d4 `& x5 M7 L  l% `3 B: S3 Z6 X8 O
: d7 B9 d! q4 u4 a+ g( n
        // Select any object array
/ y2 v% z+ c: k! }; S/ L5 {3 n        Selection::Response res = selmgr->SelectTaggedObjects(3 D* H2 U, [* }6 M, K
                        message, title, scope, include_features,
" f) G. D  E: I& Z9 @                        keep_highlighted, objectArray );
# ~2 m: `" l- i! k9 _; w0 T0 h1 {& G/ P1 }* ?
. R6 P6 a7 }* o
        return objectArray;
8 e% i' U; T; `7 ?: N# }}
* _' J" T  w. l( o; [# Q" ]/ ]+ u4 k" E: K' v

8 Q. B6 H# Z. T" \
/ D, ~9 r) u" T" G) A: x

5 {2 i$ |! l* G$ w" Z. U. i3 f' I: Z6 |, @. U2 h

( S% Y7 S% t$ D5 |
- L5 F" F5 ^8 o4 y, `; S
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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

本版积分规则

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