PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

admin 发表于 2017-10-25 16:33:48 |阅读模式

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
" |, y+ e2 f" M7 `; k0 o很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。+ C9 _! V, O( |1 u- ~# i9 D' x4 g7 }# e
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
, m& G1 U  Z' F. g% z1 j一些常见的类型和子类型如下:4 I* i8 j- T& [( d+ l
QQ截图20171025161410.png 9 P& ?4 [! z2 F5 _% r
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
0 }6 a) S" c# S/ `8 p6 I7 W实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
3 s6 w* a) `) A+ S! k# K* g, e
! o" C+ Y, R- R3 ~4 `- {. Z0 @ QQ截图20171025161432.png
* `- t. C- w& c; g& Z2 F$ B% q, H7 w: Y

' F8 h0 `1 Q) W8 S% D" r选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。) \5 z! C( I# j1 q; X

/ O5 h- T7 y% C8 g1 l$ F! h1 d

+ @# F. @6 R& N, S: ~! ~# y QQ截图20171025162656.png
' x4 U6 r' ]5 i" B! r; ?: y9 c, Q$ _; G9 ^/ ?

+ p1 U7 {1 N) C8 J% e& a+ @对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
; N" W- i1 s1 u6 f6 N( F9 D6 p, M8 ?1 {5 v" G7 w

2 o0 m0 J; n" A. w- X) j5 C0 ISetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);& U: I9 t+ {/ o; x) r9 \

8 t: |6 Q$ i2 f. c
3 I4 X$ r3 U& i5 D1 ?9 m9 u" SAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);+ G2 G. B* E* y7 C5 f0 @
5 K) q6 {$ j0 I- v! w6 c

) V( r( Z* ], Y% F4 JAddFilter (int type, int subType, int solidBodyType);
8 ^0 f, F- n0 |8 U) X7 o
+ t' a5 A: A0 r2 ?- z+ O

: n, i/ S) R- s5 d  t. @6 k对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
3 @9 H' M% u! b* d$ g
5 K, R6 r6 \: v0 Q, X. A# D
+ o; @! l4 d5 Q! }# Z  c
2 l/ x( b% C1 J9 M+ m
//------------------------------------------------------------------------------
' C* q8 U9 `8 j9 U, r// Selection with mask: c, ]/ @0 f* m$ Q- D2 X' l" @/ }
//------------------------------------------------------------------------------6 g' e" ^$ O; T7 `0 m6 J2 i
TaggedObject* MyClass::select_by_mask()
2 C0 ~: Y. O  r{
3 H1 [( e% |% Z( }0 i        NXString message("Select an object by mask:");
  D5 ~( J: J0 q8 z1 F2 v# B  t        NXString title("Select object");: ~3 m8 a# T4 I7 x- @
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
3 J4 s5 `. D8 c" f* D1 z        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
- u% y0 K: \" Q3 U        bool include_features = 0;7 e# f2 X0 W2 T
        bool keep_highlighted = 0;
& x/ T/ }; f9 W- d
; O, W* o6 m( F* {

! g. h( P3 M. D+ E6 j1 r) B( F        // Define the mask triple(s), see also uf_object_types.h.  n) M5 Y* a* L
        // Uncomment or combine the desired mask triples
5 p6 }# Z# {/ b5 }7 s7 H        std::vector<Selection::MaskTriple> maskArray(1);# d2 Z4 B' w; v
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies! b3 n/ M, q4 S6 q- n+ b
        /*% R( M: A1 y) a6 [6 |* u
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces. `9 C  J- ~# n* L
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges, R; J% A$ F+ b3 P
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
2 C% H0 @$ t; W; G; ^: ~        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
# B, c' C% U. Z  c+ o        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
* H8 P) v' I+ |9 o$ J        */
4 o% }3 t' o, Y5 p; l        Point3d cursor;( g8 y; G% W* ~2 A8 p5 Q' r/ \
        TaggedObject *object;
$ w- M* ]4 x+ D8 Y- |
0 l2 }6 \, J8 j) k! S

