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

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

[复制链接]

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

2471

主题

1276

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
关于NX二次开发中选择对象mask triple的详细讲解
) |) L2 V- g0 y4 r" X! y) O4 ^8 W( a很多人对这个可能不是太了解,在NX中选择对象,是通过这个进行过滤的 mask triple,你可以翻译成掩码三元组。( A9 v8 I" P% j. Y' k' o
如果您需要更多地控制要选择的对象类型,可以在Selection对象上使用其他SelectTaggedObject重载方法。 这些方法使用掩码三元组来特定要选择的对象的类型。 Mask三元组是一个名为MaskTriple的结构中的三个整数。 该结构的部分是称为Type,Subtype和SolidBodySubtype的整数。 NXOpen.UF.UFConstants类包含NX Open中使用的标记整数常量,其中一些常量是掩码的部分。 通常,您设置类型Type以选择特定类型的对象,而Subtype则选择具有特定属性的该类型的对象。 掩码三元组中的类型和子类型通常对应于对象的类型和子类型。 除了实体几何类型和其他特殊对象类型之外,SolidBodySubtype通常为0,它代表另一个细节子类型。
9 N( v2 o% z5 o% s2 l% U6 f. F一些常见的类型和子类型如下:. @+ L! _5 d% M# ^
QQ截图20171025161410.png ! O# N& Z* y' Q" X; L! m6 @9 E
如果要选择特定类型的所有对象,可以使用特殊值UF_all_subtype作为掩码三重的子类型。% q( Z7 I+ R7 E* i
实体或片体(体,面和边)的元素的三元组使用UF_solid_type类型,子类型为0,并使用SolidBodyType来指定几何类型。 下表列出了体或片体上不同类型几何体的一些SolidBodySubtype值。% x" C; J1 A# |1 H# W0 P

# ?' y: s* v1 V3 V2 G5 _" u- P QQ截图20171025161432.png 2 ]8 }8 p3 Q1 I0 X5 Q* E+ P
# ]9 H6 R0 m& Y# B

5 ]( ?& Z$ ?8 A/ L) @, X* R选择不外乎通过SelectTaggedObject(单选) SelectTaggedObjects(多选)或者block styler的选择类型进行选择。所有的内容里面都有相关类型的限定功能。
9 w: L- z! b9 z2 b: ]& r
2 P+ L* K- w0 T7 [3 {! ^
8 t- p( B& v! y8 T
QQ截图20171025162656.png - }) [$ W4 T' ^% {. p5 m

  J# u. p; E: }- ?4 X/ Z

' r, z; G1 o0 t3 m) N' ]) F对于block UI的选取,只要通过控件的block ID 直接设置 SetSelectionFilter 或者通过AddFilter 方法实现,注意这里面的mask triples 或者type subtype solidbodytype都是我们前面提到的,直接赋值即可。
' f- W4 ?. W; K% ?$ N; O' d5 b$ c3 m
; ]* s3 n+ P$ \/ U+ _6 z' z
& \$ s" X" L1 L. K7 j) r! ]. oSetSelectionFilter (NXOpen::Selection::SelectionAction maskAction, const std::vector< NXOpen::Selection::MaskTriple > &maskTriples);
3 K; K4 U; ~  ?2 T; Z  p6 t' j- O: ], i* o, v/ c
1 V- ?1 Y) {8 H" Q
AddFilter (NXOpen::BlockStyler::SelectObject::FilterType filterTypes);
  R3 B; J4 P4 R) e5 i% j) F
4 N) |. v$ G1 I' A9 ~
, V* |5 L- I# e# J. {7 v% u1 {AddFilter (int type, int subType, int solidBodyType);4 X* R( i2 n; ?# T1 U8 r
/ K8 I' U1 Y6 a, |. {! r
; b1 I4 p) ?  M+ W; q9 ?: I5 W6 d
对于单选和多选大部分都是通过SelectTaggedObject和SelectTaggedObjects的函数重载实现,方法基本都差不多,代码参考如下:6 d3 r& W2 n8 D$ W% R
; j- ~8 y* t  V* e8 l- b

