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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
4 A8 `" A) C2 b' l, N很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。  u& Y9 h- ^, {$ k3 q
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。8 k" i0 w4 R. [/ F
一些常见的类型和子类型如下:
+ x6 J) x; b# ~! Q# x QQ截图20171025161410.png
" w9 `) L. U( V: s如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
+ {" ~' D1 |" _/ h  A) J- L实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
: P5 b5 m1 x* m! k8 g9 H
9 @/ S: }' u5 m  z% E QQ截图20171025161432.png 5 T# X2 e" w! u: w. a/ U

$ Q9 P4 ?5 Z7 `+ z. o

' g9 [, K- G6 R7 |& x5 t1 I选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
: Q- u* i4 f; `& m# B- Q- }4 D7 C% @' ]" _4 C
& X$ _3 _# }6 I7 H4 U1 v
QQ截图20171025162656.png
9 s8 a  A  H+ M2 X) I7 q/ S# l
) S0 w& p3 K; z

; P: @5 w' z* g" l; b0 \4 v  ]/ t对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
0 Q) n$ s- U9 l- c+ A1 G; u2 S
! ^% i# ]+ Z, x- P4 A, B
- X, N/ l5 I1 C5 U  FSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);* M+ N" H8 @& y7 }2 \. u! N( X- J
4 p$ n) W2 ^3 E/ H7 Y2 d

