|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
) ~9 p3 |0 |, g2 M `NXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值4 [# X! [; b" c$ M' K& Y
. {) G7 Z/ q8 {0 Q- @
" _" w8 Q& [1 r* vstatic void do_it(void)5 X% r4 d; e, M5 Q1 @
{4 w2 z9 ~$ Y" n) O4 h
logical is_initialized;
9 B0 A7 F& Q3 g int object_count;' e8 H* G$ E# Y. w: Q6 x- G" k
int type;$ Y& V! p5 f1 H, i% j$ x
int subtype;
+ [; V+ F4 `6 [3 q- C, w tag_t *objects;
C5 W& Z) U& I$ a# n6 j0 M1 s5 F0 y4 r# V* |( v) G! q, v
% C8 G/ q' R' l. z7 _( ~; _, p4 w8 h0 X% J; D7 U" D- \+ s1 m
3 w% | ^7 o: A5 ~ char mesg[133];
8 q6 U, T; x( y
. {! [- h6 Y i7 R4 a& ?% s2 {, N0 n7 O* w& t! q
// Get the work part% H( d, C& S; b2 I
Session *theSession = Session::GetSession();+ k, f- t' B3 q- j0 S4 b
Part *workPart(theSession->Parts()->Work());
# X4 u4 f7 e( p; S9 p# V/ _8 { Part *displayPart(theSession->Parts()->Display());
2 |8 k- q- }2 L, h9 Q- u( f( f2 c1 T3 M
' C% x( _! o, q& u' y2 X5 Y* D4 O% z* B2 J7 h0 B+ N
6 x4 Y0 ?+ V6 N8 U, e# f if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;
* o6 g* O) m2 o! S! p+ Y# E5 G- O- r6 z
2 u* y0 g; `( W/ b7 Q
/* Get selected WORKPIECE object in ONT */6 e) ]& \2 k( d9 u$ P& L3 d
UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));% R, l9 l0 Z/ z( ?; ~
0 _4 U2 z1 d2 o2 z
+ s6 I5 v2 q/ S" U# Q& M7 o9 b; L6 j. ?) m# d0 A1 H
; A! q' l- n2 q7 n P/ a( c
if (object_count == 1) {
/ q+ O9 Y, s- B UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
0 L O( T3 ]) u* ?* ^/ K
) Q9 l: Q8 {' Q/ s
* f0 {( F* j8 ?* H/ y/ p( f( b( p
$ S4 g* A& y( l- d0 |% f h0 c" f+ R/ |7 B$ K! {
if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {* X& V5 a8 K4 P% \
, q( H" Q" R) v& g/ q/ }
# Q3 a6 b! F/ [+ { tag_t ObjectTag = NULL_TAG;
. R% r* D* @+ r: g( f4 M$ D" k6 \, E% N W
! R' q8 J" z( o // Get the object from the WORKPIECE tag
2 L) R9 t4 q- f+ [ CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);3 P- y$ I; o( T
4 K& c5 \" ^8 O2 d( E5 r8 y: x1 v& D
4 ]' H/ S& N5 S l4 c CAM::MillGeomBuilder *millGeomBuilder1;
4 n8 _2 f/ S$ y8 [) J millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);
$ L- n) H. T9 E
( Y$ V: n4 N- s4 k1 u0 {7 ^8 N: B* q, E1 |# L$ c" R, ?
// Get geometry set list
& { T3 i6 m- m& X$ v) Z CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();/ S6 ~, {' b# c5 U7 v+ F1 i0 _
std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();
3 V- o4 M; h4 c3 M% U' O$ ]( P
; L" T! P8 @# y) |, i8 }
2 E; F1 C" V1 C // get geometry set9 ~( h4 `- b, H' S: `
std::vector<CAM::GeometrySet*>::iterator iter;
5 g) J" F, T/ p: B2 Y+ N7 b for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
6 o: ~( ?3 }% |' b' B {0 S' {2 K7 k7 u1 A6 L$ ]% K+ z
CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);
. t2 A" e; @, P' W7 H7 L ScCollector *scCollector = geomSet->ScCollector(); k& R, o* u; R }; Z& W. ~
std::vector<SelectionIntentRule*> rules;& p& z% d0 ~4 Y/ d0 K5 k& m
scCollector->GetRules(rules);7 l# A, \8 g2 `' w. G$ P" F
) b H5 F2 I" h0 M9 j
$ B- e \) b4 Z$ P9 f) q1 ?4 q6 ? //get selection rule6 l& c9 S. A0 Z( O& @! _
std::vector<SelectionIntentRule*>::iterator ruleIter;" G% g5 T; K- h5 l& E: F0 d
for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )( k0 a% J7 }1 s
{
9 L* r Q, P- v9 [ s0 H: a SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);& r" A1 J3 R+ l. v: r/ q
NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
- q7 `# c n& s; ~ //there are different rule types, here just use body, face as sample" `2 y# N" `, |$ ~! G" l0 r: A/ l \
switch ( ruleType )3 e: O- z: z. d Y E6 \1 A
{$ y4 q& b8 a2 z5 L. a
case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
% [9 }$ n7 C0 P: `: @7 L( R {
@% p" g" b/ z, @, X$ k //get bodies + t/ [" e: H/ G
NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);$ r6 c o9 W3 A$ E2 V1 }
std::vector<Body*> bodies; F) J6 q+ L/ M# i: u1 P7 e
bodyRule->GetData(bodies);4 B: i: [: k8 D" d: I; [" I4 T
std::vector<Body*>::iterator bIter;8 U! r% a2 T; S. L6 K/ y/ Q, V
int index = 1;* `' r9 P9 j& L+ [0 [! {! `+ \. s
for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )) k: t) I! \. O# L
{8 X2 ]/ B# I" f& W' |
Body* body = dynamic_cast<Body*>(*bIter);8 t2 d+ k. _( P# g- g! I$ k2 W
ObjectTag = body->GetTag();
9 K, k0 d) ~0 Y3 T0 S) l. a4 x; m sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag); 2 [- h+ x; Z& ^, d
WRITE(mesg);, x: g. [% Z. [; W! v: ?9 s) @1 Y& D
body->Highlight();$ d- s3 ?' T, s8 g
index++;7 l F& J8 O1 j
}5 L' |1 i2 P$ _4 Z! z
}- _8 x Z2 Q/ J
break;- f- ^7 I% @/ v2 \/ \/ ?: M
+ |* ^; F' \' {" m) e+ V* S: I( a8 v9 h) F$ ~. `' q
case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:7 @- {' c, g5 c9 M1 x
{
; m# A9 ^) r7 c1 C) }- x0 A# o% ? //get faces
+ |. }, A3 [' b0 T, |: R `& { NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
2 j/ D4 m4 c9 L) n std::vector<Face*> faces;1 u# b& z# C8 x4 O
faceRule->GetData(faces);
' h. m" \, T" n std::vector<Face*>::iterator fIter;
) Z# F. i& T+ V' R# m int index = 1;
( X0 g) L+ W7 f! W for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
2 N3 \3 a1 W7 b( k. i$ ?# I/ B3 Y {
5 y0 [- x& W# Q- N! {+ V Face* face = dynamic_cast<Face*>(*fIter);1 F* k. t& B& r2 j
ObjectTag = face->GetTag();
. j7 d; ^. v5 [( b- K" T; h sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag);
1 y9 x9 B; S, M- o' p8 i4 K% w7 @ WRITE(mesg);
9 @4 b) b2 W# L M8 H* a index++;2 m1 E# L; `' l! Z7 j
}
9 H) r3 @6 Z2 b" D }
$ I8 I2 Q5 E6 B( q4 V9 v break;; Y# {1 m0 o! L2 ]
, d' o( W+ ~5 m& z5 V" ~
+ ]5 A% W& E- g% p# ?0 G7 a" u default:
- n. P: v* C; n5 A2 f! J( n8 l break;
3 r9 g1 u8 B, C X }4 J$ u, F# i7 l% C1 l
}
6 [" g6 ]: X3 a }" V7 x8 C( ?; a
. h9 A* M7 V) p8 R5 X2 ~
" B. h3 x' W. n* M4 b! ]; r; P, I
7 @% G* O; |- K, W
4 D9 W8 W/ M5 S" ~
5 k: l+ k4 e* ?: J
+ Y/ P3 j) d {0 S
millGeomBuilder1->Destroy();
. r% P- c: h. t5 j4 o- Q2 |& o: D+ v; t$ i, d6 P5 O
" m: ~) k0 b# I2 v {- O
} else {" s: Y) \% N* r0 c6 \, ]
WRITE("type is not UF_machining_geometry_grp_type");
5 b z% e" e' w2 }" B) P2 \ WRITE(" or UF_mill_geom_featr_subtype");4 t- @" L0 z, G1 N
}9 i$ }0 ~8 N2 p; J+ t, `0 _5 I
UF_free(objects);
, N: U* I. s6 S* p* L& b7 Q( e+ H3 a, j' u2 K
* m. ^1 f' l/ d0 b6 M5 y
} else {7 Q% S' }# \# [$ Y4 b6 L! W
WRITE("The number of selected objects in ONT must be 1.");0 b2 c) f5 y# P3 o( p, _; x0 v, Q
}
! t" T I, m; k( ?& g1 B! f( m( y" y; u' O
7 L9 f0 ^& B+ T5 }; V}
3 {3 t) o8 K5 Y3 V/ b& G; d: n5 [$ |/ F
|
|