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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解9 f5 \( \& y% P3 T* N$ Z7 @3 ?0 J7 l
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。# D# g, Y/ z# n5 y6 p
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。1 j# z: [) M7 O$ n- Z) \, N: S
一些常见的类型和子类型如下:
, G6 W% z$ L( y; o0 n( ] QQ截图20171025161410.png
( t9 K) U6 o! f4 Q4 q- u1 m0 E$ `如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。" i' n) i0 b5 L4 V; A- [
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& v: u$ j% U( q6 |
0 h9 [2 S% w6 C" I5 _4 M9 t& k QQ截图20171025161432.png ; U1 V& ?5 U8 _* Q" i; l
" J4 H0 q" u, @+ J8 O$ A% y
9 P/ A! i, W# c; m( Q: x- l/ P
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。" Z5 o4 }9 U! g2 a6 u
5 x; f- S8 N4 s1 k" V- c# Q
0 Y, H$ @6 f* A+ D. f9 }
QQ截图20171025162656.png . r9 z5 V0 ^3 I' U3 A2 v

* _2 j" F5 q# R0 D" w, {/ U) I
5 f$ B* |5 i5 `
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
7 C1 K9 R, Q/ R% t* g0 H; Z  n" a/ X9 Z

+ \9 U3 O/ m! n& i( FSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
6 b: t& Y" W* A; a$ t/ e/ |! n7 {$ T) ]- v; U
' X6 W0 e6 F' Y1 ]" c' N
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);) ~: f( j( M  B. F) S
8 _7 _+ i8 k9 s7 ~
( o* s: `) @' K1 A- m. Z9 y
AddFilter (int type, int subType, int solidBodyType);
# e9 p. s; a2 A- l8 x# k. a2 E( i. P/ H1 ^
+ ]& L% k8 [, y' a. R+ u
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:5 O+ e1 I2 C( A& W( `" y
. a8 i. f+ |$ B" M

+ k( l8 U8 v: K) i6 y

5 T+ x8 e. `: P5 G: x. Y' Y+ c//------------------------------------------------------------------------------% X* M- T. W) A; N3 o; X
// Selection with mask: _4 q, M2 r& ^$ @6 [2 P% i
//------------------------------------------------------------------------------
- h* Y* P; E/ T+ l* r6 u) RTaggedObject* MyClass::select_by_mask()9 I& B8 f* V2 `" q
{
( _$ D3 h2 \  A/ S) W        NXString message("Select an object by mask:");
. q" R, j  c# o8 j, |) j# w! i        NXString title("Select object");( B7 J, q/ W- L* z0 W3 S
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;+ ~, C6 d% K7 a+ o
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
6 z* X7 [) w6 @' n7 H  K, x' }        bool include_features = 0;
1 h4 N3 z  G! b; m( B$ j! y; {3 H        bool keep_highlighted = 0;
8 q! Y) G. ~. p' j5 g
! w3 `8 Z4 H/ F: F
9 \4 A: e; N3 V* `' a
        // Define the mask triple(s), see also uf_object_types.h.
9 I% K$ Q5 q6 B$ r        // Uncomment or combine the desired mask triples0 m# J' S3 P2 v% |- V) o$ v
        std::vector<Selection::MaskTriple> maskArray(1);
7 {7 z' z  y. V& [$ E# W( q        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
9 _) G; \( J2 x- s        /*! O8 H* r' m7 W1 [! V+ s) W" \  \
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces/ H- z  Q5 }  q2 P% Y8 W6 C
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
: l3 L- H6 Z/ x1 J8 p; }        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
& o- u1 c: [6 A  @        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
- ]# [5 n  n9 w# [- ^) A% H        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
9 D/ l, C) l5 ~- m0 k' I# p% @9 F        */7 b0 C5 Z" T! Q, o) v6 c( M3 l" Q, x" g
        Point3d cursor;+ y  U: j# ]% d* E4 o: d1 N
        TaggedObject *object;
9 p5 F' p( E2 w; V  d( Q5 p
. i0 {  J* z9 t8 ~1 I

: P9 T9 X0 Q) t* x. b9 m        // Select objects using filter defined by maskArray triples
: [4 j% j5 y" R  O        Selection::Response res = selmgr->SelectTaggedObject(
$ q9 W( c/ i5 U3 X' k5 g& f1 F                        message, title, scope, action, include_features,. N! a9 B! Z! m% b/ S
            keep_highlighted, maskArray, &object, &cursor );
( F. M) X3 r: |$ i; f8 \- G/ S, K% R

! V8 i4 \) w& A. o        if( res == Selection::ResponseObjectSelected )7 Q$ j8 G' v* ?: ^/ ]
        {
! S$ n! P5 w3 a) N; h. _! h                return object;
# P4 G5 y7 y$ `2 R" e  u        }
( z" L9 d9 S- u8 f$ @- o        return 0;& e! M% ]6 P8 _) V
}" t4 G& Y, \. I1 T! ]( f! e/ B
  M% Z8 X# w8 _2 o0 v. {/ u

) H7 R: W/ h. `  g4 e( K1 |% i//------------------------------------------------------------------------------
- A/ U" Q; @7 M+ N% q8 b* b0 h6 ?// Selection with type array
0 n$ T: r# }% h//------------------------------------------------------------------------------3 L( q" q9 U0 q7 G0 r9 I' f/ z
TaggedObject* MyClass::select_by_type()
: v4 B! C! j2 J9 ]1 p" v{
( y. V% ^* R6 i/ d        NXString message("Select an object by type:");
( _8 J1 ~) W& s3 S5 J" P- E% }        NXString title("Select object");! N! u( h) n1 A2 O
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
/ {6 d: u  r$ g1 v        bool keep_highlighted = 0;
" \8 R! f: J( s! H# L3 `: v6 ?* |8 P1 B) u
: ]; K& p6 k5 j% z! A
        // Define type array, see Selection::SelectionType Enumeration
( g& v% i$ n8 ]9 w( j$ b0 U2 N        // Uncomment or combine the desired types9 M; }& c6 O' }; b* ~
        std::vector<Selection::SelectionType> typeArray(1);: G$ O3 }9 e3 t/ c( X; B
        typeArray[0] = Selection::SelectionTypeAll;" m' t/ T$ X2 `! q
        /*
: M. n% c6 M6 x$ R2 Q& M& f  {  K        typeArray[0] = Selection::SelectionTypeFeatures;
9 j1 ^. _) G, f        typeArray[0] = Selection::SelectionTypeCurves;
4 f! ^$ T9 _- C! f' Y/ v3 e  K+ m        typeArray[0] = Selection::SelectionTypeFaces;$ `; W8 L$ u, a
        typeArray[0] = Selection::SelectionTypeEdges;
0 S; G! O- @: m7 D9 Z1 ^        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;! o7 H8 v* g% r' x+ j3 b& ?$ @
        */( Q8 c5 Y8 W7 ]
        Point3d cursor;
1 y" a" Q+ Z( V3 d% l% s        TaggedObject *object;# [2 E& j9 j' o
7 |  }* R6 F/ ~2 U0 G% \$ @

1 c; I( ^$ S5 B* |5 i        // Select objects using filter defined by type array: u. ?- F& K3 q+ R- N  o$ E
        Selection::Response res = selmgr->SelectTaggedObject(3 U+ ~& m1 |. v6 K% P5 ~
                        message, title, scope, keep_highlighted,
" u+ T: n4 A- ~* |0 I& G( D                        typeArray, &object, &cursor );9 R7 C3 o( h2 v. B7 h

* [* u$ W2 L$ B5 p# J: L1 S* b

& x  \' q$ e- Z* G! [  K. h& M        if( res == Selection::ResponseObjectSelected ): g; x2 R* s& j! q: z* r
        {( n* n# D$ Y* ?1 a) k
                return object;5 s. p( b  X1 |5 X, h8 k
        }
1 o  Z4 R, V5 l1 Y8 l/ X        return 0;7 a5 t* Y" P4 E" k5 z3 v) R
}2 o" s. e1 @' N0 k: p

4 D- a8 c! ]  V* m
  n0 N* T3 P/ Y4 I$ r( l: f
//------------------------------------------------------------------------------
# ^. y1 ]0 ~; Y// Selection any objects
9 r& e. C5 o: a2 `2 q5 l& T  M//------------------------------------------------------------------------------* M% l% A- ~  A: |9 N  ]
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
. n% z2 P9 w( [{4 ?3 x1 n. ]' D1 V
        NXString message("Select any objects:");
0 ?  [2 {5 R; `& a- A        NXString title("Select objects");
3 T! j7 l+ P; _        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
0 A( u3 P8 `" d$ W0 h  b        bool include_features = 0;        " X7 F% K4 w- E# g2 U( H8 [
        bool keep_highlighted = 0;$ D" F) z  |+ A: _" b8 Z$ Q) U& f
        std::vector< NXOpen::TaggedObject * > objectArray;0 f- R/ R! \. J4 L) |7 `

0 l. U" |+ w6 o7 L* A; w7 ?' `

& B' W- N" {: t' ?& o, l        // Select any object array
+ k6 o  Z* U2 a2 B# G, b4 `        Selection::Response res = selmgr->SelectTaggedObjects(; P- }) T: v6 q: r0 z
                        message, title, scope, include_features,
- t7 H0 s* |( {                        keep_highlighted, objectArray );
3 Y+ C3 d3 l; R( p0 ]
- r1 }. n# q: l

7 F. \3 P* Q4 l/ u; v4 C: m        return objectArray;
" _6 A" |# \3 t- n7 L5 Z- m8 r}
3 _9 M& Q4 `" p: D
+ \" k" X& O& _' p
1 b2 _  k8 q2 d  l+ l! N; W
4 g' l% ~% k4 N# }3 a" W4 d4 N/ P

% k$ m6 b0 T8 ]! m* f
. N) A! Y( e& A* h) K# V7 G

5 S1 f0 O0 a+ _, Y4 k* ^8 K8 x9 Q& L, [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了