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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
5 w  {$ B" W7 S3 f* e7 _很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。, }& q( M3 o/ B7 x3 b& s, c
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。0 V; T1 [0 F# M: j$ b, \; Q
一些常见的类型和子类型如下:8 ~' p9 Y% ~. }1 z: D( k5 t/ n
QQ截图20171025161410.png
* I. n5 E- a% x. f如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。6 ^# P: ~- w0 _7 _2 e9 G
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。6 V" m' B& m: a0 |' [

) E# ^# Y+ M; h6 [4 h9 w3 b& q QQ截图20171025161432.png $ \# g3 Y' H1 T
. n. n+ M0 m9 o2 @
; u0 P; A4 h" g5 T8 Q
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
2 f: G* b" W: g5 _& X' R2 w: A! |  W2 P

# n" ^. {( @/ H( V. w  y QQ截图20171025162656.png
* x$ g5 ~  x) N5 G' n( u: ?5 z+ N& S, Y7 N2 j9 Y

( m. I: H0 J5 S4 C) T3 K对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
* ]1 E  O7 z. m( k$ c
. C3 u6 F, D& H' H
0 ^: ^; H6 P4 D/ }) GSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
3 E" D0 ?! T: `! O0 r
9 ?$ t' B8 `1 K4 d# _0 f' O! i( j3 l9 o1 g# E; O
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
# J8 B! z% `0 J3 ?7 p: J5 s) H" g. g# _
) C& x6 Y, v& {0 H( R8 {" \
AddFilter (int type, int subType, int solidBodyType);
* w: y7 |7 q. L5 q, r
2 i0 Z7 g% i1 T* S/ E; Q/ A; H

& k* {2 f. Y# }对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
4 {  E+ x3 w# U, l! l$ I3 O, g; A. u! o/ }! N/ k
# O6 X2 Y! P% ]! N. o6 L% J

9 r6 g: k' ?2 h2 k1 s5 l" O//------------------------------------------------------------------------------
! H1 a% Z3 A& }. `// Selection with mask
' Q$ a9 q  V5 r& z+ y//------------------------------------------------------------------------------
1 n2 j, S5 c0 h, z) iTaggedObject* MyClass::select_by_mask()6 d1 I& s1 Z% O- V/ B
{
# D1 C* L+ {6 n/ ^        NXString message("Select an object by mask:");5 B( B6 W  Y3 o! ]: h. F
        NXString title("Select object");6 K+ H4 ~2 Q4 h$ Y
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;* f& z( U9 i/ s. X
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
$ z2 I" N' Y$ ?        bool include_features = 0;
, j0 Z" F" F% o& X        bool keep_highlighted = 0;9 ~8 g" T# o; @1 X  y5 L; a

% u- O9 y7 V% a9 ?+ k
9 k0 E3 ~# e/ }  ?/ O
        // Define the mask triple(s), see also uf_object_types.h.  [" h& E( T7 k* U6 N0 I
        // Uncomment or combine the desired mask triples. q( x& [" B2 d% O
        std::vector<Selection::MaskTriple> maskArray(1);: X* j4 G* n- `1 _: @) v6 G7 M3 W' m
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
" Y& d2 Y6 m- Y        /*
! n) l3 f8 x* B$ {/ Q6 {        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces5 t! `+ q$ b0 V" _& U  v6 @2 R. ^$ _$ R
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges6 M9 @6 K2 x9 z% g0 y
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
! L" p% [& q% S1 t- I; b" \$ n1 @- _        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines$ B2 Q* P; t1 `& b* F* \/ `2 t( Q
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects4 f# O6 ~/ q5 g9 Y' m
        */
7 l/ P$ x: C9 p( N        Point3d cursor;& _5 n3 H1 z5 N7 x8 \! e. p
        TaggedObject *object;
  `8 K0 R. A/ v* x" {5 q( ~+ ?6 j2 K+ z. g) t  r

4 h6 j+ d2 v5 N# T1 ^" }3 [; O. r: B        // Select objects using filter defined by maskArray triples
) l) E. j$ i' U9 i# y        Selection::Response res = selmgr->SelectTaggedObject() Z1 S& N, U% \+ q9 p
                        message, title, scope, action, include_features,3 y- C) l, m8 Y! L: J! \; \
            keep_highlighted, maskArray, &object, &cursor );* q& I# Q( Y  J: Y6 S+ F

& l2 U+ C) ]  r
9 \; v$ Z8 S8 t  ~" n5 V
        if( res == Selection::ResponseObjectSelected )5 S0 v, e% ~& E2 u" X" T$ y
        {
& R2 B0 ^% Z! ?' m' g2 a2 Y                return object;
, X# B% y% T/ c& `1 A- N; o' X0 l        }7 Y0 \  Y2 n& T+ _1 L6 u5 m
        return 0;
6 V4 G6 m% o7 m( s# u0 }( Q}: e0 m1 ?, Y) p4 O
  S6 t! f* O' Y5 D

% ]4 [  ?/ p* I//------------------------------------------------------------------------------" o" u: a& e3 P! _( W
// Selection with type array0 Q+ E! a" w4 c. S
//------------------------------------------------------------------------------
9 A& E1 Q" S% K( x" i; z4 KTaggedObject* MyClass::select_by_type()1 `4 @; A; I, p: S# L, A: B) S
{
: D+ r% i. P5 Q9 t, J/ f% I- h        NXString message("Select an object by type:");
( K5 U* R- H& m        NXString title("Select object");1 ?: x; K9 i) o
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( `5 m7 E6 U: a" m3 w
        bool keep_highlighted = 0;
& F6 V9 w0 ^- ~2 D- M2 S8 s2 S) m& r  y9 u
& L+ f$ ?! I7 d$ D5 H) i; U

