ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 169
Committed: Fri Feb 13 23:04:14 2009 UTC (16 years, 3 months ago) by francois
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 93871 byte(s)
Log Message:
Resolution de bug avec la version de gcc 4.3.2 --> mise la norme de c++

File Contents

# User Rev Content
1 souaissa 66 //---------------------------------------------------------------------------
2     #include"gestionversion.h"
3    
4     #pragma hdrstop
5    
6     #include "vct_comparaison.h"
7 souaissa 153 #include "vct_volume.h"
8 souaissa 87 #include "vct_face.h"
9     #include "vct_surface.h"
10 francois 169 #include <iomanip>
11 souaissa 153 #include "vct_outils.h"
12 souaissa 158 #include "constantegeo.h"
13    
14 souaissa 66 //---------------------------------------------------------------------------
15    
16     #pragma package(smart_init)
17    
18    
19 francois 102 VCT_COMPARAISON::VCT_COMPARAISON(MG_GESTIONNAIRE *gst1,MG_GEOMETRIE *mgeo1,MG_GESTIONNAIRE *gst2,MG_GEOMETRIE *mgeo2):mggeo1(mgeo1),mggeo2(mgeo2),gest1(gst1),gest2(gst2)
20 souaissa 66 {
21 souaissa 153 MG_VOLUME*vol1=mggeo1->get_mg_volume(0);
22     MG_VOLUME*vol2=mggeo2->get_mg_volume(0);
23     T1=vol1->get_vectorisation().get_matrice_transformation(2);
24     T2=vol2->get_vectorisation().get_matrice_transformation(1);
25    
26 francois 89 }
27 souaissa 66
28 souaissa 99 VCT_COMPARAISON::~VCT_COMPARAISON()
29     {
30     }
31 souaissa 66
32 francois 89
33 souaissa 143 void VCT_COMPARAISON::compare_les_deux_geometries(int affiche_couleur)
34 souaissa 153 {
35     int nb_face1=mggeo1->get_nb_mg_face();
36     int nb_face2=mggeo2->get_nb_mg_face();
37 souaissa 66
38 souaissa 87 for(int i=0;i<nb_face1; i++)
39     {
40 souaissa 153 OT_VECTEUR_4DD Dv1,Dv2,G1,G2;
41     OT_TENSEUR V1(4),V2(4);
42     MG_FACE* face1=mggeo1->get_mg_face(i);
43     MG_SURFACE*surf1=face1->get_surface();
44     G1=surf1->get_vectorisation().calcule_barycentre(T1);
45     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
46     int id1=face1->get_id();
47     OT_TENSEUR tns1_face(4),tns1_surf(4);
48     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
49     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
50     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
51 souaissa 87
52 souaissa 153 face1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
53     tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
54     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
55 souaissa 87
56 souaissa 153 ttns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
57     ttns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
58     vector<double2> ifac1; vector<double2>isurf1;
59     for(int r=0;r<4;r++)
60     {
61     ifac1.insert( ifac1.end(), ttns1_face(r,r));
62     isurf1.insert( isurf1.end(), ttns1_surf(r,r));
63     }
64     int cmpt=0;
65     for(int j=0;j<nb_face2;j++)
66     {
67     MG_FACE* face2=mggeo2->get_mg_face(j);
68     MG_SURFACE*surf2=face2->get_surface();
69     G2=surf2->get_vectorisation().calcule_barycentre(T2);
70     int id2=face2->get_id();
71     OT_TENSEUR tns2_face(4),tns2_surf(4);
72     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
73     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
74     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
75 souaissa 87
76 souaissa 153 face2->get_vectorisation().calcule_axes_dinertie(T2,Dv1,V1);
77     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
78     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
79 souaissa 87
80 souaissa 153 ttns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
81     ttns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
82     vector<double2> ifac2; vector<double2> isurf2;
83     for(int r=0;r<4;r++)
84     {
85     ifac2.insert( ifac2.end(), ttns2_face(r,r));
86     isurf2.insert( isurf2.end(), ttns2_surf(r,r));
87     }
88    
89     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
90     {
91     if(tns1_face.est_til_equivalent(tns2_face))
92     {
93     verifier_le_repere(V1,V2,ifac1,ifac2);
94     if(tns1_surf.est_til_equivalent(tns2_surf))
95     {
96     similarite.ajouter(id1);
97     similarite.ajouter(id2);
98     vector<unsigned int> indx1,indx2;
99     if(ttns1_face.listes_equivalentes(isurf1,isurf2,indx2))
100     {
101     if(G1==G2)
102     {
103     surf_ident.ajouter(id1);
104     surf_ident.ajouter(id2);
105     }
106    
107     if(ttns1_face.listes_equivalentes(ifac1,ifac2,indx1))
108     {
109     sim_double.ajouter(id1) ;
110     sim_double.ajouter(id2) ;
111     cmpt++;
112     }
113     }
114    
115     }
116     }
117     }
118     }
119    
120     nb_sim.ajouter(cmpt);
121 souaissa 87 }
122 souaissa 153
123     if(sim_double.get_nb()==0)
124     {
125     sim_double=surf_ident;
126     }
127     if (affiche_couleur) this->affecter_les_couleurs(23);
128     }
129 souaissa 66
130    
131    
132 souaissa 143 void VCT_COMPARAISON::trouver_les_identites(int affiche_couleur)
133 souaissa 87 {
134 souaissa 142
135     TPL_LISTE_ENTITE<int> lst_fin;
136 souaissa 87 TPL_LISTE_ENTITE<int> lst;
137 souaissa 143 this->compare_les_deux_geometries(0);
138 souaissa 99 int nb_face1=mggeo1->get_nb_mg_face();
139     int nb_face2=mggeo2->get_nb_mg_face();
140 souaissa 90
141 souaissa 87
142    
143    
144 souaissa 99 this->trouve_face_de_reference(face_ref1,face_ref2);//,ls,lst_fin
145 souaissa 87
146 souaissa 153 OT_VECTEUR_4DD Dv,Dv1,Dv2,G1ref,G2ref,g1g2;
147 souaissa 99 OT_TENSEUR V(4),V1(4),V2(4);
148     OT_VECTEUR_4DD g1_ref,g2_ref;
149     MG_FACE* face1_ref=mggeo1->get_mg_faceid(face_ref1);
150 souaissa 153 //MG_SURFACE* surf1_ref=face1_ref->get_surface();
151     //G1ref= surf1_ref->get_vectorisation().calcule_barycentre(T1);
152     G1ref= face1_ref->get_vectorisation().calcule_barycentre(T1);
153     G1ref= face1_ref->get_vectorisation().get_nouveau_pt(T1,G1ref);
154     //face1_ref->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
155     /*
156 souaissa 99 for(int r=0;r<4;r++) {
157     for(int s=0;s<4;s++) {
158     g1_ref[r]= g1_ref[r]+V1(s,r)*G1[s];
159     }
160     }
161 souaissa 153 */
162 souaissa 99
163     MG_FACE* face2_ref=mggeo2->get_mg_faceid(face_ref2);
164 souaissa 153 //face2_ref->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
165     //MG_SURFACE* surf2_ref=face2_ref->get_surface();
166     //G2ref= surf2_ref->get_vectorisation().calcule_barycentre(T2);
167     G2ref= face2_ref->get_vectorisation().calcule_barycentre(T2);
168     /*
169 souaissa 99 for(int r=0;r<4;r++) {
170     for(int s=0;s<4;s++) {
171     g2_ref[r]= g2_ref[r]+V2(s,r)*G2[s];
172     }
173     }
174 souaissa 153 */
175 souaissa 99
176     OT_VECTEUR_4DD g1refg1,g2refg2;
177    
178    
179 souaissa 153
180 souaissa 99 for(int i=0;i<nb_face1;i++)
181     {
182 souaissa 153
183 souaissa 99 OT_VECTEUR_4DD g1,G1;
184     MG_FACE* face1=mggeo1->get_mg_face(i);
185     int id1=face1->get_id();
186 souaissa 153 G1= face1->get_vectorisation().calcule_barycentre(T1);
187     G1= face1->get_vectorisation().get_nouveau_pt(T1,G1);
188     /*
189 souaissa 99 for(int r=0;r<4;r++) {
190     for(int s=0;s<4;s++) {
191     g1[r]= g1[r]+V1(s,r)*G1[s];
192     }
193     }
194 souaissa 153 */
195     g1refg1=G1-G1ref;
196     g1refg1=face1->get_vectorisation().get_nouveau_pt(T1,g1refg1);
197     //g1refg1=g1-g1_ref;
198 souaissa 99 // num2=list.get(2*i+1);
199     for(int j=0;j<nb_face2;j++)
200     {
201    
202 souaissa 153 OT_VECTEUR_4DD g2,G2,g12refg2;
203    
204 souaissa 99 MG_FACE* face2=mggeo2->get_mg_face(j);
205     int id2=face2->get_id();
206 souaissa 153 G2= face2->get_vectorisation().calcule_barycentre(T2);
207    
208     /* for(int r=0;r<4;r++) {
209 souaissa 99 for(int s=0;s<4;s++) {
210     g2[r]= g2[r]+V2(s,r)*G2[s];
211     }
212     }
213 souaissa 153 */
214     //OT_VECTEUR_4DD g2refg2=g2-g2_ref;
215     // g12refg2=G2-G2ref;
216     OT_VECTEUR_4DD g2refg2=G2-G2ref;
217     //OT_VECTEUR_4DD dif= g1refg1-g2refg2;
218     //double2 prec=1e-6;
219     // if(dif[0].get_fabs()<=prec&&dif[1].get_fabs()<=prec&&dif[2].get_fabs()<=prec&&dif[3].get_fabs()<=prec)
220     if(g2refg2==g1refg1)
221 souaissa 99 {
222     identite.ajouter(id1);
223     identite.ajouter(id2);
224    
225     break;
226     }
227 souaissa 153 }
228 souaissa 99 }
229    
230    
231    
232    
233 souaissa 143 if(affiche_couleur) this->affecter_les_couleurs(1);
234 souaissa 87
235     }
236    
237    
238    
239 souaissa 143 void VCT_COMPARAISON::compare_les_deux_geometries_vectoriellement(int affiche_couleur)
240 souaissa 87 {
241 souaissa 66 int nb_face1=mggeo1->get_nb_mg_face();
242     int nb_face2=mggeo2->get_nb_mg_face();
243 souaissa 87 similarite.vide();
244     for(int i=0;i<nb_face1; i++)
245     {
246     MG_FACE* face1=mggeo1->get_mg_face(i);
247     MG_SURFACE*surf1=face1->get_surface();
248     int id1=face1->get_id();
249     OT_TENSEUR tns1_face(4),tns1_surf(4);
250     OT_TENSEUR ttns1_face(4),ttns1_surf(4);
251     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
252     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
253 souaissa 66
254 souaissa 87 tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
255     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
256 souaissa 66
257 souaissa 87 for(int j=0;j<nb_face2;j++)
258     {
259     MG_FACE* face2=mggeo2->get_mg_face(j);
260     MG_SURFACE*surf2=face2->get_surface();
261     int id2=face2->get_id();
262     OT_TENSEUR tns2_face(4),tns2_surf(4);
263     OT_TENSEUR ttns2_face(4),ttns2_surf(4);
264     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
265     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
266     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
267     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
268 souaissa 66
269 souaissa 87 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
270     {
271     if(tns1_face.est_til_equivalent(tns2_face))
272     {
273     if(tns1_surf.est_til_equivalent(tns2_surf))
274     {
275     similarite.ajouter(id1);
276     similarite.ajouter(id2);
277     }
278     }
279     }
280     }
281     }
282 souaissa 143 if (affiche_couleur)this->affecter_les_couleurs(21);
283 souaissa 87
284     }
285    
286 souaissa 143 void VCT_COMPARAISON::compare_les_deux_geometries_inertiellement (int affiche_couleur)
287 souaissa 87 {
288 souaissa 153
289    
290 souaissa 87 int nb_face1=mggeo1->get_nb_mg_face();
291     int nb_face2=mggeo2->get_nb_mg_face();
292     ssimilarite.vide();
293     for(int i=0;i<nb_face1; i++)
294     {
295     MG_FACE* face1=mggeo1->get_mg_face(i);
296     MG_SURFACE*surf1=face1->get_surface();
297     int id1=face1->get_id();
298     OT_TENSEUR tns1_face(4),tns1_surf(4);
299     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
300     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
301    
302 souaissa 153 tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
303     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
304 souaissa 87 vector<double2> ifac1; vector<double2>isurf1;
305     for(int r=0;r<4;r++)
306     {
307     ifac1.insert( ifac1.end(), tns1_face(r,r));
308     isurf1.insert( isurf1.end(), tns1_surf(r,r));
309     }
310    
311 souaissa 66 for(int j=0;j<nb_face2;j++)
312     {
313    
314     MG_FACE* face2=mggeo2->get_mg_face(j);
315 souaissa 74 MG_SURFACE*surf2=face2->get_surface();
316 souaissa 66 int id2=face2->get_id();
317 souaissa 74 OT_TENSEUR tns2_face(4),tns2_surf(4);
318     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
319     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
320 souaissa 153 tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
321     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
322 souaissa 87 vector<double2> ifac2; vector<double2> isurf2;
323     for(int r=0;r<4;r++)
324     {
325     ifac2.insert( ifac2.end(), tns2_face(r,r));
326     isurf2.insert( isurf2.end(), tns2_surf(r,r));
327     }
328 souaissa 66
329 souaissa 74 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
330 souaissa 66 {
331 souaissa 87 vector<unsigned int> indx1,indx2;
332     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
333 souaissa 66 {
334 souaissa 87 if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
335     {
336     ssimilarite.ajouter(id1);
337     ssimilarite.ajouter(id2);
338     }
339 souaissa 66 }
340 souaissa 87 }
341 souaissa 66
342 souaissa 87 }
343 souaissa 66
344 souaissa 87 }
345 souaissa 66
346 souaissa 143 if (affiche_couleur)affecter_les_couleurs(22);
347 souaissa 87 }
348    
349 souaissa 90 void VCT_COMPARAISON::compare_une_geometrie_inertiellement(int modele)
350 souaissa 87 {
351 souaissa 153
352    
353 souaissa 99 TPL_LISTE_ENTITE<int> ssim_tmp;
354 souaissa 87
355 francois 102 MG_GESTIONNAIRE *gst1;
356 souaissa 90 MG_GEOMETRIE *mgeo1 ;
357     int laquelle;
358 souaissa 87
359 souaissa 90 switch(modele)
360     {
361     case 1:
362     {
363     gst1=gest1;
364     mgeo1=mggeo1;
365 souaissa 92 laquelle=31;
366 souaissa 90 break;
367     }
368     case 2:
369     {
370     gst1=gest2;
371     mgeo1=mggeo2;
372 souaissa 92 laquelle=32;
373 souaissa 90 break;
374     }
375 souaissa 87
376     }
377 souaissa 66
378 souaissa 90 int nb_face1=mgeo1->get_nb_mg_face();
379 souaissa 99
380 souaissa 90 for(int i=0;i<nb_face1; i++)
381 souaissa 87 {
382 souaissa 90 MG_FACE* face1=mgeo1->get_mg_face(i);
383 souaissa 87 MG_SURFACE*surf1=face1->get_surface();
384     int id1=face1->get_id();
385     OT_TENSEUR tns1_face(4),tns1_surf(4);
386     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
387     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
388 souaissa 66
389 souaissa 153 tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
390     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
391 souaissa 87 vector<double2> ifac1; vector<double2>isurf1;
392     for(int r=0;r<4;r++)
393     {
394     ifac1.insert( ifac1.end(), tns1_face(r,r));
395     isurf1.insert( isurf1.end(), tns1_surf(r,r));
396     }
397 souaissa 66
398 souaissa 90 for(int j=0;j<nb_face1;j++)
399 souaissa 87 {
400 souaissa 66
401 souaissa 90 MG_FACE* face2=mgeo1->get_mg_face(j);
402 souaissa 87 MG_SURFACE*surf2=face2->get_surface();
403     int id2=face2->get_id();
404     OT_TENSEUR tns2_face(4),tns2_surf(4);
405     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
406     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
407 souaissa 153 tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
408     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
409 souaissa 87 vector<double2> ifac2; vector<double2> isurf2;
410     for(int r=0;r<4;r++)
411     {
412     ifac2.insert( ifac2.end(), tns2_face(r,r));
413     isurf2.insert( isurf2.end(), tns2_surf(r,r));
414     }
415 souaissa 66
416 souaissa 87 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
417     {
418     vector<unsigned int> indx1,indx2;
419     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
420     {
421     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
422     {
423 souaissa 99 ssim_tmp.ajouter(id1);
424     ssim_tmp.ajouter(id2);
425 souaissa 87 }
426     }
427     }
428 souaissa 66
429 souaissa 87 }
430    
431     }
432 souaissa 99 if (modele==1) ssim1=ssim_tmp;
433     if (modele==2) ssim2=ssim_tmp;
434    
435 souaissa 90 affecter_les_couleurs(laquelle);
436 souaissa 66 }
437    
438    
439    
440 souaissa 82
441 souaissa 87 TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_identitees()
442     {
443     return identite;
444     }
445    
446 souaissa 99 TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_simalarite_vectorielle(int type_comparais)
447 souaissa 87 {
448 souaissa 99 TPL_LISTE_ENTITE<int> lst_tmp;
449     switch ( type_comparais)
450     {
451     case 12: lst_tmp= similarite;
452     case 1: lst_tmp= sim1;
453     case 2: lst_tmp= sim2;
454     }
455     return lst_tmp;
456 souaissa 87 }
457    
458 souaissa 99 TPL_LISTE_ENTITE<int> VCT_COMPARAISON::get_liste_des_simalarite_inertielle(int type_comparais)
459 souaissa 87 {
460 souaissa 99 TPL_LISTE_ENTITE<int> lst_tmp;
461     switch ( type_comparais)
462     {
463     case 12: lst_tmp= ssimilarite;
464     case 1: lst_tmp= ssim1;
465     case 2: lst_tmp= ssim2;
466     }
467     return lst_tmp;
468 souaissa 87 }
469    
470    
471     void VCT_COMPARAISON::affecter_les_couleurs(int niveau)
472 souaissa 66 {
473 francois 144 //randomize();
474 souaissa 87 int nb_face_ident=similarite.get_nb()/2;
475     int nb_face_identt=ssimilarite.get_nb()/2;
476     int nb_face_iden=identite.get_nb()/2;
477     double val;
478     TPL_LISTE_ENTITE<int> lst;
479     TPL_LISTE_ENTITE<double> lst_val;
480     int num1,num2,num1_avant ;
481 francois 144 if (niveau==1) //pour afficher les identites entre le deux mod�les
482 souaissa 87 {
483     for(int i=0;i< nb_face_iden;i++)
484     {
485     num1=identite.get(2*i) ;
486     num2=identite.get(2*i+1) ;
487     if(i>0) num1_avant= identite.get(2*(i-1));
488     MG_FACE* face1=mggeo1->get_mg_faceid(num1);
489     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
490    
491     if(i==0)
492     {
493     choisir_une_couleur(val);
494     while(lst_val.est_dans_la_liste(val))
495     {
496     choisir_une_couleur(val);
497     }
498     face1->ajouter_ccf("Cc",val);
499     face2->ajouter_ccf("Cc",val);
500     lst_val.ajouter(val);
501     }
502    
503     if(i>0)
504     {
505     if(num1!=num1_avant)
506     {
507     choisir_une_couleur(val);
508     while(lst_val.est_dans_la_liste(val))
509     {
510     choisir_une_couleur(val);
511     }
512     face1->ajouter_ccf("Cc",val);
513     face2->ajouter_ccf("Cc",val);
514     lst_val.ajouter(val);
515     }
516     else{
517     face2->ajouter_ccf("Cc",val);
518     }
519    
520     }
521     }
522    
523     }
524    
525 francois 144 if(niveau==21||niveau==22||niveau==23) //pour afficher la similarite entre le deux mod�le vectoriellement ou inertiellement
526 souaissa 90 {
527     TPL_LISTE_ENTITE<int> simu;
528     if(niveau==21)simu=similarite;
529     if(niveau==22) simu=ssimilarite;
530 souaissa 99 if(niveau==23) simu=sim_double;
531 souaissa 90 TPL_LISTE_ENTITE<int> llst1;
532     TPL_LISTE_ENTITE<int> llst2;
533     int nb_face_sim=simu.get_nb()/2.;
534     for(int i=0;i< nb_face_sim;i++)
535     {
536     TPL_LISTE_ENTITE<int> lst1;
537     TPL_LISTE_ENTITE<int> lst2;
538     TPL_LISTE_ENTITE<int> llst3;
539     num1=simu.get(2*i) ;
540     if(!llst1.est_dans_la_liste(num1))
541 souaissa 87 {
542 souaissa 90 num2=simu.get(2*i+1) ;
543     lst1.ajouter(num1);
544     lst2.ajouter(num2);
545     llst1.ajouter(num1);
546     llst2.ajouter(num2);
547     for(int j=1;j< nb_face_sim;j++)
548     {
549     int Num1=simu.get(2*j) ;
550     int Num2=simu.get(2*j+1) ;
551 souaissa 87
552 souaissa 90 if(num1==Num1)
553     {
554     llst3.ajouter(Num2);
555     }
556     if(num2==Num2||llst3.est_dans_la_liste(Num2))
557     {
558     if(!lst1.est_dans_la_liste(Num1)) {
559     lst1.ajouter(Num1);
560     llst1.ajouter(Num1); }
561     if(!lst2.est_dans_la_liste(Num2)) {
562     lst2.ajouter(Num2);
563     llst2.ajouter(Num2); }
564     }
565 souaissa 87
566     }
567    
568 souaissa 90 choisir_une_couleur(val);
569     while(lst_val.est_dans_la_liste(val))
570     {
571 souaissa 87 choisir_une_couleur(val);
572 souaissa 90 }
573     lst_val.ajouter(val);
574     int nb1=lst1.get_nb();
575     int nb2=lst2.get_nb();
576     for(int i=0;i<nb1;i++)
577     {
578     int n1=lst1.get(i);
579     MG_FACE* face1=mggeo1->get_mg_faceid(n1);
580     face1->ajouter_ccf("Cc",val);
581 souaissa 87 }
582 souaissa 90 for(int i=0;i<nb2;i++)
583     {
584     int n2=lst2.get(i);
585     MG_FACE* face2=mggeo2->get_mg_faceid(n2);
586     face2->ajouter_ccf("Cc",val);
587     }
588    
589     }
590     }
591 souaissa 87
592    
593     }
594    
595 francois 144 if(niveau== 31||niveau==32) //pour afficher la similarite dans le premier mod�le ou le second modele
596 souaissa 87 {
597    
598 souaissa 90 MG_GEOMETRIE *mgeo1 ;
599     int laquelle;
600 souaissa 87
601 souaissa 90 switch(niveau)
602     {
603     case 31:
604     {
605     mgeo1=mggeo1;
606     laquelle=31;
607     break;
608 souaissa 87 }
609 souaissa 90 case 32:
610     {
611     mgeo1=mggeo2;
612     laquelle=32;
613     break;
614     }
615    
616 souaissa 87 }
617    
618 souaissa 142
619 souaissa 90 for(int i=0;i< nb_face_identt;i++)
620 souaissa 87 {
621 souaissa 90 num1=ssimilarite.get(2*i) ;
622     num2=ssimilarite.get(2*i+1) ;
623 souaissa 87
624 souaissa 90 if(i>0) num1_avant= ssimilarite.get(2*(i-1));
625     MG_FACE* face1=mgeo1->get_mg_faceid(num1);
626     MG_FACE* face2=mgeo1->get_mg_faceid(num2);
627     if(!lst.est_dans_la_liste(num2))
628     {
629 souaissa 87 if(i==0)
630     {
631     choisir_une_couleur(val);
632 souaissa 90 while(lst_val.est_dans_la_liste(val))
633     {
634     choisir_une_couleur(val);
635     }
636 souaissa 87 face1->ajouter_ccf("Cc",val);
637 souaissa 90 if(num1!=num2) face2->ajouter_ccf("Cc",val); lst.ajouter(num2);
638     lst_val.ajouter(val);
639 souaissa 87 }
640    
641     if(i>0)
642     {
643     if(num1!=num1_avant)
644     {
645 souaissa 90 choisir_une_couleur(val);
646     while(lst_val.est_dans_la_liste(val))
647     {
648 souaissa 87 choisir_une_couleur(val);
649 souaissa 90 }
650     face1->ajouter_ccf("Cc",val);
651     if(num1!=num2) face2->ajouter_ccf("Cc",val); lst.ajouter(num2);
652     lst_val.ajouter(val);
653 souaissa 87 }
654     else{
655 souaissa 90 if(num1!=num2) face2->ajouter_ccf("Cc",val); lst.ajouter(num2);
656 souaissa 87 }
657    
658     }
659 souaissa 90 }
660 souaissa 87 }
661    
662    
663     }
664    
665    
666     }
667    
668    
669     void VCT_COMPARAISON::choisir_une_couleur(double& val)
670     {
671 francois 144 //randomize();
672 souaissa 87
673     unsigned char r=rand() % 255;
674     unsigned char g=rand() % 255;
675     unsigned char b=rand() % 255;
676     val=0.;
677     unsigned char* p =(unsigned char*)&val;
678    
679     *p=r;
680     p++;*p=g;
681     p++;*p=b;
682    
683     }
684    
685    
686 souaissa 99 void VCT_COMPARAISON::trouve_face_de_reference(int &face_ref1,int &face_ref2)// ,TPL_LISTE_ENTITE<int>& list
687     {
688 souaissa 153
689     /*
690 souaissa 99 int nb_simdble=sim_double.get_nb()/2 ;
691    
692     int num1,num2 ;
693    
694    
695 souaissa 87 OT_VECTEUR_4DD Dv,Dv1,Dv2,G1,G2,g1g2;
696     OT_TENSEUR V(4),V1(4),V2(4);
697    
698    
699 souaissa 99 int nbsim=nb_sim.get_nb();
700     int *t=new int [nbsim];
701     int *tt=new int [nbsim];
702     for(int i=0;i<nbsim;i++)
703     {
704 souaissa 142 // t[i]= nb_sim.get(i);
705     t[i]= i;
706 souaissa 143 int nbre_faces_simil=nb_sim.get(i);
707     tt[i]=nbre_faces_simil;
708 souaissa 142
709 souaissa 99 }
710     int pos_min,pos_max;
711     int min,max;
712     int trouve=0;
713 souaissa 142
714     for (int i=0;i<nbsim;i++)
715     {
716    
717     for(int j=0;j<nbsim;j++)
718     {
719     if(tt[j]<tt[i])
720     {
721     int tmp= tt[i];
722    
723     tt[i]= tt[j];
724     tt[j]= tmp;
725     t[i]=j;
726     t[j]=i;
727     }
728     }
729     }
730    
731 souaissa 153
732 souaissa 142 //pos_max=t[1];
733    
734     if(tt[0]==1)
735     {
736 souaissa 153 pos_min=t[0];
737 souaissa 142 MG_FACE* fref=mggeo1->get_mg_face(pos_min);
738     face_ref1= fref->get_id();
739     for(int i=0;i<nb_simdble;i++){
740     if (sim_double.get(2*i)==face_ref1)
741     face_ref2=sim_double.get(2*i+1);
742     }
743     return;
744     }
745    
746 souaissa 87
747 souaissa 142 int pos1=0;
748     int pos2=0;
749 souaissa 99
750 souaissa 142 int tr=0;
751     trouve=0;
752 souaissa 143 while(trouve==0&&tr<nbsim-1)
753 souaissa 142 {
754     pos_min=t[tr];
755     pos_max=t[tr+1];
756    
757 souaissa 143 OT_VECTEUR_4DD g1_ref,g2_ref,G1_ref,G2_ref;
758 souaissa 99 MG_FACE* face1_ref=mggeo1->get_mg_face(pos_min);
759 souaissa 153 MG_SURFACE* surf1_ref=face1_ref->get_surface();
760 souaissa 99 int id1=face1_ref->get_id();
761 souaissa 153 face1_ref->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
762     G1_ref= face1_ref->get_vectorisation().calcule_barycentre(T1);
763     /*
764 souaissa 87 for(int r=0;r<4;r++) {
765     for(int s=0;s<4;s++) {
766 souaissa 143 g1_ref[r]= g1_ref[r]+V1(s,r)*G1_ref[s];
767 souaissa 87 }
768     }
769 souaissa 153 /
770     g1_ref=face1_ref->get_vectorisation().get_nouveau_pt(T1,G1_ref);
771     /* OT_TENSEUR ttns1_face=face1_ref->get_vectorisation().calcule_tenseur_inertie_base_locale();
772     vector<double2> ifac1;
773     for(int r=0;r<4;r++)
774     {
775     ifac1.insert( ifac2.end(), ttns1_face(r,r));
776     } /
777 souaissa 87
778 souaissa 99 MG_FACE* face12_ref=mggeo1->get_mg_face(pos_max);
779 souaissa 153 face12_ref->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
780 souaissa 99 int id2=face12_ref->get_id();
781 souaissa 153 G2_ref= face12_ref->get_vectorisation().calcule_barycentre(T2);
782     /*
783 souaissa 87 for(int r=0;r<4;r++) {
784     for(int s=0;s<4;s++) {
785 souaissa 143 g2_ref[r]= g2_ref[r]+V1(s,r)*G2_ref[s];
786 souaissa 87 }
787     }
788 souaissa 153 /
789     g2_ref=face12_ref->get_vectorisation().get_nouveau_pt(T1,G2_ref);
790 souaissa 87
791 souaissa 99 OT_VECTEUR_4DD g12_ref= g2_ref -g1_ref;
792    
793    
794 souaissa 87 OT_VECTEUR_4DD g1refg1,g2refg2;
795 souaissa 99 TPL_LISTE_ENTITE<int> lst1,lst2;
796     for(int k=0;k<nb_simdble;k++)
797     {
798     if(sim_double.get(2*k)==id1)
799     lst1.ajouter( sim_double.get(2*k+1));
800     if(sim_double.get(2*k)==id2)
801     lst2.ajouter(sim_double.get(2*k+1));
802     }
803 souaissa 87
804 souaissa 99
805    
806 souaissa 142
807 souaissa 99 for(int i=0;i<lst1.get_nb();i++)
808 souaissa 87 {
809 souaissa 99
810     int num1=lst1.get(i);
811     OT_VECTEUR_4DD g1,G1;
812     MG_FACE* face1=mggeo2->get_mg_faceid(num1);
813 souaissa 153 face1->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
814     G1= face1->get_vectorisation().calcule_barycentre(T2);
815     /*
816 souaissa 87 for(int r=0;r<4;r++) {
817     for(int s=0;s<4;s++) {
818 souaissa 99 g1[r]= g1[r]+V2(s,r)*G1[s];
819 souaissa 87 }
820     }
821 souaissa 153 /
822 souaissa 99 // g1refg1=g1-g1_ref;
823     // num2=list.get(2*i+1);
824     for(int j=0;j<lst2.get_nb();j++)
825     {
826     int num2=lst2.get(j);
827 souaissa 87 OT_VECTEUR_4DD g2;
828     MG_FACE* face2=mggeo2->get_mg_faceid(num2);
829 souaissa 153 G2= face2->get_vectorisation().calcule_barycentre(T2);
830     /*
831 souaissa 87 for(int r=0;r<4;r++) {
832     for(int s=0;s<4;s++) {
833     g2[r]= g2[r]+V2(s,r)*G2[s];
834     }
835     }
836 souaissa 153 /
837     //OT_VECTEUR_4DD g2g1=g2-g1;
838     OT_VECTEUR_4DD g2g1=G2-G1;
839 souaissa 99 if(g2g1==g12_ref)
840 souaissa 87 {
841 souaissa 99 // lst_fin.ajouter(num1);
842     // lst_fin.ajouter(num2);
843     face_ref1=id1;
844     face_ref2=num1;
845     trouve=1;
846     break;
847 souaissa 87 }
848 souaissa 99 }
849     if(trouve) break;
850 souaissa 87 }
851 souaissa 142 tr++;
852     }
853 souaissa 100 delete [] t;
854     delete [] tt;
855 souaissa 153 */
856 souaissa 87
857 souaissa 154 int p=0;
858     int h=0;
859     int not_trouve=0;
860     while(!not_trouve)
861     {
862     MG_FACE* face1Ref=mggeo1->get_mg_faceid(sim_double.get(p));
863 souaissa 153 MG_SURFACE* surf1Ref=face1Ref->get_surface();
864 souaissa 154 OT_VECTEUR_4DD G1=surf1Ref->get_vectorisation().calcule_barycentre(T1);
865     G1= surf1Ref->get_vectorisation().get_nouveau_pt(T1,G1);
866 souaissa 153
867     int idRef1=face1Ref->get_id();
868    
869     int k=0;
870 souaissa 154 while(idRef1==sim_double.get(2*k+h))
871 souaissa 153 {
872     MG_FACE* face2Ref=mggeo2->get_mg_faceid(sim_double.get(2*k+1));
873     int idRef2=face2Ref->get_id();
874     MG_SURFACE* surf2Ref=face2Ref->get_surface();
875 souaissa 154 OT_VECTEUR_4DD G2=surf2Ref->get_vectorisation().calcule_barycentre(T2);
876 souaissa 162 // if (G1==G2)
877     if (surfaces_sont_elles_identiques(face1Ref,face2Ref))
878 souaissa 153 {
879     face_ref1=idRef1;
880     face_ref2=idRef2;
881 souaissa 154 not_trouve=1;
882 souaissa 153 break;
883     }
884     k++;
885 souaissa 154 p=p+2;
886 souaissa 153 }
887 souaissa 154 h=p;
888 souaissa 142 }
889 souaissa 154 }
890 souaissa 142
891    
892 souaissa 153 void VCT_COMPARAISON::verifier_le_repere(OT_TENSEUR& rep1,OT_TENSEUR& rep2,vector<double2>& inert1,vector<double2>& inert2)
893     {
894     TPL_LISTE_ENTITE<int> lst;
895     for(int i=0;i<4;i++)
896     {
897     double2 val1=inert1[i];
898     for(int j=0;j<4;j++)
899     {
900     if(!lst.est_dans_la_liste(j+4))
901     {
902     double2 val2=inert2[j];
903     if(val1==val2)
904     {
905     lst.ajouter(i);
906     lst.ajouter(j+4);
907     break;
908     }
909     }
910     }
911     }
912 souaissa 142
913    
914 souaissa 153 }
915 souaissa 142
916 souaissa 153
917 souaissa 142 int VCT_COMPARAISON::comparer_aretes_faces(MG_FACE* f_ref1,MG_FACE* f_ref2,MG_FACE* face1,MG_FACE* face2,TPL_LISTE_ENTITE<int>& aretes_ident,TPL_LISTE_ENTITE<int>& aretes_sim)
918     {
919    
920 souaissa 153
921 souaissa 142 int nb_boucle1=face1->get_nb_mg_boucle();
922     int nb_boucle2=face2->get_nb_mg_boucle();
923 souaissa 158 TPL_LISTE_ENTITE<int> lst1_artes_delamemecourbe;
924     TPL_LISTE_ENTITE<int> lst2_artes_delamemecourbe;
925 souaissa 153 TPL_LISTE_ENTITE<int> arte1_trouvee;
926     TPL_LISTE_ENTITE<int> arte2_trouvee;
927 souaissa 158 OT_VECTEUR_4DD VZER(0.,0.,0.,0.);
928 souaissa 142 //-----------------------------------------------------------------------------
929     OT_VECTEUR_4DD Dv1,Dv2,G1,gf1,gf2,G2;
930     OT_TENSEUR V1(4),V2(4);
931    
932 souaissa 153 //f_ref1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
933     //G1=f_ref1->get_vectorisation().calcule_barycentre(T1);
934 souaissa 142
935 souaissa 153 MG_SURFACE* surf1_ref=f_ref1->get_surface();
936     G1=surf1_ref->get_vectorisation().calcule_barycentre(T1);
937     G1=surf1_ref->get_vectorisation().get_nouveau_pt(T1,G1);
938     // for(int r=0;r<4;r++) {
939     // for(int s=0;s<4;s++) {
940     // gf1[r]= gf1[r]+V1(s,r)*G1[s];
941     // }
942     // }
943 souaissa 142
944 souaissa 153 //f_ref2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
945     //G2=f_ref2->get_vectorisation().calcule_barycentre(T2);
946     MG_SURFACE* surf2_ref= f_ref2->get_surface();
947     G2=surf1_ref->get_vectorisation().calcule_barycentre(T2);
948 souaissa 142
949 souaissa 153 // for(int r=0;r<4;r++) {
950     // for(int s=0;s<4;s++) {
951     // gf2[r]= gf2[r]+V2(s,r)*G2[s];
952     // }
953     // }
954 souaissa 142
955     //---------------------------------------------------------------------------
956 souaissa 158 /* for(int j1=0;j1<nb_boucle1;j1++)
957     {
958     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
959     int nbarete1 = Boucle1->get_nb_mg_coarete();
960     for (int w1 =0; w1<nbarete1;w1++)
961     {
962     double xyz1[3];
963     double xyz2[3];
964     vector<double2> viarte1,vicrbe1;
965     OT_TENSEUR tns_arete1(4),tns_courbe1(4);
966     OT_TENSEUR tm1_art(4),tm1_crb(4);
967     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
968     MG_ARETE* arete1 = coArete1->get_arete();
969     int id_art1=arete1->get_id();
970     MG_COURBE* courbe1=arete1->get_courbe();
971     int nb_top1_pts= arete1->get_vectorisation().get_nb_points();
972     int nb_geo1_pts= courbe1->get_vectorisation().get_nb_points();
973     tm1_art=arete1->get_vectorisation().calcule_tenseur_metrique();
974     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
975     tns_arete1=arete1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
976     tns_courbe1=courbe1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
977    
978     for(int r=0;r<4;r++)
979     {
980     viarte1.insert( viarte1.end(), tns_arete1(r,r));
981     vicrbe1.insert( vicrbe1.end(), tns_courbe1(r,r));
982     }
983     for(int j2=0;j2<nb_boucle2;j2++)
984     {
985     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
986     int nbarete2 = Boucle2->get_nb_mg_coarete();
987     for (int w2 =0; w2<nbarete2;w2++)
988     {
989     double xyz1[3];
990     double xyz2[3];
991     vector<double2> viarte2,vicrbe2;
992     OT_TENSEUR tns_arete2(4),tns_courbe2(4);
993     OT_TENSEUR tm2_art(4),tm2_crb(4);
994     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
995     MG_ARETE* arete2 = coArete2->get_arete();
996     int id_art2=arete2->get_id();
997     MG_COURBE* courbe2=arete2->get_courbe();
998     int nb_top2_pts= arete2->get_vectorisation().get_nb_points();
999     int nb_geo2_pts= courbe2->get_vectorisation().get_nb_points();
1000     tm2_art=arete2->get_vectorisation().calcule_tenseur_metrique();
1001     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1002     tns_arete2=arete2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1003     tns_courbe2=courbe2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1004    
1005     for(int r=0;r<4;r++)
1006     {
1007     viarte2.insert( viarte2.end(), tns_arete1(r,r));
1008     vicrbe2.insert( vicrbe2.end(), tns_courbe1(r,r));
1009     }
1010     if((nb_geo1_pts==nb_geo2_pts)&&(nb_top1_pts==nb_top2_pts))
1011     {
1012     if(tm1_art.est_til_equivalent(tm2_art))
1013     {
1014     if(tm1_crb.est_til_equivalent(tm2_crb))
1015     {
1016     if(tns_courbe1==tns_courbe2)
1017     {
1018     lst1_artes_delamemecourbe.ajouter(id_art1);
1019     lst2_artes_delamemecourbe.ajouter(id_art2);
1020     }
1021     }
1022     }
1023    
1024    
1025     }
1026    
1027    
1028     }
1029     }
1030     }
1031     }
1032    
1033     vector<OT_VECTEUR_4DD> lst1_barycentre;
1034     vector<OT_VECTEUR_4DD> lst2_barycentre;
1035     TPL_LISTE_ENTITE<int> lst1,lst2;
1036     for(int i1=0;i1<lst2_artes_delamemecourbe.get_nb();i1++)
1037     {
1038     int id21=lst2_artes_delamemecourbe.get(i1);
1039     MG_ARETE* art2=mggeo2->get_mg_areteid(id21);
1040     OT_VECTEUR_4DD G2=art2->get_vectorisation().calcule_barycentre(T2);
1041     if(!lst2.est_dans_la_liste(id21))
1042     {
1043     lst2_barycentre.insert(lst2_barycentre.end(),G2);
1044     for(int i2=0;i2<lst2_artes_delamemecourbe.get_nb();i2++)
1045     {
1046     int id22=lst2_artes_delamemecourbe.get(i2);
1047     int id1=lst1_artes_delamemecourbe.get(i2);
1048     if(!lst1.est_dans_la_liste(id1))
1049     {
1050     if(id21==id22)
1051     {
1052     MG_ARETE* art1=mggeo1->get_mg_areteid(id1);
1053     OT_VECTEUR_4DD G1=art1->get_vectorisation().calcule_barycentre(T1);
1054     G1=art1->get_vectorisation().get_nouveau_pt(T1,G1);
1055     lst1_barycentre.insert(lst1_barycentre.end(),G1);
1056     lst1.ajouter(id1);
1057     }
1058     }
1059     }
1060     lst2.ajouter(id21);
1061     }
1062     }
1063    
1064    
1065     vector<double2> NOR1,NOR2;
1066     vector<OT_VECTEUR_4DD> vi,vj;
1067     OT_VECTEUR_4DD g1=lst1_barycentre[0];
1068     for(int k=0;k<lst1_barycentre.size();k++)
1069     {
1070     OT_VECTEUR_4DD gigj_1=lst1_barycentre[k]-g1;
1071    
1072     double2 nor1=gigj_1.norme();
1073     OT_VECTEUR_4DD gigj_2=lst1_barycentre[k]-g1;
1074     double2 nor2=gigj_2.norme();
1075     }
1076     for(int k=0;k<lst1_barycentre.size();k++)
1077     {
1078     OT_VECTEUR_4DD gigj_1=lst1_barycentre[k]-g1;
1079     vi.insert(vi.end(),gigj_1);
1080     double2 nor1=gigj_1.norme();
1081     NOR1.insert(NOR1.end(),nor1);
1082     OT_VECTEUR_4DD gigj_2=lst1_barycentre[k]-g1;
1083     vj.insert(vj.end(),gigj_2);
1084     double2 nor2=gigj_2.norme();
1085     NOR2.insert(NOR2.end(),nor2);
1086     }
1087    
1088     double2 min1=NOR1[0];
1089     double2 min2=NOR2[0];
1090     int *t1=new int[lst1.get_nb()];
1091     int *t2=new int[lst2.get_nb()];
1092    
1093     for(int r=0;r<lst1.get_nb();r++)
1094     {
1095     t1[r]=lst1.get(r);
1096     t2[r]=lst2.get(r);
1097     for(int s=0;s<lst1.get_nb();s++)
1098     {
1099     if (NOR1[s]<NOR1[r])
1100     {
1101     double2 tmp1=NOR1[r];
1102     NOR1[r]=NOR1[s];
1103     NOR1[s]=tmp1;
1104     t1[r]=t1[s];
1105     }
1106    
1107     if (NOR2[s]<NOR2[r])
1108     {
1109     double2 tmp2=NOR2[r];
1110     NOR2[r]=NOR2[s];
1111     NOR2[s]=tmp2;
1112     t2[r]=t2[s];
1113     }
1114     }
1115     } */
1116     //---------------------------------------------------------------------------
1117 souaissa 142 int nb_aretes=0;
1118     for(int j1=0;j1<nb_boucle1;j1++)
1119     {
1120     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1121     int nbarete1 = Boucle1->get_nb_mg_coarete();
1122     nb_aretes+=nbarete1;
1123     for (int w1 =0; w1<nbarete1;w1++)
1124     {
1125 souaissa 158 double xyz1[3];
1126     double xyz2[3];
1127 souaissa 142 OT_TENSEUR tns_arete1(4),tns_courbe1(4);
1128     OT_TENSEUR tm1_art(4),tm1_crb(4);
1129     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1130     MG_ARETE* arete1 = coArete1->get_arete();
1131     int id_art1=arete1->get_id();
1132    
1133     MG_COURBE* courbe1=arete1->get_courbe();
1134    
1135     int nb_top1_pts= arete1->get_vectorisation().get_nb_points();
1136     int nb_geo1_pts= courbe1->get_vectorisation().get_nb_points();
1137    
1138     tm1_art=arete1->get_vectorisation().calcule_tenseur_metrique();
1139     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
1140    
1141 souaissa 158 MG_COSOMMET* csomt1_art1= arete1->get_cosommet1();
1142     MG_COSOMMET* csomt2_art1= arete1->get_cosommet2();
1143     MG_SOMMET* som1_art1= csomt1_art1->get_sommet();
1144     MG_SOMMET* som2_art1= csomt2_art1->get_sommet();
1145     MG_POINT* pt1=som1_art1->get_point();
1146     MG_POINT* pt2=som2_art1->get_point();
1147     pt1->evaluer(xyz1);
1148     OT_VECTEUR_4DD PT11(xyz1[0],xyz1[1],xyz1[2],0);
1149     pt2->evaluer(xyz2);
1150     OT_VECTEUR_4DD PT12(xyz2[0],xyz2[1],xyz2[2],0);
1151 souaissa 142 //----------------------------------------------------------------------
1152     OT_VECTEUR_4DD B1,g1;
1153 souaissa 154 B1=courbe1->get_vectorisation().calcule_barycentre(T1);
1154 souaissa 158 OT_VECTEUR_4DD G1S1=B1-PT11;
1155    
1156 souaissa 154 B1=courbe1->get_vectorisation().get_nouveau_pt(T1,B1);
1157 souaissa 158 G1S1=courbe1->get_vectorisation().get_nouveau_pt(T1,G1S1);
1158 souaissa 153 // for(int r=0;r<4;r++) {
1159     // for(int s=0;s<4;s++)
1160     // g1[r]= g1[r]+V1(s,r)*B1[s];
1161     // }
1162 souaissa 142 //----------------------------------------------------------------------
1163    
1164 souaissa 153 tns_arete1=arete1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1165     tns_courbe1=courbe1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1166 souaissa 142 vector<double2> viarte1,vicrbe1;
1167     for(int r=0;r<4;r++)
1168     {
1169     viarte1.insert( viarte1.end(), tns_arete1(r,r));
1170     vicrbe1.insert( vicrbe1.end(), tns_courbe1(r,r));
1171     }
1172 souaissa 153 int compt_aretes_modif=0;
1173 souaissa 142 for(int j2=0;j2<nb_boucle2;j2++)
1174     {
1175 souaissa 153 if(arte1_trouvee.est_dans_la_liste(id_art1)) break;
1176 souaissa 142 MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1177     int nbarete2 = Boucle2->get_nb_mg_coarete();
1178     for (int w2 =0; w2<nbarete2;w2++)
1179     {
1180 souaissa 153 if(arte1_trouvee.est_dans_la_liste(id_art1)) break;
1181 souaissa 142 OT_TENSEUR tns_arete2(4),tns_courbe2(4);
1182     OT_TENSEUR tm2_art(4),tm2_crb(4);
1183     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1184     MG_ARETE* arete2 = coArete2->get_arete();
1185     MG_COURBE* courbe2=arete2->get_courbe();
1186     int id_art2=arete2->get_id();
1187 souaissa 158 MG_COSOMMET* csomt1_art2= arete2->get_cosommet1();
1188     MG_COSOMMET* csomt2_art2= arete2->get_cosommet2();
1189     MG_SOMMET* som1_art2= csomt1_art2->get_sommet();
1190     MG_SOMMET* som2_art2= csomt2_art2->get_sommet();
1191     MG_POINT* pt2=som1_art2->get_point();
1192     pt2->evaluer(xyz1);
1193     OT_VECTEUR_4DD PT21(xyz1[0],xyz1[1],xyz1[2],0);
1194     MG_POINT* pt3=som2_art2->get_point();
1195     pt3->evaluer(xyz2);
1196     OT_VECTEUR_4DD PT22(xyz2[0],xyz2[1],xyz2[2],0);
1197 souaissa 142 //----------------------------------------------------------------------
1198     OT_VECTEUR_4DD B2,g2;
1199 souaissa 154 B2=courbe2->get_vectorisation().calcule_barycentre(T2);
1200 souaissa 158 OT_VECTEUR_4DD G2S2=B2-PT21;
1201     OT_VECTEUR_4DD G2S3=B2-PT22;
1202     OT_VECTEUR_4DD B1B2=B2-B1;
1203     OT_VECTEUR_4DD D1= G1S1^G2S2;
1204     OT_VECTEUR_4DD D2= G1S1^G2S3;
1205     // OT_VECTEUR_4DD D3= B1B2^G2S3;
1206 souaissa 153 // for(int r=0;r<4;r++) {
1207     // for(int s=0;s<4;s++)
1208     // g2[r]= g2[r]+V2(s,r)*B2[s];
1209     // }
1210 souaissa 142 //---------------------------------------------------------------------- MG_COURBE* courbe2=arete2->get_courbe();
1211    
1212     int nb_top2_pts= arete2->get_vectorisation().get_nb_points();
1213     int nb_geo2_pts= courbe2->get_vectorisation().get_nb_points();
1214    
1215     tm2_art=arete2->get_vectorisation().calcule_tenseur_metrique();
1216     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1217    
1218 souaissa 153 tns_arete2=arete2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1219     tns_courbe2=courbe2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1220 souaissa 142
1221     vector<double2> viarte2,vicrbe2;
1222     for(int r=0;r<4;r++)
1223     {
1224     viarte2.insert( viarte2.end(), tns_arete2(r,r));
1225     vicrbe2.insert( vicrbe2.end(), tns_courbe2(r,r));
1226     }
1227    
1228     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
1229     {
1230     if(tm1_art.est_til_equivalent(tm2_art))
1231     {
1232     if(tm1_crb.est_til_equivalent(tm2_crb))
1233     {
1234     vector<unsigned int> indx1,indx2;
1235     int identique=-1;
1236 souaissa 153 //if(tns_arete1==tns_arete2)//.listes_equivalentes(viarte1,viarte2,indx1))
1237     //{
1238 souaissa 142 if(tns_courbe1==tns_courbe2)//tns_arete1.listes_equivalentes(vicrbe1,vicrbe2,indx2))
1239     {
1240 souaissa 153 OT_VECTEUR_4DD v1=B1-G1;
1241     OT_VECTEUR_4DD v2=B2-G2;
1242     //OT_VECTEUR_4DD v1=gf1-g1;
1243     //OT_VECTEUR_4DD v2=gf2-g2;
1244 souaissa 159 //if(v1==v2||((D1==VZER||D2==VZER)))
1245     if(courbes_sont_elles_identiques(arete1,arete2))
1246 souaissa 142 {
1247 souaissa 158 if(!arte2_trouvee.est_dans_la_liste(id_art2))
1248     {
1249     aretes_ident.ajouter(j1) ;
1250     aretes_ident.ajouter(id_art1) ;
1251     aretes_ident.ajouter(j2) ;
1252     aretes_ident.ajouter(id_art2) ;
1253     arte1_trouvee.ajouter(id_art1);
1254     arte2_trouvee.ajouter(id_art2);
1255     identique=1;
1256     }
1257 souaissa 142
1258 souaissa 153
1259 souaissa 142 }
1260    
1261     }
1262 souaissa 153 // }
1263 souaissa 142 if(identique>0) break;
1264     if(identique<0)
1265     {
1266     aretes_sim.ajouter(j1) ;
1267     aretes_sim.ajouter(id_art1) ;
1268     aretes_sim.ajouter(j2) ;
1269     aretes_sim.ajouter(id_art2) ;
1270     identique=-1;
1271     }
1272     }
1273     }
1274     } // aretes2
1275    
1276     } //boucle2
1277    
1278 souaissa 153 // }//condition 1 //aretes_identiques
1279 souaissa 142 }
1280    
1281     }
1282     }
1283    
1284     if(nb_aretes==aretes_ident.get_nb()/2) return 1;
1285     else return 0;
1286    
1287     }
1288    
1289 souaissa 153 void VCT_COMPARAISON::identifier_aretes_face_modifiee(MG_FACE* face1,MG_FACE* face2,TPL_LISTE_ENTITE<int>& aretes_identiques,
1290     TPL_LISTE_ENTITE<int>&aretes_simil,TPL_LISTE_ENTITE<int>&lst_corrsp_sommets,TPL_LISTE_ENTITE<int>& aret1_conservees,
1291     TPL_LISTE_ENTITE<int>& aret1_disparues,TPL_LISTE_ENTITE<int>& aret2_conservees ,TPL_LISTE_ENTITE<int>& aret2_nouvelles ,
1292     TPL_LISTE_ENTITE<int>& aret_partielles)
1293 souaissa 142 {
1294    
1295     int nb_boucle1=face1->get_nb_mg_boucle();
1296     int nb_boucle2=face2->get_nb_mg_boucle();
1297    
1298    
1299     int cmpt_arete=0;
1300    
1301     TPL_LISTE_ENTITE<int> boucle_face1;
1302     TPL_LISTE_ENTITE<int> boucle_face2;
1303    
1304     TPL_LISTE_ENTITE<int> aretes_ident_face1;
1305     TPL_LISTE_ENTITE<int> aretes_ident_face2;
1306     TPL_LISTE_ENTITE<int> aretes_face1;
1307     TPL_LISTE_ENTITE<int> aretes_face2;
1308     TPL_LISTE_ENTITE<int> aretes_dif_face2;
1309     TPL_LISTE_ENTITE<int> aretes_sim_face1;
1310     TPL_LISTE_ENTITE<int> aretes_sim_face2;
1311 souaissa 153 TPL_LISTE_ENTITE<int> lst_sommet1;
1312     TPL_LISTE_ENTITE<int> lst_sommet2;
1313 souaissa 142
1314 souaissa 153 for(int b=0;b<lst_corrsp_sommets.get_nb()/2;b++)
1315     {
1316     lst_sommet1.ajouter( lst_corrsp_sommets.get(2*b));
1317     lst_sommet2.ajouter( lst_corrsp_sommets.get(2*b+1));
1318     }
1319    
1320 souaissa 142 for(int b=0;b<aretes_identiques.get_nb()/4;b++)
1321 souaissa 87 {
1322 souaissa 153 int b1= aretes_identiques.get(4*b) ;
1323     int b2= aretes_identiques.get(4*b+2) ;
1324     int art1= aretes_identiques.get(4*b+1);
1325     int art2= aretes_identiques.get(4*b+3);
1326 souaissa 142 boucle_face1.ajouter( aretes_identiques.get(4*b));
1327     boucle_face2.ajouter( aretes_identiques.get(4*b+2));
1328     aretes_ident_face1.ajouter(aretes_identiques.get(4*b+1));
1329     aretes_ident_face2.ajouter(aretes_identiques.get(4*b+3));
1330 souaissa 158 aret1_conservees.ajouter(art1);
1331     aret2_conservees.ajouter(art2);
1332    
1333 souaissa 142 }
1334 souaissa 158
1335    
1336     for(int j1=0;j1<nb_boucle1;j1++)
1337     {
1338     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1339     int nbarete1 = Boucle1->get_nb_mg_coarete();
1340    
1341     for (int w1=0; w1<nbarete1;w1++)
1342     {
1343     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1344     MG_ARETE* arete1 = coArete1->get_arete();
1345     int id_art1=arete1->get_id();
1346     if(!aretes_ident_face1.est_dans_la_liste(id_art1))
1347     {
1348     aret1_disparues.ajouter(id_art1);
1349     }
1350     }
1351     }
1352    
1353     for(int j2=0;j2<nb_boucle2;j2++)
1354     {
1355     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1356     int nbarete2 = Boucle2->get_nb_mg_coarete();
1357     for (int w2=0; w2<nbarete2;w2++)
1358     {
1359     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1360     MG_ARETE* arete2 = coArete2->get_arete();
1361     int id_art2=arete2->get_id();
1362     if(!aretes_ident_face2.est_dans_la_liste(id_art2))
1363     {
1364     aret2_nouvelles.ajouter(id_art2);
1365     }
1366    
1367     }
1368     }
1369     /*
1370 souaissa 142 for(int b=0;b<aretes_simil.get_nb()/4;b++)
1371     {
1372     aretes_sim_face1.ajouter(aretes_simil.get(4*b+1));
1373     aretes_sim_face2.ajouter(aretes_simil.get(4*b+3));
1374     }
1375    
1376 souaissa 153 MG_FACE* Face_ref1=mggeo1->get_mg_faceid(face_ref1) ;
1377     MG_FACE* Face_ref2=mggeo2->get_mg_faceid(face_ref2) ;
1378    
1379 souaissa 142 for(int j1=0;j1<nb_boucle1;j1++)
1380     {
1381     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1382     int nbarete1 = Boucle1->get_nb_mg_coarete();
1383 souaissa 153 TPL_LISTE_ENTITE<int> lst_aret1_modif;
1384     TPL_LISTE_ENTITE<int> lst_aret2_modif;
1385     TPL_LISTE_ENTITE<int> lst_art1_partiel;
1386     TPL_LISTE_ENTITE<int> lst_art2_partiel;
1387 souaissa 142 int compt1=0;
1388     int boucle;
1389     int start_boucle,end_boucle;
1390     int cmpt=0;
1391     TPL_LISTE_ENTITE<int> arete_boucle1;
1392     TPL_LISTE_ENTITE<int> arete_boucle2;
1393    
1394     if(boucle_face1.est_dans_la_liste(j1))
1395     {
1396     for(int k=0;k<boucle_face1.get_nb();k++)
1397     {
1398     if (j1==boucle_face1.get(k))
1399     {
1400 souaissa 153 int art1=aretes_ident_face1.get(k);
1401     int art2= aretes_ident_face2.get(k);
1402 souaissa 142 arete_boucle1.ajouter(aretes_ident_face1.get(k));
1403     arete_boucle2.ajouter(aretes_ident_face2.get(k));
1404     boucle=boucle_face2.get(k);
1405     }
1406     }
1407     }
1408    
1409 souaissa 153 for (int w1=0; w1<nbarete1;w1++)
1410 souaissa 87 {
1411 souaissa 142
1412 souaissa 153 MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1413     MG_ARETE* arete1 = coArete1->get_arete();
1414     int id_art=arete1->get_id();
1415     int trouv=-1;
1416     for (int w1=0; w1<arete_boucle1.get_nb();w1++)
1417     {
1418     int id_art1=arete_boucle1.get(w1);
1419     int id_art2=arete_boucle2.get(w1);
1420    
1421     if(id_art1==id_art)
1422 souaissa 142 {
1423 souaissa 153 aret1_conservees.ajouter(id_art1);
1424     aret2_conservees.ajouter(id_art2);
1425     trouv=1;
1426     break;
1427 souaissa 142 }
1428 souaissa 153 }
1429     if(trouv<0)
1430 souaissa 142 {
1431 souaissa 153 //if(!aretes_sim_face1.est_dans_la_liste(id_art1))
1432     aret1_disparues.ajouter(id_art);
1433     //lst_aret1_modif.ajouter(id_art1);
1434 souaissa 142 }
1435 souaissa 153
1436     }
1437 souaissa 142
1438 souaissa 153 // for(int j2=0;j2<nb_boucle2;j2++)
1439     // {
1440     // MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1441     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(boucle);
1442 souaissa 142 int nbarete2 = Boucle2->get_nb_mg_coarete();
1443    
1444     for (int w2=0; w2<nbarete2;w2++)
1445 souaissa 153 {
1446 souaissa 142 MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1447     MG_ARETE* arete2 = coArete2->get_arete();
1448     int id_art2=arete2->get_id();
1449     if(!arete_boucle2.est_dans_la_liste(id_art2))
1450     {
1451     aret2_nouvelles.ajouter(id_art2);
1452 souaissa 153 //lst_aret2_modif.ajouter(id_art2);
1453     //for(int is=0;is<aretes_sim_face2.get_nb();is++)
1454     //{
1455     //if(aretes_sim_face2.get(is)==id_art2)
1456     // {
1457     // aret2_partielles.ajouter(id_art2);
1458     // }
1459     // }
1460 souaissa 142
1461     }
1462 souaissa 153 // else
1463    
1464     // aret2_conservees.ajouter(id_art2);
1465     }
1466    
1467     //verifier parmi les deux listes des aretes modifiees
1468     //celles qui sont nouvelles ou partiellements modifees
1469     /*
1470     for(int m1=0;m1<lst_aret1_modif.get_nb();m1++)
1471 souaissa 142 {
1472 souaissa 153 int id_art1=lst_aret1_modif.get(m1);
1473     MG_ARETE* art1=mggeo1->get_mg_areteid(id_art1);
1474 souaissa 142
1475 souaissa 153 OT_TENSEUR tm1_art(4),tm1_crb(4);
1476     MG_COURBE* courbe1=art1->get_courbe();
1477     tm1_art=art1->get_vectorisation().calcule_tenseur_metrique();
1478     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
1479 souaissa 142
1480 souaissa 153
1481     MG_COSOMMET* csomt1_art1= art1->get_cosommet1();
1482     MG_COSOMMET* csomt2_art1= art1->get_cosommet2();
1483     MG_SOMMET* som1_art1= csomt1_art1->get_sommet();
1484     MG_SOMMET* som2_art1= csomt2_art1->get_sommet();
1485     int id_som11= som1_art1->get_id();
1486     int id_som21= som2_art1->get_id();
1487     int s11_ou_s21;
1488     if(lst_sommet1.est_dans_la_liste(id_som11)) s11_ou_s21=1;
1489     if(lst_sommet1.est_dans_la_liste(id_som21)) s11_ou_s21=2;
1490 souaissa 142
1491 souaissa 153 if(lst_sommet1.est_dans_la_liste(id_som11)||lst_sommet1.est_dans_la_liste(id_som21))
1492     {
1493     for(int m2=0;m2<lst_aret2_modif.get_nb();m2++)
1494     {
1495     int id_art2=lst_aret2_modif.get(m2);
1496     MG_ARETE* art2=mggeo2->get_mg_areteid(id_art2);
1497     OT_TENSEUR tm2_art(4),tm2_crb(4);
1498     MG_COURBE* courbe2=art2->get_courbe();
1499     tm2_art=art1->get_vectorisation().calcule_tenseur_metrique();
1500     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1501    
1502     MG_COSOMMET* csomt1_art2= art2->get_cosommet1();
1503     MG_COSOMMET* csomt2_art2= art2->get_cosommet2();
1504     MG_SOMMET* som1_art2= csomt1_art2->get_sommet();
1505     MG_SOMMET* som2_art2= csomt2_art2->get_sommet();
1506     int id_som12= som1_art2->get_id();
1507     int id_som22= som2_art2->get_id();
1508     int s12_ou_s22;
1509     if(lst_sommet2.est_dans_la_liste(id_som12)) s12_ou_s22=1;
1510     if(lst_sommet2.est_dans_la_liste(id_som22)) s12_ou_s22=2;
1511    
1512     //if(lst_sommet2.est_dans_la_liste(id_som12)||lst_sommet2.est_dans_la_liste(id_som22))
1513     // {
1514     if(tm1_art.est_til_equivalent(tm2_art)&&tm1_crb.est_til_equivalent(tm2_crb))
1515     {
1516     aret_partielles.ajouter(id_art1);
1517     aret_partielles.ajouter(id_art2);
1518     lst_art1_partiel.ajouter(id_art1);
1519     lst_art2_partiel.ajouter(id_art2);
1520     if (s11_ou_s21==1&&s12_ou_s22==1)
1521     {
1522     aret_partielles.ajouter(id_som11);
1523     }
1524     if (s11_ou_s21==2&&s12_ou_s22==1)
1525     {
1526     aret_partielles.ajouter(id_som21);
1527     }
1528     if (s12_ou_s22==1&&s12_ou_s22==2)
1529     {
1530     aret_partielles.ajouter(id_som12);
1531     }
1532     if (s12_ou_s22==2&&s12_ou_s22==2)
1533     {
1534     aret_partielles.ajouter(id_som22);
1535     }
1536    
1537     }
1538     // }
1539    
1540     }
1541     }
1542     } // for m1=
1543    
1544    
1545    
1546     for(int m1=0;m1<lst_aret1_modif.get_nb();m1++)
1547     {
1548     int id_art1=lst_aret1_modif.get(m1);
1549     if( !lst_art1_partiel.est_dans_la_liste(id_art1))
1550     aret1_disparues.ajouter(id_art1);
1551     }
1552     for(int m2=0;m2<lst_aret1_modif.get_nb();m2++)
1553     {
1554     int id_art2=lst_aret2_modif.get(m2);
1555     if( !lst_art2_partiel.est_dans_la_liste(id_art2))
1556     aret2_nouvelles.ajouter(id_art2);
1557 souaissa 158 } /
1558 souaissa 153
1559 souaissa 142 } //boucle_face1
1560    
1561    
1562 souaissa 153 for(int j2=0;j2<nb_boucle2;j2++)
1563     {
1564     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1565 souaissa 142
1566 souaissa 153 if (!boucle_face2.est_dans_la_liste(j2))
1567     {
1568     int nbarete2 = Boucle2->get_nb_mg_coarete();
1569     for (int w2=0; w2<nbarete2;w2++)
1570     {
1571     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1572     MG_ARETE* arete2 = coArete2->get_arete();
1573     int id_art2=arete2->get_id();
1574     aret2_nouvelles.ajouter(id_art2);
1575 souaissa 142
1576 souaissa 153 }
1577     }
1578     }//boucle j2
1579 souaissa 158 */
1580 souaissa 142
1581    
1582 souaissa 153 }
1583    
1584    
1585    
1586 souaissa 142 void VCT_COMPARAISON::identifier_les_modifications_appliquees(VCT_COMPARAISON_RESULTAT& Results)
1587     {
1588    
1589 souaissa 143 TPL_LISTE_ENTITE<int> face1_conservees;
1590     TPL_LISTE_ENTITE<int> face2_conservees;
1591     TPL_LISTE_ENTITE<int> faces_nouvelles;
1592 souaissa 142
1593 souaissa 143 TPL_LISTE_ENTITE<int> aret_ident;
1594     TPL_LISTE_ENTITE<int> aret_modif;
1595     int nb_face1=mggeo1->get_nb_mg_face();
1596     int nb_face2=mggeo2->get_nb_mg_face();
1597     TPL_LISTE_ENTITE<int> lst_face1,lst_face2,lst_facloc1,lst_facloc2,dif1,dif2;
1598    
1599 souaissa 153
1600 souaissa 158 TPL_LISTE_ENTITE<int> faces1_partiellement_modf;
1601     TPL_LISTE_ENTITE<int> faces2_partiellement_modf;
1602 souaissa 153 TPL_LISTE_ENTITE<int> Aret1_conservees;
1603     TPL_LISTE_ENTITE<int> Aret1_disparues;
1604     TPL_LISTE_ENTITE<int> Aret2_conservees ;
1605     TPL_LISTE_ENTITE<int> Aret2_nouvelles ;
1606     TPL_LISTE_ENTITE<int> Aret2_partielles ;
1607     TPL_LISTE_ENTITE<int> face1_disparues;
1608 souaissa 142 for(int i=0;i<nb_face1;i++)
1609     {
1610     OT_VECTEUR_4DD g1,G1;
1611     MG_FACE* face1=mggeo1->get_mg_face(i);
1612     int id1=face1->get_id();
1613     lst_face1.ajouter(id1);
1614 souaissa 87 }
1615 souaissa 142
1616     for(int i=0;i<nb_face2;i++)
1617     {
1618     OT_VECTEUR_4DD g1,G1;
1619     MG_FACE* face2=mggeo2->get_mg_face(i);
1620     int id2=face2->get_id();
1621     lst_face2.ajouter(id2);
1622     }
1623    
1624 souaissa 153
1625    
1626 souaissa 143 MG_FACE* Face_ref1=mggeo1->get_mg_faceid(face_ref1) ;
1627     MG_FACE* Face_ref2=mggeo2->get_mg_faceid(face_ref2) ;
1628 souaissa 145 int nb_faces_identique=identite.get_nb()/2;
1629     for(int i=0;i<nb_faces_identique;i++)
1630 souaissa 142 {
1631     CORRESPONDANCE CORRESP;
1632     int face1_id=identite.get(2*i);
1633     int face2_id=identite.get(2*i+1);
1634     MG_FACE* Face1=mggeo1->get_mg_faceid(face1_id);
1635     MG_FACE* Face2=mggeo2->get_mg_faceid(face2_id);
1636     face1_conservees.ajouter(face1_id);
1637     face2_conservees.ajouter(face2_id);
1638 souaissa 145 Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,Face1);
1639     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,Face2);
1640 souaissa 142 CORRESP.eleorigine=Face1;
1641     CORRESP.elemodifie=Face2;
1642     Results.ajouter_liste_topologie(CORRESP);
1643 souaissa 143
1644     //----------------------------------------
1645     TPL_LISTE_ENTITE<int> aretes_identiques;
1646     TPL_LISTE_ENTITE<int> aretes_similaires;
1647    
1648     //------------------------------------------
1649     this->comparer_aretes_faces(Face_ref1,Face_ref2,Face1,Face2,aretes_identiques,aretes_similaires);
1650    
1651     int nb_aretes_trouvees=aretes_identiques.get_nb()/4;
1652    
1653     if(nb_aretes_trouvees)
1654 souaissa 153 {
1655     CORRESPONDANCE corsp;
1656     for(int i1=0;i1<nb_aretes_trouvees;i1++)
1657     {
1658     int art1_id=aretes_identiques.get(4*i1+1);
1659     MG_ARETE*art1_cons=mggeo1->get_mg_areteid(art1_id);
1660     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,art1_cons);
1661     int art2_id=aretes_identiques.get(4*i1+3);
1662     MG_ARETE*art2_cons=mggeo2->get_mg_areteid(art2_id);
1663     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,art2_cons);
1664 souaissa 143
1665 souaissa 153 corsp.eleorigine=art1_cons;
1666     corsp.elemodifie=art2_cons;
1667     Results.ajouter_liste_topologie(corsp);
1668     }
1669     }
1670 souaissa 143
1671    
1672 souaissa 142 }
1673    
1674 souaissa 153 TPL_LISTE_ENTITE<int> lst_corrsp_sommets;
1675     this->identifier_les_sommets(Face_ref1,Face_ref2,lst_corrsp_sommets,Results);
1676 souaissa 143
1677    
1678     for(int t=0;t<lst_face1.get_nb();t++)
1679     {
1680     if(!face1_conservees.est_dans_la_liste(lst_face1.get(t)) )
1681 souaissa 142 dif1.ajouter(lst_face1.get(t));
1682 souaissa 143 }
1683     for(int it=0;it<lst_face2.get_nb();it++)
1684     {
1685     if(!face2_conservees.est_dans_la_liste(lst_face2.get(it)))
1686 souaissa 142 dif2.ajouter(lst_face2.get(it));
1687 souaissa 143 }
1688 souaissa 87
1689    
1690 souaissa 142 for(int i=0;i<dif1.get_nb();i++)
1691     {
1692     int Num1=dif1.get(i);
1693     MG_FACE* face1=mggeo1->get_mg_faceid(Num1);
1694 souaissa 153 MG_SURFACE* surf1=face1->get_surface();
1695 souaissa 158 OT_VECTEUR_4DD G1=face1->get_vectorisation().calcule_barycentre(T1);
1696 souaissa 153 G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1697 souaissa 142 for(int j=0;j<dif2.get_nb();j++)
1698     {
1699     int Num2=dif2.get(j);
1700     TPL_LISTE_ENTITE<int> aretes_identiques;
1701     TPL_LISTE_ENTITE<int> aretes_similaires;
1702     TPL_LISTE_ENTITE<int> aretes_conservees;
1703     TPL_LISTE_ENTITE<int> nouvelles_aretes ;
1704     TPL_LISTE_ENTITE<int> aret1_conservees;
1705     TPL_LISTE_ENTITE<int> aret1_disparues;
1706     TPL_LISTE_ENTITE<int> aret2_conservees ;
1707     TPL_LISTE_ENTITE<int> aret2_nouvelles ;
1708     TPL_LISTE_ENTITE<int> aret2_partielles ;
1709 souaissa 87
1710 souaissa 142 MG_FACE* face2=mggeo2->get_mg_faceid(Num2);
1711 souaissa 153 MG_SURFACE* surf2=face2->get_surface();
1712 souaissa 158 OT_VECTEUR_4DD G2=face2->get_vectorisation().calcule_barycentre(T2);
1713 souaissa 159 // if(!faces1_partiellement_modf.est_dans_la_liste(Num1))
1714     // {
1715 souaissa 145
1716 souaissa 158 if(surfaces_sont_elles_identiques(face1,face2)) //G1==G2
1717     {
1718 souaissa 153 comparer_aretes_faces(Face_ref1,Face_ref2,face1,face2,aretes_identiques,aretes_similaires);
1719     int nb_aretes_trouvees=aretes_identiques.get_nb()/2;
1720     if(nb_aretes_trouvees)
1721     identifier_aretes_face_modifiee(face1,face2,aretes_identiques,aretes_similaires,lst_corrsp_sommets,aret1_conservees,aret1_disparues,aret2_conservees ,aret2_nouvelles ,aret2_partielles);
1722     int id_face2=face2->get_id();
1723 souaissa 158
1724     if(nb_aretes_trouvees)
1725     {
1726 souaissa 159 // if (!face2_conservees.est_dans_la_liste(Num2))
1727     // {
1728 souaissa 153 CORRESPONDANCE CORRESP_FACE;
1729     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,face1);
1730     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,face2);
1731     CORRESP_FACE.eleorigine=face1;
1732     CORRESP_FACE.elemodifie=face2;
1733     Results.ajouter_liste_topologie(CORRESP_FACE);
1734     face1_conservees.ajouter(Num1);
1735     face2_conservees.ajouter(Num2);
1736 souaissa 143
1737 souaissa 153 for(int i1=0;i1<aret1_conservees.get_nb();i1++)
1738     {
1739     int art1_id=aret1_conservees.get(i1);
1740     Aret1_conservees.ajouter(art1_id);
1741     MG_ARETE*art1_cons=mggeo1->get_mg_areteid(art1_id);
1742     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,art1_cons);
1743     int art2_id= aret2_conservees.get(i1) ;
1744     Aret2_conservees.ajouter(art2_id);
1745     MG_ARETE*art2_cons=mggeo2->get_mg_areteid(art2_id);
1746     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,art2_cons);
1747     CORRESPONDANCE CORRESP;
1748     CORRESP.eleorigine=art1_cons;
1749     CORRESP.elemodifie=art2_cons;
1750     Results.ajouter_liste_topologie(CORRESP);
1751     }
1752 souaissa 142
1753 souaissa 153 for(int i1=0;i1<aret1_disparues.get_nb();i1++)
1754     {
1755     int art_dsp=aret1_disparues.get(i1) ;
1756     Aret1_disparues.ajouter(art_dsp);
1757     //MG_ARETE*art_disp=mggeo1->get_mg_areteid(art_dsp);
1758     //Results.ajouter_liste_topologie(ORIGINE_DISPARUE,art_disp);
1759     }
1760 souaissa 142
1761 souaissa 153 for(int i1=0;i1<aret2_nouvelles.get_nb();i1++)
1762     {
1763     int art_nv= aret2_nouvelles.get(i1) ;
1764     Aret2_nouvelles.ajouter(art_nv);
1765     //MG_ARETE*art_app=mggeo2->get_mg_areteid(art_nv);
1766     //Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1767     }
1768     //for(int i1=0;i1<aret2_partielles.get_nb()/2;i1++){
1769     // int art1_prt=aret2_partielles.get(2*i1);
1770     // int art2_prt=aret2_partielles.get(2*i1+1);
1771    
1772     //il faut metttre les points des sous artes avec leurs correspondances;
1773    
1774     //Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1775    
1776     // Aret2_partielles.ajouter(art1_prt);
1777     // }
1778 souaissa 158 faces1_partiellement_modf.ajouter(Num1);
1779     faces2_partiellement_modf.ajouter(Num2);
1780 souaissa 159 // }//verid
1781 souaissa 158 }// if()nb_aretes_trouvees
1782 souaissa 153
1783 souaissa 158 } //if (G1==G2)
1784 souaissa 159 // }
1785 souaissa 153 }
1786     }
1787    
1788    
1789    
1790    
1791    
1792     for(int i=0;i<Aret2_nouvelles.get_nb();i++)
1793     {
1794     int art_nouv=Aret2_nouvelles.get(i);
1795     if(! Aret2_conservees.est_dans_la_liste(Aret2_nouvelles.get(i)))
1796     {
1797     MG_ARETE*art_app=mggeo2->get_mg_areteid(art_nouv);
1798     Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1799     }
1800     }
1801    
1802     for(int i=0;i<Aret1_disparues.get_nb();i++)
1803     {
1804     int art_nouv=Aret1_disparues.get(i);
1805     if(! Aret1_conservees.est_dans_la_liste(Aret1_disparues.get(i)))
1806     {
1807     MG_ARETE*art_disp=mggeo1->get_mg_areteid(art_nouv);
1808     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,art_disp);
1809     }
1810 souaissa 142 }
1811    
1812 souaissa 153
1813 souaissa 142 for(int j=0;j<dif2.get_nb();j++)
1814     {
1815 souaissa 158 if(!face2_conservees.est_dans_la_liste(dif2.get(j)))
1816 souaissa 142 {
1817     int nouv_face=dif2.get(j);
1818     faces_nouvelles.ajouter(nouv_face);
1819     MG_FACE* Face_Nouvelle=mggeo2->get_mg_faceid(nouv_face);
1820 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,Face_Nouvelle);
1821 souaissa 143 int nb_boucle2=Face_Nouvelle->get_nb_mg_boucle();
1822    
1823     for(int j=0;j<nb_boucle2;j++)
1824     {
1825     MG_BOUCLE* Boucle2 = Face_Nouvelle->get_mg_boucle(j);
1826     int nbarete2 = Boucle2->get_nb_mg_coarete();
1827     for(int w2=0;w2<nbarete2;w2++)
1828     {
1829     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1830     MG_ARETE* arete_nouvelle = coArete2->get_arete();
1831 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,arete_nouvelle);
1832 souaissa 143 MG_COSOMMET* cosommt1= arete_nouvelle->get_cosommet1();
1833     MG_COSOMMET* cosommt2= arete_nouvelle->get_cosommet2();
1834     MG_SOMMET* nouveau_sommet1= cosommt1->get_sommet();
1835     MG_SOMMET* nouveau_sommet2= cosommt2->get_sommet();
1836 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,nouveau_sommet1);
1837     Results.ajouter_liste_topologie(MODIFIE_APPARUE,nouveau_sommet2);
1838 souaissa 143 }
1839     }
1840     }
1841     }
1842    
1843 souaissa 153 for(int i1=0;i1<nb_face1;i1++)
1844     {
1845     MG_FACE*face1=mggeo1->get_mg_face(i1);
1846     int face1_id=face1->get_id();
1847     if(!face1_conservees.est_dans_la_liste(face1_id))
1848     {
1849     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,face1);
1850     int nb_boucle1=face1->get_nb_mg_boucle();
1851     for(int j1=0;j1<nb_boucle1;j1++)
1852     {
1853     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1854     int nbarete1 = Boucle1->get_nb_mg_coarete();
1855     for (int w1 =0; w1<nbarete1;w1++)
1856     {
1857     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1858     MG_ARETE* arete1 = coArete1->get_arete();
1859     int id_art1=arete1->get_id();
1860     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,arete1);
1861 souaissa 143
1862 souaissa 153 }
1863     }
1864     }
1865     }
1866 souaissa 143
1867 souaissa 153 for(int i=0;i<nb_face1;i++)
1868     {
1869     MG_FACE* face1=mggeo1->get_mg_face(i);
1870     MG_SURFACE* surf1=face1->get_surface();
1871     int id1=face1->get_id();
1872     if(!face1_conservees.est_dans_la_liste(id1))
1873     {
1874     OT_TENSEUR tns1_surf(4),tns2_surf(4);
1875     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1876     vector<double2> isurf1;
1877     for(int r=0;r<4;r++)
1878     {
1879     isurf1.insert( isurf1.end(), tns1_surf(r,r));
1880     }
1881     for(int j=0;j<nb_face2;j++)
1882     {
1883     MG_FACE* face2=mggeo2->get_mg_face(j);
1884     MG_SURFACE* surf2=face2->get_surface();
1885     int id2=face2->get_id();
1886     CORRESPONDANCE CORRESP_FACE;
1887     OT_VECTEUR_4DD G1=surf1->get_vectorisation().calcule_barycentre(T1);
1888     OT_VECTEUR_4DD G2=surf2->get_vectorisation().calcule_barycentre(T2);
1889     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1890     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1891     vector<double2> isurf2;
1892     for(int r=0;r<4;r++)
1893     {
1894     isurf2.insert( isurf2.end(), tns1_surf(r,r));
1895     }
1896     vector<unsigned int> indx1;
1897     if(tns1_surf.listes_equivalentes(isurf1,isurf2,indx1))
1898     {
1899     if(G1==G2)
1900     {
1901     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,face1);
1902     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,face2);
1903     CORRESP_FACE.eleorigine=face1;
1904     CORRESP_FACE.elemodifie=face2;
1905     Results.ajouter_liste_topologie(CORRESP_FACE);
1906    
1907     }
1908     }
1909     }
1910     }
1911     }
1912    
1913 souaissa 158 identite.vide();
1914     for(int i=0;i<face1_conservees.get_nb();i++)
1915     {
1916     identite.ajouter( face1_conservees.get(i));
1917     identite.ajouter( face2_conservees.get(i));
1918     }
1919     this->affecter_les_couleurs(1);
1920    
1921 souaissa 143 }
1922    
1923 souaissa 158 int VCT_COMPARAISON::surfaces_sont_elles_identiques(MG_FACE* face1,MG_FACE* face2)
1924     {
1925     MG_SURFACE* surf1=face1->get_surface();
1926     MG_SURFACE* surf2=face2->get_surface();
1927     vector<double2> isurf1,isurf2;
1928     vector<unsigned int> indx1;
1929     TPL_LISTE_ENTITE<double> parm1,parm2;
1930     OT_VECTEUR_4DD Dv1,Dv2,axe3;
1931     OT_VECTEUR_4DD VNUL(0.,0.,0.,0.);
1932     double2 ZER=0.;
1933     OT_TENSEUR tm1_surf(4),tm2_surf(4),tns1_surf(4),tns2_surf(4),V1(4),V2(4);
1934     OT_VECTEUR_4DD G1=surf1->get_vectorisation().calcule_barycentre(T1);
1935     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1936     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1937     OT_VECTEUR_4DD G2=surf2->get_vectorisation().calcule_barycentre(T2);
1938     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1939     tm1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
1940     tm2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
1941    
1942     surf1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
1943     surf2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
1944    
1945     for(int r=0;r<4;r++)
1946     {
1947     isurf1.insert( isurf1.end(), tns1_surf(r,r));
1948     isurf2.insert( isurf2.end(), tns2_surf(r,r));
1949     }
1950    
1951     if(surf2->get_type_geometrique(parm2)==MGCo_PLAN)
1952     {
1953     axe3[0]= parm2.get(3);
1954     axe3[1]= parm2.get(4);
1955     axe3[2]= parm2.get(5);
1956     axe3[3]= 0;
1957     G1=face1->get_vectorisation().calcule_barycentre(T1);
1958     G2=face2->get_vectorisation().calcule_barycentre(T2);
1959    
1960     }
1961 souaissa 159 if(surf2->get_type_geometrique(parm1)==MGCo_CYLINDRE||surf2->get_type_geometrique(parm2)==MGCo_CONE)
1962 souaissa 158 {
1963     axe3[0]= parm2.get(3);
1964     axe3[1]= parm2.get(4);
1965     axe3[2]= parm2.get(5);
1966     axe3[3]= 0;
1967     }
1968     //axe3=surf1->get_vectorisation().get_nouveau_pt(T1,axe3);
1969     double2 d1=axe3[0]*G1[0]+axe3[1]*G1[1]+axe3[2]*G1[3];
1970     double2 d2=axe3[0]*G2[0]+axe3[1]*G2[1]+axe3[2]*G2[3];
1971    
1972     if(tm1_surf.est_til_equivalent(tm2_surf))
1973     {
1974     if (tns1_surf.listes_equivalentes(isurf1,isurf2,indx1))
1975     {
1976     OT_VECTEUR_4DD G1G2= G1-G2;
1977     double2 mm=G1G2*axe3;
1978     if(ZER==mm)
1979     {
1980     return 1;
1981     }
1982     }
1983     }
1984     return 0;
1985     }
1986    
1987 souaissa 159
1988     int VCT_COMPARAISON::courbes_sont_elles_identiques(MG_ARETE* arete1,MG_ARETE* arete2)
1989     {
1990     MG_COURBE* courb1=arete1->get_courbe();
1991     MG_COURBE* courb2=arete2->get_courbe();
1992     vector<double2> icourb1,icourb2;
1993     vector<unsigned int> indx1;
1994     TPL_LISTE_ENTITE<double> parm1,parm2;
1995     OT_VECTEUR_4DD Dv1,Dv2,axe3;
1996     OT_VECTEUR_4DD VNUL(0.,0.,0.,0.);
1997     double2 ZER=0.;
1998     OT_TENSEUR tm1_surf(4),tm2_surf(4),tns1_surf(4),tns2_surf(4),V1(4),V2(4);
1999     OT_VECTEUR_4DD G1=courb1->get_vectorisation().calcule_barycentre(T1);
2000     G1=courb1->get_vectorisation().get_nouveau_pt(T1,G1);
2001     tns1_surf=courb1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
2002     OT_VECTEUR_4DD G2=courb2->get_vectorisation().calcule_barycentre(T2);
2003     tns2_surf=courb2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
2004     tm1_surf=courb1->get_vectorisation().calcule_tenseur_metrique();
2005     tm2_surf=courb2->get_vectorisation().calcule_tenseur_metrique();
2006    
2007     courb1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
2008     courb2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
2009    
2010     for(int r=0;r<4;r++)
2011     {
2012     icourb1.insert( icourb1.end(), tns1_surf(r,r));
2013     icourb2.insert( icourb2.end(), tns2_surf(r,r));
2014     }
2015    
2016     if(courb2->get_type_geometrique(parm2)==MGCo_LINE)
2017     {
2018     axe3[0]= parm2.get(3);
2019     axe3[1]= parm2.get(4);
2020     axe3[2]= parm2.get(5);
2021     axe3[3]= 0;
2022     G1=arete1->get_vectorisation().calcule_barycentre(T1);
2023     G2=arete2->get_vectorisation().calcule_barycentre(T2);
2024    
2025     }
2026     if(courb2->get_type_geometrique(parm1)==MGCo_CIRCLE||courb2->get_type_geometrique(parm2)==MGCo_ELLIPSE)
2027     {
2028     axe3[0]= parm2.get(3);
2029     axe3[1]= parm2.get(4);
2030     axe3[2]= parm2.get(5);
2031     axe3[3]= 0;
2032     }
2033    
2034     if(tm1_surf.est_til_equivalent(tm2_surf))
2035     {
2036     if (tns1_surf.listes_equivalentes(icourb1,icourb2,indx1))
2037     {
2038     OT_VECTEUR_4DD G1G2= G1-G2;
2039     OT_VECTEUR_4DD mm=G1G2^axe3;
2040     if(VNUL==mm)
2041     {
2042     return 1;
2043     }
2044     }
2045     }
2046     return 0;
2047    
2048    
2049    
2050    
2051     }
2052    
2053    
2054    
2055    
2056    
2057    
2058 souaissa 153 void VCT_COMPARAISON::identifier_les_sommets(MG_FACE* face1_ref,MG_FACE* face2_ref,TPL_LISTE_ENTITE<int>& lst_corrsp_sommets,VCT_COMPARAISON_RESULTAT& Results)
2059 souaissa 143 {
2060 souaissa 153
2061 souaissa 143 OT_VECTEUR_4DD Dv1,Dv2,G1,gf1,gf2,G2;
2062     OT_TENSEUR V1(4),V2(4);
2063 souaissa 153 TPL_LISTE_ENTITE<int> lst1_som_trouve;
2064     TPL_LISTE_ENTITE<int> lst2_som_trouve;
2065     face1_ref->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
2066     G1=face1_ref->get_vectorisation().calcule_barycentre(T1);
2067 souaissa 143
2068 souaissa 153 /*
2069 souaissa 143 for(int r=0;r<4;r++) {
2070     for(int s=0;s<4;s++) {
2071     gf1[r]= gf1[r]+V1(s,r)*G1[s];
2072     }
2073 souaissa 153 } */
2074 souaissa 143
2075 souaissa 153 face2_ref->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
2076     G2=face2_ref->get_vectorisation().calcule_barycentre(T2);
2077     /*
2078 souaissa 143 for(int r=0;r<4;r++) {
2079     for(int s=0;s<4;s++) {
2080     gf2[r]= gf2[r]+V2(s,r)*G2[s];
2081     }
2082 souaissa 153 } */
2083 souaissa 143
2084     int nb_sommet1= mggeo1->get_nb_mg_sommet();
2085     int nb_sommet2= mggeo2->get_nb_mg_sommet();
2086    
2087    
2088 souaissa 153
2089 souaissa 143 for(int i=0;i<nb_sommet1;i++)
2090     {
2091     double xyz1[3];
2092 souaissa 153 OT_VECTEUR_4DD S1,s1, G1G1REF;
2093 souaissa 143 MG_SOMMET *som1=mggeo1->get_mg_sommet(i);
2094     MG_POINT* pt1=som1->get_point();
2095     int som1_id=som1->get_id();
2096     pt1->evaluer(xyz1);
2097     for(int t=0;t<3;t++) s1[t]=xyz1[t];
2098 souaissa 153 G1G1REF=s1-G1;
2099     G1G1REF=face1_ref->get_vectorisation().get_nouveau_pt(T1,G1G1REF);
2100     /*
2101 souaissa 143 for(int r=0;r<4;r++) {
2102     for(int s=0;s<4;s++) {
2103     S1[r]= S1[r]+V1(s,r)*s1[s];
2104     }
2105 souaissa 153 } */
2106 souaissa 143
2107 souaissa 153
2108 souaissa 143 for(int j=0;j<nb_sommet2;j++)
2109     {
2110     double xyz2[3];
2111 souaissa 153 OT_VECTEUR_4DD S2,s2,G2G2REF;
2112 souaissa 143 MG_SOMMET *som2=mggeo2->get_mg_sommet(j);
2113     MG_POINT* pt2=som2->get_point();
2114     int som2_id=som2->get_id();
2115 souaissa 153 if( lst1_som_trouve.est_dans_la_liste(som1_id)) break;
2116    
2117 souaissa 143 pt2->evaluer(xyz2);
2118     for(int t=0;t<3;t++) s2[t]=xyz2[t];
2119 souaissa 153 G2G2REF=s2-G2;
2120     /*
2121 souaissa 143 for(int r=0;r<4;r++) {
2122     for(int s=0;s<4;s++) {
2123     S2[r]= S2[r]+V2(s,r)*s2[s];
2124     }
2125 souaissa 153 } */
2126 souaissa 143
2127 souaissa 153 if (G1G1REF==G2G2REF)
2128 souaissa 143 {
2129 francois 144 Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,som1);
2130     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,som2);
2131 souaissa 143 CORRESPONDANCE CORRESP;
2132     CORRESP.eleorigine=som1;
2133     CORRESP.elemodifie=som2;
2134     Results.ajouter_liste_topologie(CORRESP);
2135 souaissa 153 lst_corrsp_sommets.ajouter(som1_id);
2136     lst_corrsp_sommets.ajouter(som2_id);
2137     lst1_som_trouve.ajouter(som1_id);
2138     lst2_som_trouve.ajouter(som2_id);
2139     }
2140 souaissa 143
2141     }
2142 souaissa 153
2143    
2144    
2145 souaissa 143 }
2146 souaissa 142
2147 souaissa 143
2148 souaissa 153 for(int i=0;i<nb_sommet1;i++)
2149     {
2150     MG_SOMMET *som=mggeo1->get_mg_sommet(i);
2151     int som_id=som->get_id();
2152     if(! lst1_som_trouve.est_dans_la_liste(som_id))
2153     {
2154 souaissa 143
2155 souaissa 153 Results.ajouter_liste_topologie(ORIGINE_DISPARUE,som);
2156 souaissa 143
2157 souaissa 153 }
2158 souaissa 143
2159 souaissa 153 }
2160 souaissa 143
2161 souaissa 153 for(int i=0;i<nb_sommet2;i++)
2162     {
2163     MG_SOMMET *som=mggeo2->get_mg_sommet(i);
2164     int som_id=som->get_id();
2165     if(! lst2_som_trouve.est_dans_la_liste(som_id))
2166     {
2167    
2168     Results.ajouter_liste_topologie(MODIFIE_APPARUE,som);
2169    
2170     }
2171    
2172     }
2173    
2174 souaissa 87 }
2175    
2176    
2177 souaissa 153
2178    
2179    
2180     void VCT_COMPARAISON::get_syteme_daxes_globale()
2181     {
2182    
2183     OT_VECTEUR_4DD Dv1,Dv2,Dw,G1,G2,G1G2;
2184     OT_TENSEUR p(4),q(4),pT,qT;
2185     int nb_face1=mggeo1->get_nb_mg_face();
2186     int nb_face2=mggeo1->get_nb_mg_face();
2187     OT_VECTEUR_4DD VNul(0.,0.,0.,0.);
2188     double2 cof=-1;
2189     int plan=-1;
2190     for(int i=3;i<nb_face1;i++)
2191     {
2192     OT_TENSEUR inertie_face1(4);
2193     vector<double2> iface1;
2194     MG_FACE* face1=mggeo1->get_mg_face(i);
2195     int id_face1=face1->get_id();
2196     face1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,p);
2197     pT=p.transpose();
2198     G1= face1->get_vectorisation().calcule_barycentre(T1);
2199     inertie_face1=face1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
2200     vector<OT_VECTEUR_4DD>& list_points1=face1->get_vectorisation().get_points_controle();
2201     vector<OT_VECTEUR_4DD>& list_vecteurs1=face1->get_vectorisation().get_vecteurs();
2202     OT_VECTEUR_4DD Normal1(0.,0.,0.,0.),N1;
2203     OT_VECTEUR_4DD axe11,axe12,axe13;
2204     int cmpt=0;
2205    
2206     OT_VECTEUR_4DD v11= list_vecteurs1[0];
2207     int nb_vecteur1=list_vecteurs1.size();
2208     for(unsigned int pi=0;pi<nb_vecteur1-1;pi++)
2209     {
2210    
2211     OT_VECTEUR_4DD v2= list_vecteurs1[pi+1];
2212     if(pi==0)
2213     Normal1=v11^v2;
2214     if (pi>0)
2215     N1=v11^v2;
2216     OT_VECTEUR_4DD colineaire= Normal1^N1;
2217     if(colineaire==VNul)
2218     {
2219     cmpt++;
2220     }
2221     }
2222     vector<OT_VECTEUR_4DD> axes1;
2223     if ( cmpt== list_vecteurs1.size()-1)
2224     {
2225     plan=1;
2226     axe11=list_vecteurs1[0];
2227     axe12=Normal1^axe11;
2228     axe13=Normal1;
2229     axes1.insert(axes1.end(),axe11);
2230     axes1.insert(axes1.end(),axe12);
2231     axes1.insert(axes1.end(),axe13);
2232     }
2233    
2234     VCT_OUTILS VOUTIL(4);
2235     OT_MATRICE_3D sys_axes1=VOUTIL.get_system_axes(G1,axes1,list_points1) ;
2236    
2237     for(int r=0;r<4;r++)
2238     {
2239     iface1.insert( iface1.end(), inertie_face1(r,r));
2240     }
2241    
2242     for(int j=4;j<nb_face2;j++)
2243     {
2244     OT_TENSEUR inertie_face2(4);
2245     vector<double2> iface2;
2246     MG_FACE* face2=mggeo2->get_mg_face(j);
2247     int id_face2=face2->get_id();
2248     face2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,q);
2249     G2= face2->get_vectorisation().calcule_barycentre(T2);
2250     qT=q.transpose();
2251     inertie_face2=face2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
2252     vector<OT_VECTEUR_4DD>& list_points2=face2->get_vectorisation().get_points_controle();
2253     vector<OT_VECTEUR_4DD>& list_vecteurs2=face2->get_vectorisation().get_vecteurs();
2254     OT_VECTEUR_4DD Normal2(0.,0.,0.,0.),N1;
2255     OT_VECTEUR_4DD axe21,axe22,axe23;
2256     int cmpt=0;
2257     OT_VECTEUR_4DD v21= list_vecteurs2[0];
2258     int nb_vecteur2=list_vecteurs2.size();
2259     for(unsigned int pj=0;pj<nb_vecteur2-1;pj++)
2260     {
2261     OT_VECTEUR_4DD v2= list_vecteurs2[pj+1];
2262     if(pj==0)
2263     Normal2=v21^v2;
2264     if (pj>0)
2265     N1=v21^v2;
2266     OT_VECTEUR_4DD colineaire= Normal2^N1;
2267     if(colineaire==VNul)
2268     {
2269     cmpt++;
2270     }
2271     }
2272     vector<OT_VECTEUR_4DD> axes2;
2273     if ( cmpt== list_vecteurs2.size()-1)
2274     {
2275     plan=1;
2276     axe21=list_vecteurs2[0];
2277     axe22=Normal2^axe21;
2278     axe23=Normal2;
2279     axes2.insert(axes2.end(),axe21);
2280     axes2.insert(axes2.end(),axe22);
2281     axes2.insert(axes2.end(),axe23);
2282     }
2283    
2284     VCT_OUTILS VOUTIL(4);
2285     OT_MATRICE_3D sys_axes2=VOUTIL.get_system_axes(G2,axes2,list_points2) ;
2286    
2287     OT_MATRICE_3D T= sys_axes2*sys_axes1.transpose();
2288    
2289    
2290    
2291    
2292    
2293     /*
2294     for(int r=0;r<4;r++)
2295     {
2296     iface2.insert( iface2.end(), inertie_face2(r,r));
2297     }
2298     vector<unsigned int> indx1,indx2;
2299     OT_TENSEUR T=q*pT;
2300    
2301     if(inertie_face2.listes_equivalentes(iface1,iface2,indx1))
2302     {
2303    
2304     for(int ii=0;ii<list_points1.size();ii++)
2305     {
2306     OT_VECTEUR_4DD pt1= list_points1[ii];
2307     OT_VECTEUR_4DD pt11;
2308    
2309     for(int r=0;r<4;r++)
2310     {
2311     for(int s=0;s<4;s++)
2312     pt11[r]=pt11[r]+T(r,s)*G1[s];
2313     }
2314    
2315     for(int jj=0;jj<list_points2.size();jj++)
2316     {
2317     OT_VECTEUR_4DD pt2= list_points2[jj];
2318     OT_VECTEUR_4DD pt22;
2319     for(int r=0;r<4;r++)
2320     {
2321     for(int s=0;s<4;s++)
2322     pt22[r]=pt22[r]+T(r,s)*G2[s];
2323     }
2324     if(pt11==G2)
2325     {
2326     int g=0;
2327     }
2328    
2329    
2330     }
2331    
2332    
2333    
2334     }
2335    
2336    
2337     } */
2338    
2339    
2340     }
2341     }
2342    
2343    
2344     }
2345    
2346    
2347    
2348    
2349    
2350 francois 144 std::ostream& operator <<(std::ostream& os,VCT_COMPARAISON& vct_cmp)
2351 souaissa 142 {
2352     vct_cmp.enregistrer(os) ;
2353     return os;
2354     }
2355 souaissa 87
2356    
2357    
2358 souaissa 142
2359    
2360 souaissa 87 void VCT_COMPARAISON::enregistrer(ostream& os)
2361 souaissa 142 {
2362     os<<"COMPARAISON VECTORIELLE DE DEUX GEOMETRIES"<<endl;
2363     int nb_cl=2;
2364     int nb_lg=similarite.get_nb()/2;
2365 souaissa 66 os<<"FACES_PREMIERE_GEOMETRIE : ";
2366     for(int j=0;j<nb_lg;j++)
2367 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+0);
2368 souaissa 66 os<<endl;
2369     os<<"FACES_SECONDE_GEOMETRIE : ";
2370     for(int j=0;j<nb_lg;j++)
2371 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+1);
2372 souaissa 66 os<<endl;
2373    
2374 souaissa 87 //affecter_une_couleur();
2375 souaissa 82
2376    
2377 souaissa 142 }
2378 souaissa 143
2379    
2380    
2381 souaissa 153 int VCT_COMPARAISON::modele_a_change_de_repere()
2382     {
2383     int nb_sommet1= mggeo1->get_nb_mg_sommet();
2384     int nb_sommet2= mggeo2->get_nb_mg_sommet();
2385 souaissa 143
2386 souaissa 153 int trouve=0;
2387     int cmt=0;
2388     for(int i=0;i<nb_sommet1;i++)
2389     {
2390     double xyz1[3];
2391     OT_VECTEUR_4DD S1,s1;
2392     MG_SOMMET *som1=
2393     mggeo1->get_mg_sommet(i);
2394     MG_POINT* pt1=som1->get_point();
2395     int som1_id=som1->get_id();
2396     pt1->evaluer(xyz1);
2397     for(int t=0;t<3;t++) s1[t]=xyz1[t];
2398    
2399    
2400     for(int j=0;j<nb_sommet2;j++)
2401     {
2402     double xyz2[3];
2403     OT_VECTEUR_4DD S2,s2;
2404     MG_SOMMET *som2=mggeo2->get_mg_sommet(j);
2405     MG_POINT* pt2=som2->get_point();
2406     int som2_id=som2->get_id();
2407     pt2->evaluer(xyz2);
2408     for(int t=0;t<3;t++) s2[t]=xyz2[t];
2409    
2410    
2411     if (s1==s2)
2412     {
2413     trouve=1;
2414     break;
2415     }
2416    
2417     }
2418     if (trouve==-1) return trouve;
2419     }
2420    
2421    
2422     return trouve;
2423    
2424     }
2425