PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

[资料分享] 关于NX二次开发中选择对象mask triple的详细讲解

[复制链接]

2017-10-25 16:33:48 3660 0

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解: R1 |. P' [$ D0 ]
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
% z8 c, v& F( p* Z如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。: K0 T+ [% S( U' u/ A
一些常见的类型和子类型如下:" j1 v  p" ^' Q
QQ截图20171025161410.png ( T& f- |& ^1 T( O) r
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
/ L3 ~( q1 E; a% K9 n1 Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
8 v  o+ f- y- h! ]4 i  C1 B2 Y- C, _2 Q5 W
QQ截图20171025161432.png
% I" y2 a& l+ S; f, u( Y  {
! k" U2 G$ {- ]
6 `: n: }! J3 E2 z
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
3 p2 N2 h* ~) s6 |4 e, ~3 X; ]2 C$ I5 R2 k* b% h) _1 u
+ S8 ~( y1 A- }. X5 Y
QQ截图20171025162656.png # I& J& ^, m( w
- a) V" \3 O4 o" d1 e- U0 P
. h2 P$ K  h: Y$ Z
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。; o" |$ l/ ]0 X! {8 ?0 Z' h
# g+ U5 {. D3 J% m  N9 ~+ O

" K$ q0 [8 b, e2 D" j! K! @SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);$ z8 W( V1 u, P1 J7 d$ v5 _
; x$ M+ A7 I" I/ U6 H

2 {, w. a' e' W! y6 vAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
! N. j+ f$ \% b% P0 ?; M
- I. n9 U) x" ^/ h7 b) c4 h3 Y: o0 k" G1 K
AddFilter (int type, int subType, int solidBodyType);
3 q' S7 G, f+ ^8 @% t% g: C7 R: p' V& y# q7 J( s. A

) ?: I' k, R3 c5 X8 z) ]对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:! E% q; r3 c# t/ K& R, y+ I3 V
& y* ]4 a! r6 n
& p# c5 ^" }& W. l7 z/ P. f: i0 m
5 x- E! y& {# p) I/ }, b* h/ w
//------------------------------------------------------------------------------  ~8 e4 @/ e+ o6 _5 `& _. a
// Selection with mask9 h% Y5 m3 X; `/ q# y4 @
//------------------------------------------------------------------------------
; g4 C6 A7 }) G) VTaggedObject* MyClass::select_by_mask()
7 R6 L3 H3 k  ]1 c! e( f$ M: D2 X{# t' K" @# w9 K/ n. p2 w
        NXString message("Select an object by mask:");; Q" d: [7 Z+ k" v
        NXString title("Select object");5 J' a% N& i! `$ a$ l
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;9 C* _& n; {/ `" U8 c% A- @
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
; `, D- T9 ]: @        bool include_features = 0;
$ h1 e1 e+ G; Y8 J. G7 f        bool keep_highlighted = 0;
8 o. z1 ~6 Q+ X
0 J) u. ^" ^+ y$ h- f' Y/ M' X

, a  ]- i% ~9 h" s        // Define the mask triple(s), see also uf_object_types.h.
' Q1 V* q3 v7 W# A: O# ]" d0 U        // Uncomment or combine the desired mask triples8 }: ~  e, a: q. I+ k$ M% t
        std::vector<Selection::MaskTriple> maskArray(1);2 ~0 c# J# Q  {5 i
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies7 }+ ?3 B1 x8 E, z  |+ G
        /*
! e# P+ n* K- W  _( A/ K        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces4 ~; S4 v4 N" f; E% ^
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges" K: f! @5 U6 T( x
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components5 `8 p, P% y; o/ d
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines/ m/ j3 G  J* W1 X+ g
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects0 s: [8 P% {+ v9 ^, {$ l
        */
& Y" Y0 o8 X# s. t3 `$ u' y% p& d        Point3d cursor;" S; d9 v: D; Y- P' L
        TaggedObject *object;
2 i% d) d3 c3 x5 y/ r1 a4 k
5 m" @/ G: Q+ n+ X8 _
3 w6 }. k, s% O$ G, q! ^/ r
        // Select objects using filter defined by maskArray triples' `3 m9 |, z  X" E( s& e
        Selection::Response res = selmgr->SelectTaggedObject(
1 @. W% L2 S( @4 Z                        message, title, scope, action, include_features,
1 }* @3 F6 _( L3 B4 G) V            keep_highlighted, maskArray, &object, &cursor );* a4 ]2 E0 Y& n3 O

8 n8 D- M% g: ^) ~$ @

1 O' E' a0 \6 I        if( res == Selection::ResponseObjectSelected )
" y& G) l4 R, G- Y, p' U/ S        {$ R" I3 x$ \$ ^, @. F; D+ y
                return object;
+ G8 S3 h9 h9 m: u4 i5 G        }: P) k1 J: H" ~" y3 r7 d8 E
        return 0;
  r# Y- W1 M; w4 p1 q9 g0 `. D& x! G}) k* g; }4 E1 ?7 Z: S1 @: ]
& O- C) g% d7 Z3 Y5 Q2 H4 r