8 e4 B: t1 p4 k( {7 w  `        // Define type array, see Selection::SelectionType Enumeration
1 n6 @$ v6 T0 _0 e        // Uncomment or combine the desired types
# y+ W  W( Q8 m4 n6 U6 b        std::vector<Selection::SelectionType> typeArray(1);
! \) e) ~! Z+ i) H        typeArray[0] = Selection::SelectionTypeAll;
5 }: @0 {" H: P& d+ t/ E        /*6 s7 B+ N1 f8 H6 W! T1 J6 C0 K6 S+ N
        typeArray[0] = Selection::SelectionTypeFeatures;; t( g0 |/ D3 T% n: u! @
        typeArray[0] = Selection::SelectionTypeCurves;
% x4 D: V& p! e: p. c        typeArray[0] = Selection::SelectionTypeFaces;& `/ K0 [& y' s! A3 J  M! L5 ]
        typeArray[0] = Selection::SelectionTypeEdges;% Q- y  H* b- q- @
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;0 M& }6 ~' u/ J& ?7 D' A2 k
        */
6 h$ [4 M5 A* f' m        Point3d cursor;. B4 |" ]8 B( z& U& H( n0 Y$ s, f
        TaggedObject *object;# y2 h! }2 ]1 c  {  S) ]$ M

" M) P. h+ R6 m# x

+ p% @# G* O+ b/ N' b        // Select objects using filter defined by type array
0 K* W( c6 T. g! r9 P7 D        Selection::Response res = selmgr->SelectTaggedObject(( a7 P4 v0 f2 v
                        message, title, scope, keep_highlighted, ; E( r$ ^+ V% ~& \9 V
                        typeArray, &object, &cursor );
6 K; n" A/ P4 g& V
; [0 m1 E# S& _& Z+ c+ ~
  M: P; f+ M( D. g7 p' ~
        if( res == Selection::ResponseObjectSelected )% l; I) N, |6 A2 S$ ]1 b% f' g
        {' _; U% \. N7 v) u, Y: |9 x
                return object;
1 e0 h, w9 Y7 k5 g        }
5 o( h8 S* Q, K7 U' a) _6 R        return 0;
# u5 F1 O7 B, M! }4 ]6 \! }}" @( b0 i8 I. m* F5 `0 H

* r+ ^" ~/ D+ ~3 l* ^' ]% U

; t  e; M6 J4 V' `//------------------------------------------------------------------------------' c6 r, I# o( E' E9 n2 J' Y/ _
// Selection any objects
& w! Q% ?1 z# u' t' W//------------------------------------------------------------------------------& G: _9 }$ w  W- `5 Q( z% [6 \. [
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
8 e2 l. ]8 `. l$ M% B+ R! `{
- p+ A! i# r- Q5 J- |( ?* a        NXString message("Select any objects:");6 v" ~! i. g% N9 z6 M) S# u' x
        NXString title("Select objects");
/ ~. a% b3 M0 d2 S; ?9 Y        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 M) l) b' o6 y3 g, }  a
        bool include_features = 0;        
9 u$ K' W( v( G        bool keep_highlighted = 0;7 R0 {7 Z; N. b( Y$ l( Y2 q! g9 |
        std::vector< NXOpen::TaggedObject * > objectArray;, t4 I0 G* ]5 X7 }: S* e8 I
+ H) Y) Q9 z2 h7 L

- `# k9 l0 J* G/ R1 U" g( ]6 H  w        // Select any object array4 v8 |0 o% C1 ], r& r3 ^
        Selection::Response res = selmgr->SelectTaggedObjects(' a* K1 O+ C  p/ D
                        message, title, scope, include_features, * u6 @) l2 w  d) T( r
                        keep_highlighted, objectArray );
: l+ t$ t9 f/ H; s2 D# |1 L
9 y. E7 I. Z% a9 ^8 v6 I

- {( \* q( G( s        return objectArray;! @6 L/ q+ L: d5 |
}
* d4 C! h' Q7 N4 y9 w( L& X* l# M8 D) F( G+ r' c' Y
; q! I8 g( v6 i/ n+ E" v2 ^- Q
3 w5 q/ k8 d, V# j3 M
; Y8 _9 T8 ]  c9 ~. _4 x  t( S  ?
, _1 _5 R5 [9 W7 s0 K

- y' {) `( D. `) [6 `0 Z; N+ _8 D# ]! ~# b* i0 w- y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了