PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解( z' L' r1 @9 }& \& S  i
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。5 H$ F& S8 V. i3 B  Y# _+ T3 l
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
# r! w. O1 k. l) N* H一些常见的类型和子类型如下:. j; ]5 c' E% B% P. z8 D- I
QQ截图20171025161410.png 6 z; P( |! F, t
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
* F& C  I- M& v! R2 O  |- T实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。( X0 Y1 m# g( O# S$ ^" e
/ e* U9 s0 R$ a
QQ截图20171025161432.png / F8 B. U, q" ^$ s( V$ n+ m
& E/ r" D# ~  M3 c3 ?
' S' E% Q/ M+ V( b2 o& ~" F* ?1 G( B
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
  _5 w, H$ T0 @2 p, Z
" D8 C6 i$ H3 e/ J6 V3 W
" b* P! V4 j$ ?7 x. ~4 ~% R
QQ截图20171025162656.png
% B8 P3 }( O+ x7 S7 [! C# ?. s8 K) o/ m1 O1 X
- O5 j& G7 z! `. i: a* r/ R/ C- D# g% a$ c
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
* b/ ?1 Y& I! l3 G" Z
4 P- x7 P; Q  V6 i& j* h& B
; [) C* {, T6 M0 |" N# ]9 S- O& nSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);7 m* C- l2 B: H; x

. D1 j. \0 T. s0 y, F
2 S6 A2 ~6 J7 t5 @, sAddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
9 E* L/ _8 Q! V) a# f! Q) d. I: P+ t% v6 D6 c8 W

/ W8 ~3 u" m# @0 R6 l; AAddFilter (int type, int subType, int solidBodyType);
' P) A: z  G6 j' D9 S- u; {4 q: D, {1 _, Q9 W9 E' h. H

' V2 S. }- W- ~; k- p对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
1 U9 q: K5 H! d( d( ~- z- g& y- \- _/ \' q" G

# g4 p$ l' J  l# K9 ]7 E- c
. E  L- H$ M7 U% G( c7 f
//------------------------------------------------------------------------------
9 r% w) y( P6 p" w4 ~" l+ `1 R// Selection with mask
, _6 w1 q) @* y/ I7 V, h# v! R//------------------------------------------------------------------------------: B  L- ]1 i' \3 L* \1 W. k
TaggedObject* MyClass::select_by_mask()$ f' T1 k8 r1 l8 G' b1 `2 [7 O( N
{
  n2 Q& `6 ?$ B7 s3 {: t0 f        NXString message("Select an object by mask:");5 V$ ^6 H4 m8 k6 o3 N
        NXString title("Select object");
; r7 ?3 p* L" ]( m7 W. n- m. M" [4 f        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
7 }! f& Z8 X' Z7 {2 G! s8 m. u        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;$ b/ y# S* G/ Y- S3 I' o0 V
        bool include_features = 0;$ ]( @! I4 Z$ g. F1 k
        bool keep_highlighted = 0;
7 k$ a! Y2 E' W. F  n  Y% V+ f
6 I! c; U. e! m1 H
6 S2 m5 Y5 \) \( Q
        // Define the mask triple(s), see also uf_object_types.h.
+ L% n: n3 n0 v" G' r% V        // Uncomment or combine the desired mask triples+ _0 Z" V( \+ Q6 [/ W1 p
        std::vector<Selection::MaskTriple> maskArray(1);
  J: o& V5 V/ l4 l) t  T        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
. F$ T1 j; {  w* a        /*  @) k' I* a4 a( J* D8 Z* L
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces2 J% g$ k4 H6 Q- C
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges4 o7 M0 v# G+ F% I0 h  ?
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
: C: o& Z, c1 y, s$ ]        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
2 B8 l* ~7 P$ x        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
3 p; v4 E, f1 E$ O" z        */1 z/ h+ B2 ?* f% y4 ~" R
        Point3d cursor;
3 {$ X( p0 W; F        TaggedObject *object;- i# G# D1 ?4 z% `

0 [: Y# b$ b! a: u

6 l3 ?4 q. t5 P' A" ~        // Select objects using filter defined by maskArray triples# z: s  S1 f& E* D* [/ |5 R
        Selection::Response res = selmgr->SelectTaggedObject(. Y, `0 @/ a5 y" U* {' E& |; L
                        message, title, scope, action, include_features,4 |5 K8 z/ P; V! E9 ]# x' N. t
            keep_highlighted, maskArray, &object, &cursor );" S6 `5 y5 x5 [; E) F

/ ~; _! l6 }3 [- L# |! w7 t
) d+ [( I/ S  N. G
        if( res == Selection::ResponseObjectSelected )
0 S$ M+ F# ]$ H4 O' E; [' {        {
- |- _" w: C0 H& G1 U: t7 H                return object;- R; a9 O/ \( u+ ^
        }, J! _& G# z, h
        return 0;; P$ y+ z) u, S, c8 X
}( O& C" {: ^) e& O

0 G5 L# @2 }4 |/ _

9 h  i: s( Q3 O  f, ^2 F) D& ~- u//------------------------------------------------------------------------------( l) k- y$ ?0 {9 `6 b7 B
// Selection with type array
% K( p0 S# A# j# z1 r//------------------------------------------------------------------------------# m; x% x0 f- c( b$ X  O9 d5 ?
TaggedObject* MyClass::select_by_type()/ l+ w" |/ X3 ~6 k( X
{
8 ^1 g6 t) H# ?1 F- w6 O' {* ^8 `  B        NXString message("Select an object by type:");
' m/ H" O, [5 w7 A* t        NXString title("Select object");" a5 [, ]+ |# V: ^( F' |
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 i8 U; N5 p% X/ h6 J  m7 i3 g
        bool keep_highlighted = 0;
( M- x- X% j2 A6 R) s
; x; H6 P4 r- D
: @$ x9 A2 N$ S
        // Define type array, see Selection::SelectionType Enumeration# [# ^) u1 X$ i
        // Uncomment or combine the desired types: a9 Z! v& Q% D* m8 r( r
        std::vector<Selection::SelectionType> typeArray(1);& `! v( k- V! T* E' y
        typeArray[0] = Selection::SelectionTypeAll;# Z6 O9 {9 {* n/ k/ H8 e
        /*4 Z1 Z% C! C8 _  P6 S8 N4 ?
        typeArray[0] = Selection::SelectionTypeFeatures;
, {1 g: O, |4 d% P  E        typeArray[0] = Selection::SelectionTypeCurves;
# E$ @9 @$ u- b' Z( d6 f        typeArray[0] = Selection::SelectionTypeFaces;
6 |9 v# }( l! m7 T% s        typeArray[0] = Selection::SelectionTypeEdges;
. i! B% T4 P5 Q. X; Y        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
: p2 w7 O8 ?% d* r) W        */, t6 U0 d  Z0 f; N4 F# a! c, T
        Point3d cursor;. w7 F1 l  o9 a- Q3 |
        TaggedObject *object;: o! p* v. W% E. _

+ I0 @$ Q) _' g/ ^6 Z1 m
# }; q5 V; w3 k# y1 g* U7 w. j
        // Select objects using filter defined by type array3 b& q& g# ^8 N9 e9 Q, N/ ?
        Selection::Response res = selmgr->SelectTaggedObject(; p. P( ?/ w1 J' _
                        message, title, scope, keep_highlighted,
1 T4 B5 X# E5 Y) I6 J' Y9 y                        typeArray, &object, &cursor );
2 L6 \. r$ b2 `* I) u  @& u
- x! d8 {5 o2 k- f5 H' W: a, R

5 T% [% S7 U- O. F, M9 Y" }        if( res == Selection::ResponseObjectSelected )4 q* l9 \1 S" z: C/ n
        {# V) @! o4 w. [1 W
                return object;0 ]( A# B) y- o# l2 V4 |+ P
        }
- R3 z" Z; q# p        return 0;
( t# _9 W# F% ~}
5 P& [4 x+ U) P7 S: [  j) R* v/ v
" G& ]' |' D% C7 w) X. `

9 H5 {$ ~( {9 q& ?- }3 {# n//------------------------------------------------------------------------------
& w7 T6 A+ e( W5 u9 ?3 a; D// Selection any objects8 Z# ]  a0 D6 j" [
//------------------------------------------------------------------------------# a' G$ e" f% t9 K: g
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
) ^" z& d; Q9 j/ F$ N# n$ _{
' W9 _" I: O8 P$ m/ D        NXString message("Select any objects:");7 u- F7 u, L( a: M) z
        NXString title("Select objects");9 Z( s7 S& Q# }- R4 Q* g
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
) N2 L' v% X0 v6 T6 R3 A5 D! S        bool include_features = 0;        
7 I  p; H" T! Q0 d  }7 a1 {) j. t        bool keep_highlighted = 0;  T% [3 c" r4 b7 {& Y1 A' v
        std::vector< NXOpen::TaggedObject * > objectArray;  N" B& }" O. _3 w

* h. m4 a4 i7 U( i
1 {( c8 E9 x' }3 {+ J+ K, g
        // Select any object array
) o% a5 q* _( g  M3 l. ~        Selection::Response res = selmgr->SelectTaggedObjects(
$ a' A4 w" k. w+ l                        message, title, scope, include_features,
3 V! e, K3 I7 l  W* d, Z9 V: a                        keep_highlighted, objectArray );7 g; H7 }, b5 L4 A  z5 _, b" r
( D, W# p, _( E+ i, K3 ^
& N$ m- U8 ^! R4 s
        return objectArray;
' g, L0 C2 t+ d}3 E: H7 N; P0 x: w6 D8 G' T

( R6 J- v, J* L, m8 X! C3 A+ ?2 X" @3 C
- m) A7 _( U% l2 u

5 d3 q! ]8 ]* B" v+ P8 x6 f) I7 k/ Y; V$ `  {& k
2 b4 J; P* _, r

6 f/ w1 c: V! `9 y3 l9 j" K! b0 F6 O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了