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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
( b: d4 V: u4 p( I很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。% P& i1 p) E$ o' B( X& h
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
! C4 H8 h: A6 L5 L2 K; |一些常见的类型和子类型如下:
  R4 c7 g' C9 M' o( I* b7 Z1 g* H QQ截图20171025161410.png ' r" L0 j+ f9 A" F5 Q4 X1 M5 s
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。3 L+ [' R3 Q- z% h: n/ M% B
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
. @% B! ?+ l  Y& O+ N
8 {; A1 t# p- [! X" B QQ截图20171025161432.png
, {" F' m4 z/ C" q# b% q. k) o! v9 h0 X7 W! B/ {
8 K! u/ x: i; H0 d; J" |2 G
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。! Y" |7 Y$ B1 G) Q( R* e0 S

8 E! k) V" E$ Y! w
6 \! I) V5 N1 H" W. N, r
QQ截图20171025162656.png 2 H1 y. d  k. P
  @. U3 v2 s+ z" l4 ]- W& k( [
  {. Q  O2 |; F6 K( }" H( |
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
9 z9 B& [3 u, x$ m( P) _" j6 ^, A  J1 R/ l/ q1 C

; l4 ?$ S2 @3 z/ J' ~SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
3 s- U# D$ L4 s* n4 f0 G# x: V
$ _6 d3 R7 Y: v+ s$ K
; S$ N$ a/ Z+ f& W8 P+ i" oAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
3 a. W2 a! s4 F2 j( Z' |/ B
+ B6 u* {* J8 Z! Z9 u+ d. X; G# `4 r8 h0 X% s( A
AddFilter (int type, int subType, int solidBodyType);. U: J" c3 b" T8 k% J6 E
& W4 b+ G$ l4 w  {; a

8 L& H* _3 C/ O$ b9 E  z对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
9 w+ l4 q+ O" L- w
! s5 Y( ]6 ?6 o5 {" v: [& E. H3 b# M4 n, X5 V* r
$ J. l2 w- e) Q  f8 y( u7 x
//------------------------------------------------------------------------------. ~( v8 B+ x8 T2 t  x9 y4 H1 V( ]
// Selection with mask
- h  R2 y& Y7 C( W! r//------------------------------------------------------------------------------7 `% A1 T; I! [) D4 m; c
TaggedObject* MyClass::select_by_mask()" y! P+ U' c/ Q4 R
{
& F  A) p! [+ P8 `1 k        NXString message("Select an object by mask:");
2 Y  E$ }9 a$ J* A9 Z. Y* d        NXString title("Select object");2 P# H5 y& S* o: w/ p6 q9 T
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
, H) r" P" f" a$ m' b        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;* p) p1 \- G/ z" X
        bool include_features = 0;1 Q) G: r% [& I+ N
        bool keep_highlighted = 0;+ @0 S. @( c6 v& |$ l

& K  y0 Y; P  H" [3 I8 L1 E

% `: I& O* u+ n8 l# e( ?% j        // Define the mask triple(s), see also uf_object_types.h.
+ [4 K& X# b$ _  S        // Uncomment or combine the desired mask triples9 L' G( K% N4 Q' x
        std::vector<Selection::MaskTriple> maskArray(1);
; y$ l; C/ ]5 x4 s2 I( f( A3 u# e% j        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
3 f- |4 \! ?1 k9 @# Y% u* D. k        /*
4 ]4 W" T3 R- J+ q. k+ |( z, Q        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
0 D6 N4 U6 J5 C& u; C        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
3 s$ _; P5 _5 g2 `. u5 ^/ `0 `        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components% b7 h; |& {6 Z/ M
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
8 d  r( O% H" C/ G+ `9 ?9 O! b        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects/ h2 o9 E6 c$ `( a7 ^, ~
        */7 c7 F" G) W" L+ X
        Point3d cursor;
( m# t! h+ {  `" P* }        TaggedObject *object;7 m" H) y. e! ]) e! W) P
$ H, k7 ], B9 h
9 n4 k% n2 {7 }' p
        // Select objects using filter defined by maskArray triples
% J0 m" \- T# X2 ]0 n- F, f0 F7 Y        Selection::Response res = selmgr->SelectTaggedObject(2 ~* z7 g, o3 Z1 l4 W+ Z  z
                        message, title, scope, action, include_features,; K5 \& z* M* G
            keep_highlighted, maskArray, &object, &cursor );  t$ B; R4 U* r. G

( i. V  X- W  a7 }# o! j

: P4 e: G: I9 y1 `$ K2 ^        if( res == Selection::ResponseObjectSelected )
4 D# Q5 l9 I6 q# O: y        {
: p% M1 J4 n# t  v$ E                return object;
; V# \/ s% ^; X- X( G/ q        }
+ U4 |8 ]/ b& R3 v: {5 U        return 0;( |+ [  g+ l% Q  N3 s0 p7 o
}9 ~3 w3 @/ p2 F6 ^& a
* p- O+ n3 K- C8 N4 g; \- P7 }' e
# x5 ~; O) }' ]! S, F
//------------------------------------------------------------------------------
4 h2 |' y' L1 r! Y* |// Selection with type array; i( j! f) ^2 F
//------------------------------------------------------------------------------
+ i, z4 F% W" l6 }TaggedObject* MyClass::select_by_type()- K1 l6 |* g% u5 W
{7 d' V' K+ m. f' M+ \
        NXString message("Select an object by type:");3 J% k/ b" n3 \% [" {, x# }$ z
        NXString title("Select object");
5 V4 u" t6 J$ C1 u        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 w; _$ F; P/ v  ~6 p6 c! }/ [# \
        bool keep_highlighted = 0;
1 Y6 M: i" |; S9 Y# D5 Q& _: y. y' h4 i% ^
) G( A# M1 h% B
        // Define type array, see Selection::SelectionType Enumeration* _; d" F7 r* w
        // Uncomment or combine the desired types% d& O4 F% |2 ?6 `( n
        std::vector<Selection::SelectionType> typeArray(1);/ Q5 q/ C  S$ S) l/ N! E9 `
        typeArray[0] = Selection::SelectionTypeAll;
1 T# R% q3 m" q2 t        /*
; ~: S5 j: ^' f1 J, T. ?        typeArray[0] = Selection::SelectionTypeFeatures;( \' |" s; H( ^
        typeArray[0] = Selection::SelectionTypeCurves;. V: p9 p2 y0 {2 h: d
        typeArray[0] = Selection::SelectionTypeFaces;
% q) s% X/ `2 W$ g5 ~- T6 C- Q! E        typeArray[0] = Selection::SelectionTypeEdges;
' X1 |' y2 E9 f- n9 T2 h        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;& ?' L' N. e+ C( Y5 C
        */
! [. R" y" V+ w, ~$ j7 s9 I        Point3d cursor;4 e* Z; U( ~6 g( m
        TaggedObject *object;1 t. q" \8 m; H+ f; H; X
# B5 F+ W; w, @, U% L

1 @9 C5 L6 K0 Q$ ^; W        // Select objects using filter defined by type array
$ x% p3 j' F- p  h& \5 R8 g6 ?  G        Selection::Response res = selmgr->SelectTaggedObject(
7 J: m) T" R7 g% f                        message, title, scope, keep_highlighted, 4 \5 F5 i$ f* K$ m2 A5 v  l$ M9 {
                        typeArray, &object, &cursor );
1 K( w' s% D" U
5 w& m: Y; C  n1 v
" }" q+ w# {1 g: D$ i
        if( res == Selection::ResponseObjectSelected )
& g& I2 l. k7 ?        {
( V) ^4 l' p' r# |+ b/ w7 L                return object;
- x6 v% v4 s' [6 f4 B5 b+ I( o        }
4 a' Y! S; f/ e7 d2 L        return 0;# T) {3 ?% d$ p* u9 J
}
3 t$ ?5 I2 `1 b
0 F  n: T% F1 P8 G3 N, k

" C' L7 r, f6 n0 f" ?//------------------------------------------------------------------------------
1 \" Y& h4 t" G4 U3 B* Y4 G// Selection any objects
8 h5 b4 a! s1 o//------------------------------------------------------------------------------
- H: f6 A1 Z3 m* s2 m- p( @* s# Nstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()- m! w! J5 `2 \7 X& p6 s! S3 g
{# H7 U0 X* ?' G
        NXString message("Select any objects:");8 \: E9 i* S4 @% ]
        NXString title("Select objects");
& A" W  X% R. l& e6 D$ q+ `) W0 I        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
$ K' ]8 ~) {: r        bool include_features = 0;        
3 M, T0 b! A- r        bool keep_highlighted = 0;% E/ R# B9 y% j- O( ?2 D8 y: i
        std::vector< NXOpen::TaggedObject * > objectArray;
% V  D: o* I7 Y  a8 W
9 H% M" F( ?1 J" L% k& I' v6 z6 z4 h

3 U9 G6 _' ?9 w1 p$ ^        // Select any object array
) I% p; b, U9 a" ]* c! O4 Q        Selection::Response res = selmgr->SelectTaggedObjects(1 Y9 k( F) D$ t* a
                        message, title, scope, include_features, ( R7 [3 }7 n% s$ \- M( b  ?7 c: \
                        keep_highlighted, objectArray );
' M2 U0 w2 L( |) W8 H/ X- y: s3 \8 @$ d+ E
0 z) J* B) ]* Y2 K$ X7 r8 U; w# o
        return objectArray;
& C* G, r) ^) q" u& G}
' J% C* s. G8 i  b/ w0 Y: s& _9 Q! }0 ~9 P) R2 m
. t7 Q+ t) u1 |" L* n8 x) G
0 h4 g: O% u7 |

- k% }% L" a0 Z- T. ~
( |' c; z* W8 M1 F- A, N/ C

3 p! g, u' t/ h* f8 B2 g) P0 s' z$ E: i5 b9 h# V) j  @; ?
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了