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

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

[复制链接]

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

2471

主题

1276

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
( V* [* \0 J0 r$ c很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。* X" d0 k0 I! B, M- K  q/ v9 r
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
3 ?' i" r5 |( P4 V8 z9 F! S一些常见的类型和子类型如下:# R5 I4 T* E6 O1 m
QQ截图20171025161410.png ) J0 J8 K( U: d, y1 }: B
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。! ]! h, L' }9 X9 r3 s9 ?6 d# U4 i; \
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 q( g" v4 d$ z3 {9 I
6 h& _+ R" M7 J+ t' b, U3 t
QQ截图20171025161432.png
/ u* ^! o6 Y3 I# \/ D5 S5 K5 r& j
; X5 c  j, W" e3 k
0 ]- U8 Q! K+ A; `! J1 N: e
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
# J+ x6 ~% D2 w7 H/ \
" P% p8 l3 u) c3 o7 W6 x

5 E5 D5 @0 |: ^0 \- G QQ截图20171025162656.png
$ e. o# U& V: r  Y: y) J3 o
' l' T; D& k/ ?2 Z, Y  N3 ?3 R0 _4 `$ |

0 B6 p( Y" z. I) ~+ H/ E! d对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。6 I9 [+ o+ l1 ?: o

( E% d- `' j! O: S5 v6 E1 X9 H' A! I# y7 K( N3 F
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
- L: }8 M( P2 e  _4 b% Y3 H/ c' a* G) x. S4 @5 J

5 @$ z5 X0 u& J5 B: m0 I% \/ EAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);- V# @, E& r( l1 R

* d( f1 D! Z& T; d7 B$ X* ]2 L8 r4 y$ F8 P; {
AddFilter (int type, int subType, int solidBodyType);1 K& y: ^% a- k" t% r+ q$ K

7 U  ]" F; n7 j8 I, q0 v
4 l9 P/ y0 b8 s% P/ v9 a" Q& ?5 A
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:5 ?0 u* @" U. Y  v# g; N" q

* m5 T" B- i$ F- K. c0 V' _7 B5 H% v4 Y8 ?' l  w' q* F

1 Y9 |9 e+ Y9 j' R. W//------------------------------------------------------------------------------
( I4 T( x$ e( v; q) x3 @// Selection with mask
4 e+ o! _3 V! ^  ~# p//------------------------------------------------------------------------------0 \' I1 M: i) v6 ~+ }, V* Q
TaggedObject* MyClass::select_by_mask()  c: O; n! k7 H! }; M/ b1 ~5 L  D
{; m# T$ n! X8 H5 x- U
        NXString message("Select an object by mask:");* [9 n  c2 S* A$ W* J) A7 n- f7 c
        NXString title("Select object");
4 q5 Z7 M0 u# H8 J        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;; m; e7 y, S8 B- C/ b
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
) D5 P0 @6 r, V- M/ g3 N$ M  `        bool include_features = 0;( }( T- i( r4 a* J
        bool keep_highlighted = 0;& g: W0 O3 O8 y

: [1 L! H$ q( p. `" U
: f$ M' c% n2 F( C2 ~
        // Define the mask triple(s), see also uf_object_types.h.
# v$ P! O, ~- b: E& b4 H  ]# w        // Uncomment or combine the desired mask triples
( y- x# |7 X! r/ O! D) Y        std::vector<Selection::MaskTriple> maskArray(1);
  N. J/ B2 V% ]: _4 Q        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
3 H7 q8 [: F7 M+ t        /*
" L. N8 g: M; m1 b. j        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
4 j# T% U9 A1 U0 t* A        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
) G5 T2 t! k- _3 e# z# v        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components* D0 v/ M% U( W2 O% D7 X
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
0 `1 [# t; p* a& W, e7 j  r  }2 }8 t        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
6 p# r+ h8 F/ _2 ^: s$ z* Q$ g0 z' ^        */
4 L4 J& X, y. B; q, b  ?# X        Point3d cursor;# E$ M  {( [& a
        TaggedObject *object;
+ m9 l% g7 k! T8 \% X  [# P* i
4 Y* {! V: l- z# T
3 W$ H& t3 W! Y; \) j
        // Select objects using filter defined by maskArray triples4 o$ Y: R9 X5 E$ z& o& O
        Selection::Response res = selmgr->SelectTaggedObject(
$ n) @9 J0 Z" |; j/ c: g                        message, title, scope, action, include_features,
3 f4 [9 m8 ?$ P8 {4 B; q            keep_highlighted, maskArray, &object, &cursor );
1 b" ~! f5 I9 T3 k' K8 x- l! q
7 D. W' ]1 y  h" ]9 d5 r

8 F9 j" g3 g# L1 S" b3 I% y$ E; e        if( res == Selection::ResponseObjectSelected )! R/ h% Y- v4 o2 W
        {$ L1 l8 a! |/ V
                return object;6 T+ Y( {# j: @& h0 x- c
        }; B4 }) Y. Q7 H5 ~& \# P  P
        return 0;$ B3 t! r" ^, G9 |
}
$ {1 c/ t( Y4 [7 Y. o7 s; D" B
8 r$ |+ |4 \& B. g
( X. M! C) U8 ?2 v: |0 ~
//------------------------------------------------------------------------------' I  i: L2 q2 }. x& l9 L
// Selection with type array' M0 S+ v* W3 \6 F6 l: g
//------------------------------------------------------------------------------/ T7 F$ G  K1 O- r9 d* r* J  w
TaggedObject* MyClass::select_by_type()
7 o( ]" r7 d7 b2 C+ D{
/ q4 h: c/ [7 a7 X        NXString message("Select an object by type:");" w1 G$ f& Z  J; n, `; X8 o
        NXString title("Select object");: ?5 p8 s5 F+ b4 v
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
# ^- i5 r  }' w" m! d        bool keep_highlighted = 0;, o; y# Z& |9 Z8 S* C5 Y0 D6 j

4 K4 b6 F' H5 v5 R* t# [
+ s: n) \5 I- _" U
        // Define type array, see Selection::SelectionType Enumeration, D* y7 B2 U# u+ x$ v" `% ]
        // Uncomment or combine the desired types* Q" @% @0 O$ R: ~) Y9 {( f
        std::vector<Selection::SelectionType> typeArray(1);
; ^1 Q$ `- W3 x% V/ f        typeArray[0] = Selection::SelectionTypeAll;
! ~2 P, T# N4 {' O2 A        /*% u/ c6 |5 `4 c
        typeArray[0] = Selection::SelectionTypeFeatures;
8 Z9 x3 x$ P4 @& q7 N7 U        typeArray[0] = Selection::SelectionTypeCurves;; q2 q! o5 i' i, |
        typeArray[0] = Selection::SelectionTypeFaces;% T" o1 }$ \  y
        typeArray[0] = Selection::SelectionTypeEdges;
5 j) o1 F/ t5 Z( o" K4 }6 i3 b        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
* P6 X4 d9 j7 m1 x        */: a( V8 c- K' ]" e
        Point3d cursor;
# ^( y; _* v; {7 ^3 z3 Q/ E$ I        TaggedObject *object;# n7 |- L' w& a; y* \

/ i3 a; N* ^2 k1 ~1 f8 D- x

. q; `" ~( v' Y( n6 k; \& S9 K! K        // Select objects using filter defined by type array
; Q+ }; Y7 E3 P+ f, r' s9 U        Selection::Response res = selmgr->SelectTaggedObject(
. X! F  r& @$ R$ }- |% b                        message, title, scope, keep_highlighted, , X4 c4 b) B7 v
                        typeArray, &object, &cursor );9 [6 S! ~. M! E1 [* D, E) F

4 D! ?# W9 I* I. I
  j7 g3 e9 g  G$ N- ~; Z
        if( res == Selection::ResponseObjectSelected )
1 i. l. B2 M/ `* g5 ^4 D- [2 f        {8 b+ H/ {4 \/ u
                return object;2 t1 t% W& E: g5 Y, Y2 Y/ G+ Q) x! z
        }
' H+ G6 m5 }7 I" D        return 0;
# x4 @: [/ g$ q5 B# b4 D( J}6 h0 O: k5 e: ~4 A3 z
6 `& w  d0 M6 ]7 @5 H

% L" _- S& O8 R6 v9 l/ ^//------------------------------------------------------------------------------
5 m" f- i: ^5 a% a8 ^// Selection any objects: q+ i. I* A* c% x1 {
//------------------------------------------------------------------------------
; k0 a4 ?* r0 I0 c( ^std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
0 |/ K1 S3 ^9 v5 {{( ~9 S* A( N9 I7 ^  _5 a
        NXString message("Select any objects:");
* T4 J+ h- M* r9 c        NXString title("Select objects");
7 u4 }( t5 k$ F        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;, j, r8 T# H: T, C2 U/ C
        bool include_features = 0;        
3 n3 S  d2 _' \: B& X: Z        bool keep_highlighted = 0;
1 D& n- x5 ~) h# ]1 [        std::vector< NXOpen::TaggedObject * > objectArray;
+ ~, o9 W# M( ~) j
' M& V  D/ I0 L5 U
$ ]/ l3 c% L7 h  r6 ^3 B# F
        // Select any object array
7 |+ T/ B  ]  N2 i  K5 @) A        Selection::Response res = selmgr->SelectTaggedObjects(8 B+ J) w+ L4 f* P
                        message, title, scope, include_features, 5 L' B% @  C+ q  @
                        keep_highlighted, objectArray );
3 b+ H' i3 x3 X$ `2 \" m8 c7 x/ x$ o9 X9 i  c; h  M, F. X

' h+ U. Y$ j; m7 k7 b: w/ c. z9 r$ n        return objectArray;
4 N$ t7 |+ D2 ]% M% k( a, m- E}
4 k% |( T" v, W2 M: W3 w  z$ m
# s& ^, C9 W1 e3 A* Q. @9 b/ X0 T& t
7 s( \& D! ^- f9 w- m+ q0 v3 a" [2 X! ]3 Y" K  M' U' V

6 T6 q- w6 \8 R1 Z6 A6 z0 Z7 g! ^
! Q( U& }8 P( N" y
6 S( N7 c. t* D: ]: V* Y" @6 {
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了