PLM之家PLMHome-工业软件践行者

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

[复制链接]

2017-10-25 16:33:48 3940 0

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
) i1 x  `( A5 v. t  b很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。2 y1 X% N  |  f  R
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
8 ^/ b3 D+ f7 Y! l* v: _一些常见的类型和子类型如下:0 T( S$ z6 X, A' s
QQ截图20171025161410.png 2 h# U9 v+ e+ E" u9 P: B  ~
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。" r5 d& D% a7 m, a$ `7 F% k
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
5 r% T, U4 i/ ?% ~/ i8 x  d6 v, V# o9 t- e: v( j/ N9 J
QQ截图20171025161432.png & O4 j( ]8 y# q! d4 f: w* K

$ S) k6 N" N% B. T- n

% V5 Z# \; w8 {1 d7 N选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
3 F& U4 z6 h, b3 k6 y
0 ]$ S7 F0 ~! k& T) b3 ]

1 X- Q! i- v& I5 u5 G6 V3 @& K' S9 M& k QQ截图20171025162656.png % d% o# q/ O/ K+ l, Q

4 \* O; W  f* f- M, v
# ^$ `4 \9 D8 }, h+ H) b
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。  Z" ]" z  E' h9 d. M& A% R4 e

- A; l( V0 R4 r( t" S. D- s6 F) ~9 J" d3 p% r) G+ R8 s
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);1 D; B4 q% u  O: D$ A3 }
, t8 G/ N* e0 B8 ?) C9 v6 ]  O9 z

: y  L. N2 W0 D, B, s: ZAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);4 u+ b" J% m7 L4 F4 j

9 W. s* ~7 V3 X9 @% m
. u/ J8 v1 R% D' x3 @; l8 MAddFilter (int type, int subType, int solidBodyType);
" W- b7 v. l( e  I6 a5 y3 G" n; h* L3 p6 x

! Q/ o3 ]" x( g$ q3 [3 F对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:+ [1 z; W2 t+ _- u' @! }( @. X5 E

' B8 |3 ]) }9 r
7 H1 E! B4 j" {4 f- W1 p5 u
0 F: K5 g8 h4 W
//------------------------------------------------------------------------------
) n- F6 V. E2 E! b  D2 Y3 ]// Selection with mask& R& D8 c7 R1 g' y, X
//------------------------------------------------------------------------------6 X+ i4 G7 q0 Y* P7 c
TaggedObject* MyClass::select_by_mask()' `  A' Q& z% ]" V6 h9 d5 p( m5 l
{
1 c! B0 K7 E; D        NXString message("Select an object by mask:");* f- f6 P& r# y7 P) z; s9 o
        NXString title("Select object");) B$ ~7 K$ w3 ]6 k8 U
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;& W9 I0 i3 F0 x+ j6 @/ j: h
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;& K% U  z8 ]  n$ ?
        bool include_features = 0;
- R* V$ U+ `/ F; q1 ~9 Y        bool keep_highlighted = 0;
* p. v6 _, R0 l& Q* u6 X% }5 _  P+ b
5 h( f) D0 Q( J  j* T9 D0 ]# g
, Q( I+ `) o* K) x9 n% k6 M- h
        // Define the mask triple(s), see also uf_object_types.h./ E6 s0 s$ T8 N1 W1 u# A& @, {
        // Uncomment or combine the desired mask triples' o3 c$ n6 l% r2 U
        std::vector<Selection::MaskTriple> maskArray(1);
