|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
, }! k/ h6 M. d
NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
8 u1 z; @ l( T9 L% S: c( m, w+ A
# q( a) x9 W' H P! S$ l& L- {" `
! `+ L" j* @- Lstatic void do_it(void)
7 ~& N* W# r; L/ Y. d. }2 \" L{/ H+ N T! q9 @" L
logical is_initialized;
& g& `" s) O9 Q% @& a7 M+ ^ int object_count;
1 R7 m1 o! {2 R. f+ { int type;
4 L; K/ f5 S6 S! c0 p1 c) { int subtype;
) k2 z9 m/ T* p! S' W, b, |' Q tag_t *objects;
' C ^# V5 W$ |& }: g3 c, ~1 x$ m" h. t V4 T h8 B
+ c1 F- L' E$ j* v3 H
7 N9 h/ o r+ z* O1 T6 m+ u9 ~) L0 w1 D) c# ]' P% C6 X
char mesg[133];: @3 G* D- m5 Y+ @( e
1 w8 X& r0 P2 `: C0 \
; {# j9 L; u4 w/ U( L* Q& z. Q& r& ~ // Get the work part) E9 Z2 _! R6 j8 O1 S7 V$ P
Session *theSession = Session::GetSession();* X B) @7 D$ R$ S) {
Part *workPart(theSession->Parts()->Work());- ]. d( b" l3 N6 i
Part *displayPart(theSession->Parts()->Display());
% L% V; ]3 {+ Q% a) W0 \
4 s7 @) w% d# s) N% o
7 o) A- k! ?/ c
4 o1 l3 {& t4 ?8 @
7 X$ o. @2 _" E) d if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;
/ A) v& k4 Z9 R( j5 p0 @7 K' a2 j; X$ i# X- _5 a. e
: ]: x1 C6 J% M! W1 d
/* Get selected WORKPIECE object in ONT */! |3 c# H* r) N, c6 |, c
UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));
3 z+ K _3 {% r+ {" f, T8 x; ^+ k( B# j6 v; q4 Z
* v$ k2 m4 L. \- H9 L& \
' x1 R6 l3 h3 _' }0 H; y6 f8 ?. x, L! H2 t1 [
if (object_count == 1) {
1 D4 C! S# Q4 K) G$ d UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));/ \2 D/ d. {3 ^5 r7 u2 U. [
/ D2 _4 @4 S0 w/ n& ?
) [6 i. y: g, T
9 D' s; N. V, C" x: B9 o1 |1 e2 T
5 k" [0 H' ?( N if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) { i& `8 }0 ]5 l0 i8 j
4 Y5 v2 Q$ b, @
, r! R M1 v u P* E& F3 Y
tag_t ObjectTag = NULL_TAG;
* l4 d; K$ s, l% N. W
% G# v0 v9 Z/ D% [- f* ?
* a# Z+ F ?5 T! Z; c/ c# @7 ? // Get the object from the WORKPIECE tag
9 B6 i+ C- b0 R: u CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);
& L* K1 s r. R* ~! P
2 q+ P8 V$ u4 }, q: U; @# f9 J1 _, u+ h) x, M
CAM::MillGeomBuilder *millGeomBuilder1;
. @6 Q+ x' P8 ^ millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
]! U; J) J9 x5 H" r6 t* T7 L- L' U$ A$ f8 b) Q! F$ R. @
! E) d: P( ?* ~) N0 J# s // Get geometry set list4 [/ R: s7 i2 m
CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();
) |1 q( S1 K7 X( Q. I std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();9 |9 V% k3 d8 [. ^/ l- n
/ Y$ f0 ?4 n$ j+ t4 C- v/ ?6 ?
- b, k0 n) K* x& X // get geometry set
4 `# B) n3 x/ O std::vector<CAM::GeometrySet*>::iterator iter;4 I' H: W# W4 H* C- ~7 N
for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
+ S0 Y- s% U! ?" B {+ `. `& ^% n h, r) n6 U
CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);
# T' x; R5 Q2 ]! c8 A# L ScCollector *scCollector = geomSet->ScCollector(); & d) L7 o/ ~* v) \, w
std::vector<SelectionIntentRule*> rules;
- ?+ y& @: d4 N n) Y$ Z( L6 l6 u+ n scCollector->GetRules(rules);
; Q* C$ ?' u+ i7 @/ U- d
$ }/ ?& o& f" g
4 K! z/ Y/ t! Q' A5 E. } //get selection rule
6 }+ v& z$ ]% p. W% U9 S3 } std::vector<SelectionIntentRule*>::iterator ruleIter;
7 D1 [! p# b' D5 z* H( x7 T) a: L for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
6 g* L3 I$ ]: N: o) h, i {, Q& J( b" o) i
SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);
6 @$ s3 ]( }8 y$ O7 m' w NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
) s4 y+ x+ b! X. S$ p) S1 l4 H1 @ //there are different rule types, here just use body, face as sample
% F( E# ^; b- D$ X switch ( ruleType ); C3 l( V3 V+ E/ ?$ }- X' |8 ]
{/ C5 Z- {9 m6 q
case NXOpen::SelectionIntentRule::RuleTypeBodyDumb: m1 C5 Z' ]8 C% L* i3 w
{
5 c, T$ }+ |/ w8 W4 [8 l4 F //get bodies M( ?9 C2 T; c E
NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);* H/ h- f) t2 r* b4 f# Y% d, m
std::vector<Body*> bodies;
" L3 R2 t( E8 a+ @2 s& l bodyRule->GetData(bodies); \$ V5 l% k" G& v: G+ {: V
std::vector<Body*>::iterator bIter;
# r$ ~! T) s4 V; l int index = 1;
& x4 u# K* B; h% E for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )' H# G4 a3 T1 X! a+ I: `9 q
{/ k- a' Q3 s3 x/ j" r
Body* body = dynamic_cast<Body*>(*bIter);
5 W- a6 W/ U; J+ E% [ ObjectTag = body->GetTag();$ r( e9 t; O0 e+ ^9 @: W
sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);
/ ]- h6 j! `2 U8 f% q WRITE(mesg);1 i, B0 M0 V; [, e# a
body->Highlight();( k' N. k J- } G5 x0 g% `' k
index++;2 j( P- `9 U7 l# B1 B
}) w1 l$ J7 I; F8 j; H
}
0 y0 h2 s: x. Y5 z break;
- x7 ~# g2 d9 F7 P2 }# P% d$ K7 M1 M% N5 R1 D: z0 Z
- w6 q& `: P8 h, W) k0 K3 _ case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:
# T4 n; s# N2 ^2 E {
# B" P' C; P! v //get faces
S1 g$ r' W4 y, [& B4 J NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
) v" B1 D; i8 N' h* a% b& N std::vector<Face*> faces;* G- y1 [% o$ l, J1 n8 ]# o
faceRule->GetData(faces);
2 X8 s! o% @2 `6 B; z. P" L std::vector<Face*>::iterator fIter;
, G& \) ] M! x$ L7 Z int index = 1;
* ^1 o* x H- |/ c" z- v% K for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )+ m3 w. q" y4 H$ V( r
{# g+ V4 D4 ~7 y) z
Face* face = dynamic_cast<Face*>(*fIter);& k8 A0 G6 T2 a# N7 N* f4 f
ObjectTag = face->GetTag();) b" W5 K# y1 L: r/ i. E5 u
sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag); / ?4 j5 n" U0 g, r: b |! G9 z4 E
WRITE(mesg);
w4 N: e* {5 k8 Z/ j index++;
( J6 q' y' a* G- m# U3 V! _: l }$ s" A8 p6 X2 }
}
( Q8 V& s7 C- x) s break;
- O) E7 |! @9 j1 p
$ M- o* V7 U; w0 k; w$ U1 i
: S+ K/ `5 O S+ A9 A" ~% x default:& z8 I2 B% G6 {6 n1 D/ Y* c
break;1 N. {- b) ~$ ?6 Z% U( v' m
}' X7 ~" C0 `7 q& D- Q# X
}
2 P" W% X0 A3 B1 _: y' E }) t5 c2 c/ j" j7 ]
) B! n5 h6 B5 @) |
; U" E' t5 a* p+ D
2 e: {! _. A4 x) e
( N- i x! d$ S, ~2 d2 F, k' F6 a: X% ]0 u
. ]/ r2 h, a1 g2 B( d0 d5 G# _
millGeomBuilder1->Destroy();' I1 i% n3 [- F4 _3 h8 W
; H2 l' A, O& V& v9 g
6 X4 x' q: X& r; t$ w } else {
6 O8 ]& c7 H4 Q1 r1 z. ^& d; q4 G WRITE("type is not UF_machining_geometry_grp_type");# e- P/ X% ]' o! C
WRITE(" or UF_mill_geom_featr_subtype");' ` Z4 L V' N
}
/ y8 a: E4 w# G0 g+ s, |; |1 { UF_free(objects);
1 l4 E& V4 I' t) a. i; X
+ ~9 z+ J, X+ R
9 \( |' l% D K: f } else {7 S; H8 _- t3 b! z, a) U3 B7 W
WRITE("The number of selected objects in ONT must be 1.");9 t3 Q. m( n. i! x" ^3 i
}
: T) ?0 y) w( n% T1 d* g
8 t3 W$ B4 M" Y# N5 p
, j, T. f9 u3 Q" \, R9 v% c: H}
" L" I ]" B+ u6 r& q! B5 ]$ R9 l ^4 ^
|
|