PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
- K; g- P) ~+ e" J: S- Q很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。
4 G% h! b. Y. O/ r/ J2 E如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
/ k& T9 f6 K! n一些常见的类型和子类型如下:7 s0 H5 w. L/ @8 r1 ~$ v
QQ截图20171025161410.png / `3 s0 d* H- g5 @/ r* v( c- f
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。  r6 `& P) O1 b; s
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。
& }$ M3 P2 V; T* C' c1 i
/ t' Y( y* w0 a QQ截图20171025161432.png
# S6 x; m, H! f
5 g$ z# W3 O) ~- s- L+ Z9 J' s0 P

% X9 G  l) p- o2 m# Z5 }2 f选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
) a8 h9 T3 o) Y5 [/ D/ d  j% }6 o  l8 ]# B! E0 \' K2 i3 Z5 w
/ `: ]. M$ j2 q3 D
QQ截图20171025162656.png % I9 ?: y, b& }. \% `* d
( @/ g6 o5 n( h2 o1 g* b

& M! g) r/ p: m6 `对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。1 e2 E! |! R6 Y6 c
0 h: E3 K# U% w7 P- j

) R3 t0 a6 l1 ~( t5 |6 ?- TSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);1 ?& K: S' K* R5 S$ O
8 D9 W) r) Z3 v3 U  E

: _( m) D6 c* M6 v; ?AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
2 v/ c' L- J9 P! e4 ]
: @- Z, }; ]9 \& G% a- f' w+ A$ P4 _3 R4 @; ~( G
AddFilter (int type, int subType, int solidBodyType);
1 G2 M8 m: U$ f/ M( X9 S( @& ], \  R- s

, t. @  Y3 M2 s: X对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:
2 a# E" |: v. r/ [' r7 ?, i  _7 y( r4 D: S- E& _

' b. g  Q! }5 T' e9 @

7 _, p5 A8 R' u- y& Q//------------------------------------------------------------------------------; J& S/ T8 L4 Q$ }, G
// Selection with mask
' k, D% K3 \1 E$ X" n//------------------------------------------------------------------------------" J- ^/ Y5 u% q) c: U
TaggedObject* MyClass::select_by_mask()
5 E9 g6 f- ?$ u% M' P{- d+ x+ n1 K* K# e
        NXString message("Select an object by mask:");
, P4 i7 K: t; ?' ~4 ^4 F4 O8 @        NXString title("Select object");+ I" f% F% \6 G$ K( N; G2 l0 f+ }6 }
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
. ]6 E, k/ }) Z* P( V) I' n        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
3 @; Q; I4 q% I' Q; j        bool include_features = 0;
: x+ @: R: m' m9 b6 p        bool keep_highlighted = 0;
3 [" E7 I- y( f: E& l9 G
6 h2 D, |: C! ?9 H6 F' K

& `* \7 T5 G/ H( f" ^0 W        // Define the mask triple(s), see also uf_object_types.h.
+ r5 h3 t6 P8 u) S% a        // Uncomment or combine the desired mask triples
/ I' {1 \) C/ ]: I# U/ u        std::vector<Selection::MaskTriple> maskArray(1);
7 |! ?  h# O" E& o2 u        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies8 C0 |0 u+ T! ^9 @
        /*
/ L7 @5 X& A1 V+ M        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces) Z" C% q0 [; L0 M1 @- T
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges3 ^% ^0 W, G0 Y; j
        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components! F' F$ k8 W7 f7 S% M6 l8 r( _
        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
, \' \  h" u; L# F! I2 b' H# N  l        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects7 O. p, W! V5 r6 J2 E. d# G
        */2 R7 c8 x# R' e) }* e( [$ C! p
        Point3d cursor;
  u" I: C! @9 e) W: K2 [5 }        TaggedObject *object;/ B- x3 P, ~5 @3 ]( g( A; m

# ^# h& l# D' c1 \; f

5 W$ ~* r. V' l        // Select objects using filter defined by maskArray triples
5 w/ ?' C+ g# G        Selection::Response res = selmgr->SelectTaggedObject(
6 r: @8 v# s$ j7 ~$ q: P( I7 Y                        message, title, scope, action, include_features,( k  I" }% q5 H
            keep_highlighted, maskArray, &object, &cursor );  U9 O/ g5 \: ~  X7 m+ E% R

8 V$ w& v( Y1 ]3 A. o# \  E

