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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:32:50

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

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

x
6 H# u8 p4 P6 G
NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
% b- v& k8 N& o$ F6 }1 B  k
7 w+ y% L! ~" B( d2 H2 Z# U4 n5 M
( d/ K3 L# q" i$ l- ustatic void do_it(void)) B3 }5 u5 A" U1 d# S/ ^
{2 }8 X& l9 _3 X, {7 J$ S
    logical is_initialized;! p5 H3 w' K; f/ N, ?
    int object_count;
* e% h; Q6 J7 S    int type;" O# o  \* T+ k' L9 F; N9 f) A
    int subtype;
1 A# C# x6 e3 p    tag_t *objects;
9 e7 F( u' z# N5 q5 g
* m3 v3 M. c1 I/ C
8 n$ A6 b' n0 z- q7 X" i
0 D! `1 v) ]$ K" ]) u$ K4 M

' W( ^* p  ~; _% N5 P( K, N    char mesg[133];1 O" e- J! r4 _( |: \6 B" c! i; V

/ w( O$ a1 r: Y  ^, l4 u
8 z- x$ L/ M4 f4 d& L" ~7 u
    // Get the work part
6 e6 U3 p6 t# e$ h    Session *theSession = Session::GetSession();
- x1 v$ l+ n" v* J3 h4 p$ y  Z/ y: ~    Part *workPart(theSession->Parts()->Work());
# G1 o! ]2 K! x, s1 m" n    Part *displayPart(theSession->Parts()->Display());
3 ~* S: I0 s5 U  O  n2 l9 }! \+ s$ f/ B- E

/ C. B1 _8 p5 T, e; f1 _% q- e5 u4 B, K3 O% o! k( i3 r% e5 Q# _

7 u. A! w2 e! [; q    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;4 p; d( f1 a% k3 D4 N9 P

- R4 y. t% Z! O% y& y4 r  o
3 _! B; c: v  ]2 U
    /* Get selected WORKPIECE object in ONT */7 \* ]& q. ]9 z  w" R
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));
- H$ |; s: `. o: ?' b. b4 q! i
% q) s: S: [8 u- c

5 f0 n. F- Y, H$ h/ j
. W5 t& a! M0 M7 `  D

  r2 d- U, H" K8 N4 q    if (object_count == 1) {
) T7 p" C6 s5 a( \& g/ h        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
% F! W2 T" i+ Y/ `( M. ~6 ?3 P+ X9 t5 D2 y: G# A
! Z: M+ M4 M5 l' s; F1 x! {
. B2 f4 b3 B$ e" {) p

0 x3 a3 {1 l3 [) R        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {
; }; }5 ^3 B  ~
7 t9 ^, ]7 ~$ H6 z8 @+ x

! L* ~' x6 N( a" U% x1 x+ A            tag_t ObjectTag = NULL_TAG;+ n) z0 I/ H' L& ~

6 v5 D" c1 K) ^: i& O
9 _9 N9 k" z; x5 U) q/ z) ^# r
            // Get the object from the WORKPIECE tag# H+ [( {! f' w1 F! e% ^+ h( t
            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);
9 c* `" V! M- s& P3 H/ q" A1 y$ v5 i% ~. n+ u

0 @/ k, m0 G' W$ v& m' y8 o  G( p) d& W' q            CAM::MillGeomBuilder *millGeomBuilder1;
4 N, {% \! {# d: n4 p            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
* h* D$ i# g0 Z) L6 S# m3 W8 I. m
' h* Y/ \0 h1 U& w
  h7 d' _0 j9 @: G3 }
            // Get geometry set list! [4 v3 R& B8 C9 @* E( O
            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();6 s: I6 e. L$ D$ Y, |! |5 U5 G
            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
' W% l4 M$ g/ L  R$ X
* y! \/ G1 A# }" c$ M! A* }6 x" l
7 v3 [* }0 {. E. o# {, C! v4 @% B! W
            // get geometry set
8 A$ x4 X. l3 I$ h$ C; ]  k& X            std::vector<CAM::GeometrySet*>::iterator iter;
# O+ p* j0 K' D0 P            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
& _, G! `, \# s' h0 H" I; {            {7 b7 c# A6 w, R+ _
                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);
! l8 i( [% |6 Y" w# @                ScCollector *scCollector = geomSet->ScCollector();            * u) T# Z* a# k- r
                std::vector<SelectionIntentRule*> rules;
2 f% o7 n: Q3 u, a3 J                scCollector->GetRules(rules);; |# N: H# ^2 @: V
" K8 D9 @4 s$ S: y; n! O; @7 M& D

6 `5 N- t! i, M% M+ B" M1 I9 s5 W6 A                //get selection rule
, H# H" O  t5 F3 b                std::vector<SelectionIntentRule*>::iterator ruleIter;' }# @# I; D- x1 `% K6 q; V" z
                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
9 h: @" I% M) _4 G                {8 p2 W  N% i! d8 S6 J4 @5 H
                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);
* q  b8 D* Y- W                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
  U# A2 p: U5 o4 k2 l" m                    //there are different rule types, here just use body, face as sample
9 p; S; S9 t+ F                    switch ( ruleType )3 L! l6 I8 J: B
                    {+ D0 P6 b! [7 ?/ H& c% b
                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
( h9 P8 x$ E' q: I. F                        {
+ E: b# h! ^/ d, ]8 ^, o$ S* [                            //get bodies + Q0 _0 k: N9 F5 R' i
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);
& b8 x" K6 o/ A' Z                            std::vector<Body*> bodies;5 h5 M% O' H9 ~& Z) V
                            bodyRule->GetData(bodies);
- J9 }8 p* I8 z, D9 j" H                            std::vector<Body*>::iterator bIter;
3 F% R* r/ t/ t- s6 d! l) X9 T                            int index = 1;1 U& E6 Y: G. w1 e2 }# ~
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )# R8 C+ U! M6 m4 S
                            {
, Y+ ?: r4 x2 M8 m                                Body* body = dynamic_cast<Body*>(*bIter);
$ s$ O, D' |" n/ t$ N3 Q                                ObjectTag = body->GetTag();2 @/ m8 O8 S9 e5 q8 x
                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                
7 T" S$ I" Q9 s5 b) V6 r* N' m                                WRITE(mesg);& {8 `$ M: B5 X" [
                                body->Highlight();
