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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
; {8 }7 h8 ^) q$ ], I( f: c; j9 B很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。( r2 _2 V, D2 C6 K9 W7 n: ?
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
( @4 _3 d& u3 g' G: P一些常见的类型和子类型如下:
0 N+ Y2 X. t/ R) B1 |, s5 @ QQ截图20171025161410.png
: W6 c; ?5 h' t8 a如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
; R# ~! O7 Q- D3 u! |* J; u$ s3 g0 [% Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
( x* [/ n' ~+ S7 W
, c& p( [0 D( q/ z/ ]0 o/ T" A QQ截图20171025161432.png 8 s7 j# i  G, ^: Y0 l, b% K
- t1 e( r) B! B! R1 r

$ c) _2 t  Y# f% K8 ?选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
9 d- T$ |/ L# @+ E' d* n
1 I6 Q. {. `2 L# o

8 ^, |; T; H6 P  A: V8 s9 N% c QQ截图20171025162656.png 9 }2 A  @7 _# a6 Q

( b( a2 U3 B7 B+ ~. w2 i

% a2 Q' w/ }" v3 P# y/ _0 Z对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。" v) i) r, o/ Q
5 C- r" A3 a( W4 n0 u/ }' |! L; P

! U2 f' ^7 C' {2 h, k8 S& dSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
" c8 {4 b0 x! H  P! S0 K7 Y6 q
+ D/ S! N" h  S+ |# o( D
% q- J$ l9 D  f( oAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
; }; D5 A+ N$ o4 X4 C" E3 j% M1 q, X, c

/ k" _. H! d- e* n7 `4 P3 UAddFilter (int type, int subType, int solidBodyType);7 n6 i: T/ o, t9 n
2 G) f" `% Z4 V- l  E; k% [0 S

/ y0 ]$ o' v: V9 j$ f9 v& {对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
  {7 ~9 a0 W0 H7 ?9 a& B1 |3 x+ g. R" W/ b+ R/ b
5 E% X. w$ }9 ]3 |" e

2 [; S+ u, H+ @4 G3 r/ W) k5 E//------------------------------------------------------------------------------
4 T4 V5 j$ t' u+ e// Selection with mask! J9 B4 X  v! w
//------------------------------------------------------------------------------' _  A6 b8 G6 ]
TaggedObject* MyClass::select_by_mask()5 \% b4 @0 O  a6 j9 ^0 |: z8 S
{) K3 D4 ?" S1 b- x) A' p% n
        NXString message("Select an object by mask:");
* I( J# j' K  I) x: e3 x        NXString title("Select object");; p  [0 u3 g& \' x
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
0 t9 I; E/ M- `" V2 f: G4 U1 C8 g, b        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
. o# |4 h1 t3 q3 p        bool include_features = 0;5 \+ h6 q$ h, \9 C+ v
        bool keep_highlighted = 0;
6 A7 o' |# ^, v
; V' `, Z+ d5 g1 F& I. R* {, ~

; `+ H" Y) a3 q" Q        // Define the mask triple(s), see also uf_object_types.h.  k, J+ P  F) m. i8 R$ G' v0 r
        // Uncomment or combine the desired mask triples
: z) n9 E7 s% I        std::vector<Selection::MaskTriple> maskArray(1);5 U8 [) {1 l# A1 U
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
' e# R' z8 e8 v, R: p0 t# k' W        /*: \( q. d; S* g3 f
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
5 w, e' w0 b1 l/ n( _( E" }- ~        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges, l, M# Y6 i4 }1 l
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components# J8 k/ O  j% e+ t
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines  z; l  X! G5 ^! S
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
, o& E* B  B+ n1 U$ P        */7 V# z8 d) E/ S  h  u
        Point3d cursor;
6 K7 O& m" i2 @, s1 d5 J( O, r        TaggedObject *object;  [6 X% p6 K+ O+ Q
1 S9 Q) @8 u/ b5 }

2 g( q' \( O: f. O. O        // Select objects using filter defined by maskArray triples
4 I/ ^* r1 S4 s4 h$ B# h        Selection::Response res = selmgr->SelectTaggedObject(
2 j9 y; I9 i* M' N, m                        message, title, scope, action, include_features,, @$ i2 }1 H/ ~6 i2 h' A
            keep_highlighted, maskArray, &object, &cursor );9 J' M( p6 Z' U* v

1 q9 l. v& l# j9 }; A: P$ _4 d

+ q# Y0 i1 b- {! s. `% H3 s3 K6 x/ J# I        if( res == Selection::ResponseObjectSelected )2 x4 n) F$ _0 Q+ l
        {6 \8 I# ^+ h. u: D
                return object;
  O& S# }8 j- G/ \        }
% v/ `( l7 T$ \5 y3 d  ~0 Y        return 0;$ k0 d# b3 U& @$ v# I3 G
}
/ A1 p+ I* q9 [3 U. d8 t
3 q  N  D: M+ a3 ?
3 ]/ T6 g# D* J- F
//------------------------------------------------------------------------------* A; D! u8 b, x: M1 N0 t
// Selection with type array7 \' w: b, i+ _& B) d% p
//------------------------------------------------------------------------------
' E# Z/ ~$ |  ^TaggedObject* MyClass::select_by_type()) v) P+ {: E1 ^0 R) N. _& ?( ^
{6 T5 k3 X- u  E
        NXString message("Select an object by type:");- ], j- d7 \1 e7 R; x
        NXString title("Select object");# a0 E  Q/ Y' b1 n' Y7 B
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;% ]/ y9 S/ B5 x9 O2 u
        bool keep_highlighted = 0;
# ^7 c8 J3 W( h9 ^
! F! `3 [4 u' _

: H. b. S( u) P        // Define type array, see Selection::SelectionType Enumeration
" L8 |2 m* t3 W4 w        // Uncomment or combine the desired types
5 b* w7 k/ b: A! E& _6 e        std::vector<Selection::SelectionType> typeArray(1);
3 a! C' y: U% ?: N  X5 X$ A( ]        typeArray[0] = Selection::SelectionTypeAll;# `8 D/ k3 H2 C. X& m. P
        /*- q4 i- E! K6 O: U( ~4 q0 _' R
        typeArray[0] = Selection::SelectionTypeFeatures;
, R/ |0 T0 v8 ]( |+ {        typeArray[0] = Selection::SelectionTypeCurves;% {2 s. S) ~5 E; S/ }. {, d
        typeArray[0] = Selection::SelectionTypeFaces;% O2 l) a. z/ s: R3 Y
        typeArray[0] = Selection::SelectionTypeEdges;9 l2 Y) N8 s7 V+ ]& S; w' c% N
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
6 X- E5 L- U2 P: k$ m        */
' V; I$ J% P/ h, L5 z$ }6 v        Point3d cursor;
% T! x  Q" Q2 y        TaggedObject *object;
3 Q' ^3 g! u4 H: ?
5 r6 F6 M) L2 {  p
; Q2 q  v& T4 I; D5 t
        // Select objects using filter defined by type array1 y% V1 J% H3 i1 q" l) _5 Q, ^. ]- t
        Selection::Response res = selmgr->SelectTaggedObject(
& A% g$ Q: A' s! s                        message, title, scope, keep_highlighted, # ]% O% ]" Y- Z: w
                        typeArray, &object, &cursor );
3 v1 `) e' Z" F1 D; W, C, n% \( O& z" b8 i+ }
% T( Z! @( f& A0 @1 L
        if( res == Selection::ResponseObjectSelected )9 }7 i( T- R4 a. g' ?$ J
        {
. X) [0 J  s6 o& O% h1 V5 K- D) e                return object;
' F2 j) Q- s$ [$ J4 C' z        }5 _" [5 o% v) ~/ B8 G: K
        return 0;- w  [/ a, ~" z" I% I" i
}
0 t8 r2 ~. y5 d! v7 i( Z  n; O
" g# Z6 t3 A" U$ a  i' i4 v

2 V% [  {# I4 i& A4 O) ]//------------------------------------------------------------------------------% ~* {/ u2 I& A! ?' u3 z9 T
// Selection any objects
" p) c3 z$ H1 z/ C, o4 v( j//------------------------------------------------------------------------------
0 l, m7 C6 N7 R$ i+ d4 m  sstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
+ l  |# ~7 b$ B5 Y$ a% H8 N{! y3 j1 S4 t3 O7 h: F
        NXString message("Select any objects:");7 I1 W  J$ y, I9 P3 M( @" Y
        NXString title("Select objects");
4 |) \' K5 p* Y. k$ P        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
- Q1 p* J- ?6 h. z% W. L/ e2 d& ~        bool include_features = 0;        
) w) [4 Q. p, W5 Q+ w7 k        bool keep_highlighted = 0;
7 r1 {7 p* R# k: @        std::vector< NXOpen::TaggedObject * > objectArray;3 Y$ p* Q( [9 @  o

; h& G# e3 s' N4 \( a
9 o8 R# C0 i, ^, ~
        // Select any object array
, f1 F  l. r/ _1 G  \        Selection::Response res = selmgr->SelectTaggedObjects(
# }2 V, H6 \; N* I: W                        message, title, scope, include_features,
* f# {& j3 V/ Q4 h                        keep_highlighted, objectArray );
% l9 X2 r3 I: n4 W0 s1 i7 J( P& t8 h- ]) k' e8 r

: g6 `% l, C" {1 X; `, i7 n        return objectArray;
5 O. M  {1 s# X- c5 H. Z}
/ J" E2 \7 v) {0 P$ h
8 i3 K# e( N5 u: \# J$ a! e1 ]0 X% O8 h7 y& M# w

) U$ x, f: H+ M! T- `8 @* [

0 {' B9 m+ a" |' W6 z) `: \9 c/ U) o% D7 p+ \, Z
9 y1 ]1 p5 m8 z: C0 _  J4 ]

0 `, g6 D* {3 Q) k, X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了