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

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

[复制链接]

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

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

admin 楼主

2018-8-23 08:32:50

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

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

x
  X, R( _, U; v6 J
NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值9 }! s) B9 Y0 N6 p- R4 J: o
7 _8 f  D  |6 P' J
  x% o& r# ^# W' Y% C% Y" d
static void do_it(void): m% A- X9 j' M7 A" N1 d7 @$ H0 V
{9 b2 n) s: N! b3 `3 r  `; O- \- Z
    logical is_initialized;
* X( F& Q8 L6 v& g2 }    int object_count;
: t+ M" z! ^1 j3 t5 L! E/ O4 I4 Z7 Z) m    int type;
, _, r( C: Z3 {: _    int subtype;  o% i( A  S) V4 |
    tag_t *objects;% Z6 W# p" p1 V3 l

0 W- z# D, z1 P4 j

: b" ?6 M8 l2 y/ a. F9 u% V: C; a; W. F, m: l1 y& B- e- {% O
# P2 M( j4 j& q* G( z
    char mesg[133];
6 ~& x; T$ d- S9 `9 E! `) E4 K8 q

# T9 D; P/ U3 @; b    // Get the work part
! z* ?1 x  p5 ~: T0 _4 G2 x    Session *theSession = Session::GetSession();5 C9 ^* z. w- \# j9 J7 V
    Part *workPart(theSession->Parts()->Work());
4 ]9 o9 ?, K- R    Part *displayPart(theSession->Parts()->Display());
% `& o! u  n2 C, E5 x( H7 m! t; U7 i( `7 m* i: O) D4 y
/ q* n! |6 b- p4 P1 W- Q+ Q, F% `, U! ~
5 x8 X7 G7 ~! q6 J' C2 L3 a

' t' q/ ~/ s5 B5 {    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;
( d; P# l9 d9 C4 @2 t% l; r& j7 O

( K+ A2 ~( T2 l7 |- ]3 p, A/ ~    /* Get selected WORKPIECE object in ONT */$ m! }9 i; p/ ]! y6 g% \
    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));/ [! ?. J4 w# g: q4 p

1 S( ^0 l, u4 u/ \! T& v
( S7 K4 F* G6 n& u; ?& J
3 e* v% P, F: C5 n
& c8 }2 d/ \# n4 o" ], a1 }. j* X$ [
    if (object_count == 1) {* t: [% I# A  A+ E8 U
        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
" g  V7 O% M  T* F( B" {1 F' z  ^& f8 ~! `$ K" O3 B
# ^+ O# d3 y9 P

" ~) X$ x7 }) ^* h

8 `" s3 h; k& c7 D" c+ V0 d        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {9 Z; t; Z5 l6 ^6 P  N) l/ A
  c" e* I% P2 [7 r% \' K+ Z& b
3 h, K. M( J9 @. L
            tag_t ObjectTag = NULL_TAG;+ Z) C: e# x3 n4 Y
$ [5 t3 U& v* |1 Y( h, e+ y# @
; g3 u: F0 p. b
            // Get the object from the WORKPIECE tag6 b2 u8 I0 M; t7 P
            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);2 `6 W3 M" W8 {5 e/ l# |
5 u4 y% Z; w" r3 |9 _" t$ m% I

6 Y/ s. Z2 w. S" v% v            CAM::MillGeomBuilder *millGeomBuilder1;
7 j( ~. {4 K2 D: Z            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
! w1 g1 `' X. W* W, }& T. W: H4 j
6 H0 g: d: v' A* o% a. l1 K/ ^, i7 g
            // Get geometry set list" ]9 F7 R8 Q% D0 i
            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();3 R3 Z/ l& i  o) x
            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();% a3 y* F5 k% G- q3 D& ?8 ]) U
7 l( a: f' j) ~" i  |8 Y/ D# g0 C# X4 I
- ]2 M* I( {* \3 D" b! F9 \
            // get geometry set
$ {) k, q& s7 ^$ H& C# A' I4 c. z            std::vector<CAM::GeometrySet*>::iterator iter;6 B. |2 H7 o& }7 n0 o) W
            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
5 Q5 Z9 a3 P- @7 t5 i. [$ D            {
+ V, ^# t) ~5 n" i6 q                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);
, h/ ~$ {8 i! ~$ M; Z) E                ScCollector *scCollector = geomSet->ScCollector();            6 Z6 x% m( D! m$ Z: M( _
                std::vector<SelectionIntentRule*> rules;# j0 e7 ^- i; A2 n
                scCollector->GetRules(rules);
1 L5 I! M9 ]/ N3 v' c2 N
9 `* v; q" \# J1 J- W. _
" ?: z. I4 L8 i6 P% q' n: {
                //get selection rule3 r& L4 }& _& h9 m% f8 i$ @# W7 m
                std::vector<SelectionIntentRule*>::iterator ruleIter;
: K, k- c$ M* z3 V0 t) n) ?3 s                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
& @4 m3 u& j0 S, {                {# q' @; a, b# ?( h
                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);3 R6 Q4 C% i. W6 B
                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();* l6 ~% @- v4 j/ d5 O
                    //there are different rule types, here just use body, face as sample
2 `) G# H% _2 G8 I                    switch ( ruleType )
+ A) t% U5 K$ b                    {- z5 D3 K3 c. o- l& W  X- |2 k
                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:# j$ ?+ c# {- R5 W! s
                        {' {$ o/ Y2 f" a3 O( U# E- a
                            //get bodies , ]6 {1 ~3 Z8 i# x) r/ M
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);5 U# c1 k. r  C; ]8 d6 t
                            std::vector<Body*> bodies;8 M2 r( p" w1 ]: h3 o+ L) a- ?
                            bodyRule->GetData(bodies);
  E$ ?1 o9 A5 U# A7 f) L                            std::vector<Body*>::iterator bIter;3 }9 W* B" Y& _1 Y8 C0 b9 b( D
                            int index = 1;' z4 O9 p4 ~. X( X. H7 L& T$ J0 d
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )
  u4 s; C4 U+ h* x2 j7 S. P; H                            {
2 T$ I- I0 V+ x5 A) y( |                                Body* body = dynamic_cast<Body*>(*bIter);& c- [* U/ z6 J+ O- f- W
                                ObjectTag = body->GetTag();
5 r" [, U# w3 [+ Z. k) Q. s/ U. l                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                
. j6 H8 _$ b# Y( Y9 A9 \6 L& D                                WRITE(mesg);
, A. N! }/ K/ M" l8 y' n                                body->Highlight();
" E( o% Y* Z" c9 \% w# Z                                index++;
6 Y" g* o$ d6 r, |/ n& j                            }; V. E) L3 ~6 C* F; b0 O# J+ `
                        }% \6 Q9 ?/ y" }0 N
                        break;
