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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
  t* o; V( x+ X: F0 _0 ?3 b6 F7 Z很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。, U  [( x; p9 g
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。! H. S, A* S$ y
一些常见的类型和子类型如下:: @6 S7 G- q0 q, x; C3 J' R
QQ截图20171025161410.png
. T- k$ A2 O, c0 E2 V如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
& D# ?4 `5 ?# y0 l实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
) `. J1 X9 W" d4 O
( q6 f/ r" K6 k QQ截图20171025161432.png - e& A4 C2 N& _

. e5 q* t* K, V$ w5 K# U  G
; v! v- h2 h' m" U* {8 ~3 }& p0 M
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。# m# I5 _; F% e! J9 R
+ r' @" G* C% p1 z
1 x  v$ R& }$ v' E! R5 i% A
QQ截图20171025162656.png 9 H7 }( A$ Q8 G: }( u
! x/ X1 k* e6 j  `! a
6 d( X; V" `" l: K
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
7 r3 C% l3 y1 [" w- U
( G3 G  ], F# C* N- I
* g, r: \; R0 l2 U: {SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);7 p& z# t" I9 i1 Q2 O6 [9 R
/ _, M3 g/ t8 _/ z
- i( S3 P5 Q$ R
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
+ _' v. A4 D; N
" a# I$ T* L* x, s9 z& m& M+ Y" ?+ f9 i7 D
AddFilter (int type, int subType, int solidBodyType);
5 o2 |) e- X5 X$ O9 u  K7 i
$ q, r- n. I3 H7 t
' M3 P9 Q$ T1 C& [1 V+ t
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
/ }8 @6 t, e9 ?9 ?6 s9 X8 E% ^* e3 s6 P0 x0 d
- u2 p$ O2 x. e/ j. F# |7 L' {

7 R/ w5 ^3 P3 a/ p//------------------------------------------------------------------------------/ ?. K+ T% l* Z. y/ ~  V
// Selection with mask
8 o' `' \8 D( \( ^" N//------------------------------------------------------------------------------9 v. T0 e/ [' M) O$ C* j
TaggedObject* MyClass::select_by_mask()2 V' W1 z0 t+ V
{: l' v6 v3 R, L0 z8 `7 ?
        NXString message("Select an object by mask:");3 r8 ]+ y- V$ P
        NXString title("Select object");
# h4 M. A& \* i4 p6 }( ~* h# c        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
3 b9 S2 ?- c% X. J4 O( w( U        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;! O4 D( R0 p: i( h6 `) A% y
        bool include_features = 0;3 r% @- h' K% G  F
        bool keep_highlighted = 0;
) [1 @4 W) w5 l: ^& d) p
. p6 S+ y: y' \" x& k
3 `, `: W) r: W9 p/ |% V: ?
        // Define the mask triple(s), see also uf_object_types.h.
1 _" g% l: y" s7 D% L, U        // Uncomment or combine the desired mask triples
* f9 Y4 u3 d: r. V        std::vector<Selection::MaskTriple> maskArray(1);
( k6 S: k4 l- c) H- ~6 T/ j        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies' I, I  r+ H& e
        /*( L, T8 Z- |0 T7 Q0 y
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
# `" w4 ]$ e! |6 Y6 @8 l$ J8 P5 i        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
' u0 v) V* z2 k- W' S! I        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components$ e) `' S- s7 `  y+ L! }/ @
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
7 X: }) p# m5 C/ P0 _        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects& Z5 Q% o: V+ P% c4 O* t) w
        */; N/ h/ U4 m4 `1 |+ A
        Point3d cursor;5 `' c8 n: u! d( O- x# F9 {
        TaggedObject *object;
( ^9 W& _) m& O6 x% y0 z3 I' R$ D2 R7 T2 f3 L
. G5 \6 L( X4 Y2 w& I
        // Select objects using filter defined by maskArray triples8 L: ]( w1 [9 N. L
        Selection::Response res = selmgr->SelectTaggedObject(6 I) b! D: s- d6 p) l3 I4 D; h5 [7 Q
                        message, title, scope, action, include_features,
+ l0 f, h; _" G. Z& z# l            keep_highlighted, maskArray, &object, &cursor );
% a# ?' m" b  y$ ?! n4 l+ J
+ W# T. l  ~) y2 v
+ x0 u) Y% ~* W( S+ ]
        if( res == Selection::ResponseObjectSelected )2 ?4 g/ A- [2 c7 w: K4 M$ {( J
        {
! |/ G! V8 ^' ~5 n* [0 [                return object;
" f: Y1 C2 ]2 G  {        }+ p5 O5 X4 P  n0 ]+ |' U3 V+ D
        return 0;
) P" p) x  E7 u. }6 v}
5 z5 U; i- Q+ F: j3 e
" f' L4 S9 h) }8 X" {
6 E: L: C8 Y3 y$ V6 q
//------------------------------------------------------------------------------
5 q7 ~+ u6 }! d// Selection with type array$ U: R+ T2 Z& H# R
//------------------------------------------------------------------------------
2 @3 I. O! h# p7 F9 dTaggedObject* MyClass::select_by_type()
7 Q) O) y5 E) I: G7 e. v{% m9 R: a5 j: |# l) M6 J2 f
        NXString message("Select an object by type:");
+ P# j& B  `" ^! J+ [        NXString title("Select object");
. B6 c" S: n2 d        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;. n' r' U1 M2 Q  U5 f
        bool keep_highlighted = 0;# y8 u4 _& k2 O& c% I* `. a

! c' C, |* F9 O. K2 u. }1 P& P
9 B: ~, |. l1 i; R3 s
        // Define type array, see Selection::SelectionType Enumeration
) H' O1 [  [6 z7 G( h        // Uncomment or combine the desired types
+ Y2 t; P( i' P; z( r- J$ ]        std::vector<Selection::SelectionType> typeArray(1);" v9 Y5 k# h* [8 k
        typeArray[0] = Selection::SelectionTypeAll;
% Y# e( b- [5 H9 Z5 {6 X: |        /*! e5 T2 V& G+ V$ [( q3 n- T
        typeArray[0] = Selection::SelectionTypeFeatures;% q8 {* y, w5 Q  L! ^. D/ ^* j/ U7 e
        typeArray[0] = Selection::SelectionTypeCurves;8 M6 z1 _/ F& F
        typeArray[0] = Selection::SelectionTypeFaces;$ v9 C# ]6 r3 ^% O! O$ i  g
        typeArray[0] = Selection::SelectionTypeEdges;! p/ A9 M% n. {# A+ ]
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
7 b. B" n2 P/ F        */0 f7 g. J( t. \2 |* E$ d
        Point3d cursor;0 b+ K; m, v" n
        TaggedObject *object;. c9 N' @( {' i: n3 c

/ {* V+ Z- X! n$ G) r
2 e3 h2 Y7 I" c) ?: p/ e- }1 g$ U
        // Select objects using filter defined by type array
+ A6 ~2 g& _% P- f! @/ R% Y        Selection::Response res = selmgr->SelectTaggedObject(7 h0 R1 N- w) g+ y
                        message, title, scope, keep_highlighted,
9 r- C# Z" a( _4 W2 G9 X0 Q                        typeArray, &object, &cursor );8 T' ~+ P9 v7 ?( n
$ E% I4 P$ A' k% a- I0 `0 u9 }
& ^; h  A1 ?) ~2 x% t
        if( res == Selection::ResponseObjectSelected )
# k/ \& b7 i9 J7 n        {
/ g7 b) W  o% I' J5 @                return object;
2 @9 m1 [% K. Z( l        }* ]: G/ I* b+ ^. {, K/ H: f% B
        return 0;
$ M4 j5 Y7 [0 [: m}" d8 v5 b6 A" ~/ u2 ^. `1 ?& _- b

, L0 C; i% V3 M' R; Q1 ~* H4 @
. f9 [' W6 J- |% Y0 p
//------------------------------------------------------------------------------. d. U4 g3 M  m( C. L$ L
// Selection any objects
( I/ C9 b  g& Z6 j: a) b//------------------------------------------------------------------------------
" X1 R0 M. H' D4 {. hstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()* E% B% S: z: B% {. q! a
{
) [2 i, j) a( e0 X: ]+ H+ X% g+ j% R        NXString message("Select any objects:");& K- Q. `4 [# a5 Y+ |# S; C9 r
        NXString title("Select objects");
! m5 ]$ u2 S7 E, D& `7 k2 ~3 }        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
! k6 q  s; u* q& b        bool include_features = 0;        
) B6 `! y/ o) n8 d; F        bool keep_highlighted = 0;6 }$ r) F$ X; a5 m6 ?6 U' P: ~- b
        std::vector< NXOpen::TaggedObject * > objectArray;
; {8 A6 A) }' i; Z7 o0 w
9 v# u/ w) b( K* k6 y
# z- F, U/ O) f7 h& O1 z
        // Select any object array
' }' ~6 N, l! s0 |        Selection::Response res = selmgr->SelectTaggedObjects(. f4 |* x0 g0 b) {( p3 s7 V; Z
                        message, title, scope, include_features,
: k' f: Q9 E2 `9 M                        keep_highlighted, objectArray );, Q: H" z- G1 G( z) x% B

& F& h3 x0 W* U( |! I* Y
# r5 K6 o* E1 r: Y9 |. k% W/ o6 ^
        return objectArray;9 J$ I$ s1 G8 I3 Q% _
}
& _: m+ v; b5 L$ a6 v8 ]4 K, j8 {+ B! t( f# `# q/ ]1 s  V& _7 y

. {( x  J2 c4 S2 ]6 V& Q+ C* ^/ U5 v

' ~7 |8 {" l  b$ I) h* o7 i9 N9 N9 C$ ~7 {
7 n6 C4 r0 Y( k0 v$ j
8 R& x3 {, y. Y+ _* q! R5 \
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了