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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
1 h2 T+ o0 M+ e* `9 Q很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。( s* A  k+ b+ Y1 m! [7 H
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
- _; ~; n8 N8 S0 ^一些常见的类型和子类型如下:
' T+ U( ?+ T5 B  n) ~ QQ截图20171025161410.png
  |* h3 V2 ^3 t1 g0 |0 ]如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。$ @$ e" O2 |7 `) w
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& G# Q6 h6 O5 t& O. g% L7 w! O5 t6 q& V
QQ截图20171025161432.png
! a( N6 w+ e" W# f7 O
& Z7 Z5 Y  [6 r, t) [
* _2 q; u9 ?2 P5 l6 v. p6 ?" _
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
' x# X  i* a- J- A6 s5 z3 ~
3 r8 G( \: ^' W& s1 ~

+ ]. W# a& k" |3 i0 Z QQ截图20171025162656.png
. i" b& `" {! X2 ^  g/ ]- E" H# @2 L8 R$ @9 Q8 b4 l

: n4 L$ x' N$ {对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。6 N5 B4 }, R% v5 m% ?4 H

: P4 v2 l2 t4 b& r# r# T
$ `; H; P8 z' A$ dSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
+ y7 s! M4 I" b4 A4 f6 N. ^7 S/ I$ J2 i1 L  O1 C4 C8 E0 S! R
8 G# s$ ]7 d$ h8 g- w0 T1 f  {
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);$ M5 R' ?. k. e$ ]/ k! D

3 L. @1 c7 k4 z7 {- a, M" \
6 d8 G1 G6 T1 Y& oAddFilter (int type, int subType, int solidBodyType);' I$ C1 z) C' N- V
- S: x/ T. W% e1 M& z5 ?) u

* I( [) p: Q0 V2 C4 k( ~, d( |对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:- E3 E9 U( {4 x7 i; R
+ A, t+ |2 T: I2 {6 l
' z. \9 ^2 p" q( O' y

5 O! R' _6 w) l7 a6 l//------------------------------------------------------------------------------" W" N. d" h9 t7 V) l0 @/ C
// Selection with mask& ^% h/ U4 _, |) I3 ~
//------------------------------------------------------------------------------: m/ R+ ~4 ?: m" i- F; V
TaggedObject* MyClass::select_by_mask()7 S* m, H! Y: }; Z0 a
{$ L& u; o. `+ Z5 A9 M% c
        NXString message("Select an object by mask:");0 Y. U9 Y( _# i% ~  e
        NXString title("Select object");/ y0 J0 F, I7 x' B5 p
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
* o" }" R$ A$ j" m3 ]8 a  M        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;( Y( h0 S; u% P8 p/ y1 ^+ ?
        bool include_features = 0;  Z! P" G9 D( x
        bool keep_highlighted = 0;
4 B" R( v) {3 K5 U& ]4 T6 v6 V3 N/ S) u. n6 i& i$ }

; X* Q7 Q5 N( s( \* J" Z: f, I7 e3 e        // Define the mask triple(s), see also uf_object_types.h.4 o7 m) G7 B( K
        // Uncomment or combine the desired mask triples, p6 a8 b$ o0 u' {( f+ q: y" S2 C
        std::vector<Selection::MaskTriple> maskArray(1);5 J& J+ A; T  J3 Z/ y
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
+ z* |) |, `; v' P        /*
# B( |  ?) e3 G. u* ?" P7 K" i        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
- B) d# }2 s1 L        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
. W* `* P% e. P5 ?3 u1 n        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components( s! |; R7 Q3 V7 \7 ^
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
  m- ~5 W7 }+ z, \        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
8 x# q  H5 x+ v$ B+ L: I2 k6 \        */
1 ^9 A5 t* H" ~! J5 I: s" z- Y        Point3d cursor;
% |" T7 ]+ c. B# J' j" J        TaggedObject *object;
# F1 r& `# u- h" T' p# s8 ~  l
" c/ }7 j$ b" g+ N) U* t

( T, F- S6 O. Y- o; z        // Select objects using filter defined by maskArray triples' a7 e- R! u# j% j7 j( J2 E
        Selection::Response res = selmgr->SelectTaggedObject() d2 X8 j* z+ m  b0 O
                        message, title, scope, action, include_features,0 D" P/ w4 y0 ?/ O1 e
            keep_highlighted, maskArray, &object, &cursor );
- e: d% P( n2 o& |' a. t( {% T: s: I" `% x

" Q8 h; }0 W" T, F        if( res == Selection::ResponseObjectSelected )
0 e3 i+ K& \( r( C* g        {
: `( J+ m; p1 ]/ i                return object;
/ |1 v1 w& B7 R1 F        }8 B+ L& ~; @2 x
        return 0;
5 d. R  F0 H, t' n9 s) k7 A}  i1 H7 b2 C& h' a
4 H/ q' H" I6 l" H8 Q0 s8 G

+ [) \/ \. ?" C+ a//------------------------------------------------------------------------------  W" _" V9 ^- q; z2 N0 ^0 h
// Selection with type array9 b( E; R1 ~9 y0 i2 o  v( v* f7 N! [+ Y4 [
//------------------------------------------------------------------------------
5 M; H# E' G6 {% ~- M; b2 rTaggedObject* MyClass::select_by_type()5 x  R& }4 b4 S+ h1 c- k1 c
{6 e! g6 B) Q1 m9 V% L, B
        NXString message("Select an object by type:");
3 L9 F2 ?3 \6 f. r! w4 z        NXString title("Select object");. {! _& G) n5 c5 `% L! k
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
' b; c$ X1 X8 p- W9 Q9 w7 y        bool keep_highlighted = 0;
% {- v9 z* c0 n9 d  k9 `; R& }$ @! Z3 J: g5 n

( [9 J7 f8 F: |0 k: Y        // Define type array, see Selection::SelectionType Enumeration
  Q( ^7 c4 c, L: `4 E! k$ L8 X: X        // Uncomment or combine the desired types
: N8 ~. b; C4 M        std::vector<Selection::SelectionType> typeArray(1);
+ C9 V0 L5 `+ T/ b6 {- H        typeArray[0] = Selection::SelectionTypeAll;( g+ Z+ L0 R* f+ V" J
        /*
, y3 |& G& ~5 H1 `2 [5 A        typeArray[0] = Selection::SelectionTypeFeatures;
  f7 x! H  W7 T( }2 ~. z        typeArray[0] = Selection::SelectionTypeCurves;
! @5 U3 l0 N( f2 ?/ a  {1 x7 S        typeArray[0] = Selection::SelectionTypeFaces;
1 e2 s  Z( K0 q        typeArray[0] = Selection::SelectionTypeEdges;
0 o1 a. I3 }! P) V1 X! v        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
" s+ ~$ p1 e/ @/ G8 v        */
2 ]& a! }! b* h2 Q7 w( I- g; G9 \        Point3d cursor;$ V' a7 C0 w  n+ g/ K7 Z
        TaggedObject *object;' e( j! i: |7 Y/ O) ~
8 f' V# J* O2 S4 b3 v5 q! m

4 S# `' H2 K$ m1 h        // Select objects using filter defined by type array
5 k+ Z) t4 x' y0 F8 Q        Selection::Response res = selmgr->SelectTaggedObject(
# F9 F  k, Y9 s                        message, title, scope, keep_highlighted, * e! w; _3 @7 x; ~
                        typeArray, &object, &cursor );
9 f% y" d1 T3 N' {* o7 N+ l8 Z2 B6 M) O6 G, s( ~0 h1 g: d3 @
% B+ O  n! z5 A+ U2 I( |; R
        if( res == Selection::ResponseObjectSelected )+ E# h% [4 d: I0 I% [. ~
        {# o+ J: t$ s9 g  |, p
                return object;/ {; U* F% \& w/ v, D& [
        }
# u/ y1 n9 m- p7 t9 d' Z& ]" f. J        return 0;
9 Z" [6 F) p* Z) z. q}
, X) l8 F; i3 v9 y$ u& a* C
- u5 [, Y" n  p
$ H5 |) _0 r2 A3 @$ O& [  E+ u
//------------------------------------------------------------------------------
# S/ R6 g$ Z' B6 ]// Selection any objects1 L' n) l  i: _( d8 f2 [8 B
//------------------------------------------------------------------------------
$ r8 a8 Q/ ]: w; v4 i3 y7 sstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
% w* y. `9 d6 Q+ l0 X, r# K$ u{
0 U% `( P# l7 l; R. G, j        NXString message("Select any objects:");( T2 A+ }* Y2 p! w
        NXString title("Select objects");
) U: H. [& ^% s        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
( L4 J8 m; O9 r7 u/ ?& C" L        bool include_features = 0;        
8 ]' M; G' E' Y  Y1 X: j" M$ Q2 P        bool keep_highlighted = 0;7 }2 ?6 Q9 w* }4 }
        std::vector< NXOpen::TaggedObject * > objectArray;/ C' J$ k. B$ M# I
7 ]. ?% F: @$ i+ T
4 Q! b% M* x" e# U3 g
        // Select any object array
; L- I; b( U  w( v' {1 G5 S        Selection::Response res = selmgr->SelectTaggedObjects(
. s. I: Y, |- g% w, A                        message, title, scope, include_features, ) I/ K1 o; c0 l9 f/ x6 ~) t1 \% ^
                        keep_highlighted, objectArray );7 c; H, E, j& t8 N  j; l
/ C. [4 Q8 R, @' f0 Z. g

1 A! Z* C4 p4 e5 ]/ [        return objectArray;
5 d  T/ e6 M+ B8 Q5 s}
) E0 B" N% }' K$ g0 r. }3 L' i8 f4 s; t3 n+ v! v/ V5 P" {  s

+ F( z5 L, t6 F3 D' o7 E/ f3 G# a4 R' l

- z7 A( T4 m* s% j* `! d  R/ N+ c) Y4 K9 g5 P0 Z" [! F
  w* Y. U( }7 a5 ^! O1 N

5 ^3 n2 l5 m* R8 _: ], h% u% o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了