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 3278 0

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解4 u% l$ W- L" m3 X+ u* x4 Y. u' F; L0 v
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。% ]* W& i! G+ f3 N% g
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
7 p4 ~" T$ L+ h1 w' O4 h一些常见的类型和子类型如下:
, M. J! _; L" d QQ截图20171025161410.png
% A) T9 S/ o' U& o8 l( x如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
6 x/ z0 {# C1 _6 `; d5 v实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。/ E" `% A2 U) v

# R' d- H# ?" o9 \( k! h  m" z5 W+ h QQ截图20171025161432.png
3 O- X3 E4 j0 g0 t9 Z  m% q; B
8 o- C+ b- z3 @% q. E# ~  P, M

' Z3 B! j2 f! ]选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。1 |3 A( t2 d9 j& @
: I  U3 a9 I# u8 P+ p
: }- T' B& O  r! l; j
QQ截图20171025162656.png
# [) p: \0 M! {( {
. k& L, F/ q5 |; K( y5 T
0 g+ k# ?. }0 Q& W7 T) u
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。1 E. J6 B, m4 m; q  I4 u5 z! @
+ E4 }4 s+ N) J5 s  n0 {+ \5 F

0 M" N4 [* ?8 m* u3 KSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
4 L' n7 |0 ?; |" O! e4 J) w/ n) T3 b7 X. S
, n" z' q# O$ y! ]+ [, N& L, {
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);  |; f7 _8 Q0 V5 ?
$ I( m6 R6 I5 E0 J1 N
. S" m* X& E6 f/ D
AddFilter (int type, int subType, int solidBodyType);% q7 {3 F5 A4 X0 r
* n! g2 z& b) n1 t$ O* a
1 }: l% r9 J( W* D
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
2 G/ J, i( e9 ?- z+ e0 @* \- N* r9 }8 v% d: z2 z) [% @7 R; M
/ I, x( o; P6 }/ X

+ \7 P! @. y3 \& k1 X' h# v+ X//------------------------------------------------------------------------------
$ C6 }: V) y; \2 w0 p// Selection with mask
. U; x0 ?3 v0 X: I, G//------------------------------------------------------------------------------! E9 N" ~2 C( [3 i. Z
TaggedObject* MyClass::select_by_mask()# H, }8 c, M$ L/ ]
{: w3 O( F7 |# P) r6 K
        NXString message("Select an object by mask:");
1 F. X6 V- X6 T% d  i" _        NXString title("Select object");
+ \4 R3 ?. b" Q$ T+ T5 W/ p) w2 C        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;4 D: @: I$ i: i( |
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
! o7 k8 h2 P% b! \+ s! u. d2 B        bool include_features = 0;
9 ?; _! C0 V0 o8 S1 {" s# P        bool keep_highlighted = 0;
& _! L# r* ~6 K0 T. s! Y& h2 E  K- V# V7 n5 i# P: x
' U" U4 e4 N# I
        // Define the mask triple(s), see also uf_object_types.h.
) l/ T1 B# h2 v" c% L) c: a        // Uncomment or combine the desired mask triples( L- }+ K& ?& b& P# O% ~0 f! o
        std::vector<Selection::MaskTriple> maskArray(1);1 E6 \0 W8 f: H8 W, b
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
( j+ d& c$ w+ e0 w' x        /*4 X; a3 ~5 a3 u/ W; c  w) _
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces: P: q3 m( G5 y9 f: M
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
* v2 B. K8 R% G. i+ c# R: E3 f        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components' m2 V5 h) G2 c9 _& G& X8 S
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
0 u" c$ s3 a" L$ X6 K+ ]        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
3 _8 I$ |2 x, N        */7 D4 W* n  T) \
        Point3d cursor;' Y4 v, [1 e5 Z" i
        TaggedObject *object;5 ]) d* P2 {5 [5 p7 p
; S; i$ s7 j7 M" ]$ u
3 M2 T% {  N0 v. T8 q4 c
        // Select objects using filter defined by maskArray triples
* k) C8 e' I% i  p5 U2 k, V7 r6 D        Selection::Response res = selmgr->SelectTaggedObject(  j- K0 H; _9 ]( y+ e
                        message, title, scope, action, include_features,& g' ?; s- b' T4 d9 l/ r
            keep_highlighted, maskArray, &object, &cursor );
+ ~- b8 g* J# g; T9 f, u; [6 H, k/ z" I  l  |2 ^

$ @! v: h! i  L" {" q        if( res == Selection::ResponseObjectSelected )
) _# S2 G! ~5 z        {" c0 K1 L) @9 N8 ^% K& q
                return object;
