查看: 4251|回复: 0

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

[复制链接]

6

主题

4

回帖

60

积分

管理员

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

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

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

×
关于NX二次开发中选择对象mask triple的详细讲解
& e, [! W/ a, G1 |很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。9 R4 t) |- C9 W8 _; r5 i+ D% s
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
" {; S5 C2 V6 g/ z; ^6 ~0 W一些常见的类型和子类型如下:% _. H) |/ b1 _: D2 ~
QQ截图20171025161410.png / e9 G  s' S& }) R
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。  Q* _5 o* N) E1 ~
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。( w% `% C# D& Q# E

) D4 I% v- E5 p; Z; b QQ截图20171025161432.png
7 V5 C) ^# ~% O% e  f* y9 n6 R! Z8 j: p
. Q& m( A0 Y) `" ~0 h
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
' f# r% s2 h3 R: S
! m  g, X3 b6 {0 j& h; h& M4 ?! S  i

1 g" \9 x  Z6 o6 T QQ截图20171025162656.png
: e( ?0 q& D0 I5 ]/ p" D# `, u5 C( A: m1 W6 B! Z7 l

" i3 R" F6 G# P; r' a2 _6 m对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。3 c+ ^: r2 `+ {8 v7 J4 P. ]" t
; x% }, u+ x: \' a. u1 J/ }- F+ M- P

2 a2 \0 s, j# N( S1 o8 b5 n- ~SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);5 Q; F2 q8 q7 r, w3 u) K
: I8 V' P8 b$ e. `1 c" h
  Y4 |1 t& B+ c3 @: L5 b  O
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);( U" a# P+ ^& T/ P
/ {6 A( {/ t6 x, `5 q1 _, i3 Q/ b

" J* c. ]8 n/ P- ZAddFilter (int type, int subType, int solidBodyType);% c4 {7 r2 R3 _- Z2 w

7 d3 v, W7 g9 C! k

6 K# z' H# G5 i) l- ?对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:6 e; \) e$ r* X. g# l  G

* o6 `( j7 m4 z) e2 ~3 M; I/ M5 L+ z) b: s: a8 ^0 p

- c+ ]' v" b2 p% i& @5 d//------------------------------------------------------------------------------
$ P7 a' [( q/ S# Z) I// Selection with mask
5 `6 Z) _  X$ O* a+ T% Z* x//------------------------------------------------------------------------------% h& {% o1 H- u. s6 B
TaggedObject* MyClass::select_by_mask()$ \) F5 R# L! I% k, o2 c. {) v
{
  o3 R! ]& X4 I# C# G% _        NXString message("Select an object by mask:");
3 W3 l7 u- v$ A0 `  x7 i9 C7 I2 C; N        NXString title("Select object");
! z+ c5 v0 D. z6 _        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;! N/ z, B7 u' Q7 j
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
0 ]1 T) ^" J$ z4 }5 u        bool include_features = 0;8 ~/ I  r9 C2 _+ f
        bool keep_highlighted = 0;2 B4 a/ w( p8 K; ^

5 X7 n; X7 m  [2 E

5 V6 c1 e+ }8 C* \+ Z. [        // Define the mask triple(s), see also uf_object_types.h.' o' ~4 C( D7 l  _
        // Uncomment or combine the desired mask triples
9 y$ {7 E( w, ?% U        std::vector<Selection::MaskTriple> maskArray(1);+ \6 ~2 Z& T5 u* q0 t* U' ~
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
- y" B2 }4 X" W2 b& A' e5 s6 p% W( T        /*8 v' |3 @$ A, k) q
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces, p2 h; C" i7 F1 g, k; c5 m
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
' D. Z$ z, f, p' d7 h        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
4 Z  `0 ?  X, I: l4 `0 A- ^. R1 [3 {7 ~        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
# g/ e! P, c+ O        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects* D1 E$ ~, q& e# n9 i+ q
        */: f% D* ]. u3 n  y7 H$ |( g
        Point3d cursor;
$ X5 F2 g% M  K# ?        TaggedObject *object;; M8 V" F  `1 x# C& K  j

! Y: X. P' h1 Q' m9 L

# P/ y3 Y0 p& x8 |4 ^4 d! Y; @        // Select objects using filter defined by maskArray triples
3 P! `9 M; f, F9 `        Selection::Response res = selmgr->SelectTaggedObject(+ h. h) A% `5 U/ A$ L, H3 h$ e
                        message, title, scope, action, include_features,
" ^. X; {& n, \! M- N- g3 P3 _! {            keep_highlighted, maskArray, &object, &cursor );$ A) {. T! z: u% k5 `

6 |) l  D- v3 x; r3 b0 ~5 B( X: @

/ T- f/ n7 f% t! E        if( res == Selection::ResponseObjectSelected )
3 [$ I6 g5 l- e8 F        {% M, m1 n9 t5 f0 ^
                return object;. p. K( G9 e7 P( I3 i$ p
        }
: b/ N/ E" y2 D* \% y9 f% d) o" ^        return 0;6 p0 I* n; ~& `. P
}+ G1 f4 l8 Z% W6 B3 O% t
* y' l" T. T5 ~# R& J: B# O
5 Q& t# e' A$ c( V+ U
//------------------------------------------------------------------------------
) w% b7 F3 _3 E& T! N& V' P% P// Selection with type array% v! m5 x$ u' n" o5 L* h
//------------------------------------------------------------------------------" h# ]' l" U: q7 N* _8 L2 h* B6 }
TaggedObject* MyClass::select_by_type()* [& h& K) O% t- l3 v% j
{
% q; X: Y4 O7 Z3 X( ~+ `) w+ k8 ~% ]        NXString message("Select an object by type:");- p) L4 W! h, j0 {& \
        NXString title("Select object");
' \: G  p# M8 T4 L2 T$ u. W5 d        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
% M2 e5 q1 T$ y/ ^0 _        bool keep_highlighted = 0;: w& G2 Y6 [. h1 [
& l! x) b* c* ?) V
, {" ?. v6 ~; w" B; g% C
        // Define type array, see Selection::SelectionType Enumeration" o0 T/ Q, S4 P6 D
        // Uncomment or combine the desired types9 [! o' p" _5 s/ L+ \
        std::vector<Selection::SelectionType> typeArray(1);
& @7 ?8 x, l: g( s  O* W  p( b        typeArray[0] = Selection::SelectionTypeAll;3 `/ @5 v# ~5 V$ t* D9 [3 w
        /*- |5 @, `0 T; ~9 M  V
        typeArray[0] = Selection::SelectionTypeFeatures;
% V& M  n; Z% W; n' |7 H        typeArray[0] = Selection::SelectionTypeCurves;
1 [4 M9 x1 a  p' R. x, i! I        typeArray[0] = Selection::SelectionTypeFaces;
+ ]  l( d6 h) R2 h        typeArray[0] = Selection::SelectionTypeEdges;; v( o: x) i* l4 Y+ s
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;! w4 B! i0 L: {7 E0 c: s
        */# U5 q2 L' n; A6 |
        Point3d cursor;$ a& `' Z% B1 }; T- S2 m
        TaggedObject *object;
& M2 j$ B" G0 Z' x+ y* K2 }% p. d4 N: O  Q* [" N7 E, ~
# B/ ?" z; C. K" U
        // Select objects using filter defined by type array
0 p2 H% U2 i. j1 Z* s        Selection::Response res = selmgr->SelectTaggedObject(
$ e$ M) z+ y+ l2 W8 R                        message, title, scope, keep_highlighted,
( p( f  R$ V. ?& [                        typeArray, &object, &cursor );
; U! W7 c) C2 R5 `, c4 B/ f1 c3 J. d( T4 ^3 G4 S7 g, r0 H. Y

; T/ }5 O$ h4 j; t        if( res == Selection::ResponseObjectSelected )
) }: _4 i5 ~  I  k. ^        {
% u9 f. c: h& K# w9 u. z' `" ?) o                return object;6 P6 Q! q. r0 E; P
        }# G6 O7 _5 X% d
        return 0;8 Y9 Q5 Y* P. p& l7 c# J
}
; u  o: ?  y5 G
& a( x/ g% z! u
$ d9 `. a- g8 r. _' _- H# {
//------------------------------------------------------------------------------! m8 f1 ]0 L: X+ r( t; F
// Selection any objects+ E0 J) ?* ?# u% i2 B
//------------------------------------------------------------------------------; C& f, C+ }# _+ ]
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()9 o. U( [' w; Q0 H8 f" i( ~
{
* A* E' [0 y. o( \0 d5 q        NXString message("Select any objects:");
( C' [1 B' E2 z* o1 H2 {5 V/ a        NXString title("Select objects");
! E% n  b0 W8 z( W        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
% C# v( W. e6 u; @9 x  e$ a        bool include_features = 0;        
) Y- V! A6 c: Q: A, P% f        bool keep_highlighted = 0;
2 M% i2 k, n8 m8 C        std::vector< NXOpen::TaggedObject * > objectArray;
" `6 K# ?0 h2 S/ m
% w- W5 Z4 O( E

% m7 v4 u& e  k6 Y        // Select any object array% D( K# w, e. v. R/ A$ ~# w* D
        Selection::Response res = selmgr->SelectTaggedObjects(9 O" C  Q7 u" H& \  f
                        message, title, scope, include_features,
$ h5 a; G; Y  `                        keep_highlighted, objectArray );  G* e' \- F2 z# W3 T
9 l9 A% ?5 F: K5 V
2 Z1 t; [( I2 N3 u8 g
        return objectArray;
' [2 U4 B( O" V. m; e# y3 `) x  K* P}
. F6 a) t* k0 w/ c: l
* ]) @  I# n; G/ T" I: p( D2 q' s2 k3 A

$ V5 I5 s3 A9 r
2 k; i3 V9 T3 F5 h

( n& S: F) K# B
1 p) e& X" g7 C) s  Y- J; F$ \. t

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

使用道具 举报

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

本版积分规则

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