|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
; Y1 h U q+ {) YNXOpen C++ CAM二次开发:获取workpiece的所有几何Tag值
2 p3 {- |, z0 r% f
" T k9 L9 E: z' i# T7 Z2 W9 C/ A) z3 H, x/ y* P
static void do_it(void)/ j* g# o* t3 r8 Z" W; {
{; u7 J$ i, q) j6 P6 f! ~" g
logical is_initialized;
( I k2 Z- _: |$ s0 w2 O J int object_count;
+ C2 d$ {. d8 s: X0 e0 V int type;
: M0 N$ h' f8 p% C int subtype;
+ k( _' i2 X, x+ Q2 k5 V, \ tag_t *objects;% q3 l) m0 t* v7 L2 U; d1 r
: K/ m. \7 W: f' c
' U7 x8 t. v8 V& C( Z. s! Q, `% U. ~( E% N+ \
8 K& X: t& N5 e+ B, k. a, t) d" u char mesg[133];' H1 R+ C* ]) F; k# N2 |
: \1 T8 a0 ]- z% c+ O0 M' ~7 P8 ?/ c% a& R+ H4 o/ g
// Get the work part/ j$ A% I2 s O
Session *theSession = Session::GetSession();" E! Z v, e3 `
Part *workPart(theSession->Parts()->Work());# S6 \( b% q0 Y+ s
Part *displayPart(theSession->Parts()->Display());
$ D3 A9 Y: s: h1 S$ v3 A
4 ^2 p' w) V6 }' D) J$ g& R0 I& k( w: u
' B2 p9 s6 A# I. y. [
4 |% y# e: K8 `/ T) l: d0 e8 A r. j if (UF_CALL(UF_CAM_is_session_initialized(&is_initialized)) || (is_initialized == FALSE)) return;
- c; f' h; X/ k& J3 K0 z; I! K2 C. n F+ H3 O
" B3 H7 n8 H+ B9 h4 V! p /* Get selected WORKPIECE object in ONT */
' Z3 H: l! D9 T0 W UF_CALL(UF_UI_ONT_ask_selected_nodes( &object_count, &objects ));' t. a: @1 L3 ^4 i4 W* M
5 Q7 q) C6 Q$ p0 s) ]$ K; @0 t- m/ }9 R+ T8 l" S
8 ?3 w0 ?4 A2 H9 d; Y7 i2 P* {9 {- b/ s' Z0 z/ r, ]* z
if (object_count == 1) {
! W; E8 U4 A; W) o UF_CALL(UF_OBJ_ask_type_and_subtype (objects[0],&type,&subtype));
1 P2 p+ U, n. e0 Q% @- ^9 h( K! I. w2 S9 ?; ]0 z9 c) x
$ v0 o% J- w" b( h' K5 g
/ V# l; i4 J1 V) o, g/ p. P1 d
, [' z* m* N3 ?) } c if ((type == UF_machining_geometry_grp_type) && (subtype == UF_mill_geom_featr_subtype) ) {- \; o7 j! S& X- |: F: ?6 I
- m- B3 x& u8 D2 {" o( V# @. o& ^6 b S7 G' Z9 j
tag_t ObjectTag = NULL_TAG;: g( W S: v1 }% f2 |4 I2 n
8 I2 @3 Q+ H6 ~
) Q0 @0 f0 m! U4 ? // Get the object from the WORKPIECE tag
q& T8 U# T, N( z CAM::FeatureGeometry *WP = (CAM::FeatureGeometry *)NXObjectManager::Get(objects[0]);
6 i- M- e2 ` `/ y8 U
9 {/ i! T% ?- j: C5 F
+ Z8 R0 k1 I; `+ _6 P CAM::MillGeomBuilder *millGeomBuilder1;
% \+ U* W; j0 W0 ^4 j- F millGeomBuilder1 = workPart->CAMSetup()->CAMGroupCollection()->CreateMillGeomBuilder(WP);( V; n2 C2 s+ B
" d! _% F4 D: }/ o
& e+ J, l; i! R
// Get geometry set list1 L1 Y# A2 P( V4 u& }" P
CAM::GeometrySetList *pGeomSetList = millGeomBuilder1->PartGeometry()->GeometryList();9 G% p% ^/ U8 ~. j- k8 ?7 o1 U% R
std::vector<CAM::GeometrySet*> geomSetVec = pGeomSetList->GeTContents();3 O( ^% U: f% F0 s" w% W* k
! G" x8 g5 w; S4 }/ F: o W: U5 B- K- }: f
// get geometry set v( H) m, f* T& f% k+ a% q
std::vector<CAM::GeometrySet*>::iterator iter;% a3 }8 ?. L" {- Y% {) ^# p
for ( iter=geomSetVec.begin(); iter != geomSetVec.end(); iter++ )
! B. F5 `% P/ b5 a! q {; g& A# m4 g) k& ?0 Q- Y! S9 H
CAM::GeometrySet* geomSet = dynamic_cast<CAM::GeometrySet*>(*iter);0 s. J O' v( @+ I
ScCollector *scCollector = geomSet->ScCollector(); 1 X( X- p9 k! k. ], u
std::vector<SelectionIntentRule*> rules;
1 ~# X' |9 a+ q" ~6 J; X7 E scCollector->GetRules(rules);
# H0 u9 l- k. e' R' o* L7 d" E, O+ `+ ^; o9 Q N; V* j) K3 q
. S, M1 C( k; b
//get selection rule
/ k5 G2 s/ l( m" O' H0 o( T/ q std::vector<SelectionIntentRule*>::iterator ruleIter;
: ?. i% G4 N! _3 ]; T! q9 y for ( ruleIter=rules.begin(); ruleIter != rules.end(); ruleIter++ )
: \9 C$ X$ y# Q- R0 ]) g {
. @/ D. `- ?8 l5 y8 }7 S SelectionIntentRule* selRule = dynamic_cast<SelectionIntentRule*>(*ruleIter);
5 |% V9 a1 E! I! a NXOpen::SelectionIntentRule::RuleType ruleType = selRule->Type();
7 Y5 A& ^- l0 U4 b //there are different rule types, here just use body, face as sample
. n% S6 P p# i4 F+ \ switch ( ruleType )
/ E) L" `7 V$ v3 N) A+ t" c {
* B1 \- A' ?& \ case NXOpen::SelectionIntentRule::RuleTypeBodyDumb:
# J8 |& y) j' J; M" D8 j' j; J {
4 Z/ E0 h/ T% H$ ^- v //get bodies
7 \6 y1 k$ Y( w, a! \ NXOpen::BodyDumbRule *bodyRule = dynamic_cast<BodyDumbRule*>(selRule);
4 K8 W9 ]( m, I7 r0 Z( f' e std::vector<Body*> bodies;% W; P8 i- F$ d9 J4 a, M
bodyRule->GetData(bodies);
6 Z0 a# T9 n. C# S# \ std::vector<Body*>::iterator bIter;9 D, `3 [# y+ A) U
int index = 1;
: b) U, N# `; e% e for (bIter=bodies.begin(); bIter!=bodies.end(); bIter++ )8 J4 n9 X" v/ P3 Y5 F+ t, |
{! r d, P; L4 @. l
Body* body = dynamic_cast<Body*>(*bIter);
8 A! ^- A: q1 y9 m ObjectTag = body->GetTag();# T/ {, x5 }/ f! a: Z8 c
sprintf(mesg,"the geometry object type is body, the index is %d and the tag is %d\n",index, ObjectTag);
5 o* t9 o5 O' W# ? r/ f( S WRITE(mesg);
% a- ], X7 ]6 O- } l% Y body->Highlight();( w# l* U# |3 }8 k* S
index++; f. x% b+ Z1 O1 Q, G% p# {
}8 g3 `" v/ e0 g/ `/ F2 y
}1 ]: o) | x. H' d( ]
break;
9 E6 N' s$ b# A- ?. [5 d$ p
0 X o8 L: M2 l; [) h a. U
0 F; h9 c' d6 ?/ J' P! G case NXOpen::SelectionIntentRule::RuleTypeFaceDumb:; f% P! }6 H( M. I: i h
{7 \0 ?$ @( p7 |3 n0 ?9 {
//get faces / W9 ]0 R; Y( k4 e: M" `
NXOpen::FaceDumbRule *faceRule = dynamic_cast<FaceDumbRule*>(selRule);
7 b* N$ E& X( k! j0 V: p std::vector<Face*> faces;1 W/ N* g; A- Q
faceRule->GetData(faces);
( g7 i* p/ k0 o2 t8 B8 n std::vector<Face*>::iterator fIter;4 ~# P r4 Z/ s. x' {
int index = 1;' N6 `) l7 o. l, L
for (fIter=faces.begin(); fIter!=faces.end(); fIter++ )
: n6 ~+ b) k; {' p( b. p {
2 M. m6 D# w* [0 T' V$ F Face* face = dynamic_cast<Face*>(*fIter);% }; C9 a4 j T# Z# F1 s4 T( m6 C
ObjectTag = face->GetTag();+ t( K) V' z: T k6 U$ b- C6 X
sprintf(mesg,"the geometry object type is face, the index is %d and the tag is %d\n",index, ObjectTag); 7 L2 q3 e! b* f k2 @5 \
WRITE(mesg);
8 v! N/ }' E6 J3 ?, ~2 | index++;
- M* A' R$ T7 N7 l8 I e }
7 G1 x* Y2 b, a6 M; x! O }
1 C$ ~8 m) b( [% P+ m, ] break;& U; ?" G2 n9 o. W, z) _
9 A! E* D: Z8 K+ M* ^1 f9 P( h/ R% u8 W
5 U) N1 J1 F/ ]6 v) w, C& _ default:
& W0 M! J# n( x% @ \, R6 s! r break;
; W B j% L% V# m4 f q }: z$ l/ f# @0 z" O4 X) t
}. W i a# s1 q* {' y
}
& f: Z4 n5 S/ ?$ `* L: N8 _$ [ a4 E0 X; s. m
2 x! R1 j: d) N" k/ `, C4 J" o% u8 c
* |1 j, b% O: p; `/ }
2 E& w: ~' ~. J3 ~9 |" W- f
: u3 ?5 {% {6 ?3 _
millGeomBuilder1->Destroy();& {; Q2 N) {( o7 q0 T7 L) h3 r
1 I3 }6 j4 O- q* y; \+ ]2 @
5 A: C2 j$ j" k6 Q
} else {
7 g' E6 A h% w WRITE("type is not UF_machining_geometry_grp_type");
: O! z; I1 K3 P5 ^/ n WRITE(" or UF_mill_geom_featr_subtype");
& X; M8 D& U$ N! p2 P. E7 C2 o }
8 B0 \' D7 u& j7 |6 w' o/ A UF_free(objects);
# N% T" x+ C; Z
/ b9 _. s" {* M( J* G( P+ ]. }# s: w; i+ h n( L
} else {
; Z; n, c: C9 T8 o7 m _$ i WRITE("The number of selected objects in ONT must be 1.");" Q! u/ h. h* b) o( j
}
3 z/ }1 [, W3 z& G5 K
5 W @ n! B! Y' j( t2 S
& Z9 h/ @9 B, U% f) c1 k}- h' U" A8 ]; @8 x- C1 b
' Z `3 `. f$ E |
|