查看: 5285|回复: 0

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

[复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2018-8-23 08:32:50 | 显示全部楼层 |阅读模式

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

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

×

) ~9 p3 |0 |, g2 M  `NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值4 [# X! [; b" c$ M' K& Y
. {) G7 Z/ q8 {0 Q- @

" _" w8 Q& [1 r* vstatic void do_it(void)5 X% r4 d; e, M5 Q1 @
{4 w2 z9 ~$ Y" n) O4 h
    logical is_initialized;
9 B0 A7 F& Q3 g    int object_count;' e8 H* G$ E# Y. w: Q6 x- G" k
    int type;$ Y& V! p5 f1 H, i% j$ x
    int subtype;
+ [; V+ F4 `6 [3 q- C, w    tag_t *objects;
  C5 W& Z) U& I$ a# n6 j0 M1 s5 F0 y4 r# V* |( v) G! q, v

% C8 G/ q' R' l. z7 _( ~; _, p4 w8 h0 X% J; D7 U" D- \+ s1 m

3 w% |  ^7 o: A5 ~    char mesg[133];
8 q6 U, T; x( y
. {! [- h6 Y  i7 R
4 a& ?% s2 {, N0 n7 O* w& t! q
    // Get the work part% H( d, C& S; b2 I
    Session *theSession = Session::GetSession();+ k, f- t' B3 q- j0 S4 b
    Part *workPart(theSession->Parts()->Work());
# X4 u4 f7 e( p; S9 p# V/ _8 {    Part *displayPart(theSession->Parts()->Display());
2 |8 k- q- }2 L, h9 Q- u( f( f2 c1 T3 M

' C% x( _! o, q& u' y2 X5 Y* D4 O% z* B2 J7 h0 B+ N

6 x4 Y0 ?+ V6 N8 U, e# f    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;
* o6 g* O) m2 o! S! p+ Y# E5 G- O- r6 z
2 u* y0 g; `( W/ b7 Q
    /* Get selected WORKPIECE object in ONT */6 e) ]& \2 k( d9 u$ P& L3 d
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));% R, l9 l0 Z/ z( ?; ~

0 _4 U2 z1 d2 o2 z

+ s6 I5 v2 q/ S" U# Q& M7 o9 b; L6 j. ?) m# d0 A1 H
; A! q' l- n2 q7 n  P/ a( c
    if (object_count == 1) {
/ q+ O9 Y, s- B        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
0 L  O( T3 ]) u* ?* ^/ K
) Q9 l: Q8 {' Q/ s

* f0 {( F* j8 ?* H/ y/ p( f( b( p
$ S4 g* A& y( l- d0 |
% f  h0 c" f+ R/ |7 B$ K! {
        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {* X& V5 a8 K4 P% \

, q( H" Q" R) v& g/ q/ }

# Q3 a6 b! F/ [+ {            tag_t ObjectTag = NULL_TAG;
. R% r* D* @+ r: g( f4 M$ D" k6 \, E% N  W

! R' q8 J" z( o            // Get the object from the WORKPIECE tag
2 L) R9 t4 q- f+ [            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);3 P- y$ I; o( T

4 K& c5 \" ^8 O2 d( E5 r8 y: x1 v& D

4 ]' H/ S& N5 S  l4 c            CAM::MillGeomBuilder *millGeomBuilder1;
4 n8 _2 f/ S$ y8 [) J            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
$ L- n) H. T9 E
( Y$ V: n4 N- s4 k1 u0 {
7 ^8 N: B* q, E1 |# L$ c" R, ?
            // Get geometry set list
& {  T3 i6 m- m& X$ v) Z            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();/ S6 ~, {' b# c5 U7 v+ F1 i0 _
            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
3 V- o4 M; h4 c3 M% U' O$ ]( P
; L" T! P8 @# y) |, i8 }

2 E; F1 C" V1 C            // get geometry set9 ~( h4 `- b, H' S: `
            std::vector<CAM::GeometrySet*>::iterator iter;
5 g) J" F, T/ p: B2 Y+ N7 b            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
6 o: ~( ?3 }% |' b' B            {0 S' {2 K7 k7 u1 A6 L$ ]% K+ z
                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);
. t2 A" e; @, P' W7 H7 L                ScCollector *scCollector = geomSet->ScCollector();              k& R, o* u; R  }; Z& W. ~
                std::vector<SelectionIntentRule*> rules;& p& z% d0 ~4 Y/ d0 K5 k& m
                scCollector->GetRules(rules);7 l# A, \8 g2 `' w. G$ P" F

) b  H5 F2 I" h0 M9 j

$ B- e  \) b4 Z$ P9 f) q1 ?4 q6 ?                //get selection rule6 l& c9 S. A0 Z( O& @! _
                std::vector<SelectionIntentRule*>::iterator ruleIter;" G% g5 T; K- h5 l& E: F0 d
                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )( k0 a% J7 }1 s
                {
9 L* r  Q, P- v9 [  s0 H: a                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);& r" A1 J3 R+ l. v: r/ q
                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
- q7 `# c  n& s; ~                    //there are different rule types, here just use body, face as sample" `2 y# N" `, |$ ~! G" l0 r: A/ l  \
                    switch ( ruleType )3 e: O- z: z. d  Y  E6 \1 A
                    {$ y4 q& b8 a2 z5 L. a
                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
% [9 }$ n7 C0 P: `: @7 L( R                        {
  @% p" g" b/ z, @, X$ k                            //get bodies + t/ [" e: H/ G
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);$ r6 c  o9 W3 A$ E2 V1 }
                            std::vector<Body*> bodies;  F) J6 q+ L/ M# i: u1 P7 e
                            bodyRule->GetData(bodies);4 B: i: [: k8 D" d: I; [" I4 T
                            std::vector<Body*>::iterator bIter;8 U! r% a2 T; S. L6 K/ y/ Q, V
                            int index = 1;* `' r9 P9 j& L+ [0 [! {! `+ \. s
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )) k: t) I! \. O# L
                            {8 X2 ]/ B# I" f& W' |
                                Body* body = dynamic_cast<Body*>(*bIter);8 t2 d+ k. _( P# g- g! I$ k2 W
                                ObjectTag = body->GetTag();
9 K, k0 d) ~0 Y3 T0 S) l. a4 x; m                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                2 [- h+ x; Z& ^, d
                                WRITE(mesg);, x: g. [% Z. [; W! v: ?9 s) @1 Y& D
                                body->Highlight();$ d- s3 ?' T, s8 g
                                index++;7 l  F& J8 O1 j
                            }5 L' |1 i2 P$ _4 Z! z
                        }- _8 x  Z2 Q/ J
                        break;- f- ^7 I% @/ v2 \/ \/ ?: M

