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

NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值

[复制链接]

2018-8-23 08:32:50 4904 0

admin 发表于 2018-8-23 08:32:50 |阅读模式

admin 楼主

2018-8-23 08:32:50

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

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

x

% x! P- `, S4 \: G, yNXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值+ k. [' ?. C. V! c6 Z6 p: J/ B
; @* B! R" g2 _0 v7 f  U, Y8 x
" h4 K: G0 H" X1 `& k7 `
static void do_it(void)/ L# u8 E% Q/ Z0 a, m
{
2 V3 J. B. k5 @+ E+ ^4 v) s    logical is_initialized;) Q. g, I# l7 B! d
    int object_count;
3 N& g" Y1 X3 G    int type;9 s" H  w- c8 T9 b$ F5 m5 y6 i
    int subtype;
* F7 }. _; j4 O    tag_t *objects;
. N9 f: k. k5 i" U' D( X# a7 D* c/ _* x1 G
  I* v% ]9 d, [; K: \" E# U1 l
- t' T7 R5 B2 I  y* O; d' [) {5 v

1 v8 w' Z9 U# c# U    char mesg[133];7 b! a9 E8 E8 T/ i
+ b0 d. `6 ^" J+ p  H. _, K8 p

% q% x3 j9 \7 Y    // Get the work part7 _! V/ T5 N/ J0 C! `
    Session *theSession = Session::GetSession();
$ |9 ^4 {; g. U0 `$ ~3 {6 l    Part *workPart(theSession->Parts()->Work());
+ G* L5 ]+ t# O; M8 ?# _    Part *displayPart(theSession->Parts()->Display());0 @/ x& A5 Q1 d/ q" ^; e
: H( g- o! f6 S# X( l- e

/ I, M' l$ J$ Q2 g; U9 m6 m
  x/ A: T; q! Y3 X
3 a1 z$ E# t$ T  w
    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;
4 }2 s* I" R5 L3 ]% b7 e+ q; W9 E% ]5 L0 B
. [9 U) L9 m( _. e1 |3 J
    /* Get selected WORKPIECE object in ONT */( j  u7 i4 I; a$ Q! s; \* m9 K
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));" `1 c) D( A% T( y* ^% C
8 S; l& ], ^! j; x1 w5 C# `& w
4 f' ^7 M$ J. Y) a: D3 p
( ^% S. y) M( w9 z# g! Q3 H

  E3 ]( F/ @) T: H9 x0 b    if (object_count == 1) {
" ^& v# \  v7 b9 e$ `1 ]        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));- Q6 [9 Y8 g: M: P9 N) K8 o
6 w- X; X' r, ?. c1 Y

: E, M2 V( U' m9 g& I+ Y4 E4 |' A4 L) }/ e/ r5 M
% L) E0 {' b% r0 D& _
        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {3 K0 k/ A) o& @" ^* T% e

) W0 H! P! G5 w5 Z, J1 K" n3 ?
- S0 h0 U' e+ E/ l8 Z5 N
            tag_t ObjectTag = NULL_TAG;* _" F$ l5 s. N/ h! {- f

5 E6 K* V* S( Y* e
+ ~) w9 e1 C. o& n1 }  ]8 F
            // Get the object from the WORKPIECE tag
