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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
, p! ^" X, N$ c* o9 d7 G! t很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。7 Y, p( G* l1 x. R1 q8 K4 d# U* X" G
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
+ j6 M& C" o* R6 V' \, @$ [一些常见的类型和子类型如下:
2 S: p' b; u; b8 s4 v* E QQ截图20171025161410.png - Q# a2 \4 q  N6 Y- Q
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。. S4 O& n1 A4 P3 ?6 n$ [4 c
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 G. M: y8 S" q1 }/ E8 P% @8 j

6 c3 M, t- V& x6 D1 s QQ截图20171025161432.png , R1 j" d( u$ X
1 w2 C2 ?; @& U3 F' J/ @
) H( q3 w( M& M) T3 d; E# N( |$ n
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。  O6 A% K, t2 ^4 G
* a8 i9 q; o2 b& o/ {7 b
) S" M* p( D' J8 a% }" S) v( |0 Y
QQ截图20171025162656.png
, d& |/ ?) {) t. R/ x5 {( P6 w0 @4 `; @5 |6 I) _+ ~
1 Z2 D! q# d! D0 n" O
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。$ v5 j3 g$ D3 [/ J

- }* ~+ W2 x' p, C! j+ y
: A$ y6 o0 W# \" OSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);. Z. J/ A3 R3 k% b$ Q: N# S3 j

, k" Y; m+ }/ K: ~( f2 i
, z9 f3 i) h; `; T$ q/ q' KAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);6 z2 Y1 q) F& ^# d3 \
7 T; e3 H- G# [0 J

! U* c( c9 Y  q: w  f# A+ J) tAddFilter (int type, int subType, int solidBodyType);
/ c+ u3 {. D& ^. J. o0 J" |/ Y# R8 |8 _8 {2 E3 x
% S- V8 }' m$ o% J. A2 a, V
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
9 T* ]; k  n/ Y5 Q: `. e9 S8 S/ {) C1 u* w2 f
6 p1 q% L+ J4 c7 o; G' |

! x; y* X/ \- X/ J' F1 @//------------------------------------------------------------------------------
9 n# o/ ~9 u& ~( i3 Q  H// Selection with mask
9 r4 v" e( E* E- m//------------------------------------------------------------------------------
8 V, f  X6 X( f9 t; i0 T7 M3 \TaggedObject* MyClass::select_by_mask()6 T, a! P! D5 Y, u1 [9 C
{
8 f7 H+ l6 F0 j7 S& w, A! _7 x  u        NXString message("Select an object by mask:");& |7 F* V8 i" A3 q* ]
        NXString title("Select object");
, W1 r& \( R, X6 x6 ]0 [. b        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;: V% p$ q* X; }- i) O5 i
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
9 d8 X+ N; E" M" O' d        bool include_features = 0;( @5 c0 h3 a1 d
        bool keep_highlighted = 0;
# Q8 ~4 E& Y7 Q; Q* b( w6 F: G% r! R/ g5 K7 d" \2 a( B5 G5 [6 `$ k

1 x! `' Y3 L  \9 o3 n        // Define the mask triple(s), see also uf_object_types.h.
7 t& L) E$ ?. _0 K( ^        // Uncomment or combine the desired mask triples
& b3 E3 o! ]2 U" O% m8 _' x) d, ]        std::vector<Selection::MaskTriple> maskArray(1);
+ p) x( u  y8 _% s' R        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies0 i2 r& C% O% d& X! {
        /*
3 n4 c: |. Q. H$ _3 V& r0 b        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
) C4 U; U  b! T; R/ h7 S8 ?" Y9 @        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
4 ?$ m' Q1 f! s; w6 o2 d        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
3 d- t% u- Z. P, s( t9 |* d/ V  S        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines, B* a5 _$ E: w5 j6 K2 F
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
  n/ |, m+ F3 v" D3 p# i4 ]        */
$ p4 p7 O( ?1 Y* x3 y+ P        Point3d cursor;! Q- ~' e6 u9 }9 i
        TaggedObject *object;# E! X! T- f0 k) P' p
" T6 N- V+ F# ]: V! N5 _
2 m5 [; \& ?/ ~9 h& Q+ }
        // Select objects using filter defined by maskArray triples
$ @* I% J6 O# a$ k" R        Selection::Response res = selmgr->SelectTaggedObject(
5 y3 t8 M" y" k$ N                        message, title, scope, action, include_features,
- Q3 l, d  O" w' V" _            keep_highlighted, maskArray, &object, &cursor );4 Q' n8 b3 q# Q% d
# J; f  q* I! Z: p4 k) g2 u  \
" F+ g; y2 J3 @0 [1 E
        if( res == Selection::ResponseObjectSelected )! c9 F# A" f+ _+ W3 B6 D
        {7 ~- d1 [" R, v
                return object;
/ x6 ^* \6 r" Y5 v& \        }" P/ T$ A- y( L
        return 0;
9 v4 `3 d. S! _$ J}9 S; ~$ X, E: Y* o! {) [. C
3 X3 e* I& U" x! u) V

3 m2 ~' D- _8 i: s# l; E8 P//------------------------------------------------------------------------------
: N/ [# C4 h- S) T// Selection with type array
. _- z% {2 d# i/ b) B//------------------------------------------------------------------------------
! U) Z/ z2 V. X* X* mTaggedObject* MyClass::select_by_type()
3 ^- ^/ |$ @. d, d{
' z' v0 U* |/ \3 O        NXString message("Select an object by type:");$ I5 {  w2 P2 b. B) d0 u  x
        NXString title("Select object");) F; R2 z5 J& E
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( D# G* z) ^( [4 T1 h6 `# ~  m
        bool keep_highlighted = 0;7 F* ^8 l. R3 S7 J
6 O+ |& B$ p+ I& h2 ^

# ?* z0 R9 M- |  ]  n  \9 _* q        // Define type array, see Selection::SelectionType Enumeration. y- K3 z3 s  \: A$ a. u: o
        // Uncomment or combine the desired types
: g. |; U4 O( j1 J8 J2 S: |        std::vector<Selection::SelectionType> typeArray(1);
" B$ Q, q# H4 T% w        typeArray[0] = Selection::SelectionTypeAll;7 B$ H) u, [9 h. s/ l$ F4 M
        /** h3 V+ f6 B4 k- [- R
        typeArray[0] = Selection::SelectionTypeFeatures;
8 W+ C5 j2 z7 J  G& y( G        typeArray[0] = Selection::SelectionTypeCurves;" s! o% ?: X8 c& d& b
        typeArray[0] = Selection::SelectionTypeFaces;
) ]2 L7 g* o. e! d        typeArray[0] = Selection::SelectionTypeEdges;
8 y) d" Q2 A# l+ }. m/ k3 H% l  g: [        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;/ O( X) P4 ?: v0 Q
        */
- W2 h' ~/ E$ ]& \0 W9 C1 X) l        Point3d cursor;# ]( J/ M5 Y3 X: d/ j6 o) v
        TaggedObject *object;/ |/ H2 G3 ?, C7 Q

1 Y/ O$ `: C: h: H

# q) j5 A0 _. [; y        // Select objects using filter defined by type array
8 K* d+ n; w; n! F$ F/ E& l3 Q4 o% F* C        Selection::Response res = selmgr->SelectTaggedObject(  d8 C3 t% S7 |9 f1 f$ F. @
                        message, title, scope, keep_highlighted, 9 j+ G# C6 s+ I/ d
                        typeArray, &object, &cursor );
: N2 m/ ~, F, q) q. P9 f8 ?
0 u9 D; f( x/ F
  f2 e6 ]2 S0 _0 w
        if( res == Selection::ResponseObjectSelected )& m+ c% {7 O+ |- X5 L
        {) t7 m6 B' E7 ]2 G' o, O
                return object;5 j1 N/ @  ^/ u! D
        }, o2 `& }" N# k4 K8 y: H( r
        return 0;: X* o; u9 I9 A
}4 L+ V# q3 f, u  Q. ~1 y# p1 ^+ p
" h3 f& g& q3 x) S8 r
  C$ g) y) G7 ~, y
//------------------------------------------------------------------------------$ ]2 |0 c( J; L+ T$ F/ n, ]
// Selection any objects
; L% h, }  u2 B* t& J) o/ V0 G//------------------------------------------------------------------------------7 V0 @1 o/ O  T" U& }1 v
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
1 }/ s( E# v/ @0 _- E( R$ d# W) h{
( C: [5 Z! j2 E" |6 J, j4 [        NXString message("Select any objects:");/ @6 D3 A8 o' i" P" m
        NXString title("Select objects");
3 n1 [5 ]% `: }/ u  K$ q, w        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
5 p7 l9 M" R+ l4 I        bool include_features = 0;        6 q* i  p7 C$ M  V& q* l0 X% \
        bool keep_highlighted = 0;$ L& l7 s( B) F/ G8 m6 z& ?/ z8 g
        std::vector< NXOpen::TaggedObject * > objectArray;2 d. O7 u6 s2 M- ^

8 U: b% B2 `/ B% v
& W6 r" q5 J* z  ^2 G8 |! ?: A0 ~
        // Select any object array
" N' j5 G! F! M; R) t: k0 d* M7 G) P8 L        Selection::Response res = selmgr->SelectTaggedObjects(, r3 k! G1 w! y2 ?# M* [$ b
                        message, title, scope, include_features, ' @- [% W8 [+ _& D+ m/ `
                        keep_highlighted, objectArray );; b8 `, G: M" K! V  G( J
+ T- E. ~2 C3 L2 S% c& y
, k4 F7 b5 J/ D& D/ ?2 s
        return objectArray;+ ]. y' R& O$ |6 _* M/ P6 k/ H
}. ~; j' T2 `8 O1 a' c7 M" d

, H! d0 W  V9 B) e8 T! [7 i! a
2 u0 o! Z" e  [. W6 l# k9 C  ?' a7 g) S. s8 N: E

/ t# Y: V% m, v9 d+ `- r+ X( D7 F. P

! S0 U. J3 n  @9 I" p. T. c6 |
' S7 ~7 n, v4 {1 j2 S/ `# m9 y- Y0 m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了