PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解/ }9 Y3 \4 v  t# i0 Z$ Z) g2 U3 e
很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。, Z, o8 E  p9 h4 h
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。0 v' w1 ^! \; T) k
一些常见的类型和子类型如下:
: Z" O' Y# w+ P QQ截图20171025161410.png
' a9 W. j9 P" ^6 u  d1 _如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。% \/ p! p, `' [0 L4 o
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
5 X1 i) `- {/ W# R* w8 M' U) z
+ p, [, z* R! S; ]& | QQ截图20171025161432.png
4 d1 t0 [- h+ `; ^$ H' U: k4 X; h* p1 m; m  E  `& s

1 e. B/ I8 ^% E% j; G- J选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。: [) _; ?8 X  F7 |& {
6 {& P, a7 W5 u

" M$ l+ J8 f0 d0 E$ [8 ~* u; v+ }2 w; i QQ截图20171025162656.png * `+ ]' ?+ s0 p* I' W/ [
/ s* s. }( |: h$ x7 m( f0 `( z9 R

% H0 _9 N3 E6 l2 g对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。* p/ o; o" z1 H; |* A
5 B$ b, @$ @; v
" m9 S+ M. W8 I
SetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
# L$ d* m" l# A( a
# S; F3 `" Y( D/ p+ j; h& x) c7 V( R( i& J; h$ i; d1 i# |1 y
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);! N; Q  b7 l' l+ x6 K  P- Y# z

; H3 x; k, |, s1 E& `, N  R1 ?$ J5 v7 Y; G* ^6 l# S' @
AddFilter (int type, int subType, int solidBodyType);
$ n" O( [5 ?9 _3 R5 ^
; R0 A  U! Z4 E. e; {* S$ t" `& M
' p. d  s! i% T
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:+ B5 {1 v( k& c! h5 W9 x

$ U  S0 l* c2 w# g) x5 n; B5 w! p/ j& k
2 q! }; Q& S" t  h

+ [7 p2 o0 q5 `4 O6 l, Z//------------------------------------------------------------------------------
" W/ L6 ~  T8 n; N7 A0 M& F// Selection with mask
. q/ H1 M7 {+ L) l& @/ O; J//------------------------------------------------------------------------------- u5 h- @0 r- ]3 t$ F; B
TaggedObject* MyClass::select_by_mask()
- w3 W5 s8 V5 \( m* q! |% h{
/ W, U& D4 x1 P        NXString message("Select an object by mask:");5 [4 h% j) ?4 c
        NXString title("Select object");  ^) M% Q. w# r' x1 X
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;9 N: f( T2 f, d$ n
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;; @4 b% h$ U  q- U( F/ s5 R
        bool include_features = 0;
( S0 \4 k. Z2 m* P2 |        bool keep_highlighted = 0;% J2 b+ f' t7 g+ N

( \$ S, F8 G1 t; _+ p8 W
' l; I1 K% I0 t6 H* j7 N" U
        // Define the mask triple(s), see also uf_object_types.h.
3 a6 _6 Q* Q6 \. n! A        // Uncomment or combine the desired mask triples
. s& [, K  ~# X6 N% P3 ~5 ^# x        std::vector<Selection::MaskTriple> maskArray(1);
0 p7 Z9 k4 _# ~        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
' g1 j4 Z/ z) C+ u, v; t        /*% R+ g$ D3 b: h: W
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
, v* X8 \& Y; z$ I9 A! |# s        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges  Q, K+ Q0 _8 s* I6 k
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
, Y% m8 o" e3 ^        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines  }: a9 d  \9 ?' P
        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
( e) _; I. l6 F: {        */
- j; K* t( P3 `* d. c# E3 ^  T        Point3d cursor;6 N3 N. }% T/ m4 t# q6 v* x2 [7 k3 B. T
        TaggedObject *object;/ Y4 w' b. ~' C- p" ?

' K8 [$ M8 D1 ~. ^. W; j

2 D# y# |; t, _4 {- L2 F: I        // Select objects using filter defined by maskArray triples
! r" v7 N, D7 P/ a  U2 r2 u1 J        Selection::Response res = selmgr->SelectTaggedObject(; J! r5 Q, d7 r
                        message, title, scope, action, include_features,  _5 w" d$ j4 Z
            keep_highlighted, maskArray, &object, &cursor );; h- U% V5 n, Z
$ @6 R' d' Q3 h( `- @+ J$ r6 a; v/ V

& O3 |7 H0 i' f2 u7 k) @' X) O        if( res == Selection::ResponseObjectSelected )
8 g* R/ Q$ w7 @. x4 v* s        {
4 C' {; @2 [. Q6 s# ~2 j                return object;5 i, ?! ]- ^0 M9 L- _4 X
        }
* m& _! R! a# {. Q        return 0;5 g; E! a, o; j: O) l. X
}3 y! J! ~. ]; |3 H. I2 g

: Y. x* f+ u4 O! ~

$ d1 Y( {5 O( R5 i* e//------------------------------------------------------------------------------  g: ^' C4 }7 J$ _
// Selection with type array
1 |$ |3 Z$ H7 Z+ M; F" t5 t//------------------------------------------------------------------------------0 n/ M' j( z; M; s3 p; s  X
TaggedObject* MyClass::select_by_type()
' W- ~4 b: t  k. v" q3 X( K$ r{
& a3 X% X6 ?6 ]8 ~# C( X9 z# J        NXString message("Select an object by type:");
/ ]% s- Z. g) P- Q& j        NXString title("Select object");# x! {( L# c' k& ]
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
9 V# w7 ]4 \7 n% w. ^; f        bool keep_highlighted = 0;
( L- H: ], D. u! a; G  v$ T8 }, |- h! N# \6 s" z) C

: o. p2 Z& g2 ]7 B% L* B& y8 |        // Define type array, see Selection::SelectionType Enumeration4 S3 G: x7 L, X& z/ X3 R! P
        // Uncomment or combine the desired types3 v+ N* l& s! G1 A, J
        std::vector<Selection::SelectionType> typeArray(1);
- E* U: y. J3 X        typeArray[0] = Selection::SelectionTypeAll;
) U5 E+ l4 M7 L7 N( G9 l        /*9 `9 m) V8 N  n
        typeArray[0] = Selection::SelectionTypeFeatures;
4 c" v0 X* }) D5 G& w/ e        typeArray[0] = Selection::SelectionTypeCurves;
$ N: W. V8 g) s2 O9 B, D        typeArray[0] = Selection::SelectionTypeFaces;5 R1 r( V2 u8 q8 n
        typeArray[0] = Selection::SelectionTypeEdges;; y" R; \0 L: _. Q; E: z  D7 A. u
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
/ W8 j1 K& i. O) I- @! k3 d9 d' D9 S- V+ u" `        */4 J$ H. ]4 `  ~) T+ j* \
        Point3d cursor;
2 v' Z/ E' o2 v1 D% D% F& B        TaggedObject *object;$ h$ M. l: Z- N' k4 p( @1 I  {  s* C+ S
. u- \9 u* }! H- V% |5 |

! F) Z! x$ ^3 Y$ r        // Select objects using filter defined by type array
: |7 s: u' y/ ]1 q% h, a3 n# L        Selection::Response res = selmgr->SelectTaggedObject(. D: |" Z7 r0 N  G5 |
                        message, title, scope, keep_highlighted,