; `( p7 B2 E4 R  d2 |' d& p//------------------------------------------------------------------------------. M2 E/ `$ T, {" o
// Selection with type array
. ^3 z- L  K' j8 _( g( p$ o- z. V4 d//------------------------------------------------------------------------------6 W9 ]9 F# q5 n9 }' o
TaggedObject* MyClass::select_by_type()3 O7 d8 N: E5 l* m
{$ z# j; B: S" O. j0 v+ w
        NXString message("Select an object by type:");2 M: a2 {! w# x: B
        NXString title("Select object");8 x) [# k9 k2 P  ]" {
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;2 ^8 M: c2 C7 G5 w5 F
        bool keep_highlighted = 0;5 s+ x8 f8 |* j3 K3 x0 n% N

! g0 S0 X* @# Y; w( a7 ?

0 x1 F* _' p' E# t        // Define type array, see Selection::SelectionType Enumeration1 u5 S/ N* F3 c# Z# q* M" r2 g
        // Uncomment or combine the desired types
, f5 p6 `' h7 @1 [$ H# {        std::vector<Selection::SelectionType> typeArray(1);
+ Q6 d- x# x! [9 @4 v0 m; U: |        typeArray[0] = Selection::SelectionTypeAll;2 l( R' `" ?' Y, r7 q
        /*. N" h' r) y" l
        typeArray[0] = Selection::SelectionTypeFeatures;3 k6 V: \( T$ K
        typeArray[0] = Selection::SelectionTypeCurves;
3 |& I* W! }# n. Z% y/ @  A$ r        typeArray[0] = Selection::SelectionTypeFaces;" F1 o6 }3 W5 U
        typeArray[0] = Selection::SelectionTypeEdges;( b! V, Q4 r) }) @9 I
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;' `2 K- N- G. B: m4 z5 Z/ a! v: e
        */5 p) H8 T' y" A! K' {
        Point3d cursor;
$ Y+ ]1 \+ e2 p        TaggedObject *object;
3 j* j/ \2 n6 C) K$ J
9 F; A: A( `8 b# I6 e

9 `) e# V& B, i* X; k4 h        // Select objects using filter defined by type array( W+ I/ F7 S" Q9 R! _# y5 A! K: s
        Selection::Response res = selmgr->SelectTaggedObject(
) d) n1 y$ z! G1 ^# s( K                        message, title, scope, keep_highlighted,
" w& J8 Y0 k2 \9 D& M9 }$ J, U                        typeArray, &object, &cursor );) T/ k: Z- ~& j& t

$ L, u" a+ E7 A6 y8 [

" C9 e" d) T3 S8 R# k        if( res == Selection::ResponseObjectSelected ); q0 R- g4 W2 `: W) ]# ^! ~3 A% z
        {( g% D( _# a/ h, f3 E
                return object;  ?$ [: S: H0 ~( \9 o: a
        }
( `1 h6 o* E5 ~$ M( ^6 d        return 0;
* a9 H* M# F8 G) p+ _5 P2 `}
' @6 `! n4 z6 e; j( ~7 c9 h  F& G) ?
2 n. D0 H& f8 U, z# {3 T

" n0 E" e8 Q( K/ [: E. ~4 Q: w//------------------------------------------------------------------------------; S5 _1 Q, T8 w) {; b
// Selection any objects  p( S8 @4 F1 b, W" R
//------------------------------------------------------------------------------
# |0 R" j. [+ u5 I, m6 Q( Dstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()' z( P- m& F( \: g3 ~7 }# d
{
2 ]" E8 |" J& v- W3 Z. ~        NXString message("Select any objects:");
: D8 W+ `- C+ [* h1 h- f. U        NXString title("Select objects");
2 _+ J* D' a& Z        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
% G2 ]+ @* x6 d5 m+ I+ ]        bool include_features = 0;        + t& l  q- y/ A: r% w+ T
        bool keep_highlighted = 0;& |, d4 \* v9 F2 M
        std::vector< NXOpen::TaggedObject * > objectArray;
7 g$ W: q8 Q* d* q" {' b" h; m: _  E5 _1 k
1 [2 l7 L  }/ c
        // Select any object array
0 p& E, c: Y, [- y, R! y        Selection::Response res = selmgr->SelectTaggedObjects(
* p; h" U( d" g$ t9 _                        message, title, scope, include_features,
1 U3 O: e# v* z$ u5 v* s* x                        keep_highlighted, objectArray );, w9 T2 n4 M+ R) Q7 F  |+ j) z
- p1 G8 Y- _6 B$ v6 N+ `* M0 Y! Y3 W

* e1 P7 Y. o1 ], l8 Z        return objectArray;4 M; v% B" M5 H& ~
}
* }. {' z0 z' {6 d2 \
( @: }, k, z; A& [$ i( w, }' @3 ~6 g2 k
7 `+ {# M- a/ o7 ~5 i! U
- _" ^  f' ?5 n

# k  h& s$ }8 I* e
) d2 \8 O. e: Q: R4 {% u3 s! c
& }7 d. E  [' w
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了