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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82172
QQ
发表于 2017-10-25 16:33:48 | 显示全部楼层 |阅读模式

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
' {" [+ R; I. B, i' M很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
3 q9 N9 E5 I/ {+ ]) H- `2 i如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
& R/ @% X# {& p4 b一些常见的类型和子类型如下:8 i4 ], E2 G, t: k  a% R( x: E
QQ截图20171025161410.png
# p* b9 M. `0 z& O* v如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
2 D! e: V. y5 C9 z实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& j9 \! B# q# o" w" b- m3 F+ @
QQ截图20171025161432.png
5 m" T) ?: l  t8 w5 H+ \
0 }9 R4 N, e" ^2 n8 Z
% x' L& V2 ?% d, F8 y
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
( t3 J% K) e, n( X4 W# O7 _' M" C' ?

5 K( Z7 N1 M: |) _0 i- f QQ截图20171025162656.png # C% q- n2 c0 }6 L2 w9 w; @2 \

% F0 z+ o' a- [

" F/ y# N$ \. h" H' g对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' A' M/ t. j1 H. q; U, A2 z+ g5 B  {  M3 o& j
  E( N" e* \0 _4 i$ I, N
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
8 W; s' B# [, k  L$ l$ L3 [, v4 d0 [5 t. \+ }' `+ D- F) c

( j# ]$ z0 t( mAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
' S9 n9 q% m* L+ L1 i* r9 {: E" O5 f* k+ k- G% Y0 p9 u6 _

$ y: [9 Q7 ^' E/ p! K+ ~- d/ RAddFilter (int type, int subType, int solidBodyType);
( o+ y, u; y4 s, E- q
4 r( S% g  K% S, w
% F5 W3 S$ P- L( L
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
+ T# y, o7 W# o4 x, {$ ?1 d
. i: ~% `. s. u0 n! t! D! h* M5 S' G& K7 x, M; H: L

7 X& s; B, |- G' H//------------------------------------------------------------------------------
  D4 P6 S/ Q$ T6 _// Selection with mask" X0 L7 @5 x# b( t2 N2 ]
//------------------------------------------------------------------------------
; L1 [- s, Z+ d& ~* ?TaggedObject* MyClass::select_by_mask()( {2 \( m, ]: B$ p
{1 o9 ^2 B. N4 q
        NXString message("Select an object by mask:");
1 Z' h5 w$ R; b% T4 T+ J0 R" n+ C/ x        NXString title("Select object");
9 A: C' U9 ], [, g$ ^        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;& V9 _+ c1 H9 q5 M1 E3 f
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
1 Q% E4 ~/ j3 i& V# u4 ~& U        bool include_features = 0;
, c) S4 v4 c1 Y4 P7 b        bool keep_highlighted = 0;; b5 w% ?: g3 C% C9 s1 ~
- [' s: K/ M2 T# v

- M/ ]9 i$ M# Z3 T$ J        // Define the mask triple(s), see also uf_object_types.h.9 M, j: Y6 X) m# l
        // Uncomment or combine the desired mask triples' l) T- f3 N! i% u( |0 t8 d
        std::vector<Selection::MaskTriple> maskArray(1);
. x7 Y, e9 q' a4 X0 g% z        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
6 A8 j7 {; |' y4 g! h        /*
8 \: y9 Z& C; K: K+ j$ A3 t        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces/ Q$ s# V* O4 m7 T+ P) e
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges+ v1 |% N# P+ s
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components7 Q  n+ r- L& C0 A
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines- K- k3 T' W! ?8 M2 `" h
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects, Q9 c7 ?; [) F
        */# q3 }" j: k6 d  k' ^9 ?* T/ n7 H' f
        Point3d cursor;
: J  F' l8 Y& O1 j1 G6 R$ }8 U        TaggedObject *object;
  t% n6 p' h# {6 e  e( ?4 T" b/ O1 ~7 J: ~' o) E: q+ P

: u! V% f- I* O8 |/ X( Y        // Select objects using filter defined by maskArray triples
$ m' D; D$ M. N% [, g; w        Selection::Response res = selmgr->SelectTaggedObject(
3 a) s/ ~0 x0 {, \& h                        message, title, scope, action, include_features,) O( \+ |# _, u/ I. F( k1 J
            keep_highlighted, maskArray, &object, &cursor );
& t# J7 c, B9 ]* G& z
5 T6 H1 f& y; z# `
3 n5 O7 Z4 {% Q6 |
        if( res == Selection::ResponseObjectSelected )$ d; |" @! M7 y; J; A
        {
0 _$ l4 Q2 M2 e3 i$ f) Q                return object;
0 K8 Y5 g- I0 g1 n5 j        }
; R3 C" }) R7 P' K        return 0;
- ]: j4 n. M" j}
$ h9 H# p/ P# H0 R6 w0 {! r' b, }* |' G. L% D; P
$ i% w% S- l# T7 p$ g2 W! w
//------------------------------------------------------------------------------
1 A/ D; A7 `9 {! T" v. H7 ~// Selection with type array
/ T! [0 F+ e, r8 v" i9 y+ H% r' v//------------------------------------------------------------------------------
# j  E8 S9 u  t: ^6 \6 S( N2 I; fTaggedObject* MyClass::select_by_type()
/ h! s5 x) o, Q; C{
- M( p) X9 K/ H        NXString message("Select an object by type:");
- @' V' p$ ^" F, t0 R        NXString title("Select object");
2 Y0 G; \2 `8 a: z/ D) N( v/ d        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. L% ?8 O% M$ X2 w+ y        bool keep_highlighted = 0;) q9 x& J6 `! G9 v% v: X
, E( w7 a  ?0 e$ [+ Z( L
6 e; x, p2 `5 D' J. n# l" A" j. S( ]
        // Define type array, see Selection::SelectionType Enumeration& H3 q4 H; z: }2 Q
        // Uncomment or combine the desired types
0 d5 l, O0 E4 ?+ n# t- Z( `$ w) e        std::vector<Selection::SelectionType> typeArray(1);
5 e/ Q- _- M6 L! d# |: o        typeArray[0] = Selection::SelectionTypeAll;
, j! p( _# [3 W( p' Q        /*: Q0 a+ U* }) T9 F$ K& D& _- l2 `4 h+ ]0 `
        typeArray[0] = Selection::SelectionTypeFeatures;
  _4 d; y5 n$ U* j( U1 T# ~2 d        typeArray[0] = Selection::SelectionTypeCurves;" g, ~4 Y( y) D! \9 V$ O$ p
        typeArray[0] = Selection::SelectionTypeFaces;& U" h! Q2 o- q8 A+ N) w
        typeArray[0] = Selection::SelectionTypeEdges;
0 S9 Q4 C) V( e/ M; o% j        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;- b! ?/ r! A2 q" u( n: S
        */
$ y+ l/ y: r" h. H# B# q        Point3d cursor;
. A4 m7 B5 Y; x( L, |' a        TaggedObject *object;
+ t0 X+ r$ F8 J. v: U' G
1 h7 _3 O4 s" v% u- M( m0 Z
7 X# x( }5 }+ [5 [7 m3 F" \! Q
        // Select objects using filter defined by type array/ d4 H, h+ ]1 n! P8 y* V
        Selection::Response res = selmgr->SelectTaggedObject(
! n6 P- m" r/ P                        message, title, scope, keep_highlighted,
1 [9 P: s* w" Y" M" \; n4 V, B                        typeArray, &object, &cursor );  `- b- k1 e  g) |. v

1 w/ h6 G* T2 q4 ]9 Z
% m1 G7 _4 y9 e9 d8 J- P" [
        if( res == Selection::ResponseObjectSelected )
) h0 u8 P/ A6 e+ T, @        {2 r, B1 n6 T: e  X  o+ q; q% p
                return object;
% P/ U( {5 `( Y& y, @+ b. w7 s/ X2 g        }# y/ L& h8 T9 z5 c! }" O
        return 0;4 j: L' _+ v- t" |$ ^/ J
}
3 [* I+ o$ b! `) `: r
9 _) \% J5 S; n, V! H1 ]! r5 n# a
. R: i" e9 v' s' ]4 d
//------------------------------------------------------------------------------
3 m2 Y* Y6 g$ Z) Y  q9 w* @- C// Selection any objects
4 x% {* n" {' I! ]8 U7 j' @//------------------------------------------------------------------------------
+ M. a( i0 t* ]  G! f2 I1 B  o0 cstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()& M6 K: q3 U- H$ ?# H, S
{0 d, Q  h. W# ~$ `( e
        NXString message("Select any objects:");0 O4 x( [' q% Q
        NXString title("Select objects");
2 C: A  Q! X% D7 b        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
" E( ^* e( T% R; ?- q# I( M" P$ A7 E/ g" i        bool include_features = 0;        
; a1 t& C, v' H( w        bool keep_highlighted = 0;% |! Y6 F, W; T5 N2 Z* o+ x
        std::vector< NXOpen::TaggedObject * > objectArray;5 U$ {8 f& `6 n

  n% i0 |# m$ D0 y' H
0 H# {' k) l8 x) `1 n$ a% @
        // Select any object array+ @8 x7 M! o, J: p0 n7 M
        Selection::Response res = selmgr->SelectTaggedObjects(, B4 u" H4 @2 x) ^( q& l& k3 {
                        message, title, scope, include_features, 5 M. G3 g1 n& F5 j( A0 \" u: Y" J
                        keep_highlighted, objectArray );  r& h( ~! l1 z

' g8 q# N! |8 Z' W! T: O* j
6 F6 \4 r/ y# T6 ]3 R  e. B; m& F
        return objectArray;" W7 h! F4 A% `$ u7 \6 l6 Q
}4 t/ d% s2 h0 f- I

: J$ x1 \: L2 R) s  _* c5 Y  {( \/ c' U2 e
% ?$ R  E1 X4 x7 z+ {/ d2 l
; G) f6 b& I0 M
. U( K: u' k8 E9 j0 {
6 k: R5 F# U0 X$ h" o6 l
  c" R) X6 M& y- I
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了