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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解8 m+ g/ f& P" W
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。, i' R, i4 }! x) a6 b
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。1 p& |; l7 r' {2 `! _
一些常见的类型和子类型如下:
) Y3 Q/ e, N& d( k: | QQ截图20171025161410.png
$ \& [& ?+ [' a7 @如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。8 Z  C+ F9 ^% g  f4 q# b4 K
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
0 J5 R" v3 I% B+ O5 O/ F: w5 ^
% O5 x! R7 Z) |: K9 { QQ截图20171025161432.png
- r& F7 w& V1 S+ \* u) y" I
0 p4 j* t6 |. `6 }5 b* g
8 \/ A& V( q/ `  }" c
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。' p- Q7 D2 `) V% N: J  x

1 B5 L% ]' L0 R
' r/ Y! X: j! l) {) j$ Y
QQ截图20171025162656.png ( V- {3 E6 \$ x

6 G. T# N) J2 G3 A8 F( Y
, X6 b$ L' L, D5 e6 k1 e$ U+ l
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
, N8 d) O' h' n7 W1 ?5 y0 k* e/ y  x# V

& B, u" |1 ]8 [2 A7 U0 XSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
! g6 [0 N$ a, \* P  ~; e/ H( }& }7 N1 c1 Q: ?3 O8 }7 i

0 c( U- L" R/ N% q, H$ t- b( L0 \AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);( e! x7 [/ d6 e  \. H$ B  v9 f
7 E& E1 T6 u* I
# H9 r3 x% O  ^/ c+ a) ?
AddFilter (int type, int subType, int solidBodyType);+ t, Q) f. x/ \+ w0 r

1 Z( p! V# R; U

% B8 @, Y% R' i6 q' ]: V对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:4 C/ x/ u; R& V& y; ?% y; ]
3 g5 E* `6 t0 H$ n2 \7 q
6 @( h* d) @; s% j, u

" M( h6 t) H  G3 q! y//------------------------------------------------------------------------------
2 d: k* r' q" u5 f- ^* W1 i// Selection with mask) j) _* Y) w' }6 z; x8 j
//------------------------------------------------------------------------------( ]+ X' a' E  e, R5 F
TaggedObject* MyClass::select_by_mask()
& ?( P5 U& n2 r- X3 H; d$ O{
7 ]$ I1 k$ X) C, O. D. \        NXString message("Select an object by mask:");
6 q- a8 p# J, H' D) c9 U! d        NXString title("Select object");
# M7 w! i4 `0 V* s9 i8 x+ U1 M& C        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
  J# t9 e! x- g8 N' Z        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;' r: \) @& H; @& x* ~+ _  f
        bool include_features = 0;
! Z  R4 M& t' K/ z! D: G        bool keep_highlighted = 0;& ?/ ^$ s, B, o( N6 p* {

: m* H4 }' I6 G* y

