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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解# {+ q+ D# l8 I: \4 S- m- w
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。3 w; m$ e1 b" `& Y3 b) R
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。6 {! P' e" ]) a! }/ \! s& j% H9 Q2 I
一些常见的类型和子类型如下:
! X. e7 q+ q7 C  N QQ截图20171025161410.png
5 b1 O- ~  @/ s% A" R1 }如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。* u( b" ^6 ]! ?+ G- i* |# o
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。% ]# O( C. f) M0 v3 D6 N' z8 f

# |! [8 a8 R; K9 Z7 u, k3 @" P QQ截图20171025161432.png
2 c! C; Q2 O4 \4 p. E9 j8 ~* |
6 Y  F* W& W9 m  e8 X$ K3 i4 o: a, e6 A
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
& T5 T6 s  a0 \6 F; S4 S3 g: e+ @1 v
0 m3 b) w5 F* {  A
QQ截图20171025162656.png
% K& H$ h0 U. h. g% t/ v6 w8 ?7 L* d0 p, r4 K7 P! P& G

) b4 V/ a; v0 x; c% K对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。8 Q2 O1 R( T6 A9 d* Z& [+ M& w

' c: t% \, a0 }, w* @8 Q
! h9 [  U3 Y+ Q0 Z" WSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
/ U2 |4 t# O$ r0 [5 y( K) T5 z1 X' c" p$ g

1 T4 o) b5 j$ F: Y  e8 r: Y+ AAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
7 p' n! Z# ]  O
$ u; i6 I; x5 I! ~# }; O( `5 [% @9 F* g$ }& i* j, O
AddFilter (int type, int subType, int solidBodyType);; X' ]9 r! e& i

. f5 I5 V/ G/ L9 R& N, {

4 y" \9 w! i' m对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:. q2 X7 S9 P! }! Z/ B2 G2 K
! I$ _* Q5 I  K/ j) B9 u
+ F' z; t# m) h$ d' v% B

3 x! l4 ^  n+ S% K# l//------------------------------------------------------------------------------- @+ C4 d# F5 m; h! P/ v
// Selection with mask/ h! C5 s$ v( i' r7 u# S1 |$ v- F  W) t
//------------------------------------------------------------------------------
* v4 d/ h* ~4 Y. I1 z) cTaggedObject* MyClass::select_by_mask()
; f7 C7 n  w1 c% k: v7 t2 ]{
1 x; m( F! j1 F; T) i( W        NXString message("Select an object by mask:");
) c; r* Q8 l8 m( y        NXString title("Select object");! _( _/ z- r5 L% n
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;$ U& z# z( y' |
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;% c' h6 B% J7 u8 f4 o
        bool include_features = 0;3 o' s9 V' X/ w4 h
        bool keep_highlighted = 0;
4 c: G0 H* V, j1 ]+ _# @3 B! c3 t
7 @6 F* I4 C+ @4 n/ d9 s
        // Define the mask triple(s), see also uf_object_types.h.
, H5 Z/ _  h* s        // Uncomment or combine the desired mask triples
4 c' {# g0 ^, x6 ~5 E        std::vector<Selection::MaskTriple> maskArray(1);
9 J& o5 ]' p" t9 M2 ^' U8 a5 q        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies; s! v( `* Z1 _- V# \( i' {7 `
        /*- u3 d" I5 Q) }( _! j
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
5 O, r% x: }. F4 `' s: G/ s        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
; W5 `7 Y3 w0 D5 r0 A        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
* b: D2 a% U! V9 [1 K: n        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines! j, D6 B* S1 E
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
% C5 e9 Z" Y4 ^7 Q7 K        */7 N1 s* y; `! }7 r
        Point3d cursor;- s% @0 Q3 y- c$ Z$ \6 N. Y& k
        TaggedObject *object;
# m& H' ]/ o9 ]7 ?2 C4 G3 \8 ^3 t' _  b- L+ s5 H
: B( M8 \" h% G. l$ E. k$ b
        // Select objects using filter defined by maskArray triples6 U1 d; ?# h2 ^5 c1 N! E6 }
        Selection::Response res = selmgr->SelectTaggedObject() b$ W2 c4 l8 x3 e
                        message, title, scope, action, include_features,$ M- j( s& U% D& W* l1 \6 w
            keep_highlighted, maskArray, &object, &cursor );  S4 O' l/ g; E( G- o0 U

) ^4 }9 z/ y7 y. z
( v- ^3 w9 }; q/ V
        if( res == Selection::ResponseObjectSelected ): ^9 N. B7 w6 d" T* V8 G6 p
        {6 M1 R% y3 P  e! o& y6 I1 T
                return object;9 c; q4 \. C) Z6 o3 [
        }3 D2 S/ g) v8 j! w
        return 0;
6 i2 S" O- I" K$ ~% q; c2 z}+ u1 u/ w: j8 l3 a; T7 |- F" N
! n: i6 t7 G1 M9 ^8 u) G4 G2 L

: {9 y  ~% o0 ^' S& Q//------------------------------------------------------------------------------/ C! r( K, I  B/ p: T. \
// Selection with type array
- P8 E. u2 t& N5 n6 _' j//------------------------------------------------------------------------------
, [" y1 u0 {2 V0 z: LTaggedObject* MyClass::select_by_type()$ s6 A' G! G/ |
{
4 g: C5 u3 k4 ]& H! X/ s; c7 R        NXString message("Select an object by type:");' b# T* ~1 E4 |
        NXString title("Select object");
+ |3 M* E0 F" J  e6 q1 p) R        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
, N4 a6 s( d: {- A( |3 z! d        bool keep_highlighted = 0;( ~7 T' W3 O8 z
) L, u) S' o( w5 `
3 H; l0 _) N/ d6 [+ C. w
        // Define type array, see Selection::SelectionType Enumeration
9 V/ y7 x. I' s; _        // Uncomment or combine the desired types. c( M' p  W7 \5 z, ~
        std::vector<Selection::SelectionType> typeArray(1);& _0 q+ Z+ Z& `8 a% W7 z
        typeArray[0] = Selection::SelectionTypeAll;
4 y- T9 c. [$ C8 o$ [        /** C8 d; j6 y' I* y1 A
        typeArray[0] = Selection::SelectionTypeFeatures;# {! p8 ?1 e3 r- k# [
        typeArray[0] = Selection::SelectionTypeCurves;$ l& ]6 ~$ i5 g- ^; p0 ]2 i
        typeArray[0] = Selection::SelectionTypeFaces;+ O2 @9 X8 b( _, f3 i, W  }7 g
        typeArray[0] = Selection::SelectionTypeEdges;2 i% B7 R1 t8 F5 ]: b
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
- l& u7 U3 J9 Z+ e0 r6 V        */
( ]3 x- h+ m" z7 G        Point3d cursor;- k7 _8 Q+ d" y
        TaggedObject *object;% k/ _4 T3 y0 x0 R( A" G2 D
, S4 g1 d* R7 |% t0 m. l. D
/ N- A* \* c" Z( @- O
        // Select objects using filter defined by type array2 U8 Y. K- P" U+ t2 ^
        Selection::Response res = selmgr->SelectTaggedObject(9 k2 `* [. G9 _! a2 i0 [
                        message, title, scope, keep_highlighted,
& b8 u4 z; F. h                        typeArray, &object, &cursor );, D* g4 C; u- O2 M4 `

, F5 v* p% r/ b9 L7 \0 Y$ ?

! X/ I0 A/ h6 ~: d- @; ]        if( res == Selection::ResponseObjectSelected )
6 o* o% b; T' _" e$ N% ]0 T' l/ }0 r        {
6 T/ N! |; K' q                return object;$ [7 X( m9 g% ^# z& |9 q
        }
$ `! H) k! [. }' O        return 0;
6 }  u) C! V6 [1 Y  k  A* Z) M2 G}
: \- b5 K- F' ~* [) Q8 k
0 h* l7 L6 v, @, R
( o* w! _' m6 q4 Q# a4 Y7 o
//------------------------------------------------------------------------------
- w  C- \& T( ~  W8 L0 w// Selection any objects
& Y8 X; `# ~& x* y6 C$ ~$ R7 e//------------------------------------------------------------------------------5 y4 {" [- }$ t, p4 ^" W( x
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
, v1 G  ^* w& x3 H3 K; A{
3 \$ j9 Y& q4 ?0 ~: o: f        NXString message("Select any objects:");
- ?" {( e% u  n) X/ Y5 h1 R        NXString title("Select objects");, ~' g0 O0 K$ e" J0 e
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;. n9 m; h0 G. i& h
        bool include_features = 0;        0 W9 s7 f8 Z3 n5 T3 d: r" r
        bool keep_highlighted = 0;
) |8 P2 T$ n) {/ s        std::vector< NXOpen::TaggedObject * > objectArray;- [9 \6 G8 q+ }2 k. F! ]: Q0 C1 O
# J4 r4 G% A6 H

5 a5 G/ p0 M% Q+ C0 U0 R        // Select any object array! j; ]2 R2 p3 W, R5 q5 K8 x
        Selection::Response res = selmgr->SelectTaggedObjects(
3 J/ h8 Z$ Z( f                        message, title, scope, include_features,
& ?: n  |$ }' B- Y) S4 I$ J                        keep_highlighted, objectArray );$ |7 K' P" U! j2 N# z: i0 c
, l# Z# |* ~" z* X% q
+ L" \; r1 F! h9 N9 z0 n% C5 w% q; s
        return objectArray;
) \+ V- Z6 |4 Y  ?1 L}! @  ?# J) B- k$ }7 Z$ `
; s: u. [9 ]* n$ j- O. J
1 y9 }. D, A1 i1 h5 `, w5 |2 A: W: H
, V' V0 e2 {. N+ I1 B
  I5 Q8 v1 F, o; \( {

7 z- v  K, g) Q( ?& \9 u. U0 i! D( V' M

& z( m* _6 o" A7 s, B# X# J
+ x5 \, K. S8 }5 }1 ~2 U# @% F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了