7 }( q  q, j8 g: u" E: Z" Y% UAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);' b/ U8 R$ f  Q+ }* J1 S
/ C+ H; E$ D  c! C9 j
6 s3 c( E' D0 z3 @+ q
AddFilter (int type, int subType, int solidBodyType);3 H2 C( B  P" s1 V

8 _  Z8 S# V# N8 j) U& H/ S  Z
) t  @8 D5 x3 O; a4 n
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
( M0 j8 h3 ~8 s7 `, h
; [3 z* s3 X$ \3 b& @& A, c. K* X4 s/ S1 b4 [. P
! s! t6 V. l2 C7 [+ I$ |% ^: R
//------------------------------------------------------------------------------( ^0 p' W6 ~  |/ r5 Y3 \
// Selection with mask- z" ^( ]' [& o
//------------------------------------------------------------------------------/ h4 p, w$ C. _
TaggedObject* MyClass::select_by_mask()% C' p# x1 s+ V/ x* |' m
{
7 I* ~9 P+ I- M+ V% J        NXString message("Select an object by mask:");8 K# V* e7 D" h0 C/ u  U0 c; S
        NXString title("Select object");
) W9 Q' o% k. l6 k1 P, s        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 C& J# r: Y7 o# r4 S% f1 k
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
: O# k9 y1 g: k1 [0 I- t, ]        bool include_features = 0;0 V* G2 c& `! g( M3 d7 q- f( ^
        bool keep_highlighted = 0;( V- q3 m( y6 g5 C6 k
5 d  ?1 G: |/ s* h8 B7 U. _& J
) a1 t7 S4 |( o: n& F; |% d4 H' E
        // Define the mask triple(s), see also uf_object_types.h.) Q% r6 c  z. c& D
        // Uncomment or combine the desired mask triples
1 L4 m# s! G. o/ M0 T* |        std::vector<Selection::MaskTriple> maskArray(1);# ?; x! z$ H/ k- Y# d9 c
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
9 L. O" B4 {. s8 f/ C7 ]: z3 Q8 U        /*! _# B- f! s6 X! i3 ?0 h
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces" K! n) `8 w: M5 ^1 k* T$ S  x& P8 J
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
" k& a. q! l4 n3 S        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
. d" l9 _" I! `4 w. c- i: S        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
- \3 J1 W8 |. @9 h' H4 @        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
' B9 p7 ]' x, F7 G- S" F        */
0 A) ]+ D3 \: L" m* K' Y9 ~        Point3d cursor;, p5 v8 K! u1 O. N
        TaggedObject *object;) h2 k  J6 b3 o0 |+ M4 k5 v
( o. Q% C1 R, s( H4 w+ F: ?$ R

) V! M6 m, }7 E8 I+ r1 v. t        // Select objects using filter defined by maskArray triples$ p9 _8 z' [, O. N7 \
        Selection::Response res = selmgr->SelectTaggedObject(
" v1 J; \3 G5 f7 v9 Z% n                        message, title, scope, action, include_features,# A# G; e( b( g, B# T  I5 G
            keep_highlighted, maskArray, &object, &cursor );
# e" {) n& v" \
+ X( N  W2 r: ]3 g

# Q4 r/ @' h  N: [8 s; \2 x        if( res == Selection::ResponseObjectSelected )+ e0 D: D" z- v9 W# N5 M; t
        {
7 K% i6 t, H% A! `  o) F                return object;2 p1 j: d! _9 X# A: b: m0 d2 Q
        }+ V2 m" j# h" O7 ^( C8 `
        return 0;9 O9 c) ^' [: K/ h0 M5 U; j
}1 {! ?* b3 B- }
/ N$ Z1 F) N: q4 x

$ b+ R4 @! b6 T# \0 i* W( G2 v4 _//------------------------------------------------------------------------------
, X7 |. F" k3 A) t- g- {// Selection with type array" Z, m! v' t. A6 f
//------------------------------------------------------------------------------/ T  Z* k2 K) `
TaggedObject* MyClass::select_by_type()/ D8 r( g( o% }4 h4 O0 G: v& R
{2 e2 M) q, E1 s+ q
        NXString message("Select an object by type:");
) Z1 Z/ {% |% v, E, d; ~        NXString title("Select object");6 G. J0 I7 V' }3 M. L: ?/ b
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;! ~* z) V3 r9 K3 W. f
        bool keep_highlighted = 0;' C; v3 F$ Q( T: {8 p
! y3 b. {9 f8 E" C

% p" X$ W9 \) W9 I        // Define type array, see Selection::SelectionType Enumeration
, n7 P0 A6 Z& f. R. x        // Uncomment or combine the desired types2 R8 c6 A/ F3 W
        std::vector<Selection::SelectionType> typeArray(1);% _" w( N, v+ s6 M9 l
        typeArray[0] = Selection::SelectionTypeAll;
0 h1 l  r5 F- S2 D, O        /*
6 L/ s7 D( ^2 F" G" T! X7 V        typeArray[0] = Selection::SelectionTypeFeatures;
* Q( y+ y$ O1 L* D7 w# A        typeArray[0] = Selection::SelectionTypeCurves;# W; T5 B: Z$ K+ g: d; ^% H
        typeArray[0] = Selection::SelectionTypeFaces;2 ^9 f8 q, F8 I% C% ^/ W* s
        typeArray[0] = Selection::SelectionTypeEdges;4 F$ c+ Q: p+ ]; a1 E2 r
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;8 P* B1 e6 J& X! i3 q( d! @
        */8 P' w4 Y% j! T! h" G8 R/ r
        Point3d cursor;+ G; M. D3 c) X- C# m, k2 J
        TaggedObject *object;
& m: X; C2 D$ n9 b" _- [/ p1 e
# `3 ?! G0 b! g( }9 L+ M
( D2 C, W+ ]5 p9 h: t/ S/ [9 E
        // Select objects using filter defined by type array
! U, Y# K6 M5 t0 I; P4 W        Selection::Response res = selmgr->SelectTaggedObject(
3 {2 F4 h, `1 Z! q6 J4 y                        message, title, scope, keep_highlighted, " M/ o' l5 Y3 b- S6 F7 B' U3 w
                        typeArray, &object, &cursor );9 @% x: v6 J8 G5 i3 \

# @- B# y8 @8 b

/ O7 J: P9 w, T! O, p/ p2 v4 M        if( res == Selection::ResponseObjectSelected )
9 b8 t* F! j( @% h        {+ b( O; [0 e" F0 U7 X, O# y
                return object;
. O% m: M* g% p3 l8 [+ j/ l2 O        }9 O& s. Y6 i' ~  }9 i( A
        return 0;) K3 Z7 u* ]% {5 m, [
}
: M6 k) t3 O3 ?0 o3 {. \( t/ u7 T
! Q4 u% u8 Z$ Z; h' R
# u6 D0 {" G. i
//------------------------------------------------------------------------------
0 j6 `% h  x% B. {; }4 ^: k+ l// Selection any objects% _9 n* k9 z1 k8 i# u/ \- B3 n! x
//------------------------------------------------------------------------------
& T# ^0 b; i9 g) u  c+ f' jstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
. y/ v) w1 Q0 J; M{
: E" S, K* B$ x1 I        NXString message("Select any objects:");
1 m1 f% W: c* I2 v        NXString title("Select objects");
/ t& Q& H  G" ^4 y        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;$ I7 K9 S9 j$ D8 j
        bool include_features = 0;        
+ ^/ b; d# p7 {        bool keep_highlighted = 0;% ~3 A; l7 N' E2 n7 ~
        std::vector< NXOpen::TaggedObject * > objectArray;( A4 s' ?! }2 ?6 G, |
. o2 X# k& E, C. Q. {

& e9 R) ^: c) b% M2 o' Q) w        // Select any object array
. r# p8 @0 ^1 B        Selection::Response res = selmgr->SelectTaggedObjects(% ~4 G# S3 w; w6 f; R- Z- \
                        message, title, scope, include_features, 2 ^$ l* \8 l: I$ y$ D
                        keep_highlighted, objectArray );. L9 Q1 @, B7 V( @& ^2 ~

! A) I& T* K" r0 U' v! ^
* i8 N4 x4 A! S$ i( q1 |
        return objectArray;9 r! Z+ S# R- F- i) P6 ^
}' ?' U1 G4 A# p1 S4 S% A3 ]2 Q
- U. d3 p2 |% O; O

# K+ c( {2 P' }, a$ Y- x! s! ?' U( f& ~* C
% j, e+ T; R: }' |
5 M9 k+ Q% P# r/ u+ |: B

. U& ~% j5 }( V, X5 h) x' ]9 b! \6 t: p: L! ^( B/ g- 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二次开发专题模块培训报名开始啦

    我知道了