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 4627 0

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

admin 楼主

2018-8-23 08:32:50

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

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

x

, R" a" n( }- g! C" }: m5 \; JNXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
. a. m; q3 C- I7 w2 ]0 D% h
/ c8 L1 {" b! R% q. {$ Q) k7 o, w9 x! _
static void do_it(void)
0 A2 ~; }3 K$ _& v{
/ C2 |; B4 }' l" J7 ~: D    logical is_initialized;
2 [. V- Z- p+ K8 w) F3 d    int object_count;
+ x, [4 @; s  {5 k9 s    int type;( Z5 q3 I; l9 _; J& ^- e. q
    int subtype;
& i7 @; n8 ~- f/ O6 W7 t- `% h    tag_t *objects;) G' B6 f. [! G5 I, q/ R" {

% w2 d* j! B1 F4 k. M3 P& y
; K0 f+ c& [5 _, {# O6 w2 u+ B; E
8 n2 j0 z# N! J* j, O

0 ^, w* c# o. c% N0 N5 a5 n, B    char mesg[133];
$ J: e5 O/ W7 ?5 m6 e" Q/ z  }6 E; s2 ]( t* G+ Z  o3 R
9 `+ a( w$ M9 V* W- V; w5 O
    // Get the work part& |/ s+ g7 \8 b& I8 v
    Session *theSession = Session::GetSession();: y& v3 l, }( o9 I  o7 H4 A+ {
    Part *workPart(theSession->Parts()->Work());9 G7 g% v. g' y# ^
    Part *displayPart(theSession->Parts()->Display());
/ j8 Z- Q, I7 e5 L/ g' r
, \5 L/ q, L: C8 t
5 a( S1 b, l; T# ~4 d

, _7 i* b* E7 l

6 B5 d5 j1 k/ ^2 x" \1 `    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;: e2 g8 f2 K* m2 L, ~

6 i' {$ Y7 z$ m. b+ ^  B% Z- ~* d
9 C& [# Y  V* H: K( m
    /* Get selected WORKPIECE object in ONT */9 r/ b! a% e0 H7 E7 `
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));: d/ I! b) ]: r/ ~# _0 ?" t
+ ]+ P$ k! [4 U
* x4 ~8 A% i/ K7 O+ K0 h8 n# c

, L% @8 @5 f" b3 p
0 ?5 s' y  H, }  R5 z5 g; I
    if (object_count == 1) {
& {. ^1 V* s7 h: I) D0 z        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));7 L) U7 n0 X4 n0 @; [% v3 R
/ \3 c) ~& o' d% z

" m- G- W- ]/ D' `1 @* @" R7 h; @5 C3 P5 _& e
# F& E6 [: M1 ~+ S
        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {$ P. T) W6 ]: h# e/ Q3 E( |

- P! T% E" r# b% T# T( j/ g/ |
  e& Z8 Z8 F3 C' k" X
            tag_t ObjectTag = NULL_TAG;2 C, K& p  {# N6 o8 x
. z0 K* u7 v( h: {+ c

5 W* f, M+ o$ U            // Get the object from the WORKPIECE tag
2 W/ f$ [! j. e0 J3 w, B9 w            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);
" a6 l. F: J( Q8 R6 [% y$ K6 s

+ m; ~/ x+ r8 B# L% j' S! @+ E            CAM::MillGeomBuilder *millGeomBuilder1;9 }# f% l2 a% i. y2 r8 \% n9 k
            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);0 j1 n- t& b" B6 [# U6 M5 N9 \4 q
' c3 Q# ?& ?; V+ k
$ F  o# _! a2 [. Z* _: H
            // Get geometry set list
8 i3 d3 ]+ D4 o            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();' u* ]& Q6 s- x+ M3 R$ Q3 k
            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
: W, U4 k: ~5 V# `# r( L2 E! g* x9 v2 `, S% ^2 @
  y0 D7 d  l0 h  N* M  E
            // get geometry set( ^1 V) o" f6 r- x3 n
            std::vector<CAM::GeometrySet*>::iterator iter;
1 Y0 a' `5 N: u$ |            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
/ u/ ^+ B+ T3 V: n: s6 ]+ I6 d, U! g            {
& n; K! e" o% g& X5 r6 E                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);" e/ A$ M, Y# Y; R/ s0 _) y9 N2 F! B- V
                ScCollector *scCollector = geomSet->ScCollector();            2 {/ [; s' ~2 i) {6 V# i. G. ?& a+ m
                std::vector<SelectionIntentRule*> rules;
1 I' S9 B( L" ]1 a                scCollector->GetRules(rules);; @- _7 A+ L. G) i) M4 [

( K( o2 p* m' q  d
8 @; q* Q+ a2 S5 V* G
                //get selection rule
) ~! {) T3 `2 ~4 p  S7 p                std::vector<SelectionIntentRule*>::iterator ruleIter;
* w: A% W+ _5 j; \& `% E8 Z0 L0 F                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
9 k% p2 C8 N) k( \: `( F) O                {
0 @( [8 f$ \1 S/ i8 A: j1 w; R                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);' n1 J7 D+ y5 b. J, p# a+ o: H
                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
( k0 e) _- W3 u5 |6 x                    //there are different rule types, here just use body, face as sample  ^, W( p5 I+ r. ?; T' `
                    switch ( ruleType )+ M$ R* m0 o% L5 n# n1 |/ n
                    {; K: R4 ]/ H" f4 ]
                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
3 }; W: a3 b6 a7 Q1 E: y/ Y# }% P( p                        {
! i. \% m/ w' r( e5 W                            //get bodies
; o+ Q4 _7 L0 R                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);7 o5 K" ?' I6 U$ W0 I* m4 O
                            std::vector<Body*> bodies;
7 {3 H( v% n' g9 t6 k3 \                            bodyRule->GetData(bodies);
0 [& a4 X1 P- v                            std::vector<Body*>::iterator bIter;
* u" I2 I' V" B  A1 `                            int index = 1;+ H* y( M5 P6 ~0 B/ h$ u1 }. p
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )
4 [: `2 u1 R5 {' ]                            {
/ Q4 F7 e7 O% k  {# \                                Body* body = dynamic_cast<Body*>(*bIter);
1 C7 B% J5 e/ K$ @& q: A                                ObjectTag = body->GetTag();; h2 P6 A! P9 R
                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                - C2 n3 j' v6 o. G# o9 T5 b. G7 |
                                WRITE(mesg);
! ~6 M. r) F1 t% v3 U3 J                                body->Highlight();
4 M/ o% D/ p1 k                                index++;' \1 i! D/ a2 q9 ^0 P' A! W, N
                            }1 v4 s) Q. m1 ?4 c; {
                        }& i, e& g* C  b& P
                        break;
5 \0 _# a5 [. A' _* j0 {9 i: @6 l& F; }! j0 K9 E; v7 ^* t0 o

# H5 o; G% u( I0 O# `/ _) D                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
+ ^+ h% y6 ^, W: ]7 G/ z( ]                        {6 w- y( X1 a. C4 r! U2 ^
                            //get faces 3 v; a9 \: K0 }6 J$ X4 k$ N$ A
                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);- d- o6 V, ^2 d* e1 ~
                            std::vector<Face*> faces;: F' |3 v+ p- P' q# D, h3 p. J
                            faceRule->GetData(faces);/ F+ x5 i: {" r# a
                            std::vector<Face*>::iterator fIter;
5 g0 C! j* r+ C' m                            int index = 1;9 j" d- q& @. z8 f: H1 R
                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
5 J& {: y& n; ~# A4 J, `                            {3 p) |2 D: c5 u- M& q5 F
                                Face* face = dynamic_cast<Face*>(*fIter);
4 P6 F7 [" u3 J" K6 a                                ObjectTag = face->GetTag();# m5 R& g4 }8 |; T" z) ]
                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                
; y2 t+ ~& p0 R/ D9 E                                WRITE(mesg);
6 x: a1 \' Z- `# m6 W                                index++;
# H% S, d" `/ }                            }
+ f' P5 P  ]# C                        }
$ a+ u& [- w! V5 Z" o* r/ C                        break;
9 ]' X0 K& C  D. c" ]$ P- k! L* b$ }7 F
6 V( f. ?  d- B3 C3 P
                    default:
4 z# x9 ?8 I2 d2 {6 e4 a                        break;4 i: X  B, R* f- |
                    }* C0 {! ?& F0 r6 p' ~2 r
                }& `% |" [. a" @+ W7 s. Y
            }( }! L3 a; O' O

! d, F5 H$ x0 p* ~! Z$ n

4 T: l8 {9 q# B3 t; z$ b$ n0 {7 O0 a2 M2 p9 w' I
) o* }' k3 k2 Y& X/ m' v( Q
3 q4 O  w( r" o' s

, {, o; S' z, G$ D4 q            millGeomBuilder1->Destroy();, M! B9 ^5 c% y1 v; n

' y; O6 e- G8 y$ \' j. Y# O9 K

* R! I, e' H0 `- z) f% p% F1 W; }6 F        } else {
1 h1 w- k& p2 n9 w* a* M) T            WRITE("type is not UF_machining_geometry_grp_type");/ D8 s! l6 U6 S2 x0 s+ C
            WRITE(" or UF_mill_geom_featr_subtype");
9 S2 n$ H0 H, p8 B, q# v1 u- T        }  ?( C# o& @% o2 A
        UF_free(objects);) Y3 F  ^0 S) f9 y3 Z8 x: F
+ D) x$ U2 j# \. O5 f5 ]
/ ?4 C- g, Z. B5 `& A+ @+ I( Y
    } else {" V+ m2 k8 K4 Z5 q8 I! d" D+ V; f4 u+ B
        WRITE("The number of selected objects in ONT must be 1.");
) w5 t# w& A, B8 U7 f7 U    }' P- g1 Q8 Y3 O1 z& i* H8 x
3 S8 l9 G7 f$ A) B
1 e) V  x, j* a1 H1 _6 W, J
}" a# B5 a  [6 b
' W* i! E  Q! _$ d- I' V# V5 r7 N
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了