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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:32:50

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

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

x
" K; X; l5 n: n3 B, A8 r" {
NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
$ r0 h+ _5 e& O' c2 A1 \7 k/ l0 q7 H4 Y- ~- K

# C+ D" n2 n# z: \8 Dstatic void do_it(void)% m8 e$ c  E; K# }' L5 L7 p, f
{* a  n' L; _1 f9 ?! {  m$ l# i
    logical is_initialized;% z1 B; l; u4 ~
    int object_count;4 T9 }% ]& L8 e& |4 E
    int type;
; O$ ~) Q5 m6 H) D+ n+ Q. W: k    int subtype;7 G; a$ W' w0 k4 v
    tag_t *objects;
# {: l/ X6 a- r' O/ ~( @0 e, ?. ?: q0 E1 {" Q7 W4 J) x" [  @

7 m% y4 h( U" L6 M
+ Y+ c. g/ l/ S; R4 H- ~
% l4 q3 J. }. M* n- R, w
    char mesg[133];
8 Y% u7 V$ E' _1 G8 K4 [2 H' ~: P5 H6 n. @+ Z7 }8 |1 y" f) B
7 O* R) y( ]* v
    // Get the work part- @/ }& B( D5 Z% R8 `' Z
    Session *theSession = Session::GetSession();# B( |$ z- G' M% A
    Part *workPart(theSession->Parts()->Work());
6 p2 x4 X+ I( k& ?& _; Z" K    Part *displayPart(theSession->Parts()->Display());
# h4 N: m' I& e; N" ]1 n1 c. O% W, g+ M7 b. u
! {2 @) N5 m& \

* F, w: R2 F+ e  l. g
0 E$ n' [" ?7 j( s+ i- F
    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;2 l/ Z, ]$ y  Y; S3 O% O9 _  x4 H
3 O# D; X7 f. @- l, L% d

5 y: K1 N- v" \# r    /* Get selected WORKPIECE object in ONT */5 G  C$ z1 M3 V7 M5 A
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));
+ s! J) E$ E! d* T5 k- J% z: x3 b2 r0 [' T3 N2 `2 `
7 V' c3 X- N, [

% ~! ^. g- v% f: R0 n

9 ?: k. b# j$ a/ H' f5 Z* T    if (object_count == 1) {. Q: Q4 ^1 }( @& g
        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
9 g- n8 f9 M- ^8 y. w+ T
. P" v1 R9 q$ T; k4 ]
# ?9 `9 V- O0 q. K6 a( M2 M& [

* M4 B, _" r. t6 F2 n& q2 a0 X
& F3 m- r! b9 o0 s  C8 }9 d
        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {" F( }3 v8 I: c& i
$ q3 v2 q) \3 f9 S: H5 l
+ u/ g/ r: k- w: Z+ x" \: P- M- ?# S
            tag_t ObjectTag = NULL_TAG;
5 k* }/ U  O' m# L- o
& t# ?& h- }& Q5 |9 f) B; k9 q8 ~
6 \7 B8 q0 R, T; G5 z
            // Get the object from the WORKPIECE tag% o( b+ K: [8 H0 g0 Z/ q3 X
            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);3 k; d! ?4 ~. O5 j
% {+ z- B# W' l9 c& s/ V! C* I! r
1 _0 B' B" @9 }' O4 N
            CAM::MillGeomBuilder *millGeomBuilder1;
: J! ]. T3 m; J            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);1 I5 w/ b3 i2 E. q1 b9 ^
% m& z, |; b" x6 B* ]( m+ S

0 |7 q# p. x( g/ q' E* ^+ r7 l            // Get geometry set list. ^2 A/ u' n* i
            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();
' L2 c3 }$ q, v. e  r* H5 d7 V& U            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
# |, L& g* f- Z) n* [  J% ~+ y; t# k

