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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
% H) o4 r" q4 {) H很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。& \% w" b4 Q7 [" o
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。3 p6 v9 k( c' T( V! b7 i4 }0 _
一些常见的类型和子类型如下:& ~4 C4 M9 d1 w! f9 k
QQ截图20171025161410.png
. l3 Z, a1 O1 y! @; `6 |如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。' ~) U6 d3 A4 q/ I6 t
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。* j7 |% z5 R- c5 o6 d- B( k& }2 w

1 w3 s8 a& A* D! L8 n3 U QQ截图20171025161432.png
7 Y% y: G* z6 O# T0 A; o  F
9 j# x) ]- e! a" \3 N8 Z

2 t7 U8 [9 [, f; R% E) b! `选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
. l0 l3 D8 Z. I1 k; \" \5 y  F0 Q
1 J2 D* H6 B; }4 h- v
. O+ l& i$ L5 F; ]0 [
QQ截图20171025162656.png
) B# M0 _3 w# w& Y: F2 N! z9 ]1 ]  H2 j7 C

# C7 T; Y" U3 ^对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
3 I) a5 N4 }% S) Q. ?; M6 ?0 f; |! [, h2 f! I2 @3 |4 ~( n$ C

# r; O) m; L. U3 a7 DSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);: Q4 M5 H8 M- h' o( R1 Y" c

$ E! v7 O' u5 `. t8 e( }) z/ A+ O" U2 S
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);+ G2 g6 S, p4 g! f

% ^4 g5 Q" h3 O7 L7 f( A& O9 i! \6 s% n  A! R7 M8 Z7 b
AddFilter (int type, int subType, int solidBodyType);
" p7 W  B) @# H/ q3 V) \
4 t# K) c; d( P# C  [  \0 R

2 x, ^1 U- P2 |3 l$ O0 G! F对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:& f: Z% s0 d4 |$ x4 A, b1 `" i& J

1 h5 V9 z7 ?! \/ i) s3 Q+ F, d  Z! t& U7 [8 y/ p

3 w- {+ u- E. R# b" p# ?  {/ x) c//------------------------------------------------------------------------------
' F8 [6 ]; }# u2 b8 h7 s// Selection with mask
! ]; f1 c! n. ]6 x1 M//------------------------------------------------------------------------------
, D. H" z$ q9 @. jTaggedObject* MyClass::select_by_mask()
4 O# q- i' _9 R: m{
  x* ]3 l; A; t) @9 N        NXString message("Select an object by mask:");
6 e5 F1 Z/ g/ R5 i0 B/ b# w        NXString title("Select object");: X5 \; B1 V$ w2 x8 E, H
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 e% o0 [/ d1 ]5 K& ^1 ?
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;+ N9 v5 C# b  l/ U# x1 \# o
        bool include_features = 0;
8 q: d. L+ C, d: }/ _3 j* N        bool keep_highlighted = 0;
9 r! S% R" ^6 \
: g) H, R1 J$ `% t( f% n5 F" \
3 o: n) S6 M# G1 {4 d5 ]# d' C: u
        // Define the mask triple(s), see also uf_object_types.h.# J1 |( i  r( M% X
        // Uncomment or combine the desired mask triples
" D2 ]! Y  a; m7 }. ?        std::vector<Selection::MaskTriple> maskArray(1);
. q0 m9 o' ^: S/ C/ C! u, X1 G6 o        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
1 c# y1 P8 R2 ~* @% d. Q8 R        /*
% Z0 J  O( \2 D/ ~+ ?        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
4 H% d: i) s. N/ X  e+ W, F        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
3 f4 w0 N5 ]) x+ i        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components1 \4 |& C! P/ U' D7 r+ K+ k
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines  a% ]: U2 t% Q) u8 C! G
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects4 E3 `8 {- u6 \1 P
        */
& z4 X( h+ U5 i        Point3d cursor;3 A, Z7 A7 s# N% Z+ x0 |# A: f
        TaggedObject *object;3 J6 F9 ?- N: m4 A# L, c$ p
4 H+ z* Y3 W" q: s$ J6 Y& {' ^

% ^# i  Y' i" g4 k) O        // Select objects using filter defined by maskArray triples
5 M2 J: ]4 S9 `6 s. d* T3 m- {        Selection::Response res = selmgr->SelectTaggedObject($ H% ~1 R' [, N9 r8 N& Q
                        message, title, scope, action, include_features,$ j6 t5 E* _0 k( f, k% ?+ \
            keep_highlighted, maskArray, &object, &cursor );$ S# H1 |4 s" d! A

* X4 G! s7 ]& ?3 y7 P
6 N" n7 ^" r( l, O- D+ i  @# Z
        if( res == Selection::ResponseObjectSelected )
$ |; j, f6 O: o) v        {
& J, K! D+ y$ ^: b7 J8 g                return object;
, }+ V. L$ e1 d- W- e        }9 z+ q, {2 }+ a
        return 0;
" Y- w+ D- i, n7 @}
( ]+ j+ `4 ~# j+ P0 B  {4 `7 H& S& L# K6 Z/ o