3 i* `! m! d9 t9 o% g        // Define the mask triple(s), see also uf_object_types.h.
. M* J+ z- d4 S4 [        // Uncomment or combine the desired mask triples; e6 U0 F- A- W- P. H6 w6 ~  J
        std::vector<Selection::MaskTriple> maskArray(1);
  R0 N8 K' n9 a- H  T) w        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies9 }# R8 w3 X2 N3 H. }7 J' V5 }# _
        /*4 O: a3 `6 t' N9 Y' k; U
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces  l/ l" h) [- N& J9 K; w7 @
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges- \8 h& j  ?6 J  B
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
' S+ ?/ }: g; }$ L9 o. f        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines/ ^% F, h, W3 u  O7 u
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
0 e2 v0 u( _9 K3 l        */  G# K5 q1 r1 d% T* W" f
        Point3d cursor;
0 }* {! M/ H8 I! g! E) [- A5 j. [) O& w        TaggedObject *object;+ w5 Q8 f  {0 x* U- G2 D

& K9 F! Y- w& O' l

$ C  A- n, c6 r" Z5 q6 c+ s        // Select objects using filter defined by maskArray triples7 c) r  n- K' S; P# m# M
        Selection::Response res = selmgr->SelectTaggedObject(! R5 y7 ^+ a0 v: z2 w: Z# `
                        message, title, scope, action, include_features,( K7 E8 [* E: U+ G( x  ?
            keep_highlighted, maskArray, &object, &cursor );
: T% Q* I" \( A4 L, W/ p! W. U9 L, T6 _+ y% b5 d' }/ m2 {
( G8 p& Q: F; |, D
        if( res == Selection::ResponseObjectSelected )& F& l# P  {" p) i
        {" r! F- P; u* i" ?+ Y
                return object;- }. K8 q6 i; x/ z" G9 l- u- M8 E
        }7 [- l0 [& H# N" @& {2 e
        return 0;# W4 N0 Q' V, ]% l- `8 K6 ?; d5 |
}5 M' G5 ~" v9 T

" @$ m1 Z" m1 s3 K
8 I, [+ }. h* Z3 c2 r1 w, j
//------------------------------------------------------------------------------; y- B4 Y+ M- M9 L5 E  h% E
// Selection with type array
0 v5 w( X/ n1 j* w! E( {//------------------------------------------------------------------------------; h! }  X( S4 `  ?; o" v- H
TaggedObject* MyClass::select_by_type()
* I3 v4 ]1 o% X2 F" s0 F% Z8 P{9 {5 [8 q  ?, O
        NXString message("Select an object by type:");
" B3 e' H% T0 Y  z) p+ o8 D& l: B        NXString title("Select object");
# R9 ]) G& j/ c        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
+ [( i; v9 X9 a" \8 m        bool keep_highlighted = 0;
+ H8 Z) q: X* q: ]
2 S0 M3 s" z! Y
) Q- G, N) m( A' u- u
        // Define type array, see Selection::SelectionType Enumeration! V5 `, E& k6 ^' R
        // Uncomment or combine the desired types; [# P" E5 a" d/ D2 \  N: R
        std::vector<Selection::SelectionType> typeArray(1);
: ~4 m/ @) X) Y3 m! s! x2 E, U        typeArray[0] = Selection::SelectionTypeAll;9 l$ K4 E" V2 Z. P' W( ]/ J+ u( S
        /*
2 w6 M( V$ `! G; h4 R" ~4 l2 q        typeArray[0] = Selection::SelectionTypeFeatures;0 ]* @, W, ?$ F) P) M; R) t
        typeArray[0] = Selection::SelectionTypeCurves;
7 g' g: l8 e0 N+ Q+ ?: r& c! t5 m2 k        typeArray[0] = Selection::SelectionTypeFaces;
. W! t4 E& Y% n9 d+ W; G        typeArray[0] = Selection::SelectionTypeEdges;$ F7 \, V) {! V! ]7 T' }5 i
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
1 o' I$ G$ f  {( p- j        */
' _  `( ?$ M( J        Point3d cursor;
, Z  U8 B3 ?. ?' H        TaggedObject *object;! S0 `4 j7 s- I7 ]% Q' s( K
2 c& K$ g" A% v/ v1 E% c
7 H- Y. N% A; z
        // Select objects using filter defined by type array5 O$ K0 W4 M; G$ R6 d! R
        Selection::Response res = selmgr->SelectTaggedObject(4 L& \; K! O6 I2 t- V
                        message, title, scope, keep_highlighted,
8 e9 {0 M1 [& d4 }                        typeArray, &object, &cursor );! |% H1 Q. h2 n8 L4 T
% A# D: w# g# Z9 W6 U( X$ Z
' Q- G: f; R5 h
        if( res == Selection::ResponseObjectSelected )4 a& \, e" P6 b& h; I4 U
        {1 E+ ]0 B9 _2 D9 o5 c6 p+ Q
                return object;4 F) ^4 d4 l9 O
        }
7 L' F& }; X  t& i* u9 C4 l0 c# {        return 0;4 k" c7 _) E. V; B2 C
}
& \$ S$ R2 ^+ R* p
9 @5 j- s' G" H! R, G, J# f( G
! \1 F+ g2 U- {4 o0 o6 Q1 ~
//------------------------------------------------------------------------------& r6 C, z9 w/ y7 h0 R
// Selection any objects2 B, w, I5 Y' K( ~) A$ M  k
//------------------------------------------------------------------------------7 B3 b3 ^' U5 H  F
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()4 l& Q# f; u4 ^! A$ ^8 ^
{
) q; O4 t3 O9 @' L. T4 n( q3 }        NXString message("Select any objects:");
& M5 k' x; \) o% ~) }        NXString title("Select objects");
. o- b* W/ u. j# W; N6 g) U' f; ]        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
: m6 `% R% }* z        bool include_features = 0;        4 Z6 Z3 s. N, D! K1 G
        bool keep_highlighted = 0;
% y1 X" t. a+ Z, J  l; @/ ]        std::vector< NXOpen::TaggedObject * > objectArray;: v2 y5 R9 W) n& k5 N  r* @

2 ?- C7 d2 o; \" s. w
4 H* O& A7 @3 {% D( W, A
        // Select any object array
+ b! m) z% R& q        Selection::Response res = selmgr->SelectTaggedObjects(
: o1 ]' g9 Y: V6 T7 P                        message, title, scope, include_features, 1 M! c- w/ q6 ?2 r1 f
                        keep_highlighted, objectArray );2 H, g- }$ }5 r1 L' B
0 B7 W! ]* W+ t$ R3 F9 _: e: Y- f7 \
& O3 b* ~4 ^: u; w# Q
        return objectArray;
# y4 }. ~" Z8 b+ q: M2 E}
5 Z: k5 R1 u5 v1 F$ L6 @3 o( }9 ^- U, B- m

3 H% j4 C, \: r
# `1 d) ^) Z- K
  d7 [4 Y! u/ c' C! X2 j

, l9 u* s8 t, j
' P* O/ R) v. O& J; x2 _

) G4 O9 T$ I! u9 b+ t+ g9 V
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了