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

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

[复制链接]

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

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

admin 楼主

2017-10-25 16:33:48

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
* q' h/ b1 v+ K4 i很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
$ [( M( ?5 S6 J+ V- V  @- M; y如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。5 o: r7 k+ y9 V- i+ Y1 q
一些常见的类型和子类型如下:
$ Y) E& V- @1 t3 H% h QQ截图20171025161410.png
+ Z+ u- Z  T9 I. C7 v, f+ t如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。
( k: g, x+ e  P( l% O, N9 J7 Y实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
; f- }/ m7 ]9 W  G+ U5 z  o( [% @* A( R/ k" h3 n
QQ截图20171025161432.png 4 L' \$ `: X7 d# ]* o1 M
& h/ X6 b- K+ L2 i" G
; [( A" c7 N) J/ u4 p* Z
选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
  g8 ?8 ^- @' a- e/ u; ~: j8 p5 A! U- |" y

& B( R& C) U  p QQ截图20171025162656.png 2 \# r4 `* t, h& P/ F

" P6 ^" ~" O# p7 P" M5 u5 t# Y: |5 Z

) l+ B4 U  V. F# o) k& E对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。) ~+ o2 T5 W+ Q/ w3 Q- Q

" W1 r( Y8 ^1 b+ I
$ n5 l- V, t* x3 tSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);' {; Z! d  g' L, X9 Q
& M5 `+ @4 U, ~& N( E5 m
* A; o( V: D3 n6 ^  H9 @& J
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
# R7 m  x" w5 B* `& M
$ k- p1 p2 K4 d$ E- L, w1 ^7 T. V
AddFilter (int type, int subType, int solidBodyType);3 @6 |5 x7 h0 U* P3 h% C" n

( j  x/ Y9 W6 l) R* U

0 @0 H, L( [, y2 h' V( c5 z对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:. f( H( `: A& N1 @8 m
- M7 \5 a) e2 v

( f( E( C/ K0 o

# G/ N" B( D. T6 ^2 L//------------------------------------------------------------------------------
7 h, w. f1 P$ [2 ^! L# A: i// Selection with mask
2 r- v8 d* E% V. M0 z//------------------------------------------------------------------------------
4 F  A9 a- j! g2 p$ `* L3 v9 iTaggedObject* MyClass::select_by_mask()3 X; c. y0 K$ n+ I' n8 ?
{, \& z) u2 j/ ~1 E$ C
        NXString message("Select an object by mask:");
& j1 T5 A  G' i  E, t+ Q        NXString title("Select object");
) O& C. x/ ?2 g1 v# G0 ~* R        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;6 |& T4 d. \  d( J" O5 Q/ Z
        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;+ V- ]8 z. I( ^  k( s% c
        bool include_features = 0;
) x" ^5 Q3 f4 Q3 h) A% Z        bool keep_highlighted = 0;
1 H- d* @; D/ y" H0 e+ x2 z' q7 T; r0 c, v% g3 x' {
& \5 {# l3 o& y. w5 G
        // Define the mask triple(s), see also uf_object_types.h.
4 B, J" `& m" F" e2 g        // Uncomment or combine the desired mask triples
( a' u$ W6 |4 N$ l) M/ k' I        std::vector<Selection::MaskTriple> maskArray(1);
( {" t; Q3 G3 ]: @& Z        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies; o0 G; q/ ~; V5 x& [
        /*
+ o; L8 M( @/ c$ J  g, w; }        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
( B# Z* i- J) D# o5 P        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges+ ]) G" z! q+ D: s# @. b: x
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
5 `0 O/ G2 j2 W' G4 I6 l        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
. E) U4 S; O3 e6 x& j' g        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects" }8 s( Q- r7 N* N, j
        */, d  P2 O( b! D) t1 i# [
        Point3d cursor;" s: {' K: K! X, p
        TaggedObject *object;2 @' @( w; h# c, I  U2 h2 z

0 E/ Q! C0 v9 B& O
6 `* b  N7 a6 S, d( M
        // Select objects using filter defined by maskArray triples4 }+ s+ b0 c8 G1 O5 k
        Selection::Response res = selmgr->SelectTaggedObject(
9 k& ~6 C7 r. }( K8 k# t                        message, title, scope, action, include_features,
- ~3 n( o' Y& ?            keep_highlighted, maskArray, &object, &cursor );! G! \4 x& b4 ]3 V6 d/ P6 x; S
7 Z/ G; U5 ?. ^+ |& g

: J0 N1 F7 U, B! @3 P( H4 @        if( res == Selection::ResponseObjectSelected )+ |% t4 y+ h6 v
        {2 G3 w9 S, m9 h6 j! C9 R) `
                return object;0 {" X' {9 o5 N% N$ x
        }+ C. f1 L. o/ ~/ L: Y! s7 t
        return 0;
2 w! }0 N, t$ f}
: K: V% _2 D* s% Q6 a: q
: q4 Q1 x1 E: r* c- E( \

! X4 c3 u7 u$ D5 N8 W( b5 ?//------------------------------------------------------------------------------
, E1 `: n9 n1 y+ c' g: ^// Selection with type array/ _# b& ^9 y5 h+ C9 w1 B
//------------------------------------------------------------------------------2 x( V7 P$ N0 _) A, R
TaggedObject* MyClass::select_by_type()2 t5 g+ R, L6 a; T2 e; P
{
; [3 c( V, l( v6 [9 l        NXString message("Select an object by type:");
# c; v, R( |% g( Q7 X5 }        NXString title("Select object");7 N5 T: F  m" V, z* [2 U& \+ ]
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( L8 b7 A+ D2 w) ?% O' T! ~5 S4 K
        bool keep_highlighted = 0;
6 T8 I& \! ]- ?& M. R
9 D4 Q' ~- n, q0 }# x

$ i! T& N  z* G5 h0 ]        // Define type array, see Selection::SelectionType Enumeration* o* d8 A, Z1 a* R% K- V! S: `4 v
        // Uncomment or combine the desired types
; B+ i. H; r! Y, _6 T        std::vector<Selection::SelectionType> typeArray(1);3 c5 @7 p+ R+ r* a
        typeArray[0] = Selection::SelectionTypeAll;
; u- _. W. ~, u$ z        /*
- H; |5 V) b( m        typeArray[0] = Selection::SelectionTypeFeatures;3 ?  d% l6 M( W( G7 R4 I! Z
        typeArray[0] = Selection::SelectionTypeCurves;
; X1 X2 V+ W5 ~$ w1 k- U* g$ G        typeArray[0] = Selection::SelectionTypeFaces;
# u- r6 i  Z- R5 l        typeArray[0] = Selection::SelectionTypeEdges;) L; R( m2 F& Q# i( q
        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;1 D+ I1 H8 t) _1 ^( A( |! V
        */
5 B( S  Z( _) l4 {) [: k        Point3d cursor;
5 z6 i- @7 l& B. ~  ^1 X        TaggedObject *object;
4 {' ~: Y. p3 z6 ?: v# b: F/ a% u

/ i5 d0 X! i0 d3 S7 m        // Select objects using filter defined by type array! o4 J2 L+ s7 H) m' p
        Selection::Response res = selmgr->SelectTaggedObject(
' g- X" M* a" c: F. f                        message, title, scope, keep_highlighted,
0 C, D: C  l+ E9 C+ [                        typeArray, &object, &cursor );
* Y* [, g, R6 Y
1 E- I7 M% n; O6 z) w1 W- e; n
$ ^- \: Y; D6 J/ r4 h
        if( res == Selection::ResponseObjectSelected )
) ]& {9 M* O6 N. R* R* p! I        {
& X3 m. U4 {$ N. p! s4 V3 J" T                return object;! T1 k  \5 g9 B- W2 M
        }0 f4 h* }  V0 {8 V
        return 0;
) A1 N# s, T- |% r" M  F}) `0 v1 T* N$ L5 X! [
) W9 L5 n9 K$ ^9 O

. ]+ o  N! c0 e//------------------------------------------------------------------------------
" E6 L$ d& U2 ?5 x' Y  L6 V// Selection any objects# r( z+ A$ T# c6 p# x; n* D9 k
//------------------------------------------------------------------------------
8 Y6 g" ^1 _9 K' Q1 z: E8 K, Istd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()' [8 h' g! i' |, v
{* \8 j' p6 |- V- S1 p
        NXString message("Select any objects:");
3 B! `/ ^9 ~  B( i" F2 F  h        NXString title("Select objects");
) W& U0 G, @8 w8 z        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 j' s0 n& @. x: s+ [7 p
        bool include_features = 0;        ; q2 D7 y) K& [) G, E( E
        bool keep_highlighted = 0;0 R$ }5 D, S' W% E* F& R# K2 S
        std::vector< NXOpen::TaggedObject * > objectArray;0 Y* b, [- i) S$ }  g
0 {9 l/ b2 V% ]* o- n1 X# p, S

3 R/ H. T3 d$ e: r7 L9 f' v: l: B        // Select any object array
' ^, }9 g2 A2 b0 r4 A, g( m        Selection::Response res = selmgr->SelectTaggedObjects(
: Y7 M% ~1 E  v- P/ i                        message, title, scope, include_features,
$ l# U5 R3 n1 x5 F) c* l- T0 O0 l- A                        keep_highlighted, objectArray );1 Y2 D1 I- S! e, C5 F

' D: M' ~  F% ?, A7 s: K
7 E, n1 x5 p1 D" h/ k
        return objectArray;
6 v$ j5 {& l' q' h( f4 |7 n}
. e* M4 n/ _4 }9 D0 ?) J
* i8 P: G* Z8 H8 @# u
1 h; l4 z9 G+ ~, w+ R; t1 |+ V0 f. N. X6 n. N/ @  O

: d# Y2 J5 z" Y& ~, @: d# J6 m8 x8 U9 Q' p) K4 C* z$ I- \
1 A' w; \4 r: i! e1 r
+ G; h3 n; D; g; n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了