PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

- A/ A2 A4 z2 @' ^NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值' p$ b0 v( X% A3 ~* o6 Z; d
: X/ p% L& }& r

8 [+ N- W2 T! ^$ f2 z( m9 Tstatic void do_it(void)) Q7 r0 C7 Q7 N) d
{
0 r( {2 M) H  z4 P" f3 l1 X$ E    logical is_initialized;
+ A0 c7 O4 e4 {' F/ T% t8 k& u    int object_count;
7 `8 D: _$ ~% u4 g& a8 s( w/ H    int type;
) q) g4 c; S, X1 j# b    int subtype;8 T9 K& b9 l4 @/ u4 i
    tag_t *objects;5 n% J4 p) D% I& a. e0 V

) K: n: I4 d5 n  `$ e

( r' N8 W# n# c4 C; k
6 w1 R" O) r% J  o

/ V. ^% [+ Q/ n( z    char mesg[133];
  t$ \4 c! r: U* {* n( f  C. z- \7 K9 P. q
5 o5 u* L1 G$ `1 i- q, v' n: g) j
    // Get the work part
9 w; j% I$ i* g' ?, l    Session *theSession = Session::GetSession();
% Z! i5 K6 M; h4 O* L    Part *workPart(theSession->Parts()->Work());
* I+ j2 j, U$ H0 Z8 x8 I    Part *displayPart(theSession->Parts()->Display());  {4 {: h3 e' x3 J) T: C. l( w
7 K, n; H1 X, K# V7 `

. Z/ f8 ~2 g: J% g- q- D% K" h7 {5 `0 N7 V7 @1 ?7 {: g0 |& M

' T8 M3 [7 P4 [+ u4 ^    if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;5 n+ A) Z9 ~+ o# i

9 c# E" u3 S4 ?

9 n4 a0 l: q* O/ J+ p; q    /* Get selected WORKPIECE object in ONT */
: _' G8 f. g4 X+ |; u1 }    UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));. j9 E  M8 p& E  V
8 v1 A  v2 m9 Q0 P3 O
- T' H' x( C1 P8 U6 K

0 D! Q2 K( ~8 a4 }1 ]6 ?' |! a

/ W( S- X! J0 C  ^: p' F# e    if (object_count == 1) {
, R* d4 }. ^0 f  h. E0 B# l        UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));6 z4 N& N0 ^% ^1 N3 `9 x  [

3 D: ~5 C" L. A" X& L6 ~

1 d, ^& K4 s0 N+ J& }0 \0 j  @
' w1 `) \( y& h. \# i5 Z
5 b5 ]% x2 @1 r; g" M
        if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {
- k( E$ k: v$ x0 b
) ^! i/ P: Y# l( u- v  p
" F4 T$ Z* n) ^" T- Y& T4 n
            tag_t ObjectTag = NULL_TAG;
& A( r2 C  g0 y- J7 {5 c! @
. Y1 r# n4 Q; ^/ c$ q0 i0 d* }% i4 K
$ V, A& H) p) J) w
            // Get the object from the WORKPIECE tag7 E9 v8 Z/ O  v7 u+ H4 o
            CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);7 U( n, J1 e* W. `2 @: K( F& G
& n  J/ l& H5 |; _# D5 f9 T/ ^* N
3 Q* P; q2 u- V( I) t
            CAM::MillGeomBuilder *millGeomBuilder1;
. J, x0 G3 _3 K( U& O            millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);; Q# A+ S. Z) q/ T+ s

4 Q6 W! A8 O& X! N2 l' d8 @
- d+ S7 b9 V/ C  B% c+ O
            // Get geometry set list4 U' D( G5 d% y2 |! ^6 u! ~0 |
            CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();
/ E# H# E% ^! f0 @- Y4 B            std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
- s0 C. Z5 E3 z9 T& ^% }
" N# ^/ o/ K' g3 R# R6 `5 t) `- ?& E2 @

  F2 L7 _! y# ~- H            // get geometry set3 i+ Q+ P- ?' t  Q2 ?
            std::vector<CAM::GeometrySet*>::iterator iter;
4 [- ]( ]: P/ w4 ?: O            for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
5 d* s* V- S8 G* b            {4 A( V& @7 d! }
                CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);
; m  C5 }  Y0 [; ?                ScCollector *scCollector = geomSet->ScCollector();            
: D5 R9 z* w2 e* @                std::vector<SelectionIntentRule*> rules;7 A% B7 P' m7 F" b6 z
                scCollector->GetRules(rules);
- ?/ q' F! O/ l2 d
% q) O8 T$ x$ L" }

8 `: `; E9 @8 E$ n/ v                //get selection rule
, F: A& M, `$ g                std::vector<SelectionIntentRule*>::iterator ruleIter;
9 ^7 L: C! k/ z' V5 k0 i                for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
6 q% ^+ y! M0 Z9 j8 ]& ]4 A                {
5 N9 @( S( l" L                    SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);
! A# p* n: k5 o: [+ D9 T( L6 f* @0 R                    NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
$ e* \( ?# f9 O. M+ a3 z+ }                    //there are different rule types, here just use body, face as sample
  W4 L8 _1 {- }2 H6 x                    switch ( ruleType )3 p! v# c  ]5 r3 Y# F/ Q- i$ n
                    {
7 F$ `; f8 X3 e5 I3 d9 `                        case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:; R& z: X7 P& D3 Y# z# k4 o
                        {
: E" y8 P$ l! u- ^                            //get bodies   A6 c% L& m1 M& H/ E2 _4 E
                            NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);
5 a, ~6 i2 _: _# R) f6 r                            std::vector<Body*> bodies;
8 ?. Z; c  K2 R                            bodyRule->GetData(bodies);
, q; W" _& J2 A+ S: F' R: R                            std::vector<Body*>::iterator bIter;
4 c2 Q" q4 D4 v$ e- e! w                            int index = 1;9 \1 _) h4 P* A9 t) V5 ?: N
                            for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )8 J/ L$ c2 Z3 F  I( p
                            {
: M3 ^1 M$ d3 q. s! ^                                Body* body = dynamic_cast<Body*>(*bIter);
& y" R# U( D- s3 S3 Y                                ObjectTag = body->GetTag();
" I* L& V6 k/ u/ U                                sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);                                
) Z/ D' a; d* f/ C2 e                                WRITE(mesg);* S* Y$ }, y4 S6 X; D
                                body->Highlight();
0 l' K8 h/ e% p" S$ R" |9 r* w7 a                                index++;
: X# H" l* l6 J7 a, i                            }$ E/ N$ T9 f. z; G
                        }
" N* r$ S( \: |3 O) O" k/ q/ e! l                        break;
0 V6 m% z0 U" P9 U& N
- q) p( a; ~4 Y- j
' l. O1 R/ S# ?; \+ o6 ~( s
                        case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:! O9 p6 l, T; ^4 O8 T! P: I
                        {( L- j0 i, Z+ J/ R! c1 h/ A; Y
                            //get faces
- @! r5 W/ p! I3 v" l                            NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
; o# z/ ?' o% Q3 w                            std::vector<Face*> faces;  K. Q/ U. i7 C: c
                            faceRule->GetData(faces);
+ J+ J; w& ?$ {5 A9 `7 e0 O                            std::vector<Face*>::iterator fIter;
1 N; j% x' n, c" c/ s                            int index = 1;
1 m  {# P; X$ n7 q% k7 a+ ?                            for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
) [0 B' }& q: y: N                            {
# Q; F0 S( c' S- d1 e& @7 K, O# s                                Face* face = dynamic_cast<Face*>(*fIter);+ G8 `+ ]6 [7 i& d; R# e3 m
                                ObjectTag = face->GetTag();! ~" y2 d+ ]) ?$ v! d9 V
                                sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);                                
" Q9 E; p+ F3 k4 O; w3 F8 j$ E% q                                WRITE(mesg);8 O; Q$ G3 }: h8 ~. y
                                index++;1 t/ Z! N. q+ `! ]
                            }
. _0 E3 D# C8 {2 r                        }  O( B" b+ p2 K& Z: L( J
                        break;
& K# A4 l5 T. k$ j1 s6 [0 Z+ d
; C2 S- D  w1 Z7 u5 z

: B. {$ R: b7 t; m                    default:; r( e- E  ~6 H7 q! c! S- S
                        break;
3 k( t8 F+ M7 t" m3 v                    }
9 m" B/ r: C/ K$ f                }8 @" q0 ?  g. }! |
            }& m6 h. z) `, k4 ^2 y

4 ?& T, T8 L; B. [3 Q$ m

$ F, F; W( s3 g0 ^, J: c6 F, |8 y' E. q, ]

* _% r% C  c0 f  p% X* X' k1 |6 I" r0 b# S2 U0 _
9 v2 G7 H$ S0 ~9 I
            millGeomBuilder1->Destroy();4 k2 _7 H! n. ~* h) C
" N$ D' G% D) m- S' k; U$ V

4 e: S# P0 \! Y4 x' L' j        } else {. o$ W: ^* t# @; K4 _8 T
            WRITE("type is not UF_machining_geometry_grp_type");! J+ ?! h, p$ {
            WRITE(" or UF_mill_geom_featr_subtype");
6 L& o' t: `5 t( R$ d# u        }
& z1 _: p: y0 d- @' u. Z        UF_free(objects);
% ?4 S; X" v( C- }6 F/ g# _# E& _- W8 c4 T

5 q, @, F$ Z/ v! \    } else {( [' L( h+ [# C0 O( y# y
        WRITE("The number of selected objects in ONT must be 1.");) W7 |9 W3 B9 \6 s! `8 u  i
    }
. [6 u3 X+ I4 I8 _6 `' x! u! ]' t& ?; b/ ^

7 S# G6 S( O. B* P9 \1 y}6 q3 Q% d; y: w( \( G

6 l* R6 ~6 d) C. |  e
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了