PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:32:50

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

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

x

3 u- a) M! v" B+ {1 A5 O, jNXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
$ D9 g8 v1 _8 l1 @# m  X( A. u) N8 b" S1 }& Z

5 A* |8 M0 T4 v/ y3 j1 X8 \static void do_it(void)7 c  c( q/ s! _5 x  r/ Y
{
! s0 T+ ^) n9 H) n$ y    logical is_initialized;/ S5 U1 @0 w1 J- \! F" s) ^
    int object_count;2 ~: M! @" \: t
    int type;5 S9 Q+ v8 _" k
    int subtype;$ p0 z: M2 f7 m2 k9 B
    tag_t *objects;
. ~) J) ~3 W1 K1 @) O1 D. ?& k
5 u0 i- Q8 C2 G6 q  b) ^

, P( A; x2 S- c5 G/ [$ p. v) e2 P0 Y8 S( t
3 \2 {4 i" c: S4 o
    char mesg[133];
+ C" m# y8 s' J( L/ [
% u! v# q0 _  j& n" |( }3 Q: J. o
1 r4 H0 o5 k+ @. m0 a  }
    // Get the work part% }2 ^: f, Q' {. v. l% B5 o- ]
    Session *theSession = Session::GetSession();5 G# h1 b- n, Y1 n2 ]
    Part *workPart(theSession->Parts()->Work());1 @5 @/ {( Y2 o5 l+ R
    Part *displayPart(theSession->Parts()->Display());( l: |) Z. M, t* a4 l' a
( n$ U$ \( e1 B% K: @+ f$ [9 ^4 _
) T) P4 p% @- Z: g

& \: f% ^& }" }/ j3 _

+ s7 i9 \  }( r4 @6 {) _: ]8 Z" t    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;) q' C  Z) J0 T4 [( E; a
, X  f1 V' F' `" l4 j: U9 |
! B+ x! v" V( ~7 f/ L$ Z
    /* Get selected WORKPIECE object in ONT */5 I; y2 F# [/ R- U& [
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));
& \/ a' Y. e7 X2 d. S9 N* w% B3 P, Y3 B) w5 @4 c

7 x! R0 a% D% J, B3 L: p8 t: g5 V, a- A! H% j( o# I
; q, G' m- \! Z( [
    if (object_count == 1) {
+ a( ~/ m# D: M* Y, W; k        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
9 T2 X% N, F* V: p
+ ^+ Q1 P, n! o: W

7 v$ `3 l- _$ S2 R$ F6 Q4 U: U* A
2 y* S: D/ N% ^: L: T( _5 J1 O
0 O& a3 M; q& w/ W7 l  ?
        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {# K8 L# {- G4 Y8 m9 z* N6 ~1 a

7 g9 w' F# W& I. Q1 N5 t, }

& C) a1 G% |( ]8 }6 Y& b( Z7 B            tag_t ObjectTag = NULL_TAG;
  T- e5 n8 n1 }$ D" I  f$ O) k, d7 v. N$ P
( A2 a; j3 S! f4 i# \6 U
            // Get the object from the WORKPIECE tag  a4 z6 f7 d4 U6 m4 X2 L  G  i8 @
            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);* t: a5 H5 K2 z6 C  e

' I4 i: }) |7 s5 m: {6 f9 v5 H
5 j6 }8 t& b- y( y# T
            CAM::MillGeomBuilder *millGeomBuilder1;/ r; |6 U# z( \+ @! S# x- V
            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
; {1 `, T* R+ t) e  o# [1 m' ?$ E0 q6 u# E: w$ \

3 [" o$ e+ p' w. E' H, @            // Get geometry set list
2 x. ~  n- W- e6 O, o5 G5 |            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();
& A2 I9 Q8 v1 h            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
, S& u3 T2 H) R/ T8 i1 I! E* U+ k$ w8 ~$ y
' W9 g9 m- Z4 }1 a
            // get geometry set
- z' Y  E% y% M6 T. p% m            std::vector<CAM::GeometrySet*>::iterator iter;) d# [8 b4 i; _
            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
: B* C! w4 e3 x# {/ c" V( \1 v0 o- B            {  ?7 X$ `+ w" P$ }; p, Q- T
                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);; x; Q! z- }* u! X$ |
                ScCollector *scCollector = geomSet->ScCollector();            2 U" b& P3 `% v3 C( w- o* k5 b  I/ e
                std::vector<SelectionIntentRule*> rules;  k8 k* ?6 R+ W7 |+ o. k2 s
                scCollector->GetRules(rules);
2 i9 M% ], h' X0 l/ Y) ]
0 a7 Z6 ]1 F0 ^0 p

