PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解; e6 u/ m" k8 Y* L, E; O: ?
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
! |4 o3 [$ g% K3 `1 {- I如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。! V" _2 K! I* L- N* H8 H; P
一些常见的类型和子类型如下:
; K. H: }4 U1 D, |7 } QQ截图20171025161410.png
/ r, ]1 f# j; G$ S$ U$ T如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
5 \3 p: |# v, E' d, U实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。" S% P% |. c' X  i

& d7 n  ?1 f# h0 U QQ截图20171025161432.png
7 l+ b% v$ w1 b9 W9 Y1 f# ]
% _( k# H) p: x
$ @6 M( L4 U( M) V8 ~1 I3 {
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。; m; w- ?$ P7 [% M4 H+ g) _
/ Q" U. o3 F/ H! ?* N7 O6 l9 M- J

- o" U5 Y$ a) |8 B) R+ V QQ截图20171025162656.png
4 i% ^* i# I- P
. l9 i0 l' q: G
  b" g7 O, o$ c! ^& I' K2 L
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。; H: W- t1 ~( Z
  O& B+ u4 F) Y9 [
; N" d2 E  x& W; t" A0 Y
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
- A& l+ T7 z" {* P& n5 j
5 Z9 J3 z8 O2 A% G
5 J( C: A) H2 E# U$ i9 vAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
; s# R/ b* d" t; s! E
1 P8 E) ?  `" H$ v5 f# |: A1 s2 w
& m  w  Q% z% D& [5 ^AddFilter (int type, int subType, int solidBodyType);
) w2 l$ {: y. w0 u/ ~* t% S
' N' M% ~6 G& }: @* X

$ }# `; y3 o- ~对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
- o0 u% ^- I9 V% Q) `7 }. R3 @) m3 t( ~& a8 ^
. M- h0 h. Z: ?: ~( M& b; J
8 d+ }* r0 O3 o( e
//------------------------------------------------------------------------------
  Z8 m' l/ a' J3 ~7 u// Selection with mask
0 O9 u+ }" q, n  W8 F+ i//------------------------------------------------------------------------------8 C7 b; S- I, M- o. \7 L
TaggedObject* MyClass::select_by_mask()
, {+ k' D% }& [, ?0 d5 c! w2 ^5 s{; H/ G' q# [9 H) S  }
        NXString message("Select an object by mask:");: X* ?. Q) H. Y  {7 T. I; O* l
        NXString title("Select object");
- i: k* N# l: U        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;+ L1 W9 g) ^$ n/ `
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;& H* h0 O" |7 U1 t% B
        bool include_features = 0;