, d8 x6 {& ]6 L# `3 S: H//------------------------------------------------------------------------------
+ i5 w, t+ J& T- q! e$ p, ]. M+ W// Selection with type array
4 j6 b) b+ `. X" n//------------------------------------------------------------------------------
+ _9 @, ]; j9 }" i  wTaggedObject* MyClass::select_by_type()  b9 b6 z, Z! U3 M5 z; N
{
' y) _6 A- F& x% _, e        NXString message("Select an object by type:");% ~& e  j/ U- {6 Q9 r
        NXString title("Select object");
7 `0 r: g) J( ~/ w) [5 E% F        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
8 I$ j5 ~8 Q4 N: F% J' l        bool keep_highlighted = 0;
3 z/ S& v0 b( |8 |% N1 E- k# }8 X1 K, n: a
6 a6 u* A  B, t& x" B3 m
        // Define type array, see Selection::SelectionType Enumeration
+ @5 ^. C, [0 q0 n3 \        // Uncomment or combine the desired types
' w/ h2 o8 `, p% M8 d9 ~        std::vector<Selection::SelectionType> typeArray(1);" y. A/ g# K0 ?% X2 V$ I
        typeArray[0] = Selection::SelectionTypeAll;0 a* ~/ n; W+ x. N& |
        /*- u% O) G: h3 m9 K
        typeArray[0] = Selection::SelectionTypeFeatures;
% w8 D6 Y" _: J$ [6 ~        typeArray[0] = Selection::SelectionTypeCurves;
/ X4 b! l# K: {) P        typeArray[0] = Selection::SelectionTypeFaces;
+ p% ], `9 e% b! @5 D4 f+ o        typeArray[0] = Selection::SelectionTypeEdges;
$ T& j. L- E$ q, v. r  u        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
) C* n2 P, A! a2 x        */9 j" H6 x  e* P6 i
        Point3d cursor;& \5 |6 D  g" o) D: r! Q
        TaggedObject *object;
" B6 z' V1 ~" B  p/ s6 n! s4 z; ~7 U+ p% Y5 M. n  g4 a6 b

4 W5 ~- @9 v$ b5 l: D        // Select objects using filter defined by type array+ m* _8 C- ^/ T
        Selection::Response res = selmgr->SelectTaggedObject(: e" i  I) h  I1 W- I7 m
                        message, title, scope, keep_highlighted,
3 o* f. K' O5 _$ s1 v; H: L6 m                        typeArray, &object, &cursor );
# i$ |3 Y& A2 @# Z  s, _/ Y
8 G  m4 ?' W$ d- L/ P

/ J! R0 V$ h% k% G6 w) L        if( res == Selection::ResponseObjectSelected )* s# }0 Q+ \0 c" r% @
        {& A# A: Z) |" c- o2 }
                return object;
: N& T: B8 D( C& i6 n        }
! \* t8 L- J4 t/ I6 \) L% q        return 0;
+ \  J# m0 Z" t; X% z7 B. u}# S8 t; a; \9 Y, p3 g
% x  C- v5 G+ k2 ~% G

7 C  K: M( ]  r0 S" o( s/ F: u//------------------------------------------------------------------------------: q3 _: |" e8 o
// Selection any objects
. V/ T/ F. S- u" @$ O7 ?/ ~//------------------------------------------------------------------------------
0 F+ Q; B5 M$ W+ p+ h6 u4 wstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
4 g5 ?  E% V" a, g0 U{
7 o' a( @) A# R- s, a" X        NXString message("Select any objects:");
; m* a: B* b/ v) a        NXString title("Select objects");
1 w: o$ n0 i  {+ L        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;; a0 F5 m* C4 Z6 ^5 I7 J
        bool include_features = 0;        
) _/ x: Q4 F( x* f2 g8 b' s        bool keep_highlighted = 0;
. c+ W; h5 f" w  u- y. K+ l8 n$ `$ B        std::vector< NXOpen::TaggedObject * > objectArray;- g# Y; {: c) V; ~2 r  x

  {0 q. E: w/ d" R& h) E

$ Q+ u4 x) M' P3 D        // Select any object array
8 D4 ?+ g7 _2 b- `        Selection::Response res = selmgr->SelectTaggedObjects(
+ D- _2 o5 \! [/ k2 X7 ~                        message, title, scope, include_features, " {% I- g0 J( D8 y: R2 F
                        keep_highlighted, objectArray );- C/ S  ~# s" _) k" b+ k7 ?3 W

0 Z3 A% l$ k+ n  ~6 k' }$ {
/ b$ r( A( \4 D( [
        return objectArray;
: c$ p! L1 J# O  B3 C# C% W}- X8 {( ~* J- |& c: W

9 w3 x" Y/ L& X  g$ U* c1 {) v6 A( F& u' k$ a$ N0 _& F& g+ y

/ k( p# l3 k+ M

$ J1 M3 ?( N5 ?  F, k
2 B% m* a6 s. J7 R
: N* \$ p3 Q' w

5 w4 u9 c/ w- E8 U3 D4 f3 u6 }& A2 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二次开发专题模块培训报名开始啦

    我知道了