5 j- O2 t* U8 a+ a0 `) w8 C        if( res == Selection::ResponseObjectSelected )6 g* _) a2 x3 g0 C2 _
        {
6 u6 K: V, X; I% q' E                return object;
1 C0 P. T$ }& u9 Z* j        }
: n$ z8 U9 j- \6 }; Z$ o3 U3 @        return 0;4 Y1 W( z' @$ A6 A- {3 W; {
}
0 @2 [! a. ~, Y, h8 [# n5 P9 l* P* T6 [* @# J0 G' w0 [" h

; v# D* _1 \% W3 y//------------------------------------------------------------------------------
0 j0 y2 \5 V3 r" y// Selection with type array
: G4 p  d, C7 r% b* Z/ m//------------------------------------------------------------------------------: h7 J# Y9 q* K# v6 R/ V
TaggedObject* MyClass::select_by_type()
& V3 |1 x$ {. x{
! b2 i: z7 i: }        NXString message("Select an object by type:");
8 F) U# B  U" B. z8 O/ D& }3 ~        NXString title("Select object");7 W, I) Z" h; A3 I+ A% t9 c+ [
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
( l7 i2 e% r( k2 F        bool keep_highlighted = 0;$ \$ _1 l: s% Q( O
9 R, S5 S: B! V& g
% B! g2 E. G9 `) E
        // Define type array, see Selection::SelectionType Enumeration
8 m) \- K: [' R; e. `; u        // Uncomment or combine the desired types; ?/ w( l- @0 S% o9 f# P
        std::vector<Selection::SelectionType> typeArray(1);# Y; V' Z5 b* R( Z( W; U
        typeArray[0] = Selection::SelectionTypeAll;4 v: d7 c  Y7 \. B! o5 i" m' {
        /*' K: A, w+ F+ W' \/ p
        typeArray[0] = Selection::SelectionTypeFeatures;+ r! Y" g4 h5 b. T3 p
        typeArray[0] = Selection::SelectionTypeCurves;4 k" m# C8 T! [3 i. R: a9 L
        typeArray[0] = Selection::SelectionTypeFaces;
4 M& K  X! [# Z  V! I        typeArray[0] = Selection::SelectionTypeEdges;
$ P, s5 U1 b9 L        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;
3 `% g  H8 l5 |4 A        */
8 y. B& U& C8 `# b5 \, q1 j4 k        Point3d cursor;2 J" [# e) r# t# U. h8 L0 P0 k
        TaggedObject *object;
& k0 i, W2 x% B/ {6 M
0 \) U' _, G2 v/ S6 T# g6 `0 a5 _/ w8 z

3 C7 f( b6 h& x1 M+ J        // Select objects using filter defined by type array
1 m3 z7 j; F. n& y4 [& [0 D        Selection::Response res = selmgr->SelectTaggedObject(! T2 F: [$ l9 \7 C; {0 t2 o  D/ R
                        message, title, scope, keep_highlighted,   n/ k* }; c" O2 p: ?% m
                        typeArray, &object, &cursor );
2 O- W& T4 `3 ^9 m* \2 s+ g. x) ?( q( A& u  o+ k3 @! w

, E; y- k# M" Q- U* F" e4 M        if( res == Selection::ResponseObjectSelected ): q( w3 b. L' ^5 i+ W$ c% f
        {- y- s: O+ _; q
                return object;
$ [9 d" z1 S% }+ i  j  i+ k        }
( g% Z6 C  ^/ J- C, {/ O        return 0;
. ~! x( ~  |  H2 x& W9 y}
0 y3 k/ e0 ]1 y4 Y) h8 f9 ~+ a- J4 u
8 y# b( `* h4 x8 H$ C
//------------------------------------------------------------------------------$ W. P, K0 B) Q* _- I$ D( S
// Selection any objects
' s! d0 f1 |. F6 p( e6 R//------------------------------------------------------------------------------
* u" [0 K2 N9 M6 h( T0 y& Mstd::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()
' b) c! U- _+ H* h% k4 V{) \: ~" @. b$ G5 B9 y8 q
        NXString message("Select any objects:");4 d7 J. p0 m. c3 `4 Z
        NXString title("Select objects");6 N: h* }% h8 o
        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
- c% _1 F; d% w2 b6 S' L& k9 v        bool include_features = 0;        
+ W! A  e, B3 X& Q3 R7 y8 m% L- o        bool keep_highlighted = 0;
5 i8 R  w+ \& [. }7 t# _9 v3 g6 H        std::vector< NXOpen::TaggedObject * > objectArray;
* p4 {! c8 i3 {1 a. |0 X% |% q  t4 v' |% C

& y2 r% [0 r3 y2 }4 a- \! _- a4 ]2 a( g        // Select any object array
. ^4 \) k0 \/ Y& u1 R7 ]; \& g        Selection::Response res = selmgr->SelectTaggedObjects(& g9 h" g3 ]! n* i/ Y% r
                        message, title, scope, include_features,
* ]; s9 w+ S5 U! e0 `  @* j                        keep_highlighted, objectArray );) J. o) ?" f$ v" e  z* p
7 e) L! ^; {) M1 \

: b8 x7 O& k+ d& _1 ]1 A        return objectArray;4 e; c# Y0 u$ w
}
3 v5 q& l  R, j; Z; c* e& O% I% e/ I3 \
! U! _  L2 a! N. }4 I7 B

, e! v# @8 I# v( q. v

/ l, ]5 r' f7 e. A# m1 l* n8 G( h8 n+ a7 i

9 B% N' C4 b  M2 ]3 V2 V  E2 Q9 y/ _4 B6 K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了