+ A0 Q' h+ ?, e* x1 m  ]6 j$ H0 Z% k4 k+ U& \6 c0 p& H
2 s6 }, h  x9 Q- Y8 S
                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:0 E4 _: d8 f! u, j7 ^( R  I! z
                        {. x  Y; y# s) C' p
                            //get faces + C, Q+ t, G/ s0 N* E) H) ~8 l
                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
4 T4 _4 U) a5 J$ |* t, F                            std::vector<Face*> faces;. f$ {1 t% Q7 |( R+ K
                            faceRule->GetData(faces);$ |& J  j' v# g; Q( Y
                            std::vector<Face*>::iterator fIter;
: o* P" `. v; _& u                            int index = 1;3 X0 U! h+ w! {$ _( S( h
                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
, D& a- j3 r. Q! l' b) F                            {! L9 \( V5 i) ]# s1 K, y' y
                                Face* face = dynamic_cast<Face*>(*fIter);- i$ _. L! u' ^8 N5 i4 g/ Y+ b
                                ObjectTag = face->GetTag();
7 Q' m$ u, ?; a  \) M                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                " |- `: J. ^; u$ ^, \2 ?9 c
                                WRITE(mesg);, }% v) ^( v* j% E! B% V5 P! r
                                index++;( U1 R' K4 P+ w) w; `
                            }! n8 l: U4 q/ a5 ~0 Y
                        }; l5 T) ^: r/ `( V
                        break;
9 ^$ v, R. M! _/ z0 g  ~  u/ D' [

0 G% a$ d' }- L' ~                    default:  Q: u1 O$ r5 T4 ]+ {# P% m3 l
                        break;, e. @. w* m% |2 e/ x: H  J" s
                    }
1 n* G  V) ]2 z/ h$ a! a  F7 T                }' D8 P& J5 X: k' _) x/ @
            }- {0 q+ ?. L9 U, s1 ~  O' ~
2 w& g# b7 t) H( F( }0 W
( `2 T+ {" T$ Y

5 p7 j* g0 o% i& b+ a3 r
' x, y4 G9 \" h8 ?0 }) D5 F- J4 H! a
- a' g" V- T; J% R- O: E2 H1 I+ \! s

  H% K" ^" B: g- `% v4 w            millGeomBuilder1->Destroy();4 r- l, r" G6 n. ]6 n

& q" m5 G  b4 O2 F

* q0 I) s, _. O8 }! D- C5 w        } else {3 R3 L: E% T$ s/ k
            WRITE("type is not UF_machining_geometry_grp_type");
( p5 j  @5 k7 o            WRITE(" or UF_mill_geom_featr_subtype");
! \' G' C1 K+ c( R" y* l        }
- ~, k' o* ~3 O* g7 h2 E        UF_free(objects);
6 j( B, ^3 N4 p9 m# e, r" G% y& Y. [

1 u7 v- C( W, ~" V    } else {
" w5 k4 B% O- D        WRITE("The number of selected objects in ONT must be 1.");! s6 }8 I1 h8 H6 w" o5 T  o2 n
    }
7 b$ n0 j( o& L6 W: V6 S" G" X3 x6 W% l2 Z& Q
: x: [) u6 h! _; P9 Y' Z
}6 [# J. `6 E! |# k! G: z- m

4 P: U* @( X. ~0 h+ Q* X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了