9 o1 u$ s6 }" K' K7 [        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies2 }: k9 X% x+ e" X% O5 @
        /*0 J1 v! h6 `! _! Y8 b
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces, {8 M; O4 n( h
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges3 A: |7 u% s4 S1 o1 @" d3 H1 `! }
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
/ I7 l: W7 ?& _4 m5 @3 H- @        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
7 ?- x8 D5 m8 [) L# W: K7 I        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
' `/ q* K- ]6 g7 ^: ]8 t# p" g        */
- \" p% N5 I: Q        Point3d cursor;
! `3 l' t! [5 m# H' D# a' H/ |        TaggedObject *object;
7 _9 C; \% U5 k+ a" l' n; ~/ I$ W9 V! j5 d" \9 l6 p+ ]1 i1 R
# h" ?2 Z" V3 Z! d8 \9 O) e. t) X
        // Select objects using filter defined by maskArray triples
6 H  M/ U4 P+ H8 J% b7 o; Z5 n        Selection::Response res = selmgr->SelectTaggedObject(
4 ?; W  h) j- |! a5 S                        message, title, scope, action, include_features,; F" H2 C8 x! i$ i
            keep_highlighted, maskArray, &object, &cursor );* _5 P" P) F8 @. c$ g- W# c1 F+ N

! e' }8 s4 w! L

0 n( A2 l8 e' r& f        if( res == Selection::ResponseObjectSelected )6 p; N. o) p0 I2 w  R6 H2 L
        {
4 Q& {; [, T7 D! N                return object;$ B3 q/ F& x& @
        }$ y9 _6 ^. H) [7 O6 z
        return 0;4 |# A$ w+ ?' H" u" X
}
  Z( h0 J3 h" D6 p/ m' L
! M: _# D: L) K0 O3 x. L: p8 @& _
5 W0 w: K& d6 i2 y2 s
//------------------------------------------------------------------------------
8 \! q- g& ?' b5 r, Z8 E4 g. X// Selection with type array
( `3 G6 V, C6 {/ T$ j6 L& g//------------------------------------------------------------------------------
9 v0 I) o+ g% s5 T$ j5 \TaggedObject* MyClass::select_by_type()
7 a) k: Z/ C; F+ y9 A( E" J& e{
4 [! h& y* I' i- _% z* ?# ^        NXString message("Select an object by type:");8 p' W) {4 a. J( `
        NXString title("Select object");
5 q) r' R, H4 l8 D        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;- w2 P1 B) _8 n$ m' [- F( H
        bool keep_highlighted = 0;
7 U  m& c4 P& O7 ]2 B- j: e
" X# Q6 f% y# b; f% G, w

' X+ S( L" Y2 a; V        // Define type array, see Selection::SelectionType Enumeration
& j# h& L9 k- Y2 \1 I        // Uncomment or combine the desired types! {) r$ S; ^/ {9 k( u* Z
        std::vector<Selection::SelectionType> typeArray(1);
( O1 q9 Y- l5 l8 C        typeArray[0] = Selection::SelectionTypeAll;
8 f  Q( \1 X# l' Q4 i        /*1 }+ }2 Q: C& v1 \
        typeArray[0] = Selection::SelectionTypeFeatures;; t0 J, \6 {; o) j% l) N
        typeArray[0] = Selection::SelectionTypeCurves;
. P- a2 D. [, ]7 E) z        typeArray[0] = Selection::SelectionTypeFaces;
1 q$ Z/ g/ ]1 F7 M        typeArray[0] = Selection::SelectionTypeEdges;
5 i+ v8 Y4 [# X: g        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;" [) J* G1 C3 H; B: _
        */
0 ~7 ?7 P+ \5 E/ X/ A. I        Point3d cursor;
6 c# W" H1 O% z; C- p- i0 S/ K5 G) ^        TaggedObject *object;0 H$ _4 S* J$ M7 t+ s" W& N( h
$ U9 r  a4 m, O3 }- a; E& l

. T- l+ x+ A9 D8 D6 F5 J* L8 _2 K1 T- I        // Select objects using filter defined by type array; n2 d9 k4 A3 K% J+ c! a0 k; D& O1 C( q
        Selection::Response res = selmgr->SelectTaggedObject(
' q8 s/ @2 s3 S0 [                        message, title, scope, keep_highlighted, $ l6 n! R: P: |5 h9 R
                        typeArray, &object, &cursor );4 O$ a" E9 V4 C" q, S

, j& G( F) d" e% z3 Y+ a, Q9 s2 {
: g4 @' n1 [- e8 J2 Z/ B
        if( res == Selection::ResponseObjectSelected ), }8 \7 O& o/ p' f: U9 a7 ?
        {% Y) W( p) c2 m, f/ ^& A
                return object;' n  o: h5 p; `+ f2 ~7 r
        }
, i9 E. A7 T2 `3 N" w        return 0;7 _4 G- g, d' x$ }& Y4 ?
}
8 @) U* L9 F7 j# f- [& X$ U* B- Z/ d* v  G1 P1 ~6 a, {- s5 d
$ }  Z5 `/ B+ T9 ?( y! c8 D
//------------------------------------------------------------------------------8 y/ R! ]' `7 m5 v
// Selection any objects, J& @( v: y( o( [! Q$ x* B
//------------------------------------------------------------------------------+ u+ }( R% H; w7 u
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
3 H3 u  b. T) {7 C/ G{
% V) q# A$ d2 k2 R1 L3 p& B        NXString message("Select any objects:");4 J9 k( D; w: d8 l6 _
        NXString title("Select objects");. r: e) o, }4 R: }2 z" @8 d9 g
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
2 y) w, t. q, k+ N# ]        bool include_features = 0;        8 j- |! R4 C" u" S
        bool keep_highlighted = 0;
. W, }9 ^7 \2 w- o: v' O' W        std::vector< NXOpen::TaggedObject * > objectArray;
( _% y& Y* q" d- W0 q" y. [) {
% M+ H( A; ?7 D3 U
6 B. c+ C% W- n# X( x1 c5 ^
        // Select any object array
$ ?* Z6 y$ X8 B* ?! K        Selection::Response res = selmgr->SelectTaggedObjects(
9 Q$ D. h$ v% m& n" E0 {                        message, title, scope, include_features,
% k) T, A& I( h* `2 y3 {8 ?9 [                        keep_highlighted, objectArray );7 e1 \8 C: v4 s9 ]6 ]/ f: s
. [  }; g/ A- D. S

% I% W- b" F  e5 F        return objectArray;
' S" K" U* K8 d" i2 v, K+ i}
+ Y1 L  J4 N# j; ~; X4 [: A# s
$ \0 c# M8 Y1 T4 A
8 h- O2 {) F& @  v: y  N! x$ ?7 g: t) E
) Y) ]1 F% P4 ^6 B
' N4 |8 k3 A2 t1 m
1 t! |* [2 K% v: E  t

5 \/ P) R& p7 i7 j
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了