3 b" K  \" h' k/ L1 k+ O        bool keep_highlighted = 0;
/ r! [2 e, w1 ?( `# }' Q" x; R, X7 I/ {; o' J! J/ e/ M
$ z7 J# b9 Y4 L
        // Define the mask triple(s), see also uf_object_types.h.
3 l" X  R8 a8 P$ e        // Uncomment or combine the desired mask triples
" Y/ l: j5 g8 g, F) m, |# T        std::vector<Selection::MaskTriple> maskArray(1);
* ]" `6 ]' C! p. Z/ ~5 X  U        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies3 N5 ^/ k7 q2 s
        /*+ o" `1 f$ {* o  u! r5 N  M
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces" O/ U4 Z- R8 g* m# V5 G' l
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges* j  {+ J8 T" H% `
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components1 ~* V0 j; J- I7 y6 I: ^7 C
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines5 z: Q* U$ c  J" e' K4 x
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects  D) I: D( i6 \+ U0 V" y5 Z) C
        */
% [/ d0 p/ }# B" W3 q        Point3d cursor;
5 \$ |5 J( R+ Q' @+ Z5 B        TaggedObject *object;
/ W# q5 u& E* l- l# ^, x. M  t' o5 X# o% m5 B+ a& B) f  l
" e9 m0 e; p3 `, ]4 W
        // Select objects using filter defined by maskArray triples8 z6 A6 E8 r: s9 g5 e$ r
        Selection::Response res = selmgr->SelectTaggedObject(" V: C) S( i- t  e8 p1 Q
                        message, title, scope, action, include_features,
7 m# ~8 Y4 b2 ~            keep_highlighted, maskArray, &object, &cursor );
6 g8 s7 F  o  H' E. `! D2 g+ c+ }6 d/ \; `3 c- B
7 `& a" l) [4 K$ z* T  j7 s
        if( res == Selection::ResponseObjectSelected )/ D( k/ n, K  s; E9 ?
        {
! Q/ `1 d# G2 G, q4 ?, [4 M                return object;1 d; ^3 ], p, C- F  f* t
        }
& }! s7 F( j1 r: H        return 0;+ ?) T5 \( P/ [* K9 \$ X7 A% _# b
}
. k: S2 D5 [7 X4 u/ a( |! h& U
- P7 m9 a5 R2 D$ W# ]7 `& U: [
+ B1 e( H! Z1 M' H; `) O( i1 C
//------------------------------------------------------------------------------0 Z4 m  I+ S' b3 c/ S7 A
// Selection with type array
5 s2 m+ \9 w! e: B' Q/ k" U//------------------------------------------------------------------------------
3 @  N7 k. R0 \4 J6 w/ XTaggedObject* MyClass::select_by_type()
. B: r' {# x, Y{) N, Z' E+ _1 s( G" R7 g
        NXString message("Select an object by type:");* O( v7 U( B8 v
        NXString title("Select object");
+ d1 A5 g2 Q& o  D% [3 m        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( ^) L% t1 ^& d5 V
        bool keep_highlighted = 0;; B" ?& u5 m. t# l' ~

, y7 j3 N) Q2 J' J* V2 ~

% t# f1 c. v7 ]/ R; Q- m! `        // Define type array, see Selection::SelectionType Enumeration& y- s( G( C6 a; ?8 s* C- |
        // Uncomment or combine the desired types
) ?$ m! G" a  k; n        std::vector<Selection::SelectionType> typeArray(1);
# R. ?1 t( f& k        typeArray[0] = Selection::SelectionTypeAll;0 u$ B" H$ h9 U1 h
        /*
! l# y9 g0 Q/ R) |        typeArray[0] = Selection::SelectionTypeFeatures;
+ S9 q( F" g. y$ C& b        typeArray[0] = Selection::SelectionTypeCurves;
5 G- ~3 R! ~. }: j- m        typeArray[0] = Selection::SelectionTypeFaces;0 D+ B) k) u3 {# ?3 {, Q6 T+ ]: x
        typeArray[0] = Selection::SelectionTypeEdges;
1 S( O$ S& M3 h# H+ h* g        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;" h3 s& i7 }1 s& f- \
        */% O( M& L# K/ ]- ?$ Z2 q, s
        Point3d cursor;
3 J: z5 E8 D8 _0 H4 U! j* U$ z" n3 @        TaggedObject *object;
. z) u7 o9 N% A; l1 [7 B0 g* I- n5 Q/ V, s. O6 v( g. d4 p

% I) d1 Y' q/ {6 E! V        // Select objects using filter defined by type array
3 ~0 e, P$ H& d/ p7 P3 w        Selection::Response res = selmgr->SelectTaggedObject(
. {- p4 m9 a  u                        message, title, scope, keep_highlighted,
# c% J; h1 W8 [. L8 b; i2 s                        typeArray, &object, &cursor );1 g: X% g( f0 s% v' {# z

; \4 s, f- ]& f5 N: @) F$ M
) s7 @. Q8 A, V0 G* {
        if( res == Selection::ResponseObjectSelected )
( [8 @8 P7 S; |+ X- ]" w        {. ]: ?* Q1 b6 V
                return object;
2 n; |9 Z. K4 X! Z- }        }
. O3 q- f( q* b& y; t, N, ?        return 0;9 h( t1 {0 Y0 C! g4 w
}
& H# b# V" n$ w# m  g& [, B1 k* G8 q7 Y

5 m3 ?  H5 F' s# B- f5 @. V//------------------------------------------------------------------------------
8 ~- _5 r, ]6 H// Selection any objects
* l! e1 z% ]0 H6 @5 i//------------------------------------------------------------------------------/ q% {; {3 s1 T* }+ y) s6 J! A
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()& J, o  E3 i) N2 g- T
{
. U% m: j, }0 A        NXString message("Select any objects:");
; q8 e4 N6 R! m+ w" e        NXString title("Select objects");
! @& ^( u9 c( r3 r3 D0 D        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. Q9 g5 `2 C1 z- A$ m- ]$ e        bool include_features = 0;        
" R: x8 e& E8 F9 h0 f        bool keep_highlighted = 0;
' p& p0 Q/ b6 ^" |        std::vector< NXOpen::TaggedObject * > objectArray;
, l# X; U% X+ n' A4 ~( L0 ?4 P' g, P$ R' f. Y7 }& r) _& h$ _
; l2 @3 ~  d; F" Z$ x  b; n+ K
        // Select any object array
4 ?3 v. x1 J9 h( ]6 c" v        Selection::Response res = selmgr->SelectTaggedObjects(* r. D0 e6 D1 ^  ^& o0 Y7 o7 b: R
                        message, title, scope, include_features, 3 C' G% s+ l5 g, K+ s
                        keep_highlighted, objectArray );/ b. G/ ^5 m6 d) n" @

1 t$ A7 a  g; D* \5 O! W: H6 p4 V8 W

1 \. H3 r: Q1 p" ^$ {" @        return objectArray;
0 t% w. O& n1 `7 d. u- e; b: r}
% m0 m' x9 g5 B( D' j$ ?+ S  s
. s/ q3 {) G' M% h1 [/ {( }& T) i: D) C# j

" Q# a9 k; n) A( S  K
; h% H$ a8 g0 d$ o1 ^9 q3 P, C+ ?
+ J* a# u% Z1 z2 a* R  i

& N/ G. \) p9 K& [0 Z( @8 w" \9 ~/ B8 V
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了