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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
4 X+ n; o7 q' E# N0 G/ G4 r很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。" F( T) M& r9 a/ w! J1 A
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。. W0 _8 \5 g! I' l( x8 L: Z3 H
一些常见的类型和子类型如下:( L& u  f5 g3 z0 s
QQ截图20171025161410.png " v; w4 {& |: y! K& }. P1 Z; h" P
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。6 ?! B! V% i) H
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
! H/ c& e1 ]4 f% o9 A0 ?- \! d. W
8 v' N" ~( B( q  ~  c& | QQ截图20171025161432.png - E0 D6 d" L' k1 K  f, y- c1 u+ l5 @4 _

4 A* R. T2 l9 i/ t" ~# a

) S. u4 P9 }: ~选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
, }$ y" q( h3 P  \# Z/ u$ V6 z" M# I. A, K$ z
1 I: A, Q/ {- L2 O, v
QQ截图20171025162656.png : A: H/ H' l4 F$ s; d, a
  E' b3 ?' w8 i+ v3 i

3 Y2 ]3 ?' B6 }  |7 b对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。: F. w! N, S" \6 e

2 K0 [( r  s2 A3 @: B  j+ k" {4 D6 l1 t9 n$ F* j
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
/ E; F! v4 }# l* K% h4 \3 ^$ O: O3 |, Q9 C$ C8 T

0 W6 d/ A6 U% MAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);5 @7 H3 C1 ~6 Z

, R% e4 P/ l' ?  \+ e% @; g8 I
% h7 r+ d$ F, e' W0 i: ]AddFilter (int type, int subType, int solidBodyType);5 X( \! @, d7 X7 B/ O1 s

. m9 j7 E- c( v+ `
# q$ q) f2 R+ K4 m+ S1 E6 _; C
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:" [  b( D3 S' G4 F' `* a  M: d

: F. c* v. w. L7 }% _) q
6 w) R) Q; L  @8 j

