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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解4 _4 F) H4 e$ H, C" O- i
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
# n0 S1 `$ V* q* j' W$ J  I+ P如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。" |1 B. Y8 ]$ w% P/ `
一些常见的类型和子类型如下:3 `% N; E# ?1 A& e0 k& x/ [) o% x7 Y4 L
QQ截图20171025161410.png
+ U( [4 P4 D2 I- u# a如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。* ^2 y1 @" }: s3 D
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
* C9 u$ j+ K* W2 p# D! W7 A
: p& ^, \8 I, K7 q/ b QQ截图20171025161432.png - ?: W+ ?$ [0 A4 v4 p

  M/ @) ]" R& x
, L2 q9 Z' G! e+ A
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
# D/ _4 l% N0 L# [
  m/ o* A& Z  R
& J* ]6 }6 a, T1 p& ?8 g! B% \/ m
QQ截图20171025162656.png
3 X8 S4 v9 K3 x5 n# u, C
9 }- ]! I0 V5 P) \" q' D% s; b

/ {6 Y0 c% _- ^: L4 q5 h) ?对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。8 ^( c9 U4 N* N  A# X6 X5 J$ g' @
( i9 y6 x5 o9 H3 c5 M( r
2 }. R0 u: F1 a8 h& }6 X+ W0 x1 N
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
% P9 s- o, e* R. b, J+ S; w* X7 l+ Q

0 E$ }- Q2 d, F6 d  v) t5 NAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
  X7 O0 ?$ d& H( J, |/ \& v: c% ^
8 K+ H) K! |7 r& |& ~. }" Q
AddFilter (int type, int subType, int solidBodyType);
: v! v, c9 _; _2 e. e1 F2 j( w5 X7 g6 o; f
, P; N9 [8 \9 ]$ N9 j! j. J/ Q" t7 A
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:6 b: K0 A" x6 L+ ~+ {

' H( _1 l1 S( d7 R% X& d! z- z, o, N  L, v$ i3 J
' |) J1 b/ {! y1 r" Z6 B5 @1 {/ ]8 f
//------------------------------------------------------------------------------
# \6 P+ y8 M; R# b; ^// Selection with mask0 B* u! \6 A( v. F7 T5 N2 u
//------------------------------------------------------------------------------2 i; m5 u0 a+ G5 a
TaggedObject* MyClass::select_by_mask()
! g4 I2 H0 x  O  ]" t{
% ]. x/ y/ D! P; ]2 [; P& d        NXString message("Select an object by mask:");/ d" ^2 D: q, k* b4 N
        NXString title("Select object");
+ I7 @, X! \) L2 T% \0 |        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 }3 \" J  ~. V
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
2 s" O4 M. l# o- M& h% c        bool include_features = 0;
' V( @8 a; O  Y6 I/ |        bool keep_highlighted = 0;; @7 ?/ |* z2 i$ \

$ u2 r" j2 K/ ^" ~% R" m+ {% G  ]
9 E* z/ K% p2 Y5 t
        // Define the mask triple(s), see also uf_object_types.h.; \9 r* i; N2 \% `+ ~- l* \
        // Uncomment or combine the desired mask triples" g( O+ C- K5 p/ o5 ~1 M/ {
        std::vector<Selection::MaskTriple> maskArray(1);
