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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
& n0 ], n% l; O* Y+ _% F" K很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
: g2 |  N; U& B9 s' b7 }. Z如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
* ~8 \1 O! s- J一些常见的类型和子类型如下:7 \* a8 Z- T/ \$ V9 F# H
QQ截图20171025161410.png ' S' H' E: M1 U: u  w$ u
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。2 L$ f( ]6 M7 ~9 v
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。& k( f/ ~+ v0 m3 C/ Q: P2 W
& Q% Y$ c, K6 v5 v, c0 y0 m
QQ截图20171025161432.png
, O+ M" ]- D: w/ x
& ]% b" n6 W, U

8 e( C/ \) Z0 G. h! B选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。& T9 E1 U9 J4 L: i' Q  h
" u5 A' a: T5 [4 n$ D9 x

2 H- \- H4 @! z QQ截图20171025162656.png
: Q% H; p1 y* a; A; s1 l
7 j5 J& A+ R  G% n( C7 _
- M: X3 a# T, d1 c; P# O
对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。; W, x! G* |6 k

3 L9 {2 Z9 _3 i1 K) m# m6 @1 ?4 c0 B2 J
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);7 z( g& M: m, O! Q& i

& @' C$ V! `- ?7 _% w  P: f2 R) ~2 ~! ~' K) @# t
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
+ t# m( d. N3 h0 D/ H
  R, Q: U( L2 `2 H6 A$ h- X- |7 y0 a+ }0 h3 e6 x7 y+ M
AddFilter (int type, int subType, int solidBodyType);; |6 F8 n! t( {

" ?1 m0 V: K4 u

$ ^- M6 Y; a1 S0 c1 c对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
5 n( P' N" x6 L
% d$ g0 {% d( J. ~/ p2 L4 O
7 n$ q2 t: V( r$ u

; ^& W. d0 f+ V  I/ I1 L, M//------------------------------------------------------------------------------
, @# }! t, ^+ {$ g/ s1 @// Selection with mask
( J! P! Y0 ?; G7 T+ \//------------------------------------------------------------------------------3 {, E9 e) N' ]6 g% A( r. B
TaggedObject* MyClass::select_by_mask()
) t* o0 U1 H! A8 ~{
6 |2 `4 Z$ l. @, X2 t3 f$ U* R6 {        NXString message("Select an object by mask:");
. k' R5 ^5 T* w$ G$ ~% {2 C! A        NXString title("Select object");
( j9 S% Q8 u" i* w        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;) V1 T7 J' g9 `" b! w, [7 |$ D& e) \
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
, w" m; q$ |9 Q3 I# m        bool include_features = 0;7 B: k& c  S* P, h+ K0 N3 B1 k2 P
        bool keep_highlighted = 0;
1 ~0 V0 {, w5 _  X7 D+ _, v' {  Y' Z8 Y6 @2 ?

1 U# R: y/ u- Y        // Define the mask triple(s), see also uf_object_types.h.
7 q' a' w; n6 K  X1 M& p4 d9 n8 y        // Uncomment or combine the desired mask triples
5 e) k; [8 F! i3 P$ I        std::vector<Selection::MaskTriple> maskArray(1);$ l6 a% g8 ~. j# a6 B) H
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
" o; F- [1 O0 ]$ |' x: R        /*  w* L/ b6 v; k/ d% P. S0 Z1 \6 @
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces+ s1 g% N! `3 v' i
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
2 Q4 {3 w6 Y$ \2 W8 F        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components/ _. k1 Q4 N% T. n' O* d! y5 X5 k. V
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
3 l; ~+ ^/ h5 _9 ^- n$ u        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
: |7 r) o  Z  l1 W        */$ f% ?0 {. k: f
        Point3d cursor;6 L# i: \+ f9 a) L0 {0 v( t" E
        TaggedObject *object;3 S1 L7 K& M" ?" p, F
; Z% ^+ B- A% t* W  o
& U8 Y& Q/ p; v; A
        // Select objects using filter defined by maskArray triples
. j2 k1 h' D, F. s* G        Selection::Response res = selmgr->SelectTaggedObject(
$ V0 ^4 b% L' m! `) m                        message, title, scope, action, include_features,( Z1 b# q5 S3 @& Z0 B
            keep_highlighted, maskArray, &object, &cursor );  P2 ~# s0 N' v2 w7 w% L! T7 |

% A! D" R& T* f, S0 o& j

- x8 A6 {* t) k- K; R  [+ X        if( res == Selection::ResponseObjectSelected )( h2 l5 B- ~/ g1 W- u
        {
' t' Y, u# H: r& z+ {                return object;
" Q, a' R, C1 S  c# ^# A/ d        }" O& Y# ^  h- I, P0 A5 {9 F& j5 @
        return 0;# ]; W/ c7 B- ]+ H3 T+ @7 e
}
" d. `/ t1 f( r4 o' ^, \+ P" Y- U
7 ]% T# k9 _5 L0 @# f& e
! l4 @- `5 W9 l  J& n
//------------------------------------------------------------------------------
  m: |8 z, j! Q# I; M// Selection with type array
8 n  F! _6 K0 o' U5 W//------------------------------------------------------------------------------
. a1 V0 [! {- d' ^TaggedObject* MyClass::select_by_type()
' l( }- Q! Y* P4 r, M" a! l{7 ?- X  [  Y. C7 [
        NXString message("Select an object by type:");
8 _- f& \0 B  P' _        NXString title("Select object");
/ T* r% p) Z$ i- F9 ^4 e        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;  t1 A# h" j6 ]: x- ^' _
        bool keep_highlighted = 0;- n- N! n. ]6 j8 q( W

( e5 m$ T* E0 B2 k

( j6 Z' R1 a1 N        // Define type array, see Selection::SelectionType Enumeration
0 r  W% |' d' Q( i# a! s3 D        // Uncomment or combine the desired types; l# |; i2 a7 \
        std::vector<Selection::SelectionType> typeArray(1);
# m8 X5 ^7 Y! N  o  c1 t4 h        typeArray[0] = Selection::SelectionTypeAll;: s. j8 ]; {/ Y: t2 s! W
        /*, q. @4 W  \# h/ k( C( V
        typeArray[0] = Selection::SelectionTypeFeatures;* V; z! e. M) p1 e, c' l
        typeArray[0] = Selection::SelectionTypeCurves;6 }* [: H" O: q; ?* a
        typeArray[0] = Selection::SelectionTypeFaces;
7 f9 ]7 |* P6 |% F* A& _: r        typeArray[0] = Selection::SelectionTypeEdges;
& m9 p! j) f: y1 C        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
; k5 C. |: a& j+ \7 C        */
  s, R& B" x, }( Y0 M        Point3d cursor;- V* @) g5 @. ^2 W
        TaggedObject *object;; U+ m; n$ h; v. f3 {$ |
1 h; G8 M( L8 m5 u- ~4 r7 J8 K4 l
! V: g2 V/ W; @; v2 @
        // Select objects using filter defined by type array5 z5 X7 s8 W3 a/ n! m, X
        Selection::Response res = selmgr->SelectTaggedObject(
( @' k  F3 W9 k% M                        message, title, scope, keep_highlighted,
+ ~1 V' c/ a. \                        typeArray, &object, &cursor );5 v4 u0 b( ?! V6 w2 S
6 Y6 Q3 o* ^, n9 |  o% }. N' R
" J6 c" b- q8 b' ?7 m( }  ^% L
        if( res == Selection::ResponseObjectSelected )" K8 N/ U* F* l
        {, B" R2 i. J7 Z" X" U6 U
                return object;
7 G4 ?9 y  ^% `9 |" [5 L        }
0 {' Q  `) G2 u+ S0 b* r4 T        return 0;/ T" }* N$ o) P/ `. a
}( d% c* b5 [+ n" z& e

4 E; c3 Z7 O0 N6 Z

) N* P6 l) f% ]5 H! ~9 p//------------------------------------------------------------------------------
% U$ s8 v  Z! ]0 H3 k// Selection any objects
, S4 K. M/ i2 q% w% n9 b//------------------------------------------------------------------------------
3 M; E7 T7 j+ h+ ]+ zstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
$ V- y" }) y6 u{
* f6 J3 O, F$ N1 {# O4 a) l        NXString message("Select any objects:");
/ v# k: s; f$ p$ J        NXString title("Select objects");' q$ l3 p4 t) K+ @) A" q; L
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 I- |9 i- f# w% [8 D1 J+ k( M
        bool include_features = 0;        
5 k) N% {5 m. J! t0 b        bool keep_highlighted = 0;
  h0 U) c) ?' _        std::vector< NXOpen::TaggedObject * > objectArray;
! t. ~! O+ `$ |4 ]" C
* ?) D7 M7 ^. ~" }; L

) F' f' O! ?1 ^        // Select any object array2 \7 u" ~% U, w0 F5 ^
        Selection::Response res = selmgr->SelectTaggedObjects(* T& t' t5 h* F/ t3 u$ U
                        message, title, scope, include_features,
- d4 j6 Z9 B( Y& I                        keep_highlighted, objectArray );) A' f/ G$ F% u; D
2 V, B" F8 O; O0 E* p

6 U* c/ i# Y% [# x' f        return objectArray;
: @* \+ b7 P9 S$ f, h0 j}; w4 i% C4 W+ P' B& X6 o9 [5 I
$ M# p0 n! L; G0 b1 |9 N

  g) g# a3 i, P1 n+ ^" I7 z" s6 O7 s/ M" g& d4 d
4 Q4 g1 x5 A! h0 @4 T2 I  {

5 D0 t4 U" w9 q/ O/ c" e$ k

# Q; [+ @& p4 k3 h' d1 K) M: t+ l
, \) a; h7 q1 \0 r0 A' m1 ~/ S
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了