ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/vct_face.cpp
Revision: 69
Committed: Thu Mar 27 13:20:26 2008 UTC (17 years, 1 month ago) by souaissa
Original Path: magic/lib/geometrie/geometrie/src/vct_face.cpp
File size: 17879 byte(s)
Log Message:
Mise à jour des classes de la vectorisation et des calsses: ot_mathematique,ot_tenseur,ot_doubleprecision dans outil

File Contents

# User Rev Content
1 souaissa 66 #include "gestionversion.h"
2     //---------------------------------------------------------------------------
3    
4    
5     #pragma hdrstop
6    
7     #include "vct_face.h"
8     #include "mg_face.h"
9     #include "mg_surface.h"
10    
11     #include "mg_arete.h"
12     #include "ot_mathematique.h"
13     #include <math>
14     #include <iomanip>
15     #include "sld_fonction.h"
16    
17     //---------------------------------------------------------------------------
18    
19     #pragma package(smart_init)
20    
21    
22    
23     VCT_FACE::VCT_FACE(MG_FACE* face):VCT_ELEMENT_TOPOLOGIQUE(face)
24     {
25    
26 souaissa 69 int indx;
27 souaissa 68 nb_points=0;
28 souaissa 66
29     int nb_boucle=((MG_FACE*)elem_topo)->get_nb_mg_boucle();
30 souaissa 69
31 souaissa 66 for(int j=0;j<nb_boucle;j++)
32     {
33     MG_BOUCLE* Boucle = ((MG_FACE*)elem_topo)->get_mg_boucle(j);
34     int nbarete = Boucle->get_nb_mg_coarete();
35     for (int w =0; w<nbarete;w++)
36     {
37 souaissa 69 TPL_LISTE_ENTITE<double> lst_points_ctrls;
38     vector<OT_VECTEUR_4DD> list_vect;
39 souaissa 66 MG_COARETE* coArete = Boucle->get_mg_coarete(w);
40 souaissa 69 MG_ARETE* arete = coArete->get_arete();
41     arete->get_param_NURBS(indx,lst_points_ctrls);
42 souaissa 67
43 souaissa 69 for(int i=indx;i<1./4*lst_points_ctrls.get_nb();i++)
44     {
45     OT_VECTEUR_4DD point_ctr;
46     point_ctr.x()=lst_points_ctrls.get(4*i);
47     point_ctr.y()=lst_points_ctrls.get(4*i+1);
48     point_ctr.z()=lst_points_ctrls.get(4*i+2);
49     point_ctr.w()=lst_points_ctrls.get(4*i+3);
50     lst_points.insert(lst_points.end(),point_ctr);
51     }
52 souaissa 66
53 souaissa 69 list_vect=arete->get_vectorisation().get_vecteurs() ;
54     int nb_pts_art=arete->get_vectorisation().get_nb_points();
55     nb_points+=nb_pts_art;
56 souaissa 68
57 souaissa 69 for(unsigned int i=0;i<list_vect.size();i++)
58 souaissa 66 {
59 souaissa 69 lst_vecteurs.insert(lst_vecteurs.end(),list_vect[i]);
60 souaissa 66 }
61    
62     }
63    
64     }
65 souaissa 67
66 souaissa 69
67 souaissa 66 }
68    
69    
70 souaissa 69
71     VCT_FACE::VCT_FACE(VCT_FACE& mdd):VCT_ELEMENT_TOPOLOGIQUE(mdd.elem_topo)
72 souaissa 66 {
73 souaissa 69 lst_vecteurs=mdd.lst_vecteurs;
74     lst_points =mdd.lst_points;
75     nb_points=mdd.nb_points;
76 souaissa 66 }
77    
78    
79 souaissa 69 VCT_FACE::~ VCT_FACE()
80     {
81 souaissa 66
82 souaissa 69 }
83    
84    
85    
86     std::vector<OT_VECTEUR_4DD> & VCT_FACE::get_vecteurs()
87 souaissa 66 {
88 souaissa 69 return lst_vecteurs;
89     }
90 souaissa 66
91    
92 souaissa 69 OT_TENSEUR VCT_FACE:: calcule_tenseur_metrique()
93     {
94     OT_TENSEUR tns(lst_vecteurs);
95     return tns;
96     }
97    
98     OT_VECTEUR_4DD VCT_FACE::calcule_barycentre()
99     {
100    
101     OT_VECTEUR_4DD barycentre(0,0,0,0);
102    
103     for(int i=0;i<nb_points;i++)
104 souaissa 66 {
105 souaissa 69 barycentre+=lst_vecteurs[i];
106 souaissa 66 }
107    
108 souaissa 69 barycentre*=1./nb_points;
109     return barycentre;
110 souaissa 66 }
111    
112    
113    
114 souaissa 68 int VCT_FACE::get_nb_points()
115 souaissa 66 {
116 souaissa 68 return nb_points ;
117 souaissa 66 }
118    
119    
120 souaissa 69 OT_TENSEUR VCT_FACE::calcule_covariance(void)
121 souaissa 66 {
122    
123 souaissa 69 std::vector<OT_VECTEUR_4DD> Points_Centre_au_barycentre(nb_points);
124     OT_VECTEUR_4DD barycentre=calcule_barycentre();
125 souaissa 66
126 souaissa 69 for( int i=0;i<nb_points;i++)
127     {
128     Points_Centre_au_barycentre[i]=lst_points[i]-barycentre;
129     }
130 souaissa 66
131 souaissa 69 OT_TENSEUR COVARIANCE(4);
132 souaissa 66
133 souaissa 69 for(int r=0;r<4;r++) {
134     for(int s=0;s<4;s++) {
135     for(int i=0;i<nb_points;i++) {
136     OT_VECTEUR_4DD v1=Points_Centre_au_barycentre[i];
137     for(int j=0;j<nb_points;j++) {
138     OT_VECTEUR_4DD v2=Points_Centre_au_barycentre[j];
139     COVARIANCE(r,s)= COVARIANCE(r,s)+v1[i]*v2[j];
140     }
141     }
142     COVARIANCE(r,s)=1./nb_points*COVARIANCE(r,s);
143     }
144     }
145     return COVARIANCE;
146 souaissa 66 }
147    
148    
149 souaissa 69 void VCT_FACE::calcule_axes_dinertie(OT_VECTEUR_4DD& vp1,OT_VECTEUR_4DD& vp2,OT_VECTEUR_4DD& vp3,OT_VECTEUR_4DD& vp4)
150 souaissa 66 {
151 souaissa 69 int n=4;
152     int nrot;
153     OT_TENSEUR v(4);
154     OT_TENSEUR cov=calcule_covariance();
155     OT_VECTEUR_4DD d;
156 souaissa 66
157 souaissa 69 double2 zro=0.0;
158 souaissa 66
159 souaissa 69 if(cov(0,0)==zro&&cov(1,0)==zro&&cov(2,0)==zro&&cov(3,0)==zro)
160 souaissa 66 {
161 souaissa 69 cov(0,0)=1.0;
162     cov(1,0)=zro;
163     cov(2,0)=zro;
164     cov(3,0)=zro;
165 souaissa 66 }
166 souaissa 69 if(cov(0,1)==zro&&cov(1,1)==zro&&cov(2,1)==zro&&cov(3,1)==zro)
167 souaissa 66 {
168 souaissa 69 cov(0,1)=zro;
169     cov(1,1)=1.0;
170     cov(2,1)=zro;
171     cov(3,1)=zro;
172 souaissa 66 }
173 souaissa 69 if(cov(0,2)==zro&&cov(1,2)==zro&&cov(2,2)==zro&&cov(3,2)==zro)
174 souaissa 66 {
175 souaissa 69 cov(0,2)=zro;
176     cov(1,2)=zro;
177     cov(2,2)=1.0;
178     cov(3,2)=zro;
179 souaissa 66 }
180 souaissa 69 if(cov(0,3)==zro&&cov(1,3)==zro&&cov(2,3)==zro&&cov(3,3)==zro)
181     {
182     cov(0,3)=zro;
183     cov(1,3)=zro;
184     cov(2,3)=zro;
185     cov(3,3)=1.0;
186     }
187 souaissa 66
188    
189 souaissa 69 cov.get_orthogonalisation(cov,d,v,n,nrot);
190 souaissa 66
191 souaissa 69 }
192 souaissa 66
193    
194 souaissa 69 OT_TENSEUR VCT_FACE:: calcule_tenseur_inertie_au_barycentre() //repere globale
195 souaissa 66 {
196 souaissa 69 OT_TENSEUR Inertie(4);
197     OT_TENSEUR cov=calcule_covariance();
198     double2 nb_pts=nb_points;
199     double2 MOINS_UN=-1.0;
200     Inertie=cov*MOINS_UN;
201     Inertie=Inertie*nb_pts;
202 souaissa 66
203 souaissa 69 Inertie(0,0)=(cov(1,1)+cov(2,2)+cov(3,3))*nb_pts;
204     Inertie(1,1)=(cov(0,0)+cov(2,2)+cov(3,3))*nb_pts;
205     Inertie(2,2)=(cov(1,1)+cov(0,0)+cov(3,3))*nb_pts;
206     Inertie(3,3)=(cov(1,1)+cov(2,2)+cov(0,0))*nb_pts;
207     return Inertie;
208 souaissa 66 }
209    
210    
211 souaissa 69 OT_TENSEUR VCT_FACE:: calcule_tenseur_inertie_au_pt(OT_VECTEUR_4DD& POINT)
212 souaissa 66 {
213    
214 souaissa 69 OT_VECTEUR_4DD BARYCENTRE=this->calcule_barycentre();
215     OT_TENSEUR TENS=this->calcule_tenseur_inertie_au_barycentre();
216 souaissa 66
217 souaissa 69 OT_VECTEUR_4DD ABC=POINT-BARYCENTRE;
218 souaissa 66
219 souaissa 69 double2 a=ABC[0] ;
220     double2 b=ABC[1] ;
221     double2 c=ABC[2] ;
222     double2 d=ABC[3] ;
223 souaissa 66
224 souaissa 69 TENS(0,0)=TENS(0,0)+b*b+c*c+d*d;
225     TENS(1,1)=TENS(1,1)+a*a+c*c+d*d;
226     TENS(2,2)=TENS(2,2)+a*a+b*b+d*d;
227     TENS(3,3)=TENS(3,3)+a*a+b*b+d*d;
228 souaissa 66
229 souaissa 69 TENS(0,1)=TENS(0,1)-nb_points*a*b;
230     TENS(0,2)=TENS(0,2)-nb_points*a*c;
231     TENS(0,3)=TENS(0,3)-nb_points*a*d;
232 souaissa 66
233 souaissa 69 TENS(1,0)=TENS(1,0)-nb_points*b*a;
234     TENS(1,2)=TENS(1,2)-nb_points*b*c;
235     TENS(1,3)=TENS(1,3)-nb_points*b*d;
236 souaissa 66
237 souaissa 69 TENS(2,0)=TENS(2,0)-nb_points*c*a;
238     TENS(2,1)=TENS(2,1)-nb_points*c*b;
239     TENS(2,3)=TENS(2,3)-nb_points*c*d;
240 souaissa 66
241 souaissa 69 TENS(3,0)=TENS(3,0)-nb_points*d*a;
242     TENS(3,1)=TENS(3,1)-nb_points*d*b;
243     TENS(3,2)=TENS(3,2)-nb_points*d*c;
244    
245     return TENS;
246 souaissa 66 }
247    
248    
249 souaissa 69 OT_TENSEUR VCT_FACE::calcule_tenseur_inertie_base_locale()
250 souaissa 66 {
251     // inertie calculé dans le repere globale
252 souaissa 69 OT_VECTEUR_4DD v1,v2,v3,v4;
253     OT_TENSEUR INERTIE;
254     OT_TENSEUR I_GLOBALE;
255 souaissa 66
256 souaissa 69 this->calcule_axes_dinertie(v1,v2,v3,v4);
257     INERTIE=this->calcule_tenseur_inertie_au_barycentre();
258 souaissa 66
259 souaissa 69 I_GLOBALE= INERTIE;
260 souaissa 66
261 souaissa 69 OT_TENSEUR P(4);
262     OT_TENSEUR I=I_GLOBALE;
263     OT_TENSEUR P_TRSPOSE;
264     OT_TENSEUR I_LOCALE;
265 souaissa 66
266 souaissa 69 for(int i=0;i<4;i++) {
267     for(int j=0;j<4;j++)
268     {
269     if (j==0) P(i,j)= v1[i];
270     if (j==1) P(i,j)= v2[i];
271     if (j==2) P(i,j)= v3[i];
272     if (j==3) P(i,j)= v4[i];
273     }
274     }
275 souaissa 66
276 souaissa 69 P_TRSPOSE=P.transpose();
277 souaissa 66
278 souaissa 69 I_LOCALE=P_TRSPOSE*I;
279     I_LOCALE=I_LOCALE*P;
280     return I_LOCALE;
281 souaissa 66
282     }
283    
284    
285    
286    
287 souaissa 69 void VCT_FACE::calcule_tenseur_inertie_base_entite( OT_VECTEUR_4DD& g1g2,OT_TENSEUR& tens2, VCT& vct_f)
288 souaissa 66 {
289 souaissa 69 OT_VECTEUR_4DD v1,v2,v3,v4,w1,w2,w3,w4,G1,G2,G1G2;
290     OT_TENSEUR P(4);
291     OT_TENSEUR pt;
292     OT_TENSEUR IV;
293     OT_TENSEUR Q;
294     OT_TENSEUR qt;
295     OT_TENSEUR R;
296     OT_TENSEUR Rt;
297     OT_TENSEUR IW;
298 souaissa 66
299 souaissa 69 this->calcule_axes_dinertie(v1,v2,v3,v4);
300     vct_f.calcule_axes_dinertie(w1,w2,w3,w4);
301 souaissa 66
302 souaissa 69
303     for(int i=0;i<4;i++) {
304     for(int j=0;j<4;j++)
305     {
306     if (j==0) P(i,j)= v1[i];
307     if (j==1) P(i,j)= v2[i];
308     if (j==2) P(i,j)= v3[i];
309     if (j==3) P(i,j)= v4[i];
310     }
311     }
312    
313     for(int i=0;i<4;i++) {
314     for(int j=0;j<4;j++)
315     {
316     if (j==0) P(i,j)= w1[i];
317     if (j==1) P(i,j)= w2[i];
318     if (j==2) P(i,j)= w3[i];
319     if (j==3) P(i,j)= w4[i];
320     }
321     }
322    
323     pt=P.transpose();
324     qt=Q.transpose();
325 souaissa 66 R=pt*Q;
326     Rt=qt*P;
327 souaissa 69 IW=vct_f.calcule_tenseur_inertie_base_locale();
328 souaissa 66
329     IV=R*IW;
330     IV=IV*Rt;
331    
332    
333 souaissa 69 G1=this->calcule_barycentre();
334     G2=vct_f.calcule_barycentre();
335 souaissa 66
336 souaissa 69 G1G2=G2-G1;
337 souaissa 66
338 souaissa 69 OT_VECTEUR_4DD G1G2_LOC; //Calcul du vecteur G1G2 dans la base locale;
339     for(int i=0;i<4;i++)
340     {
341     for(int j=0;j<4;j++)
342 souaissa 66 {
343 souaissa 69 G1G2_LOC[i]= G1G2_LOC[i]+pt(i,j)*G1G2[j];
344 souaissa 66 }
345 souaissa 69 }
346 souaissa 66
347    
348    
349 souaissa 69 OT_TENSEUR MASSE_CONCENTRE(4);
350 souaissa 66
351 souaissa 69 MASSE_CONCENTRE(0,0)=nb_points*(G1G2_LOC[1]*G1G2_LOC[1]+G1G2_LOC[2]*G1G2_LOC[2]+G1G2_LOC[3]*G1G2_LOC[3]);
352     MASSE_CONCENTRE(0,1)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[1]);
353     MASSE_CONCENTRE(0,2)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[2]);
354     MASSE_CONCENTRE(0,3)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[3]);
355 souaissa 66
356 souaissa 69 MASSE_CONCENTRE(1,0)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[0]);
357     MASSE_CONCENTRE(1,1)= nb_points*(G1G2_LOC[0]*G1G2_LOC[0]+G1G2_LOC[2]*G1G2_LOC[2]+G1G2_LOC[3]*G1G2_LOC[3]);
358     MASSE_CONCENTRE(1,2)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[2]);
359     MASSE_CONCENTRE(1,3)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[3]);
360 souaissa 66
361 souaissa 69 MASSE_CONCENTRE(2,0)=-1*nb_points*(G1G2_LOC[2]*G1G2_LOC[0]);
362     MASSE_CONCENTRE(2,1)=-1*nb_points*(G1G2_LOC[2]*G1G2_LOC[1]);
363     MASSE_CONCENTRE(2,2)=nb_points*(G1G2_LOC[0]*G1G2_LOC[0]+G1G2_LOC[1]*G1G2_LOC[1]+G1G2_LOC[3]*G1G2_LOC[3]);
364     MASSE_CONCENTRE(2,3)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[2]);
365 souaissa 66
366 souaissa 69 MASSE_CONCENTRE(3,0)=-1*nb_points*(G1G2_LOC[0]*G1G2_LOC[3]);
367     MASSE_CONCENTRE(3,1)=-1*nb_points*(G1G2_LOC[1]*G1G2_LOC[3]);
368     MASSE_CONCENTRE(3,2)=-1*nb_points*(G1G2_LOC[2]*G1G2_LOC[3]);
369     MASSE_CONCENTRE(3,3)=nb_points*(G1G2_LOC[0]*G1G2_LOC[0]+G1G2_LOC[1]*G1G2_LOC[1]+G1G2_LOC[2]*G1G2_LOC[2]);
370 souaissa 66
371 souaissa 69 IV=IV+MASSE_CONCENTRE;
372 souaissa 66
373    
374    
375 souaissa 69 }
376 souaissa 66
377    
378 souaissa 69 ostream& operator <<(ostream& os, VCT_FACE& vct_f)
379 souaissa 66 {
380     vct_f.enregistrer(os) ;
381     return os;
382     }
383    
384     //==========================================================================
385     //Visualisation
386     //==========================================================================
387    
388    
389    
390    
391     void VCT_FACE::enregistrer(std::ostream& ost)
392     {
393 souaissa 69 /*
394 souaissa 66 double2 cmasse[4];
395    
396     //ost<<"__FACE "<<((MG_FACE*)elem_topo)->get_id()<< endl;
397 souaissa 69 //vct_surf->enregistrer(ost);
398 souaissa 66
399    
400     int nb_boucle=((MG_FACE*)elem_topo)->get_nb_mg_boucle();
401    
402     for(int j=0;j<nb_boucle;j++)
403     {
404     MG_BOUCLE* Boucle = ((MG_FACE*)elem_topo)->get_mg_boucle(j);
405     int nb_arete = Boucle->get_nb_mg_coarete();
406     for (int w =0; w<nb_arete;w++)
407     {
408     vector<double2> temp_vct;
409     MG_COARETE* coArete = Boucle->get_mg_coarete(w);
410     MG_ARETE* Arete = coArete->get_arete();
411     VCT_ARETE vct_art(Arete);
412     vct_art.enregistrer(ost);
413    
414     }
415     }
416    
417    
418     ost<<setfill('=')<<setw(99)<<'='<<endl;
419    
420 souaissa 69 calcule_topo_barycentre(cmasse) ;
421 souaissa 66 ost<<"(*)"<<((MG_FACE*)elem_topo)->get_id()<<"="<<"CENTRE DE MASSE: "<<endl;
422     ost<<setfill('=')<<setw(99)<<'='<<endl;
423     for(unsigned int i=0;i<4;i++)
424     {
425     ost<<setfill(' ')<<setw(15)<<cmasse[i]<<endl;
426     }
427     /*ost<<setfill('=')<<setw(99)<<'='<<endl;
428     double2 inert_cm=get_inertie_au_centre_de_masse();
429     ost<<"(*)"<<((MG_FACE*)elem_topo)->get_id()<<"="<<"INERTIE AU CM: "<<endl;
430 souaissa 69 ost<<setfill('=')<<setw(99)<<'='<<endl;
431     ost<< inert_cm<<endl; /
432 souaissa 66
433     double2 cov[9];
434     ost<<setfill('=')<<setw(99)<<'='<<endl;
435 souaissa 69 calcule_covariance(cov) ;
436 souaissa 66 ost<<((MG_FACE*)elem_topo)->get_id()<<"="<<"MATRICE DE COV: "<<endl;
437     ost<<setfill('=')<<setw(99)<<'='<<endl;
438     for(unsigned int i=0;i<3;i++)
439     {
440     for(unsigned int j=0;j<3;j++)
441    
442     ost<<setfill(' ')<<setw(15)<<cov[3*i+j] ;
443     ost<<endl;
444     }
445     ost<<setfill('=')<<setw(99)<<'='<<endl;
446     OT_VECTEUR_3D v1,v2,v3;
447     ost<<"AXES D INERTIE: "<<endl;
448     ost<<setfill('=')<<setw(99)<<'='<<endl;
449     get_axes_dinertie(v1,v2,v3) ;
450     for(unsigned int j=0;j<3;j++)
451     ost<<setfill(' ')<<setw(15)<<v1[j]<<setw(15)<<v2[j]<<setw(15)<<v3[j]<<endl;
452    
453     /*
454     ost<<"(*)"<<((MG_FACE*)elem_topo)->get_id()<<"="<<"TENS D INERTIE: "<<endl;
455    
456     ost<<setfill('=')<<setw(99)<<'='<<endl;
457     get_tenseur_inertie_au_cm(tens) ;
458     ost<<setfill('=')<<setw(99)<<'='<<endl;
459     for(unsigned int i=0;i<3;i++) {
460     for(unsigned int j=0;j<3;j++)
461     ost<<setfill(' ')<<setw(15)<<tens[3*i+j] ;
462     ost<<endl; }
463    
464 souaissa 69 ost<<setfill('=')<<setw(99)<<'='<<endl;/
465 souaissa 66
466     ost<<setfill('=')<<setw(99)<<'='<<endl;
467     double2 tens[9];
468     get_tenseur_inertie_base_locale(tens);
469    
470     ost<<((MG_FACE*)elem_topo)->get_id()<<"="<<"TENS D INERTIE LOCALE: "<<endl;
471    
472    
473     ost<<setfill('=')<<setw(99)<<'='<<endl;
474     for(unsigned int i=0;i<3;i++) {
475     for(unsigned int j=0;j<3;j++)
476     ost<<setfill(' ')<<setw(15)<<tens[3*i+j] ;
477     ost<<endl; }
478    
479     ost<<setfill('=')<<setw(99)<<'='<<endl;
480     int nbpts=LISTE_POINTS_CTRS.size();
481     int cmpt=0;
482     for(int i=0;i<nbpts;i++)
483     {
484     ost<<setfill(' ')<<setw(15)<<LISTE_POINTS_CTRS[i] ;
485     cmpt++;
486     if(cmpt==4)
487     {
488     ost<<endl;
489     cmpt=0;
490     }
491    
492     }
493     ost<<setfill('=')<<setw(99)<<'='<<endl;
494     }
495    
496    
497     /***********
498     void VCT_FACE::enregistrer(std::ostream& ost)
499     {
500    
501     double2 cmasse[4];
502    
503     vct_surf->enregistrer(ost);
504    
505     OT_TNS<double2,4> tns1,tns2;
506    
507    
508    
509     int compt=0;
510     //ost<<setfill('=')<<setw(99)<<'='<<endl;
511     int taille= LISTE_TOPO_VECTEUR_FACE.size();
512     for(int i=0;i<taille;i++)
513     {
514     ost<<LISTE_TOPO_VECTEUR_FACE[i]<<setw(18);
515     compt++;
516     if (compt==4) {compt=0; ost<<endl; }
517     }
518     int nb_boucle=((MG_FACE*)elem_topo)->get_nb_mg_boucle();
519    
520     for(int j=0;j<nb_boucle;j++)
521     {
522     MG_BOUCLE* Boucle = ((MG_FACE*)elem_topo)->get_mg_boucle(j);
523     int nb_arete = Boucle->get_nb_mg_coarete();
524     for (int w =0; w<nb_arete;w++)
525     {
526     vector<double2> temp_vct;
527     MG_COARETE* coArete = Boucle->get_mg_coarete(w);
528     MG_ARETE* Arete = coArete->get_arete();
529     VCT_ARETE vct_art(Arete);
530     vct_art.enregistrer(ost);
531    
532     }
533     }
534    
535     ost<<"TENSEUR METRIQUE FACES"<<endl;
536     tns1=get_tenseur_metrique_surface();
537     ost<<tns1<<endl;
538     ost<<"TENSEUR METRIQUE ARETES"<<endl;
539     tns2=get_tenseur_metrique_aretes();
540     ost<<tns2<<endl;
541    
542     /*
543     char* sld_file= "C:\\temp\\cb1.SLDPRT";
544     SLD_FONCTION f_sld;
545     CComPtr <ISldWorks> swApp;
546     CComPtr <IModelDoc2> swModel;
547     CComQIPtr<IPartDoc> swPart;
548     CComQIPtr<ISketchPoint> swSkPoint;
549     CComQIPtr<ISketchSegment> swSksegm;
550    
551     f_sld.Connection();
552     f_sld.OuvrirFichier(sld_file);
553    
554     swApp = f_sld.swApp;
555     swModel=f_sld.swModel;
556     swPart = swModel;
557    
558     CComVariant vBodyArr;
559     swPart->GetBodies2(swSolidBody, VARIANT_TRUE, &vBodyArr);
560    
561     SAFEARRAY* psaBody = V_ARRAY(&vBodyArr);
562     LPDISPATCH* pBodyDispArray = NULL;
563     long nBodyHighIndex = -1;
564     long nBodyCount = -1;
565     SafeArrayAccessData(psaBody, (void **) &pBodyDispArray);
566     SafeArrayGetUBound(psaBody, 1, &nBodyHighIndex);
567     nBodyCount = nBodyHighIndex + 1;
568     /* for (int i = 0; i < nBodyCount; i++)
569     {
570     CComQIPtr <IBody2> pBody;
571     pBody = pBodyDispArray[i];
572     CComPtr <IFace2> face;
573     CComPtr <IFace2> suivantface;
574     CComPtr <ISurface> surf;
575     long nbFaces;
576     pBody->GetFaceCount(&nbFaces);
577     pBody->IGetFirstFace(&face);
578    
579     for(int f=0;f<nbFaces;f++)// boucle sur les faces
580     {
581    
582     CComPtr <ILoop2> loope;
583     CComPtr <ILoop2> nextloope;
584     face->IGetFirstLoop(&loope);
585     long nbloop = -1;
586     face->GetLoopCount(&nbloop);
587     for (int l = 0;l<nbloop;l++)
588     {
589     // maintenant les aretes
590     CComPtr <ICoEdge> Coarete;
591     CComPtr <ICoEdge> nextCoarete;
592     loope->IGetFirstCoEdge(&Coarete);
593     long nbCoarete = -1;
594     loope->GetEdgeCount(&nbCoarete);
595     for (int coa=0;coa<nbCoarete;coa++)
596     {
597     CComPtr <IEdge> arete;
598     Coarete->IGetEdge(&arete);
599     swModel->SetAddToDB(1);
600     swModel->Insert3DSketch2(0);
601     double x1=0;
602     double y1=0.002;
603     double z1=0.01;
604     double x2=0;
605     double y2=0.002;
606     double z2=0.02;
607    
608    
609    
610     //=======================
611     CComPtr <IVertex> Sommet1;
612     CComPtr <IVertex> Sommet2;
613    
614     arete->IGetStartVertex(&Sommet1);
615     arete->IGetEndVertex(&Sommet2);
616    
617    
618    
619     //=======================
620    
621    
622     swModel->ICreatePoint2(x1,y1,z1);
623     swModel->ICreatePoint2(x2,y2,z2);
624     swModel->ICreateLine2(x1,y1,z1,x2,y2,z2);
625    
626     swModel->SetAddToDB(0);
627     swModel->Insert3DSketch2(1);
628     Coarete->IGetNext(&nextCoarete);
629     Coarete = nextCoarete;
630     nextCoarete.Release();
631     } // next CoEdge
632    
633     loope->IGetNext(&nextloope);
634     loope = nextloope;
635    
636    
637     } // next loop
638    
639     face->IGetNextFace(&suivantface);
640     face = suivantface;
641    
642     } // next face
643    
644    
645     } // next body /
646     //Set swSkPoint = swmodel.CreatePoint2(param(j - 2), param(j - 1), param(j))
647     // set swSketchSeg2 = swmodel.CreateLine2(paramm(3 * r * numu + 3 * s), paramm(3 * r * numu + 3 * s + 1), paramm(3 * r * numu + 3 * s + 2), paramm(3 * r * numu + 3 * (s + 1)), paramm(3 * r * numu + 3 * (s + 1) + 1), paramm(3 * r * numu + 3 * (s + 1) + 2))
648     swModel->SetAddToDB(1);
649     swModel->Insert3DSketch2(0);
650     for(int i=0;i<nb_topo_points;i++)
651     {
652     double x1=0.001*LISTE_POINTS_CTRS.get(4*i);
653     double y1=0.001*LISTE_POINTS_CTRS.get(4*i+1);
654     double z1=0.001*LISTE_POINTS_CTRS.get(4*i+2);
655     swModel->ICreatePoint2(x1,y1,z1);
656     }
657    
658     swModel->SetAddToDB(0);
659 souaissa 69 swModel->Insert3DSketch2(1); */
660 souaissa 66
661    
662    
663    
664    
665 souaissa 69 }
666 souaissa 66
667    
668    
669    
670    
671    
672