( s6 d% Q1 d7 }# q3 p+ G        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
0 K% x3 x  ~6 f) h        /*
' U0 P( Q/ c) i- l6 N$ |. D        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
3 N7 m( l7 f2 _% ]9 L; D. t/ W" |- Q7 v        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
1 j' ~! \% F0 a: I3 {        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
7 c" [0 E, y! l+ j3 G        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
' I0 d& b1 b. h: V, j7 ~* C" J        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
% O- Y  v! k* y: U8 _: e        */
) Z  w7 \8 S/ D3 R        Point3d cursor;
: {- X7 y; b8 D% g: V, H. `& t        TaggedObject *object;
- P& s9 ]) a4 N5 x& |8 k, s2 E; S; ~
. [1 x" w  z1 N4 f" W
        // Select objects using filter defined by maskArray triples
" y; T: T. x; }- B        Selection::Response res = selmgr->SelectTaggedObject(( @" _# K& r- C$ q$ |
                        message, title, scope, action, include_features,4 t5 O7 S) c: z. ~2 T
            keep_highlighted, maskArray, &object, &cursor );! K0 H" a5 B( `( |% \' f5 S
. p( B6 R4 _* A1 U* w

0 k  x+ g( i# w+ x8 i        if( res == Selection::ResponseObjectSelected )1 D& k) ~' c. e& z/ H
        {' [& y' i5 [4 G. t
                return object;
& T+ a6 w' g9 Y# c* E  ?0 f        }' X6 t! }/ Q, ], Y& J9 h! t) G; x
        return 0;! o0 L7 w  y/ B# L
}
. @; s. [* ^  h2 r( E1 F0 G& {0 ~: D# i! J. Y

* S$ W. o+ j. x9 P0 t# V, }' r! k1 g//------------------------------------------------------------------------------- H' Q* @( ^. z2 j9 T! x
// Selection with type array1 T) B( |" f) ?& N
//------------------------------------------------------------------------------' C! u. N  P+ P' b1 h: M
TaggedObject* MyClass::select_by_type()
7 U1 f6 G4 w# w, x& {3 \{
2 y/ }8 k, [, q+ Q, M" T        NXString message("Select an object by type:");
4 ~1 y8 W4 i7 J        NXString title("Select object");% W, ?- i# G2 Y' B
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 y! M+ I- P1 r2 u9 D! K
        bool keep_highlighted = 0;# |# t2 D2 i6 g, f$ j

4 [7 G2 c' a2 X8 S$ o; [

) [$ y" |; u; i. t6 \  ]% I5 n0 N3 }; z        // Define type array, see Selection::SelectionType Enumeration
) J0 }7 ^6 g0 \- Q4 K        // Uncomment or combine the desired types  ]& {: J6 {. X9 f
        std::vector<Selection::SelectionType> typeArray(1);
$ S+ ]" R& I1 i/ D        typeArray[0] = Selection::SelectionTypeAll;
- A9 G; }3 a! r0 P" ]0 \        /*
9 B* t; D% G" E, E8 e3 r+ O0 L- j        typeArray[0] = Selection::SelectionTypeFeatures;3 i: [) W! Q% s
        typeArray[0] = Selection::SelectionTypeCurves;7 Z; d+ c5 [# ~9 V
        typeArray[0] = Selection::SelectionTypeFaces;. }1 _1 M; Z; T, z' K, ^# ]3 J
        typeArray[0] = Selection::SelectionTypeEdges;6 p& @( Y& W& ]
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;- h/ z7 W, U2 W9 O8 e* _9 H
        */
# G* a" e6 {! F3 y: t# F        Point3d cursor;0 }3 g# k: ]- A7 x  P" L) C
        TaggedObject *object;1 }: G" V. ~% M' W: l3 t

. _; x- O1 w( ]/ q0 c' o' b

6 k$ y( D5 |3 V, `        // Select objects using filter defined by type array
4 g4 y7 C0 H0 H- m0 {        Selection::Response res = selmgr->SelectTaggedObject(
5 V+ j2 l  z6 W! S0 X% ^                        message, title, scope, keep_highlighted, - O9 w- B- D) I" x8 f
                        typeArray, &object, &cursor );
) N* e, @% U% ]. d
# i+ W0 P( u& T3 _1 c, ]
- J6 S3 w1 c, L1 y3 d5 z( ^
        if( res == Selection::ResponseObjectSelected )* I% C" a3 A! \" R/ s0 r
        {
/ Q. P; f: S  H                return object;
2 s* _6 N2 ~# b/ H% t        }
$ J# v* Y% t9 K- I. v        return 0;# n* e# A0 |. `2 n8 P+ u4 c1 U
}# Y' F" n7 m2 P7 Z
, D$ K( R; I% D6 p1 Y2 i

$ q2 ?- v( w2 m4 W' [3 t//------------------------------------------------------------------------------
" w, w. }, n/ v' R: ~0 O// Selection any objects: J& ?) K" P* {, a. C& S
//------------------------------------------------------------------------------# }% s* I) m' o7 ]( d
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
" a7 @8 E% |; M8 q" r{
- E" u' Y& h+ R( v$ N1 Y        NXString message("Select any objects:");
) x, r0 p( @5 H' W        NXString title("Select objects");
# x4 C" L# f: P$ O2 U' m& C        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
' p0 T3 f; p2 |# e; j        bool include_features = 0;        3 C+ C+ E+ e* D0 w" Z( b  c
        bool keep_highlighted = 0;
7 r# S7 z; ~( Q1 A        std::vector< NXOpen::TaggedObject * > objectArray;
1 P' |' v+ Q# T4 Z& B1 U- K# g- g( O/ ^5 v5 B
" g" n+ D9 ]8 U8 C* i/ Y
        // Select any object array* J6 E; j( a) _) l
        Selection::Response res = selmgr->SelectTaggedObjects(& Y4 c% d1 A  A3 s( G) J
                        message, title, scope, include_features, ! O& X9 m/ x+ R: p; f3 J
                        keep_highlighted, objectArray );
7 _+ R+ j7 z4 i% k  v8 ^. S/ }
: T9 q8 W3 H6 [/ [2 C( i* X$ ]
6 n6 n2 f( U; P
        return objectArray;
5 x) Q- @2 G8 a3 s: _' E$ v# ^}4 e) \) {& f; _1 M4 G" y% B

- k' |* i3 k7 o# s1 u* s
& N4 N$ u7 a1 t
" \4 N" m1 p3 t$ @6 N" i' Z6 e
6 F+ W% z8 F4 y

  E0 ?! I8 D7 w/ }% `
5 T* z9 F4 r: r5 ^% M  ^+ l. ~7 x

; R( ]! a) N, O/ R! z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了