( t2 H, m2 E% N                        typeArray, &object, &cursor );/ {+ D" V  v/ j

' l8 D# }* d. M, l

2 R5 C& d/ ]; L9 W7 ?% `        if( res == Selection::ResponseObjectSelected )
3 j. H1 X4 M) c' ]- I        {
8 a7 W% i* S5 Y9 a% w4 h! o* Z2 v                return object;7 Q' b/ ?5 f9 g2 {; g/ C2 F" L- D5 d
        }4 p- H3 m; U2 f' v6 R2 Y: A
        return 0;# a8 q0 ~8 G" d/ G- P+ {$ b
}- W- ?1 ~$ Q% d9 I/ ?) E( l
+ P# H) F1 o" S' j1 I: U
! s; f2 F+ `3 V+ x/ d3 \. F* o
//------------------------------------------------------------------------------* e  i; S$ x) ~2 P3 W' W) u1 X0 l3 E$ P' u
// Selection any objects
, k8 @6 Y. G$ r6 L6 c' L5 h//------------------------------------------------------------------------------
  z$ s9 s' q7 ^6 A$ t9 Nstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
7 I: M% E' k2 p! X+ I: ~' a{9 g  h( e, R/ ^
        NXString message("Select any objects:");
! k" o" u" c" x: \3 H! H        NXString title("Select objects");' F8 x& ?! [! E7 z6 c( X  ]$ m4 z
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
4 `5 c/ B- \6 ]! ^/ \, V        bool include_features = 0;        
, r; X" l. {& j" [        bool keep_highlighted = 0;" X/ P+ F/ f* d- X, K# i
        std::vector< NXOpen::TaggedObject * > objectArray;
$ L" e9 u+ M, {( o1 M( t6 Y
) C4 L$ t% p5 g+ }' d0 O6 Z
) t1 h! K4 X! e; ^+ S
        // Select any object array9 ~& g) Z* j( G  D! c
        Selection::Response res = selmgr->SelectTaggedObjects(
2 {2 x+ {( E' x2 d                        message, title, scope, include_features, - L, K# T! u9 v  ~* n* f9 m
                        keep_highlighted, objectArray );! C6 _$ R" r; L) U
% I2 ?/ \1 t/ v" h5 o( M& W# e
8 B# H5 ]2 a! k& `
        return objectArray;
7 F+ ]' ]+ z2 m# P7 D( M  Y$ a}
- L2 k2 _& p# L: Q$ d
& V  V. C; b% c2 b1 `4 D& u+ j- ~" F! Y, P6 L( c9 N

  ^: e9 J. i3 U  d
4 I& n4 [: P5 ^0 F+ M
, g) k* C5 C) |- a  g4 ^' p2 U

$ R! a6 u+ c# A  X
& C8 w5 u% B( \  k* ~2 |# D. a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了