|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 u- a) M! v" B+ {1 A5 O, jNXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
$ D9 g8 v1 _8 l1 @# m X( A. u) N8 b" S1 }& Z
5 A* |8 M0 T4 v/ y3 j1 X8 \static void do_it(void)7 c c( q/ s! _5 x r/ Y
{
! s0 T+ ^) n9 H) n$ y logical is_initialized;/ S5 U1 @0 w1 J- \! F" s) ^
int object_count;2 ~: M! @" \: t
int type;5 S9 Q+ v8 _" k
int subtype;$ p0 z: M2 f7 m2 k9 B
tag_t *objects;
. ~) J) ~3 W1 K1 @) O1 D. ?& k
5 u0 i- Q8 C2 G6 q b) ^
, P( A; x2 S- c5 G/ [$ p. v) e2 P0 Y8 S( t
3 \2 {4 i" c: S4 o
char mesg[133];
+ C" m# y8 s' J( L/ [
% u! v# q0 _ j& n" |( }3 Q: J. o1 r4 H0 o5 k+ @. m0 a }
// Get the work part% }2 ^: f, Q' {. v. l% B5 o- ]
Session *theSession = Session::GetSession();5 G# h1 b- n, Y1 n2 ]
Part *workPart(theSession->Parts()->Work());1 @5 @/ {( Y2 o5 l+ R
Part *displayPart(theSession->Parts()->Display());( l: |) Z. M, t* a4 l' a
( n$ U$ \( e1 B% K: @+ f$ [9 ^4 _
) T) P4 p% @- Z: g
& \: f% ^& }" }/ j3 _
+ s7 i9 \ }( r4 @6 {) _: ]8 Z" t if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;) q' C Z) J0 T4 [( E; a
, X f1 V' F' `" l4 j: U9 |
! B+ x! v" V( ~7 f/ L$ Z
/* Get selected WORKPIECE object in ONT */5 I; y2 F# [/ R- U& [
UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));
& \/ a' Y. e7 X2 d. S9 N* w% B3 P, Y3 B) w5 @4 c
7 x! R0 a% D% J, B3 L: p8 t: g5 V, a- A! H% j( o# I
; q, G' m- \! Z( [
if (object_count == 1) {
+ a( ~/ m# D: M* Y, W; k UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
9 T2 X% N, F* V: p
+ ^+ Q1 P, n! o: W
7 v$ `3 l- _$ S2 R$ F6 Q4 U: U* A
2 y* S: D/ N% ^: L: T( _5 J1 O0 O& a3 M; q& w/ W7 l ?
if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {# K8 L# {- G4 Y8 m9 z* N6 ~1 a
7 g9 w' F# W& I. Q1 N5 t, }
& C) a1 G% |( ]8 }6 Y& b( Z7 B tag_t ObjectTag = NULL_TAG;
T- e5 n8 n1 }$ D" I f$ O) k, d7 v. N$ P
( A2 a; j3 S! f4 i# \6 U
// Get the object from the WORKPIECE tag a4 z6 f7 d4 U6 m4 X2 L G i8 @
CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);* t: a5 H5 K2 z6 C e
' I4 i: }) |7 s5 m: {6 f9 v5 H5 j6 }8 t& b- y( y# T
CAM::MillGeomBuilder *millGeomBuilder1;/ r; |6 U# z( \+ @! S# x- V
millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
; {1 `, T* R+ t) e o# [1 m' ?$ E0 q6 u# E: w$ \
3 [" o$ e+ p' w. E' H, @ // Get geometry set list
2 x. ~ n- W- e6 O, o5 G5 | CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();
& A2 I9 Q8 v1 h std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
, S& u3 T2 H) R/ T8 i1 I! E* U+ k$ w8 ~$ y
' W9 g9 m- Z4 }1 a
// get geometry set
- z' Y E% y% M6 T. p% m std::vector<CAM::GeometrySet*>::iterator iter;) d# [8 b4 i; _
for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
: B* C! w4 e3 x# {/ c" V( \1 v0 o- B { ?7 X$ `+ w" P$ }; p, Q- T
CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);; x; Q! z- }* u! X$ |
ScCollector *scCollector = geomSet->ScCollector(); 2 U" b& P3 `% v3 C( w- o* k5 b I/ e
std::vector<SelectionIntentRule*> rules; k8 k* ?6 R+ W7 |+ o. k2 s
scCollector->GetRules(rules);
2 i9 M% ], h' X0 l/ Y) ]
0 a7 Z6 ]1 F0 ^0 p
% i, ^ M& G1 Y* m& G //get selection rule
& B6 {. i X, v4 t std::vector<SelectionIntentRule*>::iterator ruleIter;
( U9 \( q6 T2 p0 p- N for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
$ `8 G5 O& J( V3 l; I- a6 _ {& k" @: |: p m9 c$ d
SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);0 U" l4 Q: T# s4 N: V
NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();5 j, }& T7 \6 T) T6 A, D. n Q
//there are different rule types, here just use body, face as sample1 T% O {9 c: m% M: p8 y% K
switch ( ruleType )
1 c) B: ^0 u8 W0 `8 X! m( L; a# L8 f {
1 P& x: O! j" x/ ~( N case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
$ t* j/ Z* o3 B {
4 k. E2 `9 j6 T1 {# b* u j1 _, Y //get bodies $ F3 c, m: K% R# ?3 \! W
NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);
" }; [2 x) t( X0 p x std::vector<Body*> bodies;- U+ e: m- @: |: t* p( H9 `
bodyRule->GetData(bodies);" z# s( _3 J1 W9 y# i! R$ p; p7 ?
std::vector<Body*>::iterator bIter;
6 M! w! z- n# m4 g$ P5 Z' P2 Z' m int index = 1;
' b# ^, q7 t/ Y4 r, _5 y7 u for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )
& r( L1 N) { `9 ] Z {" j' I: @7 `& G0 a6 e( a6 [9 E* g
Body* body = dynamic_cast<Body*>(*bIter);
' n+ m8 ~# N( \4 E* [- l" l9 Z" H ObjectTag = body->GetTag();
5 b0 J8 k; Y. y sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);
1 t. N4 M- i# s& \& q WRITE(mesg);" ~% I. a4 I; E0 b2 P' c
body->Highlight();
& K( L# u: T3 S& K1 U# Z8 e9 ?3 c index++;0 j) Q* i6 E! q3 A
}8 I% j6 E' U( V( w( R# q& j: [
}
% P7 b! L' O& {& `8 J; B break;
6 f- t W2 S" |6 P' T' R2 l3 g# a. m9 }: \5 Z
1 X) p# v# f9 a case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
/ P( u, K5 V$ U% c: R {9 E) v7 M# { C9 X4 ~( O! t. v* I+ P ^
//get faces
: i1 P; B8 K6 B. e# l0 [) \8 ~ NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
) N2 }+ d) o, w std::vector<Face*> faces;; z; M" L/ ]/ T0 ^+ p
faceRule->GetData(faces);
" }4 m" b- L) {* @3 z4 C3 \ std::vector<Face*>::iterator fIter;
( c w8 m9 Y9 p' a7 ^0 Z int index = 1;
5 ^! k Q e& @" M for (fIter=faces.begin(); fIter!=faces.end(); fIter++ ). |) c! Z. q4 o
{
, S9 L* K* s. o3 X5 W9 E+ q8 \7 i9 i, S Face* face = dynamic_cast<Face*>(*fIter);
- Z7 ^% m0 e( _) a, U: u ObjectTag = face->GetTag();
$ F" W% l- h* o4 f; ~# L4 G+ M f* q sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag); / \+ H+ i' R8 S
WRITE(mesg);
( z$ q; a/ I& [1 g8 o3 p4 f index++;
" V7 n4 j; `/ a4 F! y. k3 p }- X, H: L0 N0 ~
}; I0 X$ W$ [1 y5 p1 |: U' Q) L
break;% {( p9 u, Z* N2 z$ f
! @8 {6 @0 v7 R1 i" f8 t$ N X* E
9 T4 s W6 u3 I; M default:3 V9 [) ~. L: Y g$ e4 u; }' u# y
break;; p$ u, g- R( w, a
}; |. n6 a" d) ?
}3 ]* ?2 L$ Z/ {' w$ I
}
; `* [% s9 m' k7 o9 a
% v' E; d3 k' \/ R% r! q/ a& Y: [, G' G& n( n8 \$ w
. T/ c C# n6 v8 U& L& h G A
" ?, Q! B, z, Y5 ]; K K2 V
& t3 u6 q+ M% B2 Y6 X* |# S
9 b* r& ~* W0 r* ^5 X millGeomBuilder1->Destroy();; {8 ?% y5 y. _2 i6 \5 S' i9 u& d4 E
( y2 K/ n0 \# x+ j1 N+ e$ Y0 p0 z
. Y6 E3 c5 x# ]: k$ z6 }' g, G2 R } else {% O/ e! @2 }6 e" m4 J3 D
WRITE("type is not UF_machining_geometry_grp_type");
# Z% u4 B+ ?1 X; A6 W5 r# o WRITE(" or UF_mill_geom_featr_subtype");* k. |# @( z: V
}
9 \" e2 d- ]8 Z UF_free(objects);& l& t4 p6 U- S! Z% e; f% D
: @" e0 g1 h- y% ]- \% I/ \- k; V: a1 E* v
} else {4 y8 A1 |1 b- a. j. ]
WRITE("The number of selected objects in ONT must be 1.");+ k: O a6 q0 T7 z* r4 F
}) ]2 A+ a3 b2 S7 R7 O D8 ]
+ t% H0 o" e3 \% l7 Z1 J( C
' |- o+ N2 n( Q, K O, T
}- U5 r; N* H. P" v* T/ I
4 r: K& l1 H7 S" O+ n7 P7 @" j |
|