# G. i2 _7 c4 T* b- ?        }: Z8 Y* C6 e$ l# p
        return 0;# Q$ I: \) q5 O5 ]' t; C# V
}9 U- h+ Y2 y" d1 q) V$ B
, I7 Y* A" N5 u
: ~/ _6 o) b" [5 W$ j1 `- w5 S
//------------------------------------------------------------------------------
2 H* h, a! H; ?8 G8 M, z// Selection with type array% O+ W9 C" Z; m3 `1 K' a8 X3 j! D% l$ A
//------------------------------------------------------------------------------
1 l  k: `7 z: D5 I( d/ WTaggedObject* MyClass::select_by_type()1 \& |- T! U  Q& F+ O
{2 c$ v  A6 D) k& H$ a8 X
        NXString message("Select an object by type:");
4 d% D# H8 g0 t; P4 G4 ?        NXString title("Select object");
. P5 p/ H2 X/ [) h  G( Z3 u        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
" L& y9 c9 Y* `) N( c        bool keep_highlighted = 0;& g9 ]0 d, [# m4 [, S( |1 s( ]
$ Z4 ?* E3 j* w# R0 X
! o$ X2 {6 o, v. V7 u0 [
        // Define type array, see Selection::SelectionType Enumeration& s7 ~1 I  a' o; A* `# e2 J7 j
        // Uncomment or combine the desired types
- S, G* C* ^0 K# S% S* Y3 {        std::vector<Selection::SelectionType> typeArray(1);$ d5 K$ w% ]: G4 q
        typeArray[0] = Selection::SelectionTypeAll;* {* B4 g! C7 B* i& N* T( I
        /*! K; @; `5 R1 x( y# i: i% m
        typeArray[0] = Selection::SelectionTypeFeatures;% U. {4 ]6 I1 T" r
        typeArray[0] = Selection::SelectionTypeCurves;
$ d% z4 Q0 A* G        typeArray[0] = Selection::SelectionTypeFaces;
/ ^% W% X9 ?# j1 l        typeArray[0] = Selection::SelectionTypeEdges;% W# h5 G, f, M+ i1 E' Q7 O
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
$ s5 y2 C! W/ G6 ]3 x        */2 Z* M7 ]" b4 B
        Point3d cursor;
8 `, a' y! C. C2 b; Y        TaggedObject *object;
: X5 q/ O; W/ `% a7 m
4 B8 F1 A' L* M* X9 U& L" ]
% E- E3 J% k" u5 R7 I3 c
        // Select objects using filter defined by type array1 j8 x1 P0 E* X! r0 }
        Selection::Response res = selmgr->SelectTaggedObject($ Z6 ~! p2 ?1 @
                        message, title, scope, keep_highlighted, * r* p( J6 L: e/ D6 _
                        typeArray, &object, &cursor );
9 I4 ]& P4 {4 o6 R" T& a" n* _
; v4 z9 l; S2 L' [& r0 |! P

9 s# w! Z% q* o% l* ~# z- \        if( res == Selection::ResponseObjectSelected )$ i1 \- f$ u4 F+ l* d( x! ~
        {4 F5 q) |1 z+ Z) A  S( H
                return object;, R( J  ^, J9 D8 W/ W3 U
        }
& b+ ~$ P; V( Q1 M  k$ w! ^        return 0;
$ _4 M5 I9 G( j  Q}
& y. A0 k1 N) ]! V. p& d- i3 v0 V
5 H0 `" Z# e; O) m+ l6 t
$ S" C) n9 w( Z6 _& l2 K
//------------------------------------------------------------------------------( g+ x# i% b2 M/ H, u! i3 z
// Selection any objects- `4 a& ~1 X7 Z# e7 Q0 H6 e
//------------------------------------------------------------------------------3 B8 p" L) i% v4 V0 I( h6 N
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
9 @: Q) e- P" a: N5 `1 M: c{
5 w& `& A/ {9 V' u        NXString message("Select any objects:");% r+ ?; j9 X# }2 A" C4 Q. d
        NXString title("Select objects");
2 [2 e2 a! t+ m. |: \4 L# R        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
& p4 K6 T. l& l* m        bool include_features = 0;        7 y+ k; i  Z3 `+ {5 [; R
        bool keep_highlighted = 0;$ M* E! V9 _5 G0 k" b0 R. @6 @# E6 W
        std::vector< NXOpen::TaggedObject * > objectArray;! N$ t# ~. Q  z$ k) V6 d
$ P5 E5 {9 G7 K0 v1 O
& N/ H- P! r# n$ V3 N
        // Select any object array
8 k3 x2 F5 _+ D' o/ k4 ?        Selection::Response res = selmgr->SelectTaggedObjects(. u: {- T/ o0 l1 y8 J
                        message, title, scope, include_features, 1 i' j  t( t+ t, s9 T7 v- E; ^
                        keep_highlighted, objectArray );! V4 G0 t6 O# Z
. [% N1 g* k! u8 b- R; Q5 k
4 [  Z$ y) t3 B1 e5 |5 c
        return objectArray;
4 e+ L3 h, m0 A! {) l! W}( e& k0 q3 M" Y' s
9 ~5 O; m9 V' R
$ [" m, N! C  @
- k3 j8 g+ O2 l# }
( V6 ~$ x, r) e5 p
, D" C* \- I/ U& ^$ b$ h- |0 A
, t5 W% O% Q& w+ k

' w1 _2 ^) T7 `0 [: Z3 p
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了