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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解" f8 G. ~9 N) \
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
9 r3 {5 w; H$ d5 j& N如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。4 @8 o( h, i" P$ v7 p/ m. A& M
一些常见的类型和子类型如下:  X6 m8 I4 @' P* l
QQ截图20171025161410.png ( g( f" u1 O0 s: E/ a# s8 B
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
1 q5 T% \0 o8 {  r' I实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
# |& ]+ ?) U1 a! z5 E+ u- w) O! m* m, |& r5 B; n
QQ截图20171025161432.png
4 Q5 s& T, k5 T6 C
9 H9 n8 Z% ]7 P5 b, t. P
0 Q% i+ q) a/ l  R  @( _9 m
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。; O  @0 H" f3 @. A) |/ l2 z# V: Z

4 f  w: p3 i1 `; N. k6 {

5 b4 N% m! }5 h/ { QQ截图20171025162656.png % j* a- b3 r# V4 H3 }7 \
  g& K* _! V% r/ s  F

) [. u, p9 W, r* @0 d对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' H" B& z* U# \5 k  l8 R) b3 }& Y" \$ m  C8 z0 }$ q) M  j
; w; L& ^; r, I
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
# ^7 _" _8 L& q# |$ D; I8 y' f6 ]: q( F; S* |1 G" {

# n- ^- L; Q' D" c# J7 mAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
. p7 m$ x/ R6 }3 Z0 q+ Z  ]
( q" @# G1 s* C: J( v/ n1 l- B, x- O$ p& [# F
AddFilter (int type, int subType, int solidBodyType);
6 I) l6 R: |; v% o' B
& p+ [; s" O1 Z( E3 Q( J% |! J; F

  i" }( N' a; b9 w8 `& c对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
- O1 _4 B9 o. z$ [; a3 W; Z$ J2 X

% y: c! g9 P* v3 R' s

. p( d; w( K- p4 P+ n1 g, y//------------------------------------------------------------------------------. O3 n/ U( A( R0 K5 r6 p! g
// Selection with mask4 z4 M9 X! g6 _- }8 S
//------------------------------------------------------------------------------/ \. K/ x9 ?3 r1 v
TaggedObject* MyClass::select_by_mask()! E2 y+ H7 Q: l* v( B' S' n4 L* g- s
{* Q+ I4 Y! e% z$ c
        NXString message("Select an object by mask:");' S7 R" `! Q# {$ ]) L, K
        NXString title("Select object");' t7 e- u& P1 t7 |. j
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
( H+ Q; d' {2 G5 W        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
  p& t, `0 M+ K7 \; \8 m        bool include_features = 0;
: ^  `% e. b  \; h        bool keep_highlighted = 0;) Z+ @, K! K# ~$ S: I% c
1 F' \' W+ k7 |* U; G

- y. d6 f5 G- M- g) r( t        // Define the mask triple(s), see also uf_object_types.h.
# i* n  {' C- O/ R3 R- a        // Uncomment or combine the desired mask triples
& I4 L, g4 O& O+ d% M& S% r4 N% S        std::vector<Selection::MaskTriple> maskArray(1);# r) z" @, [; G! V+ j5 v% O
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies$ \2 {- F+ d3 }4 T- }3 v
        /*; s  I. P  t/ E1 j) L# N# U
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces7 o9 K/ t: c/ J, R0 O& {
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
6 z) E% A, N; r/ `, E        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
$ s& x2 q2 h4 l7 b        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines0 @$ O- j+ t/ P$ x) s5 M
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects/ D+ T3 z) p- M
        */
% |6 x8 l, i3 D+ I/ D        Point3d cursor;
2 [( R1 P8 [% \: d2 R* n        TaggedObject *object;
$ ^; V$ M4 b4 g$ H) N7 c( J4 h' c3 ?

6 q* Y( k7 j3 X0 j& @        // Select objects using filter defined by maskArray triples1 U4 r2 b: K* d8 o" {
        Selection::Response res = selmgr->SelectTaggedObject(* N; u3 R; I- H
                        message, title, scope, action, include_features,9 h8 B' h; g' l: |
            keep_highlighted, maskArray, &object, &cursor );
6 M3 T& P1 H( L" C& O# |/ R2 t/ j; D& N" n1 {

- H: ~; S  v" Z        if( res == Selection::ResponseObjectSelected )
* J$ P3 }3 [1 Q& [        {
4 ]" S5 H0 J/ X  q6 y' n0 R" P2 A                return object;
7 I3 W! m, b8 `' l/ z" |- [: B# u, c        }
+ B9 f- u. c4 D6 [        return 0;0 A* j8 I7 {7 C2 a" x& c
}
2 g: v& S2 I9 W- ~" P$ A7 D% n  S$ o! |4 L3 L  F+ K$ }* _: ]
$ @( S" E  Z+ v* F5 L
//------------------------------------------------------------------------------
1 H8 |4 n, N, q" I8 y3 Y; F* s, _// Selection with type array1 W2 Y4 ?; h. m, ~3 z
//------------------------------------------------------------------------------! k1 t" [( U+ @# V- J- z, c. B
TaggedObject* MyClass::select_by_type()6 ~' j; T4 K0 z$ n8 \+ c3 f
{
4 ~& n3 U- ?8 d' G        NXString message("Select an object by type:");4 T( }' B/ e" a: @) T
        NXString title("Select object");
6 Z+ m- `7 n$ m8 j        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
4 n7 d: s0 u" N# s/ t        bool keep_highlighted = 0;4 H( V1 {' b3 [5 c8 |3 G

" T2 E- k8 l) L0 Q/ ^
1 a) N, z  s2 v+ Z5 a! \4 A' t
        // Define type array, see Selection::SelectionType Enumeration8 Q4 T* q% m( K5 ~' s3 [; v
        // Uncomment or combine the desired types
% l: g" K! x& n1 p5 ?- t6 L        std::vector<Selection::SelectionType> typeArray(1);1 o% [3 v% y- t0 q" d& t/ x/ P
        typeArray[0] = Selection::SelectionTypeAll;
, S" ?+ k$ U& Z- F! G/ l        /*
% x# C/ W- g" W! T! Z6 Q. X$ \        typeArray[0] = Selection::SelectionTypeFeatures;8 x5 N; h- z3 X$ |/ Q9 n
        typeArray[0] = Selection::SelectionTypeCurves;
. F8 O7 D6 G# }" [/ u        typeArray[0] = Selection::SelectionTypeFaces;
  A+ d- ^- h) _) b/ w; ^        typeArray[0] = Selection::SelectionTypeEdges;
, d; m" S& q) G: T        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;/ n; k  R( q6 U- v( k
        */& N; ?1 E4 @4 y0 }4 \9 b( v- r
        Point3d cursor;( r) I1 x5 F- T
        TaggedObject *object;
; k- ]- Q% E3 u" e& V" L- i# p1 G4 F( w" E
9 E  M( E# \+ Z+ ~2 ^$ @
        // Select objects using filter defined by type array
% w) ~3 r( ^, A) |/ P) L6 T4 M        Selection::Response res = selmgr->SelectTaggedObject(( D! z1 ?: ]2 m7 \0 Z; b
                        message, title, scope, keep_highlighted, - \( [$ J$ s& @! n
                        typeArray, &object, &cursor );
3 b( H) D/ z  R/ j% |! U2 i  F+ ]2 c& V
# ]; J( k! i; h- e
        if( res == Selection::ResponseObjectSelected )
0 }" b( Y2 v4 U* A7 b. O& l- J        {* M3 O' e$ x& i8 a2 d1 ?2 @
                return object;
( G' e$ T+ I. ]. }% Z5 h" Q        }
8 p- M+ E& c. T  C0 {        return 0;7 g& a' }1 Y  F- k) @1 m
}5 a+ z) o$ A7 n: J0 C

/ T6 O4 ], e+ ~9 {3 Q+ ?
/ i1 A2 k0 D. e9 M* H1 v3 F
//------------------------------------------------------------------------------
6 \/ y: D" r; Q/ m, J// Selection any objects
! l0 ~) z# p+ d& G5 V//------------------------------------------------------------------------------+ @. x" K" C2 R- m/ s" c
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()$ b- z: b' l* ~6 Q0 P
{+ T4 l3 T0 e7 F* x, `+ C8 I
        NXString message("Select any objects:");
2 Y* e6 Q2 G. d1 q, `2 G        NXString title("Select objects");
/ ~) F% e" T. g/ Q" v        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
4 i% X+ {0 w& Y        bool include_features = 0;        % k: A7 C2 b: p! k! t2 }! h
        bool keep_highlighted = 0;
7 Q: D! G' m9 I        std::vector< NXOpen::TaggedObject * > objectArray;
( B2 c6 L8 ^; a/ Y4 M& i' B- |2 U
* A2 C9 O  m" R) U$ }/ Y6 O0 l1 l

- l2 q# ]/ y( t0 ^/ @4 R! I- t        // Select any object array
6 y5 l" W. U* S0 C5 g8 k7 Q0 }        Selection::Response res = selmgr->SelectTaggedObjects(
) H3 W% v  W$ w8 R                        message, title, scope, include_features,
7 e6 r/ ~; ~( C' j                        keep_highlighted, objectArray );
# G, r7 ?1 v( K& v7 M4 T6 e
. }% q. \; z* C2 @5 d1 J
# |! t: X8 h* n
        return objectArray;4 k. i3 f. K/ Y$ \$ \0 n
}
' _$ D" |+ [! h4 C+ Z' `
7 c4 ~1 T. ~; ^: u  e3 H, \* [* B/ R( A8 K5 S' b# p. |

$ G/ w6 Q% t# r

3 C7 W! f% l% m" z. \" q  Y& S; J
( J* i- Z, d4 k/ J

9 z. I( ?0 Z+ a2 C5 R. _/ n2 F, D! b" l: A4 X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了