查看: 4025|回复: 0

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

[复制链接]

4

主题

3

回帖

36

积分

管理员

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

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

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

×
关于NX二次开发中选择对象mask triple的详细讲解
+ U. B: A/ `" ]# w5 i很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
' a- b6 g; m  [# j如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
1 s# _8 A6 I: ~+ f+ c一些常见的类型和子类型如下:! O9 O" P& m& D6 D4 I' r
QQ截图20171025161410.png
, N. a$ w6 K) y; h3 ]如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
2 P# z5 T3 n9 n, B! ^实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。: f5 |5 Z/ T: f0 m; c3 X

. v& q' _0 K* \" f( [1 c QQ截图20171025161432.png % a* K7 s  V0 s1 V) r

. Z! x: w  N  n( |! n6 n6 g$ w

! {+ U8 P& J) [- u9 ^' }9 G# A选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。, u+ @$ {4 E9 P3 |( }, v

/ ^4 N9 X& U2 B6 U

4 a$ x0 ?4 f( w3 z+ z QQ截图20171025162656.png & k; p  S6 N  P% N' W: t( C7 t
5 H8 t0 z) k2 d( T. v& [

5 U  y; P" d+ v! R2 G对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。& W# v" J* s' O) a! n
( F% C7 H+ W# U* l; ]
( k. A0 r1 `" d9 g9 b
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);! d6 m# J2 B! D9 p% `: N
$ P5 Y& f7 G( k3 l
: \+ J( o- R+ u1 z. I$ k
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
+ m; {( M3 L- l2 V2 y' U
( O0 P% z% ~! b* @. n. }" r/ v/ a
$ d  f- B, t9 L" ]AddFilter (int type, int subType, int solidBodyType);
/ e- K# T; G! Z9 S+ Z9 \# c3 k9 W; N6 I) y: ^7 d) Q
; C; t+ T. S" C" I! B; Y2 t
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:, D, B" G) C( ~

- A. f# s8 o. k; v7 H7 N& T  }8 _  v
2 v, O9 y: M, i3 ]7 B9 D  Y

1 F6 _0 X* ~8 U/ \$ B) u//------------------------------------------------------------------------------  Y0 e& x' b; C+ s' L9 N& H+ ~
// Selection with mask; ?4 W7 U5 ?& N& |+ b
//------------------------------------------------------------------------------
- J( N4 [2 V4 Q, BTaggedObject* MyClass::select_by_mask()
3 _, z5 l6 ^# |& G/ f9 y1 u{
2 g$ l: _: T' @, P        NXString message("Select an object by mask:");
& h5 b7 h' p* ], m8 m        NXString title("Select object");$ [+ j8 ~) g7 p$ d. D7 _
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
3 z* J4 L* D1 k% h  a( [5 c  S        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;# `* c& G$ G+ z- v: x  h8 x
        bool include_features = 0;
5 \+ |, O0 C0 n, G        bool keep_highlighted = 0;9 d/ u( b$ ^/ x$ s' S3 S: M
3 C* [% Q& M5 O2 k$ x
; R8 G+ V+ h, a$ T0 d: r$ n
        // Define the mask triple(s), see also uf_object_types.h.! m6 l$ C  C$ _. I' ]
        // Uncomment or combine the desired mask triples
2 e+ a  \5 V9 S& F  V4 l$ w        std::vector<Selection::MaskTriple> maskArray(1);
' L' i$ q$ B! P        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies4 t$ L5 }& T5 B. X* ~- R
        /*% P5 p0 p" N( [, A  a0 _" i
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
1 g& p* X( v  p# O        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges* w% K$ `( Z! g5 y( Y1 d( A& ^0 O
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
5 P  L* D3 g: z        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines8 |$ q: [# V  b1 l
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
& B' f9 I& V$ r( H1 J! [, r% S8 F' V        */
. v9 L# m% }- r& h/ n1 e, l3 ^7 q! g        Point3d cursor;
, I- W1 v) ~- R) R) A9 v        TaggedObject *object;6 r* \2 q& E5 l0 \! _

3 I1 M3 Q# A' V' _

4 R; K1 f6 B# \. c        // Select objects using filter defined by maskArray triples- O% I# e$ E6 P0 p$ _0 d$ O) [: q" T1 V
        Selection::Response res = selmgr->SelectTaggedObject() Q  m7 k3 ~3 _8 y, _3 t' @5 v
                        message, title, scope, action, include_features,
1 v: ]4 q! ]1 e. `5 }7 N# @            keep_highlighted, maskArray, &object, &cursor );
. M, S$ \9 y4 L" [6 J( p# g) ^, i$ ~: r% a
6 X9 O. p1 s1 O2 V  Y7 Y" }
        if( res == Selection::ResponseObjectSelected )
# [$ L& M, F& t6 ]' P& C        {+ u( O& D/ H. L. X9 F3 E5 S! r
                return object;7 F) ^4 G0 j. A- r5 c
        }
% K( q+ n  t- l7 @# M- p: R        return 0;
: u- \) ]1 M$ }/ m}: P* r4 j0 q& q: S1 _7 e: s! j! q
9 y( B, j6 |. G5 E' \( K

/ r7 J8 R+ C- e+ f: {//------------------------------------------------------------------------------
9 F- I. B9 S* P4 {5 u// Selection with type array8 c" q1 J, x1 r! V
//------------------------------------------------------------------------------
- p, _$ ?9 e& w/ U3 @8 aTaggedObject* MyClass::select_by_type()
3 A  A3 S# C4 s8 y{
: E% }, ]9 Y7 [2 n  m% p        NXString message("Select an object by type:");
5 B) A& H7 y) X1 A4 f* e4 ~% p        NXString title("Select object");' J- l; f2 l' l: R& h" o- H0 e5 @
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. |, m( y; p) A5 b8 q        bool keep_highlighted = 0;) S: m8 l' H. P; n; C* v
: i. e9 G6 T; a: N: p
0 t8 z. c0 G+ H% ~- I* O
        // Define type array, see Selection::SelectionType Enumeration
; T) B7 s" W, s  r( s! r/ q        // Uncomment or combine the desired types
# `! H5 D& D0 P# o- C- C        std::vector<Selection::SelectionType> typeArray(1);
" q7 J- N9 D) e. ]1 |        typeArray[0] = Selection::SelectionTypeAll;
1 D) I/ U! U. E        /*
  W  z$ A8 B; V1 Z( ^, v' D( W        typeArray[0] = Selection::SelectionTypeFeatures;3 g; g5 U! w. M8 l$ ^4 M8 K! a& H
        typeArray[0] = Selection::SelectionTypeCurves;0 l; D0 k9 j* ^1 r5 w
        typeArray[0] = Selection::SelectionTypeFaces;1 d) e' D8 ?- o7 z1 P1 ?, J: @4 V; I
        typeArray[0] = Selection::SelectionTypeEdges;
4 Z- p3 ~9 N$ M1 r' I        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
0 E/ H- g2 Z& b: A$ \+ h        */, j( e/ g; N- Y9 T! W4 H
        Point3d cursor;
) z* }3 X: _/ s" `# Y! D        TaggedObject *object;, B3 e. i. S0 k8 i. Y