% i, ^  M& G1 Y* m& G                //get selection rule
& B6 {. i  X, v4 t                std::vector<SelectionIntentRule*>::iterator ruleIter;
( U9 \( q6 T2 p0 p- N                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
$ `8 G5 O& J( V3 l; I- a6 _                {& k" @: |: p  m9 c$ d
                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);0 U" l4 Q: T# s4 N: V
                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();5 j, }& T7 \6 T) T6 A, D. n  Q
                    //there are different rule types, here just use body, face as sample1 T% O  {9 c: m% M: p8 y% K
                    switch ( ruleType )
1 c) B: ^0 u8 W0 `8 X! m( L; a# L8 f                    {
1 P& x: O! j" x/ ~( N                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
$ t* j/ Z* o3 B                        {
4 k. E2 `9 j6 T1 {# b* u  j1 _, Y                            //get bodies $ F3 c, m: K% R# ?3 \! W
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);
" }; [2 x) t( X0 p  x                            std::vector<Body*> bodies;- U+ e: m- @: |: t* p( H9 `
                            bodyRule->GetData(bodies);" z# s( _3 J1 W9 y# i! R$ p; p7 ?
                            std::vector<Body*>::iterator bIter;
6 M! w! z- n# m4 g$ P5 Z' P2 Z' m                            int index = 1;
' b# ^, q7 t/ Y4 r, _5 y7 u                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )
& r( L1 N) {  `9 ]  Z                            {" j' I: @7 `& G0 a6 e( a6 [9 E* g
                                Body* body = dynamic_cast<Body*>(*bIter);
' n+ m8 ~# N( \4 E* [- l" l9 Z" H                                ObjectTag = body->GetTag();
5 b0 J8 k; Y. y                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                
1 t. N4 M- i# s& \& q                                WRITE(mesg);" ~% I. a4 I; E0 b2 P' c
                                body->Highlight();
& K( L# u: T3 S& K1 U# Z8 e9 ?3 c                                index++;0 j) Q* i6 E! q3 A
                            }8 I% j6 E' U( V( w( R# q& j: [
                        }
% P7 b! L' O& {& `8 J; B                        break;
6 f- t  W2 S" |6 P' T' R2 l3 g# a. m9 }: \5 Z

1 X) p# v# f9 a                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
/ P( u, K5 V$ U% c: R                        {9 E) v7 M# {  C9 X4 ~( O! t. v* I+ P  ^
                            //get faces
: i1 P; B8 K6 B. e# l0 [) \8 ~                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
) N2 }+ d) o, w                            std::vector<Face*> faces;; z; M" L/ ]/ T0 ^+ p
                            faceRule->GetData(faces);
" }4 m" b- L) {* @3 z4 C3 \                            std::vector<Face*>::iterator fIter;
( c  w8 m9 Y9 p' a7 ^0 Z                            int index = 1;
5 ^! k  Q  e& @" M                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ ). |) c! Z. q4 o
                            {
, S9 L* K* s. o3 X5 W9 E+ q8 \7 i9 i, S                                Face* face = dynamic_cast<Face*>(*fIter);
- Z7 ^% m0 e( _) a, U: u                                ObjectTag = face->GetTag();
$ F" W% l- h* o4 f; ~# L4 G+ M  f* q                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                / \+ H+ i' R8 S
                                WRITE(mesg);
( z$ q; a/ I& [1 g8 o3 p4 f                                index++;
" V7 n4 j; `/ a4 F! y. k3 p                            }- X, H: L0 N0 ~
                        }; I0 X$ W$ [1 y5 p1 |: U' Q) L
                        break;% {( p9 u, Z* N2 z$ f

! @8 {6 @0 v7 R1 i" f8 t$ N  X* E

9 T4 s  W6 u3 I; M                    default:3 V9 [) ~. L: Y  g$ e4 u; }' u# y
                        break;; p$ u, g- R( w, a
                    }; |. n6 a" d) ?
                }3 ]* ?2 L$ Z/ {' w$ I
            }
; `* [% s9 m' k7 o9 a
% v' E; d3 k' \/ R
% r! q/ a& Y: [, G' G& n( n8 \$ w

. T/ c  C# n6 v8 U& L& h  G  A

" ?, Q! B, z, Y5 ]; K  K2 V
& t3 u6 q+ M% B2 Y6 X* |# S

9 b* r& ~* W0 r* ^5 X            millGeomBuilder1->Destroy();; {8 ?% y5 y. _2 i6 \5 S' i9 u& d4 E

( y2 K/ n0 \# x+ j1 N+ e$ Y0 p0 z

. Y6 E3 c5 x# ]: k$ z6 }' g, G2 R        } else {% O/ e! @2 }6 e" m4 J3 D
            WRITE("type is not UF_machining_geometry_grp_type");
# Z% u4 B+ ?1 X; A6 W5 r# o            WRITE(" or UF_mill_geom_featr_subtype");* k. |# @( z: V
        }
9 \" e2 d- ]8 Z        UF_free(objects);& l& t4 p6 U- S! Z% e; f% D

: @" e0 g1 h- y% ]
- \% I/ \- k; V: a1 E* v
    } else {4 y8 A1 |1 b- a. j. ]
        WRITE("The number of selected objects in ONT must be 1.");+ k: O  a6 q0 T7 z* r4 F
    }) ]2 A+ a3 b2 S7 R7 O  D8 ]
+ t% H0 o" e3 \% l7 Z1 J( C
' |- o+ N2 n( Q, K  O, T
}- U5 r; N* H. P" v* T/ I

4 r: K& l1 H7 S" O+ n7 P7 @" j
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了