+ |* ^; F' \' {" m) e+ V* S: I
( a8 v9 h) F$ ~. `' q
                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:7 @- {' c, g5 c9 M1 x
                        {
; m# A9 ^) r7 c1 C) }- x0 A# o% ?                            //get faces
+ |. }, A3 [' b0 T, |: R  `& {                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
2 j/ D4 m4 c9 L) n                            std::vector<Face*> faces;1 u# b& z# C8 x4 O
                            faceRule->GetData(faces);
' h. m" \, T" n                            std::vector<Face*>::iterator fIter;
) Z# F. i& T+ V' R# m                            int index = 1;
( X0 g) L+ W7 f! W                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
2 N3 \3 a1 W7 b( k. i$ ?# I/ B3 Y                            {
5 y0 [- x& W# Q- N! {+ V                                Face* face = dynamic_cast<Face*>(*fIter);1 F* k. t& B& r2 j
                                ObjectTag = face->GetTag();
. j7 d; ^. v5 [( b- K" T; h                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                
1 y9 x9 B; S, M- o' p8 i4 K% w7 @                                WRITE(mesg);
9 @4 b) b2 W# L  M8 H* a                                index++;2 m1 E# L; `' l! Z7 j
                            }
9 H) r3 @6 Z2 b" D                        }
$ I8 I2 Q5 E6 B( q4 V9 v                        break;; Y# {1 m0 o! L2 ]

, d' o( W+ ~5 m& z5 V" ~

+ ]5 A% W& E- g% p# ?0 G7 a" u                    default:
- n. P: v* C; n5 A2 f! J( n8 l                        break;
3 r9 g1 u8 B, C  X                    }4 J$ u, F# i7 l% C1 l
                }
6 [" g6 ]: X3 a            }" V7 x8 C( ?; a
. h9 A* M7 V) p8 R5 X2 ~
" B. h3 x' W. n* M4 b! ]; r; P, I
7 @% G* O; |- K, W
4 D9 W8 W/ M5 S" ~
5 k: l+ k4 e* ?: J
+ Y/ P3 j) d  {0 S
            millGeomBuilder1->Destroy();
. r% P- c: h. t5 j4 o- Q2 |& o: D+ v; t$ i, d6 P5 O
" m: ~) k0 b# I2 v  {- O
        } else {" s: Y) \% N* r0 c6 \, ]
            WRITE("type is not UF_machining_geometry_grp_type");
5 b  z% e" e' w2 }" B) P2 \            WRITE(" or UF_mill_geom_featr_subtype");4 t- @" L0 z, G1 N
        }9 i$ }0 ~8 N2 p; J+ t, `0 _5 I
        UF_free(objects);
, N: U* I. s6 S* p* L& b7 Q( e+ H3 a, j' u2 K
* m. ^1 f' l/ d0 b6 M5 y
    } else {7 Q% S' }# \# [$ Y4 b6 L! W
        WRITE("The number of selected objects in ONT must be 1.");0 b2 c) f5 y# P3 o( p, _; x0 v, Q
    }
! t" T  I, m; k( ?& g1 B! f( m( y" y; u' O

7 L9 f0 ^& B+ T5 }; V}
3 {3 t) o8 K5 Y3 V/ b& G; d: n5 [$ |/ F
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

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

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部