+ m& p; \$ Y! |% }            // get geometry set
+ M; X0 n/ F) D2 ?; S3 m, s            std::vector<CAM::GeometrySet*>::iterator iter;; {) f( r0 T1 L$ t1 T- K- E! v
            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
, }7 B2 U: d+ M            {
/ S! C0 A$ J; W  c( r                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);& N6 P/ L4 V( ?! g" a* Y: S
                ScCollector *scCollector = geomSet->ScCollector();            6 m9 ]+ ?, G9 C; I* b
                std::vector<SelectionIntentRule*> rules;
8 d1 F9 `/ s. J' Q9 C: G% P                scCollector->GetRules(rules);' E7 h' _4 q. F, _, s- _3 G# L
6 M- e# W* A6 C$ N! G
  r4 H' w8 o1 `* D2 R
                //get selection rule( Q- J% |" z/ n! W" o1 r/ M/ E
                std::vector<SelectionIntentRule*>::iterator ruleIter;) c8 m; g+ `8 ^5 s
                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
. X: W  g& W% A& }" u& q                {
2 A7 k! k; c2 d6 I) Q                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);/ k6 A' M+ q* h5 K9 i
                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();1 N. ?  e) K" _! r, \/ @
                    //there are different rule types, here just use body, face as sample0 y  H8 N( C  _  d& l
                    switch ( ruleType )
7 b8 D1 P0 \* V  o                    {+ d0 [+ s. ^7 \; ~
                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
! ~! Y. Z$ m* ?2 h" N0 g$ j+ B2 ~& s4 {                        {
. I7 N# E8 [( U8 \. B1 i                            //get bodies $ h1 z) }2 ~; t1 l8 Q! k/ d; ~
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);/ V; ]/ @& A6 c0 e9 y8 b
                            std::vector<Body*> bodies;
' ?5 g% R' x4 N                            bodyRule->GetData(bodies);/ {0 l9 `5 C1 X8 a3 @, c
                            std::vector<Body*>::iterator bIter;( [& v0 Z: b6 R; X! E* I% U
                            int index = 1;
5 `' F# D6 ^; [                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )
9 i0 ~- N0 c: c0 ^: B9 }                            {6 R$ T/ X8 U4 D" A5 z# e
                                Body* body = dynamic_cast<Body*>(*bIter);  z: A5 j' V" b: l! _% V% j% L3 B
                                ObjectTag = body->GetTag();
% s( q' `5 u, Q& Y) c                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                
  w% I- s$ y7 c( Z- M) h' j# h                                WRITE(mesg);  c/ K- e# s% U
                                body->Highlight();9 e0 n1 i4 \+ _" E3 D' f' v
                                index++;
- m# U. W6 |+ ~. r% i2 g; x2 B, r                            }
- b, w$ |2 R' c  B5 `# H4 C                        }
+ y* v4 A+ b5 x" ]: W0 K* v& G                        break;& \, M# r0 F! O: M: y

  r$ I+ j; ~2 C3 ~; H
0 b$ `, ^6 e' p9 m" H8 h
                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
! }! U! Z! @8 B" d3 F9 v5 V                        {
# O! Y  f6 Z! d" y3 u. U5 x                            //get faces 3 P# \3 p/ h/ J2 X7 M
                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
8 z7 t1 |, a5 m' s4 o$ e                            std::vector<Face*> faces;4 A, R0 T" h2 Z/ r
                            faceRule->GetData(faces);" d8 X" k7 ?( N- c: ]7 K4 W1 T
                            std::vector<Face*>::iterator fIter;
5 ~4 J" V0 k9 M! ~                            int index = 1;! E/ D2 I% V- n8 O4 R0 S
                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
' q9 x) r/ n. x& D5 o  z9 s8 U4 B: X- y, ]                            {
) y1 N0 ^1 i5 |0 G! n                                Face* face = dynamic_cast<Face*>(*fIter);; C$ {* [5 h5 y+ f4 m
                                ObjectTag = face->GetTag();7 H& G) i2 W5 y4 U2 v& w
                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                
/ S* ?+ K4 M1 O8 X7 z& b                                WRITE(mesg);
" l: C2 D( C! q& |                                index++;
8 P1 S. H1 w* R4 d                            }3 g' a4 x' V0 `# p
                        }
; i8 F; T% i0 ?6 K7 X                        break;
  r  x; U0 Q, ]1 b/ q7 u5 d( Q2 e" H9 ]
5 M9 p% c# A0 H3 B
                    default:
4 g, v# V5 F( J7 k8 d; d7 o5 c" f$ q                        break;9 l2 T9 e& ^# K# }6 V3 R
                    }
  ?7 l, l* A+ F                }
1 x3 F' @7 k- _7 N3 E6 i            }
: }+ L0 ]  B( m# g0 K* X; f4 u8 Q( c2 \9 ?' `% b
: e) T, `% H$ r+ Z

5 a2 L' M8 P: h4 _

1 ~) c/ q% w7 t2 A2 ]  _6 M9 O3 ?" Z4 Q0 m
/ |0 S, `. w7 X0 B% E+ ~  Z
            millGeomBuilder1->Destroy();
8 D- V$ X* z- I" \, C0 B
6 i$ `  K9 j+ Z. i2 n  {+ p) P

0 D" l7 ?6 x& R# ]( e9 ^        } else {: e1 d! ^4 V5 J7 Z! T& X$ @
            WRITE("type is not UF_machining_geometry_grp_type");5 O+ R; v" W* R% A% \+ I
            WRITE(" or UF_mill_geom_featr_subtype");
+ Q7 Q+ H8 l6 {; b4 c% s/ H        }% @; ]  k5 w; ?- r
        UF_free(objects);
" D9 V8 A8 @: F0 b; o2 B
- b9 o2 ^: o9 V: ]' A
( o; O: U4 ?7 g# L; a7 h& a
    } else {
2 g# K" G% T* d" ~5 x. E        WRITE("The number of selected objects in ONT must be 1.");! C/ k  ^$ A) H
    }/ X! e( w% T" p5 P
& R7 z. E! p9 w0 ~" |# _7 `
) I2 s2 d& |% N
}
( d( F3 B0 z: `/ I4 B/ r$ A. @
+ W4 V: u; E& `4 ^  ?# q6 A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了