( j2 x8 e  J8 W+ r

. g2 b( Q% r: [2 ~6 I0 n2 ^//------------------------------------------------------------------------------  @) b0 E4 x2 ^+ c
// Selection with mask6 w+ X! ^9 r. L
//------------------------------------------------------------------------------& v' S7 z2 y' d
TaggedObject* MyClass::select_by_mask()$ O! a6 R* Y& O
{6 p) ~; L  K& G; |- M% P
        NXString message("Select an object by mask:");
$ X8 U) Q. }* p5 N4 O7 ?; A* L# {        NXString title("Select object");
, U0 W$ E- [' _/ o. D        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
6 W: S8 n' s/ U) t' t        Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;1 t) x# [$ e8 C/ o2 {8 o
        bool include_features = 0;4 i( ?* L1 ?  H! x5 R' K/ n4 ]
        bool keep_highlighted = 0;
* f- |, g0 I, J6 r8 c. h$ P$ {- Y5 v# m
  O1 T/ {# n# a0 N+ V3 F! ~
        // Define the mask triple(s), see also uf_object_types.h.
% m( i' r& V* U; r0 @/ J        // Uncomment or combine the desired mask triples
- N9 g: l0 p* N' E# ]( u) q        std::vector<Selection::MaskTriple> maskArray(1);
4 O, B, X9 ]1 @7 a" i        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies
; [$ F+ U5 ]# V( Z  X        /*. _) h& l* w) s4 _
        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces
: E& W# V1 m+ D- T0 `        maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges
! t2 _" p5 n* r) h        maskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components
9 l$ T6 `* o9 x5 ]- A0 U        maskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines
' Z2 l! T* z) c7 j        maskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects
7 H& g) V) r0 Q  V8 D        */
- B+ `" Z4 e0 U% w: ^        Point3d cursor;
( E0 r; {" Q" W8 e! i  D/ ]6 i. T1 s        TaggedObject *object;7 E6 n! b6 ?1 c; C2 y7 }
' S+ l4 u5 M- v9 c$ M: f+ C# u0 p/ _

8 b% m  R7 K9 C! k. M        // Select objects using filter defined by maskArray triples6 f' _, ^2 Z7 \; Z& r0 J; ^/ y
        Selection::Response res = selmgr->SelectTaggedObject(
3 q" c! f" j; M                        message, title, scope, action, include_features,9 `2 [. a, z8 Y/ r4 a* D' t$ u
            keep_highlighted, maskArray, &object, &cursor );3 Z- N- y5 f9 h5 y( l

- P; x0 Z9 D; T$ b% J
, c8 R6 S6 n2 E' j' \
        if( res == Selection::ResponseObjectSelected )1 K8 a8 a& O; _3 B
        {
) H- y# N  I( l. o2 g8 E                return object;4 f9 k8 I7 W$ ~, {; |* \
        }
5 S: U* K4 E4 K& |1 Z: M        return 0;
$ n; S" N3 e' k7 r4 g}& F6 D4 n1 ?) U- D0 B. ]
% \( T# E! q: b. u' L

. U" p1 R/ t5 r$ H0 Q4 j//------------------------------------------------------------------------------& s* o' Y+ B  F( |; N
// Selection with type array; ^3 k: O- V6 @) N3 J
//------------------------------------------------------------------------------: u) F; k5 {6 G9 P4 M$ y# ]) L' Y2 D
TaggedObject* MyClass::select_by_type()0 o* w9 U. ~1 `8 y8 I
{, W9 i, c/ K2 g8 [
        NXString message("Select an object by type:");. U: T3 Q$ d$ y9 }8 _# v  h6 g/ r
        NXString title("Select object");
7 A' G- L) o; L! g        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;7 m3 ]* L. Y5 @# e8 @! A0 d
        bool keep_highlighted = 0;4 c2 l# S0 j- f9 P2 W7 q
% e8 ]5 ]) o# w6 @& T" z
: Z' n! z& L0 e& v, u. f. k. x! \
        // Define type array, see Selection::SelectionType Enumeration6 y/ ^$ r; G. D% z
        // Uncomment or combine the desired types/ H( O. p0 F4 E6 ^
        std::vector<Selection::SelectionType> typeArray(1);
1 a, x' k. q; f        typeArray[0] = Selection::SelectionTypeAll;
2 m- ^5 G+ ^7 l' T' f( S8 f        /*9 O% P* O& q0 D6 c5 R% E! S
        typeArray[0] = Selection::SelectionTypeFeatures;8 v1 Q- T+ @; }; Q; s. e
        typeArray[0] = Selection::SelectionTypeCurves;5 H, a+ L4 N2 I) T
        typeArray[0] = Selection::SelectionTypeFaces;
1 T, a" L. I+ l$ s* ^8 w        typeArray[0] = Selection::SelectionTypeEdges;
4 M6 k( w* `1 M) Q0 x: d        typeArray[0] = Selection::SelectionTypeCurvesAndEdges;' o3 v# |# k! M+ @. ?9 `  S
        */
) p$ a# U1 K" i* ^8 D        Point3d cursor;! k% w; i/ s0 }3 `; \: h% l
        TaggedObject *object;. K- E; h8 i) o6 G

3 y- E; R0 w" y" j. O( p
* h( ~: V/ A# ]
        // Select objects using filter defined by type array
  l" ?5 y4 f7 |' E" L6 _2 W        Selection::Response res = selmgr->SelectTaggedObject(1 b" ~- U6 P' F
                        message, title, scope, keep_highlighted,
: n- z7 R2 {' l! F8 l3 U4 R1 W                        typeArray, &object, &cursor );4 \2 l: n7 s+ P1 V4 }

; T6 F  A3 ?# A  V" K6 X" |5 S
" P' y& t! d) [* K' {/ D
        if( res == Selection::ResponseObjectSelected )" l, S. O8 \& [
        {
3 n; E! M" F+ L! a8 c, J                return object;5 ~3 x- m% e) x# C- J9 M3 o
        }' c) h: ?7 t  t7 V( M1 C2 m
        return 0;
; m3 A, h8 E" M% J7 {. S}
1 [7 u5 s* Q! J5 q
+ ~+ O5 x# b/ _( z

9 f2 t* K& v3 t  T1 a& Q! V//------------------------------------------------------------------------------0 r+ @, K- w2 d. |& }
// Selection any objects5 E4 ?9 R1 r5 K- P0 z- U: K' z0 P4 N2 O8 H
//------------------------------------------------------------------------------) a% k. H/ P' e3 [# b) t+ H
std::vector< NXOpen::TaggedObject * > MyClass::select_any_objects()9 g9 t7 e% J: g9 M: p
{9 k2 r' @' G8 }8 V
        NXString message("Select any objects:");; L* f# M- b5 o" U( v& `
        NXString title("Select objects");
' m; A) I2 O( F4 h4 w- D6 z6 M        Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;( b5 U) G* X7 g2 o, C2 P+ @
        bool include_features = 0;        $ F# W! b0 ]6 w: @
        bool keep_highlighted = 0;9 u6 s1 G: e$ E. x$ t- n
        std::vector< NXOpen::TaggedObject * > objectArray;6 m: @: y2 q6 s3 ]1 g1 D4 f

! S2 b6 h9 j* q

4 H: x7 J7 s+ a+ }$ _8 }' t        // Select any object array2 v- Y! c' J- v: W8 U: u4 U
        Selection::Response res = selmgr->SelectTaggedObjects(3 S$ O0 @" Q5 E# I  F
                        message, title, scope, include_features,
7 t" ^! @5 x2 G3 T+ W5 O2 Y                        keep_highlighted, objectArray );* O- K% d1 K3 r6 ^  w
5 R! ^* ?& N. L, J
. T2 H, X/ i5 P- d# n2 i
        return objectArray;
1 d: C, Y5 X0 T& p* E+ Q# v}# U+ w7 g- b4 A* D/ {& Y

! g5 O% ]; t0 M8 i5 Y6 k, h, Y! v" ~) h& y' V6 e

$ k& J! n! t* a9 c" |) `7 T
) I. J6 V0 ]  u6 c0 ~: f

: v4 N1 j# s2 r+ B  K' d( v

% G0 `* u- |, O- R7 C) E  ~7 D1 D; V" ^8 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二次开发专题模块培训报名开始啦

    我知道了