! ?0 t: q+ N! g& f) q            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);
; l  S: g4 y0 p$ A0 E+ _( E: I( O
( G7 V3 O$ B7 ^! m- V
            CAM::MillGeomBuilder *millGeomBuilder1;
5 f. a. W  j" R- m& V            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);5 ^! V' c" N+ I* O0 _
, l) Q: _1 C( u; `
0 F7 ~. u! a( q! o( Y) o$ H+ e$ F* O
            // Get geometry set list
# [2 v* C1 |. _: F, C$ s7 ~: Q2 f6 Y            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();& s3 I# ?: x* E1 w& z, Q- {! h
            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();0 v  v: D5 x3 r# y$ E) w

. I# t2 ]7 P+ T% o- r

( X( n7 @4 F3 c; T; H" Z            // get geometry set
) ?3 ^! S% v, O$ G! {4 G9 {" ]            std::vector<CAM::GeometrySet*>::iterator iter;
1 Z/ I/ J7 Q# C3 Z            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
; w& y3 W! W2 G1 O8 t            {: k6 A5 c+ K4 I+ H$ l1 x, L
                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);8 m5 i+ h: X: M+ }: R2 Z
                ScCollector *scCollector = geomSet->ScCollector();            : a8 G) n/ W1 X* b
                std::vector<SelectionIntentRule*> rules;7 C. ?3 m8 m9 A2 Z
                scCollector->GetRules(rules);1 e/ e' _8 M6 y8 A/ o

' E# _0 M# q- P" @5 d, h

8 @' v7 L1 S" c& t5 k% k/ L                //get selection rule
" i* g/ y# N& Z: R2 X                std::vector<SelectionIntentRule*>::iterator ruleIter;
% e0 r5 ]$ i& e- L5 w4 U) ]. k& x                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
0 f3 P  n$ u: |  }) z( P                {0 i9 |$ }& N' m& \
                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);3 ^1 J& ]8 \2 F/ X) P1 o$ ^
                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
& o! ]; {7 Q( `- ?                    //there are different rule types, here just use body, face as sample
' I7 r/ M( i9 D6 [                    switch ( ruleType )
' k5 b/ X$ C% a% {7 k* K                    {
; N* Y5 Y  @0 m                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
+ q% U  a/ _! m4 N+ r1 K                        {5 r1 e/ R) y. v" M- C3 K  u
                            //get bodies
; j1 Q8 U0 C! N                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);
3 e" J# F% O; v, [                            std::vector<Body*> bodies;
7 p- O' M6 j& J8 n                            bodyRule->GetData(bodies);6 W9 s% f5 }8 b) z3 _; Q( L
                            std::vector<Body*>::iterator bIter;
: q: R0 w8 n, m% e: r8 @                            int index = 1;; X2 e  N$ ~8 t( N" f
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )
& |; p* m3 {  M  W9 [                            {+ X$ e% U8 }/ c; p6 X4 x- m
                                Body* body = dynamic_cast<Body*>(*bIter);
4 J8 ?' G$ ?# Z0 ^                                ObjectTag = body->GetTag();
2 ~# c1 ^" ^0 |9 Z                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                
7 ?. d! \: ]: }* L' J( T                                WRITE(mesg);
0 R0 K9 L+ Z5 e                                body->Highlight();; `2 x1 X/ \) Z% v3 ~( |' a/ l
                                index++;
2 Z+ n; _, x: m8 ?                            }" k/ p# U8 p3 n4 ]' u3 F- c; N  G9 i
                        }
  ?: ]7 U3 S) b/ J' o+ E, N' O                        break;$ ?8 a1 }, w& ]+ I
! f1 L+ P. \4 `' T: K4 @

, \- x1 P7 |7 n2 }1 K                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
& g. E: Q( d% D& G! e5 [7 Q                        {, _, W6 B6 Y# o* D
                            //get faces
: `7 V% T! t; n& j" y                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);: n- n$ C+ E9 F6 O, L! j
                            std::vector<Face*> faces;( e; M' B. P# @
                            faceRule->GetData(faces);
9 e2 P: ]* e; J: ~* W3 F                            std::vector<Face*>::iterator fIter;
& b7 A: Z5 T# I  U& V                            int index = 1;; N. U9 c+ S# l, g* y
                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
. O3 N4 ~6 }8 ~, l                            {
3 v, F3 P. k4 O' @2 h                                Face* face = dynamic_cast<Face*>(*fIter);5 Y8 d& o4 F# R5 f' A  q. B+ N
                                ObjectTag = face->GetTag();! _3 ~( n8 b8 Q  {$ i& C
                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                
" f5 P: [2 p' O, C$ _                                WRITE(mesg);: B! o& E1 X0 [& P9 ?. q7 i
                                index++;
) `7 F6 s6 f1 w, p9 g7 f                            }
6 h4 L6 x( ?+ ^2 D. F8 w$ d                        }
! e# T& B! n$ }1 H5 U1 q% ?4 x# h                        break;2 r, k2 g1 p& S) B8 \
; N, _9 _' D7 Y% V; {: X+ V  Z

8 \# z" _( k1 {4 v6 W5 V7 \                    default:
4 n- ?' r3 N+ x8 q2 f' Z( ?                        break;
# Y/ c& ]  Y1 A/ g: f6 ~                    }" P3 u% Y! K. H
                }
2 j8 U$ R4 x5 f+ q5 z3 I% W            }( q( e' W* w3 Z, a+ l  W5 N, ]5 H
) s( Q( [- D5 z1 o$ M2 s
: _- ?* m: D8 w1 a

2 }5 Y" u0 {9 V9 t; ^( s/ d9 @* `
3 O6 l2 B) `) U5 K* A, L1 y4 l& W

, ?8 B7 }8 K8 e  u' _
. v- R1 I$ L; `0 e
            millGeomBuilder1->Destroy();' S, L$ A) n& X; C2 d: B  G
! @  v7 r. i) `

5 i0 c. h: a% A+ B7 i% L3 A. Z        } else {+ c7 L1 W5 i, Q
            WRITE("type is not UF_machining_geometry_grp_type");
2 _9 K# E2 v$ q3 T, J            WRITE(" or UF_mill_geom_featr_subtype");5 X! o4 X% D& g+ O$ b
        }
1 Y4 ]% f) u) P0 {7 W; x        UF_free(objects);( h+ Z3 b- c0 T7 K

9 j, p- p% ?' e1 a* O/ y6 a

$ l+ D; `/ b1 }2 ]- W0 N( o: H    } else {- ^7 t: m2 d8 E( F3 u- e
        WRITE("The number of selected objects in ONT must be 1.");  U" ~: p! M' i) m- w; h% `
    }
3 @, p$ g% s  z7 _$ D6 e* G! p4 A1 X- U9 S1 L8 O
8 X2 V1 H6 G% i9 o0 d* u, L0 m
}; A* N$ |% \  m7 L

3 S8 u) e( T) ?- Z' A8 V/ z: u
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了