PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:32:50

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

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

x
; c% @' J2 a" R* U8 F
NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值1 I, Z) I- I1 D4 h, H
' t! z% K' i" ^+ s

& z0 @6 ^. I) l) _  ^; M7 Hstatic void do_it(void): C. \5 I/ }- Y5 j; v
{2 i! X9 S7 V0 |  _
    logical is_initialized;! i0 F* T: t* _* ?4 u
    int object_count;
+ F- I' n: c/ D    int type;
9 H. ]' h( k9 a! R% m' i, Z    int subtype;: u% W$ y7 a" {6 s: ~0 p, H  Z
    tag_t *objects;! T! i8 i+ [3 T1 p

8 @, X: s. X/ G8 ~

/ l  J! k) f' t, L* G% s9 F6 d: S4 J& {0 Q7 l2 N/ q

9 C" @2 h8 G+ q    char mesg[133];
; W3 o0 L& A% |% s0 i; p
3 U0 K. c6 ^! L( N" u5 S

( M7 a- g0 H, ?- q3 B& W7 K3 ?3 @3 W    // Get the work part9 T( r  J7 @) q
    Session *theSession = Session::GetSession();
6 X- n- q2 O# Z3 K) ?. A0 U    Part *workPart(theSession->Parts()->Work());
  A  k, V- H  Z$ M    Part *displayPart(theSession->Parts()->Display());, v3 O* Q4 |) B

& ?* _: r6 ^' b; h0 O  Z
6 P$ q8 d: P# ^
5 a7 }( |' ?% z0 X/ L& d

- R7 |7 s' w& N# S1 s    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;8 A; W' v( y" {; L  _

4 b3 i% J% c) ~* i# T

& n: ]% M) m6 u9 |. O5 x0 B    /* Get selected WORKPIECE object in ONT */
) v0 S9 `) T3 e' K; q" p# {    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));
& j* g6 I* d2 }) M  p/ B- T0 l5 \9 N9 v) O2 U
% _& h, P" w. G: {# h- E4 Z2 q
' q0 J8 {* S* F' i- J/ `) q
# U  w/ m: p3 I+ q% h. O( y: v0 v
    if (object_count == 1) {% u7 f: G9 ]4 J% s
        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));* F* x( Y: C5 V2 `* N
2 U0 `! q6 x8 W8 {  `; W

( i6 }8 m% a. h" }! A3 f7 _1 `; {' K; c  O

0 F( Q5 H+ w' j6 z- q        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {
$ t- @2 o2 S, R" a
+ `/ ^4 D) v; n% W9 m7 g

/ I6 l' e/ _' J& u5 S+ i6 C7 ~" \            tag_t ObjectTag = NULL_TAG;
2 d. N5 _! h& X0 n' V2 @. z  Y2 u* \/ e3 t; j4 J
7 _6 R2 P  s7 ]. k
            // Get the object from the WORKPIECE tag+ t1 ^3 ?3 ~3 w) a  N
            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);) `0 @4 V( J( K' r& s

* c$ H. x& m4 I% b% v
* v* _  f9 K2 t- W& R
            CAM::MillGeomBuilder *millGeomBuilder1;
, W/ J4 y: J* z5 `4 C2 J0 m7 X            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
3 l1 x) \& h7 H- o0 J* E
4 a. O1 ^: \! ?
1 E9 u3 O" c& X" O/ k2 C
            // Get geometry set list5 b. ^, \2 o& h5 Z$ P" G
            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();1 c( J. I% W9 i2 c# a
            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
1 P& ?/ b. a0 @' ~  b9 L/ T6 q4 q. P' Z& F" W0 x, [, O
$ A0 k2 Q5 f. J1 P8 H% i" I
            // get geometry set
" ?& K4 r2 f) v6 A/ l            std::vector<CAM::GeometrySet*>::iterator iter;
, R6 J& [7 F+ F4 @9 O            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )  B2 d7 b, r$ H9 F. y0 I
            {
* y1 b+ I0 ~, o1 ~: @! @# e                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);( W5 K) t# }9 O7 `5 M
                ScCollector *scCollector = geomSet->ScCollector();            5 r. }: i5 V% L# J
                std::vector<SelectionIntentRule*> rules;& X5 [* P" K5 p
                scCollector->GetRules(rules);$ M% O5 `9 O9 J( c1 \
- {: I/ Y4 O  l( U8 G
; P! ?% D& o% p! V& r) _0 r
                //get selection rule
& j0 _8 x* E$ d. H/ \7 z                std::vector<SelectionIntentRule*>::iterator ruleIter;( P4 {6 _  ~# X* K4 a( d* y
                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )) A# _: \6 [6 Q8 T% }" Z' x, j
                {. {# l' [4 ?# N+ p/ E3 d  m* H
                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);
. ?* ~: [" J8 P" l8 N+ V: J                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
& Q' m, ~' Q$ o2 ]  z% R+ p                    //there are different rule types, here just use body, face as sample
, U* x( p" s1 U# Z8 A                    switch ( ruleType )" C8 q* m- o) {8 M  b
                    {" R* E% O8 }/ Y) Y
                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
9 [0 y) H6 P; V* B" Y, W                        {$ {. o# ?) K! k- D4 ^
                            //get bodies 2 C' E4 @2 ?- L7 d. M, W
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);6 [" Y( Q2 H, n$ c8 N
                            std::vector<Body*> bodies;% e, v# f; J. s/ U
                            bodyRule->GetData(bodies);* p+ c+ C  ]% x$ o4 s3 A
                            std::vector<Body*>::iterator bIter;
2 S) a3 L! W$ e3 y; j! m- ?                            int index = 1;$ P) |3 c; w# D/ V! F$ `/ S
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )6 {/ u( I1 t# i1 V5 z
                            {) Z+ t) `) v2 M0 ~
                                Body* body = dynamic_cast<Body*>(*bIter);
/ B, A, O- C, S! {, L/ q  M                                ObjectTag = body->GetTag();4 W5 X0 l4 x& e3 f2 Q
                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                + |9 q0 ]0 _! ]+ R/ ~
                                WRITE(mesg);
" i: _0 T6 [% w" W0 P% J2 Y, \: B$ H                                body->Highlight();/ I% {8 k6 p: I" I# m% |' r. Y  h* g
                                index++;7 o) C  b+ I6 N% w% z% l8 @
                            }5 c# C3 @# I9 j2 k
                        }1 m9 o8 r' g. l! S6 r% n, H5 C1 b
                        break;; }5 E7 a1 Z. M: h5 x$ s
& t. ]3 Q  ^0 O( e2 ~4 ^
# j. \- G# j, ^& Q5 h
                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
3 O6 O7 y* V1 ?3 u4 b0 B. ~                        {
3 g2 M# P1 k$ P+ C                            //get faces 3 b1 j! o) ^" o
                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
- u1 Y( r6 h* s                            std::vector<Face*> faces;' b) m: }  a3 j1 j( |" W! u6 a
                            faceRule->GetData(faces);" m) ]  g8 @$ S4 |; V
                            std::vector<Face*>::iterator fIter;
/ F$ {! I! g- {% N; @* G( i                            int index = 1;+ j3 [: p. I2 W: F# O6 `
                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
) n& F$ E9 e* l. H                            {
! O6 f6 K/ P) F5 {5 r                                Face* face = dynamic_cast<Face*>(*fIter);
& `* }% O; P% S                                ObjectTag = face->GetTag();
. f. A( I( C$ O5 n                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                
( ^; |6 [  R) Z% r8 v                                WRITE(mesg);
7 G7 S$ R. a/ p, i2 z7 t                                index++;: G6 a$ A( Q1 Y- T- _) S( d
                            }& f( G! v+ ]: _& T
                        }; }9 B+ B4 _0 r' w1 X% v
                        break;6 w# X" R  T' _
  m7 d1 F9 L5 ?; P; o$ p. x2 R

% m4 C8 N7 t' K4 ]+ N                    default:
) g" L- _9 w: B1 [: ^' s( F                        break;+ _* G1 h' h7 L  k( {
                    }7 B7 y) M/ o0 Z) b% E( P
                }7 i" d% q/ C% T" Q6 n9 f5 x/ D
            }
5 u  k9 b! A) m4 @6 C0 l) K! L% I4 @4 t/ U
% Q4 n4 L" ~1 g

- G) p2 N, M, P* E' w! z# D
+ g& X& T% j  f2 I. L6 N$ u
6 U' `, _, o/ b- a. y! M

5 I' {; m7 Z- y$ g            millGeomBuilder1->Destroy();0 e6 t8 D! ]1 F! q8 V* \

: V0 n* w, ?# U& X" @# H
% p1 R' f! h& L4 e
        } else {
$ h- d+ W8 y# Y  Q: x            WRITE("type is not UF_machining_geometry_grp_type");
0 e0 |7 ^# u- U0 d- Y            WRITE(" or UF_mill_geom_featr_subtype");. \& F! N9 b4 U2 m9 D
        }1 |: m+ C1 A( _/ F. B% a) @( W0 e
        UF_free(objects);* B* ]* C# H4 [, K- ?( }

& [' s& H% {( e$ C1 {/ P

( u, p7 q* t) s/ z    } else {( t2 P, Y# {& [# a1 i  {( O8 ]! y( a
        WRITE("The number of selected objects in ONT must be 1.");' ?; C) s2 H- |% o* i/ W4 ~
    }9 c, c6 Y3 O' I

6 {# D9 K) P# ?6 [3 {) Q6 ]5 x

& V2 Z: q$ w) l5 E3 }' q}
8 Y+ T. i( s; ^# I; j! C2 W, p$ _6 U! {. }; K: S
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了