$ {; n" \* x# r, [4 \7 R//------------------------------------------------------------------------------
' {4 v& Z1 m  I7 T0 j// Selection with mask7 \4 B4 E1 ?* n3 E6 K# _
//------------------------------------------------------------------------------) v- Y: n- N2 t( x: q
TaggedObject* MyClass::select_by_mask()! k2 C; ?. G/ B9 L) d& e
{, f: A; X* c4 G2 @
        NXString message("Select an object by mask:");: m( G/ I( ^  O- S
        NXString title("Select object");/ r& [+ d+ ~* {- @
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. j- Q! F$ P& S        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
* O: G' c& ?2 _; V; U" h        bool include_features = 0;  f) _: |) z" w# z/ z
        bool keep_highlighted = 0;
1 f3 g2 y; X6 v' l4 b% u
% @8 O! {$ `0 B6 z) i* o4 r7 B4 `1 l1 L
# S0 o; ?6 F$ ?& R
        // Define the mask triple(s), see also uf_object_types.h.; I6 ?  e$ i. o6 l2 V$ ?
        // Uncomment or combine the desired mask triples
. n" `8 H$ {4 X        std::vector<Selection::MaskTriple> maskArray(1);; m- y' d$ M! @
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
% r1 z& z. Q1 g- B        /*: r' X: N" `" e2 y1 M
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
5 X' p! x& D* e2 k        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
2 B' T8 }( v$ h5 d* T        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
2 C. z' _3 H1 i3 S0 @/ D        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
( w) d0 G6 o/ B$ P1 Y+ v        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
; @6 \& n, s3 [% s7 V, _- ^/ y        */4 W4 e% y! Z2 e& |
        Point3d cursor;
3 F+ \% s  v1 T/ X& [! h8 h. }        TaggedObject *object;
3 s) O% Z" D1 B. u/ k: z. O' s
1 Z0 _. c; O+ |! M1 c
" o/ ?' C0 Z% r. ?( G# X
        // Select objects using filter defined by maskArray triples
6 x$ z" |/ c. h! A9 g( ~* I        Selection::Response res = selmgr->SelectTaggedObject(( C/ F" S  f2 @
                        message, title, scope, action, include_features,! Q$ N2 m( Y7 C& f; p, j
            keep_highlighted, maskArray, &object, &cursor );
+ t, r9 H5 }* @3 t4 P/ e3 |+ H+ ~8 t( T0 ^: n

7 C+ n* G! p2 g3 \6 r5 `        if( res == Selection::ResponseObjectSelected )$ P9 c9 I) N4 @$ Q+ k4 n# d+ B& a
        {
3 K" {) v, O7 C( H7 T7 K                return object;0 P* s2 a9 W& m6 O
        }( {6 n' R' G4 N& p
        return 0;
0 v- v8 b8 N6 T1 H$ m}
& d$ w! L, [" t1 H( F' [; k0 q1 r* d! [% I

: }( a! S! k$ o9 P, q  |; {//------------------------------------------------------------------------------
6 A' x7 l& V5 N// Selection with type array& ^2 ~: k: U2 d. @& z; C
//------------------------------------------------------------------------------
3 v/ u7 t/ V* w) gTaggedObject* MyClass::select_by_type()
: m6 O) j8 A3 r{
. m  H7 C" N' E  a8 ^        NXString message("Select an object by type:");
5 K( E" L- R) a4 ~. T/ b        NXString title("Select object");
0 {. g8 y) R8 {! d7 r# E        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
: S0 a( X( F  U$ V        bool keep_highlighted = 0;
+ w0 l7 @9 n8 I8 K8 s6 Y. J  \* w
3 \5 v+ A& @: c7 _" S& A! `
3 J% |' v) ]- G: p% s: u& f
        // Define type array, see Selection::SelectionType Enumeration
, A2 ~. k% V- P0 [/ p8 g% S% b: m" n        // Uncomment or combine the desired types
& a  `4 R5 J* Y( I" t# ]8 ^" p        std::vector<Selection::SelectionType> typeArray(1);
$ t" ?& g& Z% t. l        typeArray[0] = Selection::SelectionTypeAll;( m, c0 t/ R! y
        /** [7 D. P, V# x: z! O5 c! r
        typeArray[0] = Selection::SelectionTypeFeatures;
% u9 S1 b8 l5 ^& c- L& M$ [        typeArray[0] = Selection::SelectionTypeCurves;
/ I. W) S3 k( a' Y4 b( O) P        typeArray[0] = Selection::SelectionTypeFaces;
$ [/ c3 `( D6 s, r" F- `2 R        typeArray[0] = Selection::SelectionTypeEdges;
6 |5 @1 s; z3 ]+ s9 k( D) t. a- l        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;+ O! e9 ~/ r* ^0 O3 F* W# p
        */; u7 K8 n) m5 D% D1 S) l
        Point3d cursor;
' ?& v% s; T* Y  \* `$ u# y, b        TaggedObject *object;
8 s+ _" F# i  l
# I* X( z! L# T! A5 y

0 J$ X" R3 ]$ S8 Q        // Select objects using filter defined by type array" p4 Z0 j, r) K" U% N
        Selection::Response res = selmgr->SelectTaggedObject(" _4 Q' i# q) S# @3 d6 z5 Y& @0 c
                        message, title, scope, keep_highlighted,
: H! r0 K# t( J% W* h4 g                        typeArray, &object, &cursor );
8 ~6 R$ U- f0 j: F% Y/ G: k7 P5 F% i# c8 c  s# {3 z  z

* i. V- P) b; H1 v) v$ n) M. d2 H        if( res == Selection::ResponseObjectSelected )
! v; H$ u# L, F" N        {* p! G' }: M8 p2 B
                return object;
, @- J2 g! \( t+ k7 D4 C$ N8 h$ ~        }+ t( \" Q* d4 U: O: I, r& `; o
        return 0;
/ @$ v- e' X; e: d5 F}5 m& O1 r+ |- x( z( |3 H; D" M5 `
! }  p' R* \! n" v: r

$ \. N6 Y, m7 I2 l& Z) J- c//------------------------------------------------------------------------------
5 y& h1 ~  p, S% Q. x0 ^* j// Selection any objects8 h! ]  k( \& S/ c1 S
//------------------------------------------------------------------------------
( B  l; @2 _+ V# V' jstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
, m# }, ?8 @: p# z+ ], Z{, M" q; \* K2 C. W# i7 Y
        NXString message("Select any objects:");" @6 K9 `. F% J% g0 T) q
        NXString title("Select objects");
4 n2 R6 e( x) y' g        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;* ~2 p. E  U& {5 P
        bool include_features = 0;        
2 ^% \: v, G7 I4 H$ k        bool keep_highlighted = 0;
4 a. u& M& r  a1 G2 W' K+ C) ?7 s        std::vector< NXOpen::TaggedObject * > objectArray;& w! a$ p8 ?1 C' _; _

/ f' X% b" j4 H5 a" L

5 K8 Y4 a$ u8 W# `        // Select any object array7 P9 A( u& K0 r
        Selection::Response res = selmgr->SelectTaggedObjects(+ ?3 _8 `+ X% G/ F; m
                        message, title, scope, include_features,
. m. ^! ~  T3 S6 }' f                        keep_highlighted, objectArray );. @5 m: E# @5 V

$ X$ D9 Q- E& m7 ?# P
2 y% w1 x! y( T5 [. E
        return objectArray;* G5 J7 m9 ^1 P& V+ d' s
}
- m7 j' W% h2 g# M8 y" h7 a, t8 z8 m  X+ b+ h5 C1 [

2 v! @+ F9 C. x% b8 n! U. n$ t9 `, }- k* u* s  W3 v' M

$ l- D; O/ _; `. |8 o3 N* r) w. P
1 m7 t. \$ }# Y5 S7 I0 l

2 j3 E: k4 R& z* R0 {% A& p* G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了