2 W/ Y. T5 E& V: _

) w' h, J/ {& p# d; G5 V* |1 q        // Select objects using filter defined by type array' P7 u' _& g+ R/ A
        Selection::Response res = selmgr->SelectTaggedObject(: Y  y: H4 E+ \& _5 B
                        message, title, scope, keep_highlighted, # _/ x' [+ Y: b, R. i/ L) L& k7 v
                        typeArray, &object, &cursor );
& V2 L3 ?4 M8 w9 Z* ?
  p2 S* F: B; h6 y8 }" [

0 K+ T3 ~0 e/ k6 X: T4 O% g# D& r        if( res == Selection::ResponseObjectSelected )
' \4 B0 U* B; I) y7 L5 S: H        {
3 ^7 g6 O1 R8 T8 f, c' {3 p6 c                return object;
, ]: i6 f0 O# u" e7 M        }
* `+ e& l( ~: ^6 a+ ]. ~8 H        return 0;
) i& L% F; i9 r/ ]1 t! C' r; @}
+ d* p% ?; q1 y  g5 {) Q; y' a% I0 i
5 y; g0 `7 R( A5 c5 X0 a5 M
- G# H4 v+ U* I4 m/ V
//------------------------------------------------------------------------------
7 x$ x6 H$ N( k) c  @// Selection any objects
$ i# E3 o- B0 d: X* N* i  d' B//------------------------------------------------------------------------------3 Q. C0 j/ }6 r* k1 Y# y
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' d( [* G+ P3 T7 f) M6 F; L{
! o0 U9 y. N' g5 v& R) _        NXString message("Select any objects:");
% @- [( ?5 h# P        NXString title("Select objects");# R9 R5 b# v9 C0 t7 j! ?: `; a2 l- ?
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;  N) d' l) H& C
        bool include_features = 0;        8 A/ \( s2 |) O
        bool keep_highlighted = 0;
9 C0 E9 `0 ~5 ^7 X        std::vector< NXOpen::TaggedObject * > objectArray;  C/ G$ S( g( e# r4 c/ g; ]! z3 X3 X  G

+ h) x( A% J# L- d# P' l

  ^+ U$ [+ P* f( H3 n5 Q$ p$ k7 r        // Select any object array1 J& ?2 k5 x, B* i. X
        Selection::Response res = selmgr->SelectTaggedObjects(
# X/ G. Q% X9 j' T4 R- W6 i                        message, title, scope, include_features,
) }5 q' l# q- G# f. K5 }                        keep_highlighted, objectArray );( G  N( g. C* M+ j7 K; z( X' {" T

" s" {3 z# Z4 M, D# r

3 q7 i, `5 [2 b        return objectArray;0 Z; |( m0 V. L+ n
}2 ]1 K/ l9 Z4 O/ E0 L

5 y) K/ D, w9 M3 y( `
# {; y9 e4 J$ {1 q" z
  F7 k2 @% V6 }1 R6 Y  ?# y, Z

4 M& N6 p+ j) Y  Y- `9 U$ g1 K3 e7 B$ k
" |* t9 o1 E8 s- G2 ?; U

0 W( F- E) B8 I
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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

本版积分规则

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