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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解5 y( N% U& p6 [3 `; V
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
1 N" B, F1 h# x7 p$ C1 R如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。9 U  k! l" g: Z( U+ q
一些常见的类型和子类型如下:6 x7 j0 i, M* i; E& m" k! a+ E# k
QQ截图20171025161410.png
; w+ H" q4 @4 r: D如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。; e) t' c- R6 ?* L) ?% [
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。9 B2 k' U7 A& V+ f& D5 s7 g
! C( `/ k0 H! ^5 g. z. y
QQ截图20171025161432.png ) i% |7 i3 O' w; v: B4 E) }* P

+ Z4 X. Y8 l, B$ _- [) M" ?

3 f2 ?: |2 D! W& P% A/ x5 u$ V选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。5 B1 E" c; n7 \0 J
- z9 c& f- Z) J' x0 [' O

1 ?8 B) J8 j* |' g7 h- Y& N; V2 e QQ截图20171025162656.png . i5 t0 S% o5 W/ t. [

# B1 Q9 F; ~$ _. }- ~0 p% r) I+ X
; C& P' E! R: `' B7 {5 {
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' N7 R. e8 I+ A' |. U6 S% ?0 j$ M- Y- T6 k; Q

5 x  E8 }' p6 _: }+ `8 X3 a8 K) FSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);. T; Z6 \! R, L' J* p! _( v

3 \" A$ q% w* x2 B3 w7 ^: ]1 z
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
3 J2 g7 o9 \; Z9 J6 M7 ~$ S! s3 i& P9 o: {; b! x/ Q  R
8 s8 }& e  h  {" `/ F
AddFilter (int type, int subType, int solidBodyType);5 C8 V7 p: q! z# R  [
2 F( {, |& D' Q. _" |5 e

3 E6 a6 V8 z" R- t对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
& D/ H6 n: J5 U; g1 F
( ?: a% O# v5 S5 j, V
- {* Z  T. g' d) n$ i+ a: P

  I2 @( C. j' V9 _//------------------------------------------------------------------------------# d7 |* n1 N( g4 B2 S
// Selection with mask' {  r6 M- d# i9 [, L- u
//------------------------------------------------------------------------------" o+ S3 W# V1 c. y* E) g- ?5 ^! k+ y0 v
TaggedObject* MyClass::select_by_mask()
4 V: s4 A5 i+ Y2 `/ s# L" f$ G) e2 B. I{
6 t8 C8 G4 b$ s2 \( @        NXString message("Select an object by mask:");
4 X4 \5 ~* X- l# |9 B2 u& }        NXString title("Select object");# p" j. e+ n3 y( }/ |9 P, [  E$ Z" j
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;9 b# V+ g# v- o5 M
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
& U1 I  u9 X( b: t' P        bool include_features = 0;
% ]# U7 g" C0 `8 x! p0 \        bool keep_highlighted = 0;
# Y0 R. e0 I  M- M% O  F# N, \- R# n8 e0 W
! X4 C+ d$ N* @  m8 k; D$ D
        // Define the mask triple(s), see also uf_object_types.h.3 b' q% Y0 }6 J5 M$ d  B: O6 J3 ~, W
        // Uncomment or combine the desired mask triples
: h0 n8 H+ o' ^' x! ]8 `        std::vector<Selection::MaskTriple> maskArray(1);: K1 M% X$ E2 |( m7 W
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
6 p* \9 J6 v0 [, o        /*
7 O! ~7 T/ R/ N; R% n! o+ C        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces4 p# v0 W+ C3 l# [- V$ x$ N& i
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
$ m# h/ b5 ~' a4 c& x        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
: J. G; f6 _) |6 I! B        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines1 O/ ~( P; N6 u5 }1 x: t
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
0 M9 W# ^$ i, d$ K( B        */# _$ O# r" W5 n* K1 @9 x# y
        Point3d cursor;6 f; k3 k; G8 d- I" J+ X
        TaggedObject *object;
* _5 k9 p" d1 o! f; Y% W7 F& o3 H8 x* S' M; j: \4 m. R6 @& N/ n

* ]+ i5 D( o1 ~! Z" t9 L8 g        // Select objects using filter defined by maskArray triples5 @5 c! L7 p* z- Y" S
        Selection::Response res = selmgr->SelectTaggedObject(7 R) Y: R+ f7 ^! m- A
                        message, title, scope, action, include_features,
) g6 a, i4 Q2 ^5 a8 {            keep_highlighted, maskArray, &object, &cursor );* ]8 A. z: f: Y
* X# i7 W, Y* v% T
7 D" u5 x. |0 T! s% F$ p1 D
        if( res == Selection::ResponseObjectSelected )) ~9 i/ h" T5 U: x
        {1 `, H2 X" O/ m% y; {( E& z! {
                return object;& }8 ~" X$ j4 u  x! r+ x: D
        }; ^7 W4 D3 }; T( D+ {
        return 0;
$ q: ], y! w5 g/ j$ O! x}
2 r- o+ O+ _) A/ ^/ C! W' R' T2 `/ L- s  M. f; }

) m; ~+ c2 h* F4 s//------------------------------------------------------------------------------; m' U# h' q4 r3 ?% Q$ L/ ]
// Selection with type array! d5 x" j; h0 |
//------------------------------------------------------------------------------
- h7 I$ j6 t: ^( ]TaggedObject* MyClass::select_by_type()
  U. d9 q. O. e$ E* A, {{2 u4 ^; k% D/ d4 ^' y5 k0 z# i8 Q
        NXString message("Select an object by type:");; d1 O  o$ z9 t/ S$ m# _
        NXString title("Select object");
. z% t* ?3 B( d        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;, w1 G/ }6 t) u/ L# [) Q! K  ^9 K
        bool keep_highlighted = 0;
2 w& I' @6 S# M/ k. s9 |% u
1 h% y& \& _9 ?
# m0 Y7 f; z1 F" g
        // Define type array, see Selection::SelectionType Enumeration8 a0 P5 k# `' Z5 [4 A! J
        // Uncomment or combine the desired types7 j' a/ j  v: y
        std::vector<Selection::SelectionType> typeArray(1);* X* d8 v" V3 o) L( K! H
        typeArray[0] = Selection::SelectionTypeAll;
8 d) [: k+ h* n        /*1 f4 p0 s0 ^" j" T8 Z* A
        typeArray[0] = Selection::SelectionTypeFeatures;
# l' M. O& f  H' f! j  ]        typeArray[0] = Selection::SelectionTypeCurves;
7 n8 e+ u1 t7 u/ p0 B        typeArray[0] = Selection::SelectionTypeFaces;
" o' F" Y7 {3 O        typeArray[0] = Selection::SelectionTypeEdges;% x  d& e' {2 k5 w; T1 n
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
6 ^) g1 Q$ G7 F/ o$ d/ g& I        */
; w- G  |8 z# X# v, ~7 h( p        Point3d cursor;, @; z' {2 f+ H& g- \9 S
        TaggedObject *object;
; c9 ^! z- l% r( {; X! W* ?  A' l* P  M! W5 Z7 }. r
* S8 d. k5 t1 S) B- F5 y( m
        // Select objects using filter defined by type array+ q! T$ v* P3 m0 L8 x8 H" t
        Selection::Response res = selmgr->SelectTaggedObject(
2 @- H9 I5 f+ X' z                        message, title, scope, keep_highlighted, + s+ |3 K$ g  G  @7 z, L+ e
                        typeArray, &object, &cursor );+ X3 P& v2 g) ~9 H

& T& u% n9 q1 i- o5 U
3 D) N5 {8 C  d2 q, F' i+ B
        if( res == Selection::ResponseObjectSelected )
! b5 |1 B; p: y  u$ C2 C        {
9 M; |6 c' h, B                return object;
5 E2 a0 }5 ?9 p' ?6 v" E        }1 W- S$ d- j* o# t! ?5 m
        return 0;
2 L" j8 [2 k; A: Y# p}% t/ j% |' p. O9 U0 ~7 L
. E6 o1 Y' d" _

9 l) Z1 Y- G* q. B//------------------------------------------------------------------------------0 q* c, V( c: n* j0 e
// Selection any objects0 S& z( u" Z6 f/ b& ^1 b' G+ B
//------------------------------------------------------------------------------
! R8 n6 A4 m  pstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
  p1 e2 S" N. [6 ]' j* u9 R; P$ Y) X{
- B8 u, R# P( w        NXString message("Select any objects:");  d8 I# r5 Q) {5 D: i
        NXString title("Select objects");4 X1 ]% q0 Y5 b$ ^# p
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 m2 ?& v7 l$ w9 s0 `5 Y1 L
        bool include_features = 0;        
  X' p8 B- G2 L% x/ O! ^2 S. M        bool keep_highlighted = 0;
: @, Y3 @+ ^$ c1 m' J        std::vector< NXOpen::TaggedObject * > objectArray;4 n  y) D) R2 |  w8 ]9 }$ s' F/ I
3 Y, a" V1 |" Q$ g

) q6 P; }3 m6 R: G        // Select any object array1 K6 e2 V/ [% b. Q( @  _% z& h
        Selection::Response res = selmgr->SelectTaggedObjects(9 ~2 }1 k, _6 R0 u+ r6 y3 T: e1 S( \
                        message, title, scope, include_features, 6 Y4 N; k; o* \% y. [2 e- v
                        keep_highlighted, objectArray );- j: b9 b0 g( z% ]3 l/ Q- E
  W* v8 n# S! G6 V% K# J& C
5 e' d0 ?2 u2 Q' N" E' d
        return objectArray;
; ^* L* W3 l' c% h6 O}
. c! F' s5 E7 ^! e1 h. ^
( q1 @: u/ ]/ b1 A& @
! A& z) _/ T0 r- Q
+ v* J  e/ w, ?; s4 ?6 S
( }2 T( o: a, }% t* q2 i! `  t

! N  w% U" e0 W

6 d$ {6 J+ f0 t9 _5 r' x) {5 C/ Z' P. r" A! U# [& e8 U. X  u
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了