( v( P. G4 q3 `5 ?. z        // Select objects using filter defined by maskArray triples. |9 S/ [4 [! `% P. i
        Selection::Response res = selmgr->SelectTaggedObject(
; Z: F8 F" m5 a( U) b                        message, title, scope, action, include_features,/ T8 d% I- p' A* r
            keep_highlighted, maskArray, &object, &cursor );
% t; a7 s) O  M
: L' f7 h( \8 N1 Y+ x! O

. A6 Y- y9 A0 I# H. T7 n$ `9 J# E        if( res == Selection::ResponseObjectSelected )
7 G6 u1 a- c$ o$ i# y7 N! R) n        {8 D$ i0 Q% A9 R) g7 f1 q
                return object;2 n2 E7 p: X* b' \
        }
# Z3 Z. x4 ]% p; w: V        return 0;; S) g3 j: z6 J
}. C1 J: X$ `7 A# \, f4 Q
, v/ L( w9 ^$ Z. Y, h! d0 ?
) ]$ p9 X& h+ V, a. r( H7 a3 @
//------------------------------------------------------------------------------
; D! R8 T" D2 D7 D9 ^' ]6 l// Selection with type array
0 n' P' q; j. z7 V//------------------------------------------------------------------------------
# p3 k# ?6 u! vTaggedObject* MyClass::select_by_type()
! n+ w/ D2 w/ e{
: @5 F# [6 ^" i1 Q' ~        NXString message("Select an object by type:");
: g- Y' X& g% v        NXString title("Select object");* [% q& [% B7 _1 S7 E% K
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
- n; _, K4 X* N9 H+ H1 k' Z  ]        bool keep_highlighted = 0;
9 C1 e$ p( Y9 q, y
9 r' W" h( r$ p' |  ?+ I) g/ {% i

. V# [6 \( q! b        // Define type array, see Selection::SelectionType Enumeration
. j4 L1 @- C$ Q! c        // Uncomment or combine the desired types
- @. c/ p* o( X$ s        std::vector<Selection::SelectionType> typeArray(1);& V& F0 V2 d. w0 }( {
        typeArray[0] = Selection::SelectionTypeAll;
+ ?* v, P$ P3 R9 A, X        /*! R+ T. r1 A2 q" h9 @
        typeArray[0] = Selection::SelectionTypeFeatures;
3 u! J2 a2 o2 P* M" a        typeArray[0] = Selection::SelectionTypeCurves;
% r6 h+ R4 H$ W- J3 J2 @+ l        typeArray[0] = Selection::SelectionTypeFaces;
4 G) }" o9 M1 p) ~        typeArray[0] = Selection::SelectionTypeEdges;1 F( ]+ I$ u/ x, `
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
( ?% u$ q9 s3 p. X7 h! H+ r+ w5 g8 c9 ~        */
6 s( |) [( o, K: C  n- i2 s        Point3d cursor;
% p% |; y. L% t) q4 N        TaggedObject *object;
) ], z! c/ w6 ?9 h( q* i8 V
8 M/ U2 @5 ]! v4 H* O6 o
6 [; G5 o% G# d2 I2 Q
        // Select objects using filter defined by type array
2 a6 x6 H" v2 v% I        Selection::Response res = selmgr->SelectTaggedObject(7 [# Q9 a# d6 P/ b" r- ~
                        message, title, scope, keep_highlighted,
- f" S6 s& h" X& K& |( i                        typeArray, &object, &cursor );4 R' i; p" H6 Q* @$ ]$ R) T

- G% u, @* F$ r) h1 O; J5 m

/ f: `! ]9 M$ s6 z        if( res == Selection::ResponseObjectSelected )9 I$ u2 d# z+ {) @
        {
7 Z! J/ K# g) l/ a' D/ p4 e4 o                return object;4 n) H$ c, a% K
        }3 r7 u  h! k8 k/ N. P: H3 G4 F
        return 0;' f3 J$ p1 G+ B! s. u
}
6 P1 _; i3 f! x' h: r0 B( C/ U
  q' E: C3 K6 ?6 d( |

! x) q0 \* w  h/ [& }//------------------------------------------------------------------------------
& p9 f. E! ?, c# G% [' \// Selection any objects0 [" n* F! X$ G  \3 n+ G9 `! I2 @
//------------------------------------------------------------------------------
$ _) A, @* _" K5 ?) B% h7 r6 dstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
  X6 C; {! {: E" V: k+ y2 `{
3 T; e0 @9 G4 ?3 M( o( R        NXString message("Select any objects:");$ c& n8 s5 Z0 I( N
        NXString title("Select objects");9 T5 k7 E8 T. u8 b
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
' }4 j1 U. [% Z3 K) e        bool include_features = 0;        
8 ~, L% S- x* I; ^& j        bool keep_highlighted = 0;6 w8 @0 U6 p' k& u# P4 f. t- ?4 a3 z( F
        std::vector< NXOpen::TaggedObject * > objectArray;
) N5 Z) c; [* U% }  o  h3 o; C1 ?# A) B

4 A2 z6 w! l1 o  v3 V% l/ j        // Select any object array
3 A' _0 n' `) N        Selection::Response res = selmgr->SelectTaggedObjects(
8 {9 Y' a# o: S9 v$ `8 n. P) k9 X                        message, title, scope, include_features,
; P/ J% L3 G2 ~( l) `1 S2 c$ d                        keep_highlighted, objectArray );
9 W0 o1 V2 f8 g: p9 m% x8 H$ Z# W# H1 e& s- O. [

. T) K, o" R8 e( V& t: ~        return objectArray;
  `% B, i+ z* {& s7 S/ G}
3 W% ^% d9 D9 m+ \
, e/ {; ?3 _& }! S0 M3 D8 @
, H# U/ o2 E) m, h
! b2 u( f+ X. X4 R+ |

6 _% O. Q2 ]: \& t" f: m1 o4 P' }; s: M2 p

3 S% [/ a3 a. M8 j/ K. d0 t+ s# I" Y% N- }9 b
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了