PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
9 z' k. N4 s* ~1 P  e很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。- w5 r/ H: j6 {
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
% I% y8 @  V; y2 ?3 d+ h  _, O一些常见的类型和子类型如下:& f% }4 m! R0 v) m
QQ截图20171025161410.png
% o) B4 ^5 D7 h如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。+ g; ?" u( n3 p- ]
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。% X2 d& U+ [2 r8 K) D6 m/ o+ }% T, t

6 j5 l8 J" T, A9 O6 ^8 ^3 W. R QQ截图20171025161432.png   Y6 @; j$ ]  D' M* J0 L6 ~/ ^
/ b- Z6 t. R0 w0 t2 X" v
$ D0 j' [/ X( b  s
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。0 b4 {' O( N# X- [: ]% d
2 X2 \+ s% Q- I) A1 Y2 _

; U" L3 R* x9 l& w. ] QQ截图20171025162656.png 4 b% N) i4 ]# r

/ r7 M! l1 E& B. e
  s& j  U: X1 [4 t+ z
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
/ n7 _' {1 U4 ^& I  U0 A- b
% p& ~( D1 t0 W9 _  H. h2 [
! F/ l1 {0 {" cSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
4 K/ q/ X# _& Y7 f9 }
, |7 T4 p- j$ G( d- u) Q' z+ N1 w
8 H) o, P) \% Y8 I: zAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
* q+ F& j" b$ g% `
6 t& F! \# c  D0 X" }7 a2 g+ ]/ R/ o4 z9 H7 @9 F/ G5 h
AddFilter (int type, int subType, int solidBodyType);5 R& I7 {$ C: D9 ]; |. Z# N
3 ~. n+ W/ m3 l7 g8 N' B% v7 w# ~

% T3 t, z3 V) s8 z8 M6 e对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
* s: U( [( Q4 V% I9 n6 e
  w) X4 o. }  l4 {% o1 p' k- |; E# [! }( O8 k

/ g1 ~$ _# g, V& ^" Z. p: L//------------------------------------------------------------------------------4 w( b9 {- g8 h- a
// Selection with mask
8 m: U6 h1 y' P- \, M/ ^//------------------------------------------------------------------------------
" _  A3 ]: }4 f. _# [8 wTaggedObject* MyClass::select_by_mask()
% N8 l/ n& }- i3 ?- v0 [5 l9 V2 D{! b) C: S  C) N! ^
        NXString message("Select an object by mask:");
1 l/ R+ C9 ~7 v8 I6 N) c        NXString title("Select object");) @0 {( z4 |: G9 v6 V$ e& `
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
4 C9 D% _: K! I" e        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
# _  Y3 S" ]: ]" i3 M' V        bool include_features = 0;
# l) [5 s  [$ Q        bool keep_highlighted = 0;
- |' M0 D2 n1 r  ?- V7 S: G$ O. q+ [9 n/ c: j

- O0 L3 U: J6 m0 _4 Z1 I# E        // Define the mask triple(s), see also uf_object_types.h.( j/ I  U4 C$ X' v# u
        // Uncomment or combine the desired mask triples, q* o* t% \+ E7 G" ~2 Z
        std::vector<Selection::MaskTriple> maskArray(1);, q4 ~7 [/ u+ ^4 t' n- h
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
* E& |. K2 e3 ^) U6 @  h5 {        /*
0 d* q# N2 r9 N, B        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces! e1 C2 y8 N$ u
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges6 Y# C  t9 p9 ]% f% |- E# |
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
! |; @5 M+ S/ r! A+ F2 M8 m9 |2 L        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines& f& x# a- ^1 E% s  i, |
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects1 H$ w& T8 {; R% K) e8 @  w
        */2 V6 o! Z+ [, I: S' n- _
        Point3d cursor;
7 G, q3 n2 `1 U+ C- ]2 n; h3 k/ {        TaggedObject *object;  f, E" Q1 G0 n# B

; r+ N6 F# }( W4 {  m- l
% e+ q, Y8 h2 G2 B8 `8 e
        // Select objects using filter defined by maskArray triples! l' I& x0 a, _& y. y+ q  v# `
        Selection::Response res = selmgr->SelectTaggedObject(& n. t. w8 Y1 ?; L) R5 A- r' `
                        message, title, scope, action, include_features,
* t% {: s* i" ?4 }/ n3 `3 ^8 X            keep_highlighted, maskArray, &object, &cursor );) s0 ^4 C( v4 ^2 R5 u

, Q) s0 D7 r# ]# ^( r# G

5 e2 P  N  y9 v; D+ l4 e! _        if( res == Selection::ResponseObjectSelected )! o7 r6 A' q0 P4 }5 ~3 s
        {9 s: S: A$ F, ]3 Z$ Z$ ]
                return object;
  B) O7 v# v8 {5 k* L* M        }
" Q5 `+ c. i4 Q% p+ K* z7 g        return 0;8 p+ x6 D3 G2 N" h1 z
}! b& G5 F! W0 E, j( M& t% T- l9 E
5 M7 Q# ?. g* }/ |' i  `
/ X( S5 I3 l/ Z! ~
//------------------------------------------------------------------------------4 q. f9 `% {/ C2 @! l$ w: L
// Selection with type array! s* g& e' r  U9 s& g
//------------------------------------------------------------------------------3 Q9 _6 f$ b5 }9 l: N4 u0 i
TaggedObject* MyClass::select_by_type()* u* }  ^- R( P0 f
{+ _* M! A2 C- d/ ], q' o
        NXString message("Select an object by type:");! U' _; L5 p* @2 N. [3 \0 F
        NXString title("Select object");+ m, c- {) X: ?# s: H% G
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
* V+ U9 l- W$ l+ X0 R. T0 L        bool keep_highlighted = 0;$ L' @- D- c& J9 ^
) u: J0 N/ e% L+ T5 h9 o+ O4 c; {/ u
9 L' ]( Z, L' ^3 E  [
        // Define type array, see Selection::SelectionType Enumeration( q7 L# ]- x3 a  g4 ?
        // Uncomment or combine the desired types
% {( Q* [( `7 |! t; J  b        std::vector<Selection::SelectionType> typeArray(1);( T% o: h, U  z3 d
        typeArray[0] = Selection::SelectionTypeAll;
. o" ^+ i+ W# `& C        /*) c; b, V7 d3 [1 C
        typeArray[0] = Selection::SelectionTypeFeatures;
2 M2 {) ?2 H9 q) \, g+ @        typeArray[0] = Selection::SelectionTypeCurves;
! h& t9 S1 v9 ~0 Z        typeArray[0] = Selection::SelectionTypeFaces;) c% l' \% X; g
        typeArray[0] = Selection::SelectionTypeEdges;
7 {; V; |# U2 o" H, u        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
: E3 W; [; O: l1 I4 q5 e        */
0 g& w& Q& O8 i. R: h- t$ F; {        Point3d cursor;
$ M5 K# G# Q: [4 g        TaggedObject *object;0 f- |* R& ^0 G
9 C1 b* K1 y- f
+ |/ q4 d, Y& `. t5 R  {5 D' k
        // Select objects using filter defined by type array. a4 z" Z5 J, c! b  g. i0 @9 k
        Selection::Response res = selmgr->SelectTaggedObject(
4 d- i- h7 F, L8 \) E6 h                        message, title, scope, keep_highlighted, " p9 X9 }5 @4 B# I# t" i5 r
                        typeArray, &object, &cursor );
0 ^) F0 |% R0 C" W4 T# [* r3 K$ F+ u2 E+ \

$ R6 |# r5 h/ K8 l        if( res == Selection::ResponseObjectSelected )4 \& Y6 I9 s5 O# w$ D
        {
$ Q' C. |3 j6 F# }6 c  N7 y1 R' {                return object;
9 G) }5 P( a* }" T6 F- p        }+ b1 e) y, Q- U
        return 0;- o% L) b) D, O0 b% n: n
}
' q3 J4 J% n# k: G+ C. r7 I3 e' G7 M

- X2 X, e. ]! H0 P9 r//------------------------------------------------------------------------------
; \5 l" U$ D5 P$ o/ K: u# x$ h2 A// Selection any objects2 S( x/ L. L6 X+ q$ _
//------------------------------------------------------------------------------
+ U8 h6 O5 _; x& Gstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' r3 D0 K2 G* c9 h4 p4 L{
* i# d& e& h" g' I# l( n        NXString message("Select any objects:");
) c1 z8 }# @! g- \6 \2 }        NXString title("Select objects");2 q. W& p' P4 I" k1 m( }
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
& `! W) |/ E  C4 p6 a* H        bool include_features = 0;        4 |5 J5 r% R3 E( v. k8 W, R
        bool keep_highlighted = 0;
- k. k/ l/ T5 k7 o5 V. N. W' A        std::vector< NXOpen::TaggedObject * > objectArray;
1 O# r3 x% k* H/ \/ `* \" b
* J- p0 P- U# q5 _$ g) G' G

8 W9 ]! }( _& u9 f& U        // Select any object array
  B) F% a8 T0 \        Selection::Response res = selmgr->SelectTaggedObjects(
) ]8 W$ @2 _1 {) e0 N& ]( b1 J                        message, title, scope, include_features, ( H( Z- B5 D! D! Z$ b9 \6 v. F! h; {' n5 X
                        keep_highlighted, objectArray );3 d7 w( F: u3 s' Z

' @# c9 t* }7 t/ ~& d, i; X( m; i

8 K4 G0 M1 I& B+ Q2 G        return objectArray;; v: F9 m+ Z# p- Z3 _
}
3 m- `9 Y( S5 O/ ]9 r" E$ J# y4 }* m6 V) H
' V; S8 V( R& \! B" N; T3 T! u$ P
  U+ [0 ~) H: l/ H

0 Y3 D7 b3 j5 L! [
/ D0 c) w! S. A9 J7 K# ?1 f* l4 ?

" M* b6 b" ~* a3 y( i7 T1 q6 _( s# C
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了