PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解$ p7 Q9 d. Q# z0 a4 @! {9 [% A
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
; W) H5 Q; z$ z0 i2 g如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
- |* f' x% L7 R6 M9 L一些常见的类型和子类型如下:
, b  r1 W6 H7 X$ T' z QQ截图20171025161410.png 7 L% `( d/ c: |% v/ V, E
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。7 ]' u# ~5 J$ H2 W1 E8 t
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
6 e: l& o% D- D! z
% W* b4 |& p+ M2 u7 W QQ截图20171025161432.png
- I8 W  N8 Z3 h& s$ p$ r- @  I& E0 l" X/ ~+ D
' h6 V" i' i9 L
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。5 m3 W% `1 `$ C# }2 N! \
+ X4 o; S9 m7 J" f! k
( M  C! W& q( M% l# m% _
QQ截图20171025162656.png
) c9 n: |& a/ i/ `& i- l% ]  [( P& f4 o* F6 m
" Q7 b0 Q. c: O* n, F5 a$ ~
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
8 u3 D5 E: Z! b2 `2 W8 S7 T3 U6 J; v
- }) g4 x. }- F1 D
! w/ c8 [% e; YSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);" B! R: V. Q8 a7 ~( P
* W2 B" q4 i- ]2 G3 ?
4 X/ V# w4 O3 d! F
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
; d7 `  B, v  t$ |* \/ c) _. C, D- N% [/ [

% Y. u0 m8 s% K% o- [AddFilter (int type, int subType, int solidBodyType);8 W5 x" _, g$ @
# n9 L5 g; J" B2 G

8 i: D5 y% d; e2 l, G$ ~对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:" z. x& Z1 h+ d5 t) X6 K

: Z  _- h/ n0 O: y
% W8 s+ w4 j0 \, U2 z( g  c

' Q$ W5 n$ R9 G4 h/ c$ B6 e2 l; Y//------------------------------------------------------------------------------
: C1 X( L- z; W// Selection with mask0 @5 Y  p! Z2 o6 }, J2 |% ^; `
//------------------------------------------------------------------------------
& k# o$ b8 @$ r% }$ ETaggedObject* MyClass::select_by_mask()
0 [. I1 v0 e8 F3 z4 b; i{, p3 B  v7 n9 C5 g( O+ @
        NXString message("Select an object by mask:");
$ E& y# X9 |4 [& {) h# I7 c        NXString title("Select object");- B2 a, ~* O2 ]$ V
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;5 J; @0 \. n& E/ n. o! L
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
, S' j: L, ]" M# C/ I) z        bool include_features = 0;
- l1 X1 l) O( y0 E" S        bool keep_highlighted = 0;
2 Z( w/ G+ Y/ b' |' q5 F8 d2 V1 q5 Q% J& o  l2 |

5 C& \6 l7 Y8 R        // Define the mask triple(s), see also uf_object_types.h.' _# d4 i; J, \' P( G4 p
        // Uncomment or combine the desired mask triples
: @  m7 |7 T* K0 k( O8 k' Z        std::vector<Selection::MaskTriple> maskArray(1);
3 B8 _, {( _6 `( X5 s        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies( H( ^( O8 E. }' F
        /*5 M% I2 k% `% p! g
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces9 h( K( n, {3 a$ v/ a$ n4 Y0 ]
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
: j! D7 D) |' o' V* w9 |& {' c        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components2 T3 ?% C( s6 b8 U: c9 ^
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines7 Y/ D0 E% l$ ?# \. l6 h4 {8 V
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects" G& @% V/ K+ j9 c9 y
        */
* ^! o7 N2 d/ J4 l        Point3d cursor;
2 G+ o- m+ S) H  Z0 |' P' H9 ~  l# `: ^        TaggedObject *object;
$ P9 f% h0 A' F0 c; E$ t( |) J$ t3 z/ y& p& r* ]* z; S4 \
, r6 K( d5 Z$ d+ c5 o$ m0 `
        // Select objects using filter defined by maskArray triples
, _4 o7 N( I% I# x        Selection::Response res = selmgr->SelectTaggedObject(
7 }; P$ C% [, x4 |# I6 v# Q                        message, title, scope, action, include_features,) G- n4 A0 D* Q% }5 Y; \
            keep_highlighted, maskArray, &object, &cursor );
/ H9 G% r" g( o  D3 B9 R  V/ x% t* [4 ~
, X6 h% Q! b3 s
8 N* ~. j1 e" l- M, n
        if( res == Selection::ResponseObjectSelected )6 H* k6 ~6 s) @( h7 z
        {4 W# n, B" j' y; |$ n: B- e. E
                return object;
4 K' n  ]  q# O  J        }6 o# H  h) t. _# P
        return 0;3 ^) W7 J* I4 Q- S
}
. Q( Q6 g: b  W, @: H
! ^. F9 y, u9 l# I9 X9 L$ N4 @

$ M6 j( k7 `5 ^$ y//------------------------------------------------------------------------------
7 W! f4 P* D* B7 O// Selection with type array" K+ m5 j& ~% `: Y5 S1 }
//------------------------------------------------------------------------------  L5 J0 w1 B. w; s' ]+ @% x% s
TaggedObject* MyClass::select_by_type()
/ h* p* B# F2 D9 p& |" c4 O{
4 Z( m) C( Z0 l) |1 ^        NXString message("Select an object by type:");- x, M7 z# F$ \) v
        NXString title("Select object");/ ?& S) S( E2 Q3 P" m2 E
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 Q5 |) w/ T5 P3 r
        bool keep_highlighted = 0;
. o; C; j! X/ A' \+ B% ]
/ D" J) H1 M" {7 C" ]: r( I
# A3 ?5 ^8 R2 ]+ d6 F- s5 n
        // Define type array, see Selection::SelectionType Enumeration
# P1 ?  {1 a0 K" W        // Uncomment or combine the desired types
: q) j! K9 `9 B; P: t% Q        std::vector<Selection::SelectionType> typeArray(1);
' L. ]) X( n1 A4 C        typeArray[0] = Selection::SelectionTypeAll;& L. n/ O7 K$ Q; D+ N
        /*5 T% l9 ~- h9 T1 t
        typeArray[0] = Selection::SelectionTypeFeatures;+ E0 w8 R9 W. [! B' L
        typeArray[0] = Selection::SelectionTypeCurves;0 {) s9 b. A9 F! k8 ~+ w1 V# O
        typeArray[0] = Selection::SelectionTypeFaces;/ ~7 {/ x/ e. v2 p' a* n( b; \
        typeArray[0] = Selection::SelectionTypeEdges;
5 Z. q; m( R% c1 W        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
- }! Q  k9 r, g, T' A        */
) k1 l8 a  t) C4 r& h8 D  m- L, Q        Point3d cursor;
  V" i$ X8 u+ Q: f        TaggedObject *object;. }, K+ N4 ]( s+ I
; F) {, |0 @% ]: @
, u5 n" b$ j( R1 ~' p) ~% t4 l* A: n
        // Select objects using filter defined by type array
" |0 Y3 h0 ^0 I; G8 N7 d        Selection::Response res = selmgr->SelectTaggedObject(
- ^! a4 Q$ q. r) A; j5 l9 C                        message, title, scope, keep_highlighted,
) `  |, F% _' [5 k9 Q- k9 Z& y                        typeArray, &object, &cursor );
, R4 b$ s. M1 r" j- ]
6 O7 L# G( p) E: S( V& s: }

1 H6 i$ X+ p4 K: q; L        if( res == Selection::ResponseObjectSelected )
" Q" Z8 [/ K( T. d6 H' V% T' H& M        {
3 f1 {/ j1 u% M! B" V0 m7 `. V7 J                return object;+ ?" G% A8 C- i- o4 Y+ ?
        }
9 w( r  @7 E# Q0 B* a5 m! }        return 0;/ C" a. H' u- D# D
}
2 }6 v( j5 R1 m) f- n% z' x, N' z9 r0 q9 T, a
* l5 C% ?% o. a' y
//------------------------------------------------------------------------------0 o1 c9 \" E$ u5 C! t! u+ x- Q
// Selection any objects, ^' I0 T! Q4 Y; N1 q2 m; f
//------------------------------------------------------------------------------
( R# W* n0 B0 Z, zstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()7 w9 Z' |/ r: R0 H% Z
{
7 m% p; [8 j% ~, n! T$ h5 B        NXString message("Select any objects:");
" l# X9 H+ n# b# P# ~        NXString title("Select objects");
2 X. }9 V  }1 _; T2 V$ w% F        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
$ c- M4 e- f9 ]/ E$ m. \        bool include_features = 0;        
9 V, Y; _) [0 Q* I  u        bool keep_highlighted = 0;
: f8 v1 F8 F% N! S: A) P        std::vector< NXOpen::TaggedObject * > objectArray;
+ M, G7 K9 S  y) t9 q* j# ?5 L* ]

1 x' B/ E3 g8 ?  s1 g0 {5 \: D        // Select any object array
' h9 H" |: ]2 b        Selection::Response res = selmgr->SelectTaggedObjects(, j9 l; C4 O  n8 a  I
                        message, title, scope, include_features, & w' a" J7 z1 T4 B
                        keep_highlighted, objectArray );0 H0 b" K0 T. ^4 M4 [9 m3 J
4 r# H0 r3 t' \) d5 A
$ @* a9 ]+ b' L" E* W
        return objectArray;
0 f  ~: W2 }! L}' u# T2 y  a# `- W) l

( W- @' U( l" ^8 f5 j2 k
( u$ g4 b, ~; W  Z0 j( I/ C9 Y0 \0 n; ^, E8 L
- }/ y+ v! c2 a

7 V8 X0 G2 U; W+ u7 s
0 \+ D; P1 U, N

, Z9 I$ ?0 x' F- I" k& _
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了