查看: 4038|回复: 0

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

[复制链接]

4

主题

3

回帖

38

积分

管理员

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

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

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

×
关于NX二次开发中选择对象mask triple的详细讲解
, F8 h0 P2 T! _4 U  q很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
" x& V. }" l# ?2 E" ]' @1 X如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。5 b9 ^/ ]5 }- M! C( B! K
一些常见的类型和子类型如下:2 W' P2 U0 j! P. g' T
QQ截图20171025161410.png $ I' `8 U, Y2 M1 G- v
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
. F0 n6 w7 w1 D# w2 Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
- p+ D' B. A, w0 V8 s# w  [! j0 y) P
QQ截图20171025161432.png + u; x0 [; L1 M$ [6 ?- Q" }2 [' c+ a$ F7 ?
7 X) e0 ?# A4 q7 x* y

0 }2 X1 |6 B4 p( t! U选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
" j+ ^$ b  o$ Z+ d' K
3 R/ V% _1 S# W- o; V2 g- n
7 @3 t& A% o6 c2 a
QQ截图20171025162656.png
7 e- f- x# `* j0 z: p* v3 f! I2 y0 L, X( [* r7 }& a5 m

( \, P8 E( _; q* W/ K对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
* y$ y  N" n* N4 I
: H1 {; c* H' O7 J  a+ X
$ @# b7 ^' V9 S: v/ y: o/ ~9 kSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
0 S- J8 W6 U. ~! a7 Z$ {+ Q0 l: C* w7 q/ Z
, f6 K) U+ j( g) r
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);- P" J9 }* \! m" U: o

6 s1 j1 k, H. {, w/ j4 L4 M2 J; T& e+ c% ?0 ?( F
AddFilter (int type, int subType, int solidBodyType);
" M& v9 V7 S% Y) U5 T
/ L4 S8 D$ ~2 M8 V! V3 ?- f
! {$ U2 j5 h% P5 V2 h
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:  x" \' m/ x2 y" c& x
3 r! G* a9 F7 q: M7 j% d' N4 {! j5 C

( C' D8 l' D, f7 v, u( {
* F5 i5 {) q0 @+ R
//------------------------------------------------------------------------------" w8 S+ |- z+ O# Z: E- e
// Selection with mask
( h% ?$ o9 k3 P: P//------------------------------------------------------------------------------; M. W$ K5 I0 s7 {* {
TaggedObject* MyClass::select_by_mask()
; f9 i6 U% O+ }( J! x8 N- ^{5 K& Z7 E/ V9 w4 w; ]6 q3 d
        NXString message("Select an object by mask:");
& h. o& A% z4 S  x        NXString title("Select object");
3 W2 `! Y6 Z/ ^2 s% a  Q- {        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
: G( V) W* c5 ~' D+ _! S# i        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
6 F. K8 n. ~( v2 u        bool include_features = 0;
8 Y, T5 x) z/ ^5 L        bool keep_highlighted = 0;- J8 \* k) |( V" o" p7 G1 U

9 b1 [  V8 {  ]
  B7 D8 q- @/ O( a" M" N- Z4 q
        // Define the mask triple(s), see also uf_object_types.h.( l. p9 Z1 i+ Y  z! q' F
        // Uncomment or combine the desired mask triples
; m4 d3 ~6 b$ H, w7 w        std::vector<Selection::MaskTriple> maskArray(1);: F5 Y' y2 F& ^0 G8 Y5 X- S
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies" H0 U7 x. f' W" V) u) |0 R
        /*: Z* |8 s  S9 B$ y5 a$ p
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
: L* t* }; j7 Z& T8 I        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
" s# w. _9 ~. z8 i5 q        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
, `% d5 `! T9 F* w) i$ y        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines7 J3 }* Z( d8 e: y- \; j
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
8 @8 Y/ e  B1 S0 A9 h( H: {9 R        */  w, F7 f" ^5 f; B3 R- o6 x
        Point3d cursor;
# f5 u3 T; `6 p8 B7 U        TaggedObject *object;
- j0 X* j6 E- c9 X) _$ C2 Q* h
+ g% Q5 R" C5 K# O5 s* |) Y% G1 I
' p7 S$ l5 U; O3 g' G
        // Select objects using filter defined by maskArray triples9 o% ?/ X, q6 \5 h1 K. m
        Selection::Response res = selmgr->SelectTaggedObject(8 w- v/ S+ O: r; S# _) f8 E
                        message, title, scope, action, include_features,' [5 W) t$ V1 I! Z9 i
            keep_highlighted, maskArray, &object, &cursor );
8 ]! d$ P6 \$ `
2 `. k3 i* @- g/ D. C  h4 H
3 m/ N1 k8 m* O1 Y# Z3 M
        if( res == Selection::ResponseObjectSelected )' A3 u0 ~3 P7 d+ Z( L
        {9 M7 B) s9 I2 N9 s; m
                return object;
  k( W; t/ x. v; v        }
! A, G0 ?9 i' p5 F9 |1 P  l        return 0;
: k- s5 Q3 w0 {4 H}+ h& \) S" x' v
. a+ J" e9 J% W  u
+ t# ^, O4 N& C. Y7 i9 V
//------------------------------------------------------------------------------
. G. G+ P& _1 H  k// Selection with type array9 ~& M% o9 }# t, G# _, Y8 O+ R$ t  S
//------------------------------------------------------------------------------
# j9 i$ e  B% A$ NTaggedObject* MyClass::select_by_type()& z; U) b, ?8 t" e' Q
{
3 n  j* ^: o1 t4 ^        NXString message("Select an object by type:");
* B1 P, e6 r1 X0 G: K6 ?- [        NXString title("Select object");& f8 H( h! B# b- Y0 z& _
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;: p3 Z6 U' R. l
        bool keep_highlighted = 0;" E" v$ S4 c$ ?" H) ~! s# d. X% E
. W/ `6 B& }/ E  f3 ^% ?: V
, M, i9 ]/ v( @9 w
        // Define type array, see Selection::SelectionType Enumeration
1 ?( t$ d$ f: A6 S, r% ~        // Uncomment or combine the desired types5 d3 ^7 j+ G/ ~
        std::vector<Selection::SelectionType> typeArray(1);; G% }5 |& ]( g# A$ i$ w' I
        typeArray[0] = Selection::SelectionTypeAll;
; @% h9 z) q/ E% m        /*
5 i( S% t5 x( I        typeArray[0] = Selection::SelectionTypeFeatures;( v3 {; }9 d/ T/ S
        typeArray[0] = Selection::SelectionTypeCurves;$ K7 v, L2 u. T$ |' V# x
        typeArray[0] = Selection::SelectionTypeFaces;- w: U% }, s  Z+ O# X  c
        typeArray[0] = Selection::SelectionTypeEdges;
) _. j9 Q" s. S% e( X( O' p        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;9 Y; k" [* `0 J- h
        */
! [% m# e) j; @3 q6 O7 V5 x        Point3d cursor;' u1 F5 l0 S. ?3 W  P* }
        TaggedObject *object;, e9 t; d9 e- u! W

' v# l7 w, K9 y+ E. z) F# A
& Z# ]: a9 W# p1 u
        // Select objects using filter defined by type array
- L0 P- N* P# E6 a" Q        Selection::Response res = selmgr->SelectTaggedObject(; s! K. W. U. _9 z2 K, R4 A2 T1 V6 K' H% G
                        message, title, scope, keep_highlighted, . e/ d4 f( B$ M$ `, G4 |3 w7 c+ a
                        typeArray, &object, &cursor );6 H  Q+ u( b$ }" O

  A) z, ^" D+ O" S  _; K5 `5 G! x
( f' [, Z+ v: b- W9 r! H
        if( res == Selection::ResponseObjectSelected )6 G$ ~/ L% a, r8 t: W+ }
        {
) m. c2 \2 _7 H( L                return object;
$ C7 b- h  s9 f. ^. m        }
+ A$ i! A1 ]3 r/ f        return 0;4 i% a' ?; G) w7 T4 N
}
# E( `" F1 }( e, s. a* _; X" K6 ?
. L% n' ]7 f; n

. D9 s0 M2 ?1 Z: e( I//------------------------------------------------------------------------------
  P6 F, n$ Y: C# S. t' u, g6 V) p// Selection any objects
+ X6 X; E6 C7 ^4 z//------------------------------------------------------------------------------0 i/ s& L3 m/ P# C. W
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
9 Q4 g$ v3 N2 l- [: M9 Q{
" ^  [" ]. H  W        NXString message("Select any objects:");
; B$ a' s+ h4 h/ ~. ?$ o        NXString title("Select objects");9 }% `# e: B, F; _
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;' [) d* J+ J; ~$ @& o+ h' X1 X% A
        bool include_features = 0;        
. K* i# R' j8 v( ^- s5 c        bool keep_highlighted = 0;
) X* U% |5 E) k9 S% g( y; N* G        std::vector< NXOpen::TaggedObject * > objectArray;* {* M" q0 J3 N  t* [

8 `) N5 B. f$ o8 H! K
) v6 ~) B8 q& s
        // Select any object array' _/ ^4 C0 t+ d$ T5 M$ ^7 K
        Selection::Response res = selmgr->SelectTaggedObjects(
6 @7 B+ a( ]$ _: I$ J5 D5 |$ t0 e                        message, title, scope, include_features, 7 {! A) _" {: L$ I+ M: s4 |
                        keep_highlighted, objectArray );3 J; n% ?2 U8 @, U" |

0 B$ ~7 I7 C, J
( G3 R, \5 p" K
        return objectArray;
8 F4 e5 A; w8 W  h/ X}
+ c* V: w7 J+ M% E9 J( m  F% i
/ v2 v* j$ L. a7 K* R1 G. u) |! O- Q; a4 d& O4 O

3 U3 |/ H6 `* z$ a4 x

3 E1 E( L, i9 \5 N( F# \" k8 x2 c, H6 L, O5 h
6 k/ h- }# L1 C' ^7 R

1 q9 ]- E. a$ W* Y! q# x
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部