9 q' w, g- |1 I                                index++;( u" H  w- s# D* T5 I# w
                            }" }0 q# s+ s3 j' p$ |7 `7 @
                        }; i& Q. S+ ~  r7 I: D4 ^
                        break;
, i' C. v& @) m6 t! b! A4 W2 T) @2 W0 A

& W% |! k$ ^3 W0 a7 n: k  z. g                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:7 w1 G( R1 ^4 s* H1 l- l% C9 I! L3 \
                        {
: u) w; O1 n( h  }3 ]& ]" V                            //get faces
6 A: q: V3 g  G7 p3 s6 c0 ]                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);+ _8 d; o9 k8 h3 b+ M) _  z6 a
                            std::vector<Face*> faces;7 u4 S- u) [" _. f
                            faceRule->GetData(faces);
9 Y# S$ e- }- E7 g; X  j                            std::vector<Face*>::iterator fIter;
% o" k/ S- x2 L4 f                            int index = 1;! k; G, m& D: \) {* Z) k
                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )( S9 c' V4 m! w" G! G/ i3 H
                            {
9 N4 c+ E' ~& F8 i1 x/ j                                Face* face = dynamic_cast<Face*>(*fIter);
# Q$ \) {  |/ v$ F" c; c                                ObjectTag = face->GetTag();/ R) P% B# f* f, i, T/ t4 c2 m
                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                - @( L  S! [% n- r
                                WRITE(mesg);
2 y1 E3 u) E8 z0 a% t  t. C5 r+ Z, P( I                                index++;) ?" A5 Y4 l4 \8 l- ?- r/ x
                            }
7 Z6 b; e% F+ z' ~" X) F                        }3 u4 b$ S) Y4 m+ Z+ J' r" k* n
                        break;
4 V0 U( N3 R! M' H
* e; ?5 i' p; l* ^7 s8 ]

, H$ S6 b8 p& {6 A: m) e5 D$ r! l                    default:
( [! _4 B2 \1 m                        break;
5 T6 E8 }' E% [& l' l8 a/ h1 M' V                    }
% M& L* H" h7 b% c1 `. N                }, `8 `  X7 u, Y' I  q0 i
            }( }* Q$ }8 \, E
1 M4 `+ R/ J5 d9 w# o& M% G, w

  {. O' x3 ?& O) X: P4 U. E
3 H$ o( M3 y& Q3 v- q* \% r

1 I5 P, j1 o8 Y6 d$ p
6 E( R( F! i6 I% K  s1 P

  u$ T$ q1 X- T: y; w# o, v/ K            millGeomBuilder1->Destroy();' L, r' F# Y) L8 O& X- @/ h

$ `2 k" G1 i" v! j2 B3 [
' h8 W: v7 e: P; j4 \* N
        } else {1 M& z! q- i3 r; U8 [. `
            WRITE("type is not UF_machining_geometry_grp_type");
. z8 d6 I9 O( r3 G            WRITE(" or UF_mill_geom_featr_subtype");
' ?% |) M# P# {: N& h  o4 w        }& W! L: k0 _& L! |+ U
        UF_free(objects);
3 T) g! `( x- O0 x( J8 C
* D2 k/ {2 }( O+ J# Q
# o* z9 {7 ~3 a6 e8 X6 \5 _
    } else {7 C" w! u3 \) S$ N
        WRITE("The number of selected objects in ONT must be 1.");
, e/ H5 ?: h9 u" C    }3 ]2 J, J) J2 {" [/ ~* U. f

0 |& Z8 ]! j  H- C; w* @

7 K$ I- G4 r$ d+ \$ Y4 N3 ^}" ?: J- J9 p- D  w5 n9 D6 e

/ s$ w$ @1 L8 d9 Y2 B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了