ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 158
Committed: Wed Sep 17 19:35:22 2008 UTC (16 years, 7 months ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 91509 byte(s)
Log Message:
mise a jour da la classe vct_comparaison.cpp

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 souaissa 142 #include <iomanip.h>
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 153 if (G1==G2)
877     {
878     face_ref1=idRef1;
879     face_ref2=idRef2;
880 souaissa 154 not_trouve=1;
881 souaissa 153 break;
882     }
883     k++;
884 souaissa 154 p=p+2;
885 souaissa 153 }
886 souaissa 154 h=p;
887 souaissa 142 }
888 souaissa 154 }
889 souaissa 142
890    
891 souaissa 153 void VCT_COMPARAISON::verifier_le_repere(OT_TENSEUR& rep1,OT_TENSEUR& rep2,vector<double2>& inert1,vector<double2>& inert2)
892     {
893     TPL_LISTE_ENTITE<int> lst;
894     for(int i=0;i<4;i++)
895     {
896     double2 val1=inert1[i];
897     for(int j=0;j<4;j++)
898     {
899     if(!lst.est_dans_la_liste(j+4))
900     {
901     double2 val2=inert2[j];
902     if(val1==val2)
903     {
904     lst.ajouter(i);
905     lst.ajouter(j+4);
906     break;
907     }
908     }
909     }
910     }
911 souaissa 142
912    
913 souaissa 153 }
914 souaissa 142
915 souaissa 153
916 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)
917     {
918    
919 souaissa 153
920 souaissa 142 int nb_boucle1=face1->get_nb_mg_boucle();
921     int nb_boucle2=face2->get_nb_mg_boucle();
922 souaissa 158 TPL_LISTE_ENTITE<int> lst1_artes_delamemecourbe;
923     TPL_LISTE_ENTITE<int> lst2_artes_delamemecourbe;
924 souaissa 153 TPL_LISTE_ENTITE<int> arte1_trouvee;
925     TPL_LISTE_ENTITE<int> arte2_trouvee;
926 souaissa 158 OT_VECTEUR_4DD VZER(0.,0.,0.,0.);
927 souaissa 142 //-----------------------------------------------------------------------------
928     OT_VECTEUR_4DD Dv1,Dv2,G1,gf1,gf2,G2;
929     OT_TENSEUR V1(4),V2(4);
930    
931 souaissa 153 //f_ref1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
932     //G1=f_ref1->get_vectorisation().calcule_barycentre(T1);
933 souaissa 142
934 souaissa 153 MG_SURFACE* surf1_ref=f_ref1->get_surface();
935     G1=surf1_ref->get_vectorisation().calcule_barycentre(T1);
936     G1=surf1_ref->get_vectorisation().get_nouveau_pt(T1,G1);
937     // for(int r=0;r<4;r++) {
938     // for(int s=0;s<4;s++) {
939     // gf1[r]= gf1[r]+V1(s,r)*G1[s];
940     // }
941     // }
942 souaissa 142
943 souaissa 153 //f_ref2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
944     //G2=f_ref2->get_vectorisation().calcule_barycentre(T2);
945     MG_SURFACE* surf2_ref= f_ref2->get_surface();
946     G2=surf1_ref->get_vectorisation().calcule_barycentre(T2);
947 souaissa 142
948 souaissa 153 // for(int r=0;r<4;r++) {
949     // for(int s=0;s<4;s++) {
950     // gf2[r]= gf2[r]+V2(s,r)*G2[s];
951     // }
952     // }
953 souaissa 142
954     //---------------------------------------------------------------------------
955 souaissa 158 /* for(int j1=0;j1<nb_boucle1;j1++)
956     {
957     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
958     int nbarete1 = Boucle1->get_nb_mg_coarete();
959     for (int w1 =0; w1<nbarete1;w1++)
960     {
961     double xyz1[3];
962     double xyz2[3];
963     vector<double2> viarte1,vicrbe1;
964     OT_TENSEUR tns_arete1(4),tns_courbe1(4);
965     OT_TENSEUR tm1_art(4),tm1_crb(4);
966     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
967     MG_ARETE* arete1 = coArete1->get_arete();
968     int id_art1=arete1->get_id();
969     MG_COURBE* courbe1=arete1->get_courbe();
970     int nb_top1_pts= arete1->get_vectorisation().get_nb_points();
971     int nb_geo1_pts= courbe1->get_vectorisation().get_nb_points();
972     tm1_art=arete1->get_vectorisation().calcule_tenseur_metrique();
973     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
974     tns_arete1=arete1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
975     tns_courbe1=courbe1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
976    
977     for(int r=0;r<4;r++)
978     {
979     viarte1.insert( viarte1.end(), tns_arete1(r,r));
980     vicrbe1.insert( vicrbe1.end(), tns_courbe1(r,r));
981     }
982     for(int j2=0;j2<nb_boucle2;j2++)
983     {
984     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
985     int nbarete2 = Boucle2->get_nb_mg_coarete();
986     for (int w2 =0; w2<nbarete2;w2++)
987     {
988     double xyz1[3];
989     double xyz2[3];
990     vector<double2> viarte2,vicrbe2;
991     OT_TENSEUR tns_arete2(4),tns_courbe2(4);
992     OT_TENSEUR tm2_art(4),tm2_crb(4);
993     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
994     MG_ARETE* arete2 = coArete2->get_arete();
995     int id_art2=arete2->get_id();
996     MG_COURBE* courbe2=arete2->get_courbe();
997     int nb_top2_pts= arete2->get_vectorisation().get_nb_points();
998     int nb_geo2_pts= courbe2->get_vectorisation().get_nb_points();
999     tm2_art=arete2->get_vectorisation().calcule_tenseur_metrique();
1000     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1001     tns_arete2=arete2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1002     tns_courbe2=courbe2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1003    
1004     for(int r=0;r<4;r++)
1005     {
1006     viarte2.insert( viarte2.end(), tns_arete1(r,r));
1007     vicrbe2.insert( vicrbe2.end(), tns_courbe1(r,r));
1008     }
1009     if((nb_geo1_pts==nb_geo2_pts)&&(nb_top1_pts==nb_top2_pts))
1010     {
1011     if(tm1_art.est_til_equivalent(tm2_art))
1012     {
1013     if(tm1_crb.est_til_equivalent(tm2_crb))
1014     {
1015     if(tns_courbe1==tns_courbe2)
1016     {
1017     lst1_artes_delamemecourbe.ajouter(id_art1);
1018     lst2_artes_delamemecourbe.ajouter(id_art2);
1019     }
1020     }
1021     }
1022    
1023    
1024     }
1025    
1026    
1027     }
1028     }
1029     }
1030     }
1031    
1032     vector<OT_VECTEUR_4DD> lst1_barycentre;
1033     vector<OT_VECTEUR_4DD> lst2_barycentre;
1034     TPL_LISTE_ENTITE<int> lst1,lst2;
1035     for(int i1=0;i1<lst2_artes_delamemecourbe.get_nb();i1++)
1036     {
1037     int id21=lst2_artes_delamemecourbe.get(i1);
1038     MG_ARETE* art2=mggeo2->get_mg_areteid(id21);
1039     OT_VECTEUR_4DD G2=art2->get_vectorisation().calcule_barycentre(T2);
1040     if(!lst2.est_dans_la_liste(id21))
1041     {
1042     lst2_barycentre.insert(lst2_barycentre.end(),G2);
1043     for(int i2=0;i2<lst2_artes_delamemecourbe.get_nb();i2++)
1044     {
1045     int id22=lst2_artes_delamemecourbe.get(i2);
1046     int id1=lst1_artes_delamemecourbe.get(i2);
1047     if(!lst1.est_dans_la_liste(id1))
1048     {
1049     if(id21==id22)
1050     {
1051     MG_ARETE* art1=mggeo1->get_mg_areteid(id1);
1052     OT_VECTEUR_4DD G1=art1->get_vectorisation().calcule_barycentre(T1);
1053     G1=art1->get_vectorisation().get_nouveau_pt(T1,G1);
1054     lst1_barycentre.insert(lst1_barycentre.end(),G1);
1055     lst1.ajouter(id1);
1056     }
1057     }
1058     }
1059     lst2.ajouter(id21);
1060     }
1061     }
1062    
1063    
1064     vector<double2> NOR1,NOR2;
1065     vector<OT_VECTEUR_4DD> vi,vj;
1066     OT_VECTEUR_4DD g1=lst1_barycentre[0];
1067     for(int k=0;k<lst1_barycentre.size();k++)
1068     {
1069     OT_VECTEUR_4DD gigj_1=lst1_barycentre[k]-g1;
1070    
1071     double2 nor1=gigj_1.norme();
1072     OT_VECTEUR_4DD gigj_2=lst1_barycentre[k]-g1;
1073     double2 nor2=gigj_2.norme();
1074     }
1075     for(int k=0;k<lst1_barycentre.size();k++)
1076     {
1077     OT_VECTEUR_4DD gigj_1=lst1_barycentre[k]-g1;
1078     vi.insert(vi.end(),gigj_1);
1079     double2 nor1=gigj_1.norme();
1080     NOR1.insert(NOR1.end(),nor1);
1081     OT_VECTEUR_4DD gigj_2=lst1_barycentre[k]-g1;
1082     vj.insert(vj.end(),gigj_2);
1083     double2 nor2=gigj_2.norme();
1084     NOR2.insert(NOR2.end(),nor2);
1085     }
1086    
1087     double2 min1=NOR1[0];
1088     double2 min2=NOR2[0];
1089     int *t1=new int[lst1.get_nb()];
1090     int *t2=new int[lst2.get_nb()];
1091    
1092     for(int r=0;r<lst1.get_nb();r++)
1093     {
1094     t1[r]=lst1.get(r);
1095     t2[r]=lst2.get(r);
1096     for(int s=0;s<lst1.get_nb();s++)
1097     {
1098     if (NOR1[s]<NOR1[r])
1099     {
1100     double2 tmp1=NOR1[r];
1101     NOR1[r]=NOR1[s];
1102     NOR1[s]=tmp1;
1103     t1[r]=t1[s];
1104     }
1105    
1106     if (NOR2[s]<NOR2[r])
1107     {
1108     double2 tmp2=NOR2[r];
1109     NOR2[r]=NOR2[s];
1110     NOR2[s]=tmp2;
1111     t2[r]=t2[s];
1112     }
1113     }
1114     } */
1115     //---------------------------------------------------------------------------
1116 souaissa 142 int nb_aretes=0;
1117     for(int j1=0;j1<nb_boucle1;j1++)
1118     {
1119     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1120     int nbarete1 = Boucle1->get_nb_mg_coarete();
1121     nb_aretes+=nbarete1;
1122     for (int w1 =0; w1<nbarete1;w1++)
1123     {
1124 souaissa 158 double xyz1[3];
1125     double xyz2[3];
1126 souaissa 142 OT_TENSEUR tns_arete1(4),tns_courbe1(4);
1127     OT_TENSEUR tm1_art(4),tm1_crb(4);
1128     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1129     MG_ARETE* arete1 = coArete1->get_arete();
1130     int id_art1=arete1->get_id();
1131    
1132     MG_COURBE* courbe1=arete1->get_courbe();
1133    
1134     int nb_top1_pts= arete1->get_vectorisation().get_nb_points();
1135     int nb_geo1_pts= courbe1->get_vectorisation().get_nb_points();
1136    
1137     tm1_art=arete1->get_vectorisation().calcule_tenseur_metrique();
1138     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
1139    
1140 souaissa 158 MG_COSOMMET* csomt1_art1= arete1->get_cosommet1();
1141     MG_COSOMMET* csomt2_art1= arete1->get_cosommet2();
1142     MG_SOMMET* som1_art1= csomt1_art1->get_sommet();
1143     MG_SOMMET* som2_art1= csomt2_art1->get_sommet();
1144     MG_POINT* pt1=som1_art1->get_point();
1145     MG_POINT* pt2=som2_art1->get_point();
1146     pt1->evaluer(xyz1);
1147     OT_VECTEUR_4DD PT11(xyz1[0],xyz1[1],xyz1[2],0);
1148     pt2->evaluer(xyz2);
1149     OT_VECTEUR_4DD PT12(xyz2[0],xyz2[1],xyz2[2],0);
1150 souaissa 142 //----------------------------------------------------------------------
1151     OT_VECTEUR_4DD B1,g1;
1152 souaissa 154 B1=courbe1->get_vectorisation().calcule_barycentre(T1);
1153 souaissa 158 OT_VECTEUR_4DD G1S1=B1-PT11;
1154    
1155 souaissa 154 B1=courbe1->get_vectorisation().get_nouveau_pt(T1,B1);
1156 souaissa 158 G1S1=courbe1->get_vectorisation().get_nouveau_pt(T1,G1S1);
1157 souaissa 153 // for(int r=0;r<4;r++) {
1158     // for(int s=0;s<4;s++)
1159     // g1[r]= g1[r]+V1(s,r)*B1[s];
1160     // }
1161 souaissa 142 //----------------------------------------------------------------------
1162    
1163 souaissa 153 tns_arete1=arete1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1164     tns_courbe1=courbe1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1165 souaissa 142 vector<double2> viarte1,vicrbe1;
1166     for(int r=0;r<4;r++)
1167     {
1168     viarte1.insert( viarte1.end(), tns_arete1(r,r));
1169     vicrbe1.insert( vicrbe1.end(), tns_courbe1(r,r));
1170     }
1171 souaissa 153 int compt_aretes_modif=0;
1172 souaissa 142 for(int j2=0;j2<nb_boucle2;j2++)
1173     {
1174 souaissa 153 if(arte1_trouvee.est_dans_la_liste(id_art1)) break;
1175 souaissa 142 MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1176     int nbarete2 = Boucle2->get_nb_mg_coarete();
1177     for (int w2 =0; w2<nbarete2;w2++)
1178     {
1179 souaissa 153 if(arte1_trouvee.est_dans_la_liste(id_art1)) break;
1180 souaissa 142 OT_TENSEUR tns_arete2(4),tns_courbe2(4);
1181     OT_TENSEUR tm2_art(4),tm2_crb(4);
1182     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1183     MG_ARETE* arete2 = coArete2->get_arete();
1184     MG_COURBE* courbe2=arete2->get_courbe();
1185     int id_art2=arete2->get_id();
1186 souaissa 158 MG_COSOMMET* csomt1_art2= arete2->get_cosommet1();
1187     MG_COSOMMET* csomt2_art2= arete2->get_cosommet2();
1188     MG_SOMMET* som1_art2= csomt1_art2->get_sommet();
1189     MG_SOMMET* som2_art2= csomt2_art2->get_sommet();
1190     MG_POINT* pt2=som1_art2->get_point();
1191     pt2->evaluer(xyz1);
1192     OT_VECTEUR_4DD PT21(xyz1[0],xyz1[1],xyz1[2],0);
1193     MG_POINT* pt3=som2_art2->get_point();
1194     pt3->evaluer(xyz2);
1195     OT_VECTEUR_4DD PT22(xyz2[0],xyz2[1],xyz2[2],0);
1196 souaissa 142 //----------------------------------------------------------------------
1197     OT_VECTEUR_4DD B2,g2;
1198 souaissa 154 B2=courbe2->get_vectorisation().calcule_barycentre(T2);
1199 souaissa 158 OT_VECTEUR_4DD G2S2=B2-PT21;
1200     OT_VECTEUR_4DD G2S3=B2-PT22;
1201     OT_VECTEUR_4DD B1B2=B2-B1;
1202     OT_VECTEUR_4DD D1= G1S1^G2S2;
1203     OT_VECTEUR_4DD D2= G1S1^G2S3;
1204     // OT_VECTEUR_4DD D3= B1B2^G2S3;
1205 souaissa 153 // for(int r=0;r<4;r++) {
1206     // for(int s=0;s<4;s++)
1207     // g2[r]= g2[r]+V2(s,r)*B2[s];
1208     // }
1209 souaissa 142 //---------------------------------------------------------------------- MG_COURBE* courbe2=arete2->get_courbe();
1210    
1211     int nb_top2_pts= arete2->get_vectorisation().get_nb_points();
1212     int nb_geo2_pts= courbe2->get_vectorisation().get_nb_points();
1213    
1214     tm2_art=arete2->get_vectorisation().calcule_tenseur_metrique();
1215     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1216    
1217 souaissa 153 tns_arete2=arete2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1218     tns_courbe2=courbe2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1219 souaissa 142
1220     vector<double2> viarte2,vicrbe2;
1221     for(int r=0;r<4;r++)
1222     {
1223     viarte2.insert( viarte2.end(), tns_arete2(r,r));
1224     vicrbe2.insert( vicrbe2.end(), tns_courbe2(r,r));
1225     }
1226    
1227     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
1228     {
1229     if(tm1_art.est_til_equivalent(tm2_art))
1230     {
1231     if(tm1_crb.est_til_equivalent(tm2_crb))
1232     {
1233     vector<unsigned int> indx1,indx2;
1234     int identique=-1;
1235 souaissa 153 //if(tns_arete1==tns_arete2)//.listes_equivalentes(viarte1,viarte2,indx1))
1236     //{
1237 souaissa 142 if(tns_courbe1==tns_courbe2)//tns_arete1.listes_equivalentes(vicrbe1,vicrbe2,indx2))
1238     {
1239 souaissa 153 OT_VECTEUR_4DD v1=B1-G1;
1240     OT_VECTEUR_4DD v2=B2-G2;
1241     //OT_VECTEUR_4DD v1=gf1-g1;
1242     //OT_VECTEUR_4DD v2=gf2-g2;
1243 souaissa 158 if(v1==v2||((D1==VZER||D2==VZER)))
1244 souaissa 142 {
1245 souaissa 158 if(!arte2_trouvee.est_dans_la_liste(id_art2))
1246     {
1247     aretes_ident.ajouter(j1) ;
1248     aretes_ident.ajouter(id_art1) ;
1249     aretes_ident.ajouter(j2) ;
1250     aretes_ident.ajouter(id_art2) ;
1251     arte1_trouvee.ajouter(id_art1);
1252     arte2_trouvee.ajouter(id_art2);
1253     identique=1;
1254     }
1255 souaissa 142
1256 souaissa 153
1257 souaissa 142 }
1258    
1259     }
1260 souaissa 153 // }
1261 souaissa 142 if(identique>0) break;
1262     if(identique<0)
1263     {
1264     aretes_sim.ajouter(j1) ;
1265     aretes_sim.ajouter(id_art1) ;
1266     aretes_sim.ajouter(j2) ;
1267     aretes_sim.ajouter(id_art2) ;
1268     identique=-1;
1269     }
1270     }
1271     }
1272     } // aretes2
1273    
1274     } //boucle2
1275    
1276 souaissa 153 // }//condition 1 //aretes_identiques
1277 souaissa 142 }
1278    
1279     }
1280     }
1281    
1282     if(nb_aretes==aretes_ident.get_nb()/2) return 1;
1283     else return 0;
1284    
1285     }
1286    
1287 souaissa 153 void VCT_COMPARAISON::identifier_aretes_face_modifiee(MG_FACE* face1,MG_FACE* face2,TPL_LISTE_ENTITE<int>& aretes_identiques,
1288     TPL_LISTE_ENTITE<int>&aretes_simil,TPL_LISTE_ENTITE<int>&lst_corrsp_sommets,TPL_LISTE_ENTITE<int>& aret1_conservees,
1289     TPL_LISTE_ENTITE<int>& aret1_disparues,TPL_LISTE_ENTITE<int>& aret2_conservees ,TPL_LISTE_ENTITE<int>& aret2_nouvelles ,
1290     TPL_LISTE_ENTITE<int>& aret_partielles)
1291 souaissa 142 {
1292    
1293     int nb_boucle1=face1->get_nb_mg_boucle();
1294     int nb_boucle2=face2->get_nb_mg_boucle();
1295    
1296    
1297     int cmpt_arete=0;
1298    
1299     TPL_LISTE_ENTITE<int> boucle_face1;
1300     TPL_LISTE_ENTITE<int> boucle_face2;
1301    
1302     TPL_LISTE_ENTITE<int> aretes_ident_face1;
1303     TPL_LISTE_ENTITE<int> aretes_ident_face2;
1304     TPL_LISTE_ENTITE<int> aretes_face1;
1305     TPL_LISTE_ENTITE<int> aretes_face2;
1306     TPL_LISTE_ENTITE<int> aretes_dif_face2;
1307     TPL_LISTE_ENTITE<int> aretes_sim_face1;
1308     TPL_LISTE_ENTITE<int> aretes_sim_face2;
1309 souaissa 153 TPL_LISTE_ENTITE<int> lst_sommet1;
1310     TPL_LISTE_ENTITE<int> lst_sommet2;
1311 souaissa 142
1312 souaissa 153 for(int b=0;b<lst_corrsp_sommets.get_nb()/2;b++)
1313     {
1314     lst_sommet1.ajouter( lst_corrsp_sommets.get(2*b));
1315     lst_sommet2.ajouter( lst_corrsp_sommets.get(2*b+1));
1316     }
1317    
1318 souaissa 142 for(int b=0;b<aretes_identiques.get_nb()/4;b++)
1319 souaissa 87 {
1320 souaissa 153 int b1= aretes_identiques.get(4*b) ;
1321     int b2= aretes_identiques.get(4*b+2) ;
1322     int art1= aretes_identiques.get(4*b+1);
1323     int art2= aretes_identiques.get(4*b+3);
1324 souaissa 142 boucle_face1.ajouter( aretes_identiques.get(4*b));
1325     boucle_face2.ajouter( aretes_identiques.get(4*b+2));
1326     aretes_ident_face1.ajouter(aretes_identiques.get(4*b+1));
1327     aretes_ident_face2.ajouter(aretes_identiques.get(4*b+3));
1328 souaissa 158 aret1_conservees.ajouter(art1);
1329     aret2_conservees.ajouter(art2);
1330    
1331 souaissa 142 }
1332 souaissa 158
1333    
1334     for(int j1=0;j1<nb_boucle1;j1++)
1335     {
1336     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1337     int nbarete1 = Boucle1->get_nb_mg_coarete();
1338    
1339     for (int w1=0; w1<nbarete1;w1++)
1340     {
1341     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1342     MG_ARETE* arete1 = coArete1->get_arete();
1343     int id_art1=arete1->get_id();
1344     if(!aretes_ident_face1.est_dans_la_liste(id_art1))
1345     {
1346     aret1_disparues.ajouter(id_art1);
1347     }
1348     }
1349     }
1350    
1351     for(int j2=0;j2<nb_boucle2;j2++)
1352     {
1353     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1354     int nbarete2 = Boucle2->get_nb_mg_coarete();
1355     for (int w2=0; w2<nbarete2;w2++)
1356     {
1357     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1358     MG_ARETE* arete2 = coArete2->get_arete();
1359     int id_art2=arete2->get_id();
1360     if(!aretes_ident_face2.est_dans_la_liste(id_art2))
1361     {
1362     aret2_nouvelles.ajouter(id_art2);
1363     }
1364    
1365     }
1366     }
1367     /*
1368 souaissa 142 for(int b=0;b<aretes_simil.get_nb()/4;b++)
1369     {
1370     aretes_sim_face1.ajouter(aretes_simil.get(4*b+1));
1371     aretes_sim_face2.ajouter(aretes_simil.get(4*b+3));
1372     }
1373    
1374 souaissa 153 MG_FACE* Face_ref1=mggeo1->get_mg_faceid(face_ref1) ;
1375     MG_FACE* Face_ref2=mggeo2->get_mg_faceid(face_ref2) ;
1376    
1377 souaissa 142 for(int j1=0;j1<nb_boucle1;j1++)
1378     {
1379     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1380     int nbarete1 = Boucle1->get_nb_mg_coarete();
1381 souaissa 153 TPL_LISTE_ENTITE<int> lst_aret1_modif;
1382     TPL_LISTE_ENTITE<int> lst_aret2_modif;
1383     TPL_LISTE_ENTITE<int> lst_art1_partiel;
1384     TPL_LISTE_ENTITE<int> lst_art2_partiel;
1385 souaissa 142 int compt1=0;
1386     int boucle;
1387     int start_boucle,end_boucle;
1388     int cmpt=0;
1389     TPL_LISTE_ENTITE<int> arete_boucle1;
1390     TPL_LISTE_ENTITE<int> arete_boucle2;
1391    
1392     if(boucle_face1.est_dans_la_liste(j1))
1393     {
1394     for(int k=0;k<boucle_face1.get_nb();k++)
1395     {
1396     if (j1==boucle_face1.get(k))
1397     {
1398 souaissa 153 int art1=aretes_ident_face1.get(k);
1399     int art2= aretes_ident_face2.get(k);
1400 souaissa 142 arete_boucle1.ajouter(aretes_ident_face1.get(k));
1401     arete_boucle2.ajouter(aretes_ident_face2.get(k));
1402     boucle=boucle_face2.get(k);
1403     }
1404     }
1405     }
1406    
1407 souaissa 153 for (int w1=0; w1<nbarete1;w1++)
1408 souaissa 87 {
1409 souaissa 142
1410 souaissa 153 MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1411     MG_ARETE* arete1 = coArete1->get_arete();
1412     int id_art=arete1->get_id();
1413     int trouv=-1;
1414     for (int w1=0; w1<arete_boucle1.get_nb();w1++)
1415     {
1416     int id_art1=arete_boucle1.get(w1);
1417     int id_art2=arete_boucle2.get(w1);
1418    
1419     if(id_art1==id_art)
1420 souaissa 142 {
1421 souaissa 153 aret1_conservees.ajouter(id_art1);
1422     aret2_conservees.ajouter(id_art2);
1423     trouv=1;
1424     break;
1425 souaissa 142 }
1426 souaissa 153 }
1427     if(trouv<0)
1428 souaissa 142 {
1429 souaissa 153 //if(!aretes_sim_face1.est_dans_la_liste(id_art1))
1430     aret1_disparues.ajouter(id_art);
1431     //lst_aret1_modif.ajouter(id_art1);
1432 souaissa 142 }
1433 souaissa 153
1434     }
1435 souaissa 142
1436 souaissa 153 // for(int j2=0;j2<nb_boucle2;j2++)
1437     // {
1438     // MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1439     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(boucle);
1440 souaissa 142 int nbarete2 = Boucle2->get_nb_mg_coarete();
1441    
1442     for (int w2=0; w2<nbarete2;w2++)
1443 souaissa 153 {
1444 souaissa 142 MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1445     MG_ARETE* arete2 = coArete2->get_arete();
1446     int id_art2=arete2->get_id();
1447     if(!arete_boucle2.est_dans_la_liste(id_art2))
1448     {
1449     aret2_nouvelles.ajouter(id_art2);
1450 souaissa 153 //lst_aret2_modif.ajouter(id_art2);
1451     //for(int is=0;is<aretes_sim_face2.get_nb();is++)
1452     //{
1453     //if(aretes_sim_face2.get(is)==id_art2)
1454     // {
1455     // aret2_partielles.ajouter(id_art2);
1456     // }
1457     // }
1458 souaissa 142
1459     }
1460 souaissa 153 // else
1461    
1462     // aret2_conservees.ajouter(id_art2);
1463     }
1464    
1465     //verifier parmi les deux listes des aretes modifiees
1466     //celles qui sont nouvelles ou partiellements modifees
1467     /*
1468     for(int m1=0;m1<lst_aret1_modif.get_nb();m1++)
1469 souaissa 142 {
1470 souaissa 153 int id_art1=lst_aret1_modif.get(m1);
1471     MG_ARETE* art1=mggeo1->get_mg_areteid(id_art1);
1472 souaissa 142
1473 souaissa 153 OT_TENSEUR tm1_art(4),tm1_crb(4);
1474     MG_COURBE* courbe1=art1->get_courbe();
1475     tm1_art=art1->get_vectorisation().calcule_tenseur_metrique();
1476     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
1477 souaissa 142
1478 souaissa 153
1479     MG_COSOMMET* csomt1_art1= art1->get_cosommet1();
1480     MG_COSOMMET* csomt2_art1= art1->get_cosommet2();
1481     MG_SOMMET* som1_art1= csomt1_art1->get_sommet();
1482     MG_SOMMET* som2_art1= csomt2_art1->get_sommet();
1483     int id_som11= som1_art1->get_id();
1484     int id_som21= som2_art1->get_id();
1485     int s11_ou_s21;
1486     if(lst_sommet1.est_dans_la_liste(id_som11)) s11_ou_s21=1;
1487     if(lst_sommet1.est_dans_la_liste(id_som21)) s11_ou_s21=2;
1488 souaissa 142
1489 souaissa 153 if(lst_sommet1.est_dans_la_liste(id_som11)||lst_sommet1.est_dans_la_liste(id_som21))
1490     {
1491     for(int m2=0;m2<lst_aret2_modif.get_nb();m2++)
1492     {
1493     int id_art2=lst_aret2_modif.get(m2);
1494     MG_ARETE* art2=mggeo2->get_mg_areteid(id_art2);
1495     OT_TENSEUR tm2_art(4),tm2_crb(4);
1496     MG_COURBE* courbe2=art2->get_courbe();
1497     tm2_art=art1->get_vectorisation().calcule_tenseur_metrique();
1498     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1499    
1500     MG_COSOMMET* csomt1_art2= art2->get_cosommet1();
1501     MG_COSOMMET* csomt2_art2= art2->get_cosommet2();
1502     MG_SOMMET* som1_art2= csomt1_art2->get_sommet();
1503     MG_SOMMET* som2_art2= csomt2_art2->get_sommet();
1504     int id_som12= som1_art2->get_id();
1505     int id_som22= som2_art2->get_id();
1506     int s12_ou_s22;
1507     if(lst_sommet2.est_dans_la_liste(id_som12)) s12_ou_s22=1;
1508     if(lst_sommet2.est_dans_la_liste(id_som22)) s12_ou_s22=2;
1509    
1510     //if(lst_sommet2.est_dans_la_liste(id_som12)||lst_sommet2.est_dans_la_liste(id_som22))
1511     // {
1512     if(tm1_art.est_til_equivalent(tm2_art)&&tm1_crb.est_til_equivalent(tm2_crb))
1513     {
1514     aret_partielles.ajouter(id_art1);
1515     aret_partielles.ajouter(id_art2);
1516     lst_art1_partiel.ajouter(id_art1);
1517     lst_art2_partiel.ajouter(id_art2);
1518     if (s11_ou_s21==1&&s12_ou_s22==1)
1519     {
1520     aret_partielles.ajouter(id_som11);
1521     }
1522     if (s11_ou_s21==2&&s12_ou_s22==1)
1523     {
1524     aret_partielles.ajouter(id_som21);
1525     }
1526     if (s12_ou_s22==1&&s12_ou_s22==2)
1527     {
1528     aret_partielles.ajouter(id_som12);
1529     }
1530     if (s12_ou_s22==2&&s12_ou_s22==2)
1531     {
1532     aret_partielles.ajouter(id_som22);
1533     }
1534    
1535     }
1536     // }
1537    
1538     }
1539     }
1540     } // for m1=
1541    
1542    
1543    
1544     for(int m1=0;m1<lst_aret1_modif.get_nb();m1++)
1545     {
1546     int id_art1=lst_aret1_modif.get(m1);
1547     if( !lst_art1_partiel.est_dans_la_liste(id_art1))
1548     aret1_disparues.ajouter(id_art1);
1549     }
1550     for(int m2=0;m2<lst_aret1_modif.get_nb();m2++)
1551     {
1552     int id_art2=lst_aret2_modif.get(m2);
1553     if( !lst_art2_partiel.est_dans_la_liste(id_art2))
1554     aret2_nouvelles.ajouter(id_art2);
1555 souaissa 158 } /
1556 souaissa 153
1557 souaissa 142 } //boucle_face1
1558    
1559    
1560 souaissa 153 for(int j2=0;j2<nb_boucle2;j2++)
1561     {
1562     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1563 souaissa 142
1564 souaissa 153 if (!boucle_face2.est_dans_la_liste(j2))
1565     {
1566     int nbarete2 = Boucle2->get_nb_mg_coarete();
1567     for (int w2=0; w2<nbarete2;w2++)
1568     {
1569     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1570     MG_ARETE* arete2 = coArete2->get_arete();
1571     int id_art2=arete2->get_id();
1572     aret2_nouvelles.ajouter(id_art2);
1573 souaissa 142
1574 souaissa 153 }
1575     }
1576     }//boucle j2
1577 souaissa 158 */
1578 souaissa 142
1579    
1580 souaissa 153 }
1581    
1582    
1583    
1584 souaissa 142 void VCT_COMPARAISON::identifier_les_modifications_appliquees(VCT_COMPARAISON_RESULTAT& Results)
1585     {
1586    
1587 souaissa 143 TPL_LISTE_ENTITE<int> face1_conservees;
1588     TPL_LISTE_ENTITE<int> face2_conservees;
1589     TPL_LISTE_ENTITE<int> faces_nouvelles;
1590 souaissa 142
1591 souaissa 143 TPL_LISTE_ENTITE<int> aret_ident;
1592     TPL_LISTE_ENTITE<int> aret_modif;
1593     int nb_face1=mggeo1->get_nb_mg_face();
1594     int nb_face2=mggeo2->get_nb_mg_face();
1595     TPL_LISTE_ENTITE<int> lst_face1,lst_face2,lst_facloc1,lst_facloc2,dif1,dif2;
1596    
1597 souaissa 153
1598 souaissa 158 TPL_LISTE_ENTITE<int> faces1_partiellement_modf;
1599     TPL_LISTE_ENTITE<int> faces2_partiellement_modf;
1600 souaissa 153 TPL_LISTE_ENTITE<int> Aret1_conservees;
1601     TPL_LISTE_ENTITE<int> Aret1_disparues;
1602     TPL_LISTE_ENTITE<int> Aret2_conservees ;
1603     TPL_LISTE_ENTITE<int> Aret2_nouvelles ;
1604     TPL_LISTE_ENTITE<int> Aret2_partielles ;
1605     TPL_LISTE_ENTITE<int> face1_disparues;
1606 souaissa 142 for(int i=0;i<nb_face1;i++)
1607     {
1608     OT_VECTEUR_4DD g1,G1;
1609     MG_FACE* face1=mggeo1->get_mg_face(i);
1610     int id1=face1->get_id();
1611     lst_face1.ajouter(id1);
1612 souaissa 87 }
1613 souaissa 142
1614     for(int i=0;i<nb_face2;i++)
1615     {
1616     OT_VECTEUR_4DD g1,G1;
1617     MG_FACE* face2=mggeo2->get_mg_face(i);
1618     int id2=face2->get_id();
1619     lst_face2.ajouter(id2);
1620     }
1621    
1622 souaissa 153
1623    
1624 souaissa 143 MG_FACE* Face_ref1=mggeo1->get_mg_faceid(face_ref1) ;
1625     MG_FACE* Face_ref2=mggeo2->get_mg_faceid(face_ref2) ;
1626 souaissa 145 int nb_faces_identique=identite.get_nb()/2;
1627     for(int i=0;i<nb_faces_identique;i++)
1628 souaissa 142 {
1629     CORRESPONDANCE CORRESP;
1630     int face1_id=identite.get(2*i);
1631     int face2_id=identite.get(2*i+1);
1632     MG_FACE* Face1=mggeo1->get_mg_faceid(face1_id);
1633     MG_FACE* Face2=mggeo2->get_mg_faceid(face2_id);
1634     face1_conservees.ajouter(face1_id);
1635     face2_conservees.ajouter(face2_id);
1636 souaissa 145 Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,Face1);
1637     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,Face2);
1638 souaissa 142 CORRESP.eleorigine=Face1;
1639     CORRESP.elemodifie=Face2;
1640     Results.ajouter_liste_topologie(CORRESP);
1641 souaissa 143
1642     //----------------------------------------
1643     TPL_LISTE_ENTITE<int> aretes_identiques;
1644     TPL_LISTE_ENTITE<int> aretes_similaires;
1645    
1646     //------------------------------------------
1647     this->comparer_aretes_faces(Face_ref1,Face_ref2,Face1,Face2,aretes_identiques,aretes_similaires);
1648    
1649     int nb_aretes_trouvees=aretes_identiques.get_nb()/4;
1650    
1651     if(nb_aretes_trouvees)
1652 souaissa 153 {
1653     CORRESPONDANCE corsp;
1654     for(int i1=0;i1<nb_aretes_trouvees;i1++)
1655     {
1656     int art1_id=aretes_identiques.get(4*i1+1);
1657     MG_ARETE*art1_cons=mggeo1->get_mg_areteid(art1_id);
1658     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,art1_cons);
1659     int art2_id=aretes_identiques.get(4*i1+3);
1660     MG_ARETE*art2_cons=mggeo2->get_mg_areteid(art2_id);
1661     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,art2_cons);
1662 souaissa 143
1663 souaissa 153 corsp.eleorigine=art1_cons;
1664     corsp.elemodifie=art2_cons;
1665     Results.ajouter_liste_topologie(corsp);
1666     }
1667     }
1668 souaissa 143
1669    
1670 souaissa 142 }
1671    
1672 souaissa 153 TPL_LISTE_ENTITE<int> lst_corrsp_sommets;
1673     this->identifier_les_sommets(Face_ref1,Face_ref2,lst_corrsp_sommets,Results);
1674 souaissa 143
1675    
1676     for(int t=0;t<lst_face1.get_nb();t++)
1677     {
1678     if(!face1_conservees.est_dans_la_liste(lst_face1.get(t)) )
1679 souaissa 142 dif1.ajouter(lst_face1.get(t));
1680 souaissa 143 }
1681     for(int it=0;it<lst_face2.get_nb();it++)
1682     {
1683     if(!face2_conservees.est_dans_la_liste(lst_face2.get(it)))
1684 souaissa 142 dif2.ajouter(lst_face2.get(it));
1685 souaissa 143 }
1686 souaissa 87
1687    
1688 souaissa 142 for(int i=0;i<dif1.get_nb();i++)
1689     {
1690     int Num1=dif1.get(i);
1691     MG_FACE* face1=mggeo1->get_mg_faceid(Num1);
1692 souaissa 153 MG_SURFACE* surf1=face1->get_surface();
1693 souaissa 158 OT_VECTEUR_4DD G1=face1->get_vectorisation().calcule_barycentre(T1);
1694 souaissa 153 G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1695 souaissa 142 for(int j=0;j<dif2.get_nb();j++)
1696     {
1697     int Num2=dif2.get(j);
1698     TPL_LISTE_ENTITE<int> aretes_identiques;
1699     TPL_LISTE_ENTITE<int> aretes_similaires;
1700     TPL_LISTE_ENTITE<int> aretes_conservees;
1701     TPL_LISTE_ENTITE<int> nouvelles_aretes ;
1702     TPL_LISTE_ENTITE<int> aret1_conservees;
1703     TPL_LISTE_ENTITE<int> aret1_disparues;
1704     TPL_LISTE_ENTITE<int> aret2_conservees ;
1705     TPL_LISTE_ENTITE<int> aret2_nouvelles ;
1706     TPL_LISTE_ENTITE<int> aret2_partielles ;
1707 souaissa 87
1708 souaissa 142 MG_FACE* face2=mggeo2->get_mg_faceid(Num2);
1709 souaissa 153 MG_SURFACE* surf2=face2->get_surface();
1710 souaissa 158 OT_VECTEUR_4DD G2=face2->get_vectorisation().calcule_barycentre(T2);
1711     if(!faces1_partiellement_modf.est_dans_la_liste(Num1))
1712     {
1713 souaissa 145
1714 souaissa 158 if(surfaces_sont_elles_identiques(face1,face2)) //G1==G2
1715     {
1716 souaissa 153 comparer_aretes_faces(Face_ref1,Face_ref2,face1,face2,aretes_identiques,aretes_similaires);
1717     int nb_aretes_trouvees=aretes_identiques.get_nb()/2;
1718     if(nb_aretes_trouvees)
1719     identifier_aretes_face_modifiee(face1,face2,aretes_identiques,aretes_similaires,lst_corrsp_sommets,aret1_conservees,aret1_disparues,aret2_conservees ,aret2_nouvelles ,aret2_partielles);
1720     int id_face2=face2->get_id();
1721 souaissa 158
1722     if(nb_aretes_trouvees)
1723     {
1724     if (!face2_conservees.est_dans_la_liste(Num2))
1725     {
1726 souaissa 153 CORRESPONDANCE CORRESP_FACE;
1727     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,face1);
1728     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,face2);
1729     CORRESP_FACE.eleorigine=face1;
1730     CORRESP_FACE.elemodifie=face2;
1731     Results.ajouter_liste_topologie(CORRESP_FACE);
1732     face1_conservees.ajouter(Num1);
1733     face2_conservees.ajouter(Num2);
1734 souaissa 143
1735 souaissa 153 for(int i1=0;i1<aret1_conservees.get_nb();i1++)
1736     {
1737     int art1_id=aret1_conservees.get(i1);
1738     Aret1_conservees.ajouter(art1_id);
1739     MG_ARETE*art1_cons=mggeo1->get_mg_areteid(art1_id);
1740     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,art1_cons);
1741     int art2_id= aret2_conservees.get(i1) ;
1742     Aret2_conservees.ajouter(art2_id);
1743     MG_ARETE*art2_cons=mggeo2->get_mg_areteid(art2_id);
1744     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,art2_cons);
1745     CORRESPONDANCE CORRESP;
1746     CORRESP.eleorigine=art1_cons;
1747     CORRESP.elemodifie=art2_cons;
1748     Results.ajouter_liste_topologie(CORRESP);
1749     }
1750 souaissa 142
1751 souaissa 153 for(int i1=0;i1<aret1_disparues.get_nb();i1++)
1752     {
1753     int art_dsp=aret1_disparues.get(i1) ;
1754     Aret1_disparues.ajouter(art_dsp);
1755     //MG_ARETE*art_disp=mggeo1->get_mg_areteid(art_dsp);
1756     //Results.ajouter_liste_topologie(ORIGINE_DISPARUE,art_disp);
1757     }
1758 souaissa 142
1759 souaissa 153 for(int i1=0;i1<aret2_nouvelles.get_nb();i1++)
1760     {
1761     int art_nv= aret2_nouvelles.get(i1) ;
1762     Aret2_nouvelles.ajouter(art_nv);
1763     //MG_ARETE*art_app=mggeo2->get_mg_areteid(art_nv);
1764     //Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1765     }
1766     //for(int i1=0;i1<aret2_partielles.get_nb()/2;i1++){
1767     // int art1_prt=aret2_partielles.get(2*i1);
1768     // int art2_prt=aret2_partielles.get(2*i1+1);
1769    
1770     //il faut metttre les points des sous artes avec leurs correspondances;
1771    
1772     //Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1773    
1774     // Aret2_partielles.ajouter(art1_prt);
1775     // }
1776 souaissa 158 faces1_partiellement_modf.ajouter(Num1);
1777     faces2_partiellement_modf.ajouter(Num2);
1778     }//verid
1779     }// if()nb_aretes_trouvees
1780 souaissa 153
1781 souaissa 158 } //if (G1==G2)
1782     }
1783 souaissa 153 }
1784     }
1785    
1786    
1787    
1788    
1789    
1790     for(int i=0;i<Aret2_nouvelles.get_nb();i++)
1791     {
1792     int art_nouv=Aret2_nouvelles.get(i);
1793     if(! Aret2_conservees.est_dans_la_liste(Aret2_nouvelles.get(i)))
1794     {
1795     MG_ARETE*art_app=mggeo2->get_mg_areteid(art_nouv);
1796     Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1797     }
1798     }
1799    
1800     for(int i=0;i<Aret1_disparues.get_nb();i++)
1801     {
1802     int art_nouv=Aret1_disparues.get(i);
1803     if(! Aret1_conservees.est_dans_la_liste(Aret1_disparues.get(i)))
1804     {
1805     MG_ARETE*art_disp=mggeo1->get_mg_areteid(art_nouv);
1806     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,art_disp);
1807     }
1808 souaissa 142 }
1809    
1810 souaissa 153
1811 souaissa 142 for(int j=0;j<dif2.get_nb();j++)
1812     {
1813 souaissa 158 if(!face2_conservees.est_dans_la_liste(dif2.get(j)))
1814 souaissa 142 {
1815     int nouv_face=dif2.get(j);
1816     faces_nouvelles.ajouter(nouv_face);
1817     MG_FACE* Face_Nouvelle=mggeo2->get_mg_faceid(nouv_face);
1818 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,Face_Nouvelle);
1819 souaissa 143 int nb_boucle2=Face_Nouvelle->get_nb_mg_boucle();
1820    
1821     for(int j=0;j<nb_boucle2;j++)
1822     {
1823     MG_BOUCLE* Boucle2 = Face_Nouvelle->get_mg_boucle(j);
1824     int nbarete2 = Boucle2->get_nb_mg_coarete();
1825     for(int w2=0;w2<nbarete2;w2++)
1826     {
1827     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1828     MG_ARETE* arete_nouvelle = coArete2->get_arete();
1829 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,arete_nouvelle);
1830 souaissa 143 MG_COSOMMET* cosommt1= arete_nouvelle->get_cosommet1();
1831     MG_COSOMMET* cosommt2= arete_nouvelle->get_cosommet2();
1832     MG_SOMMET* nouveau_sommet1= cosommt1->get_sommet();
1833     MG_SOMMET* nouveau_sommet2= cosommt2->get_sommet();
1834 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,nouveau_sommet1);
1835     Results.ajouter_liste_topologie(MODIFIE_APPARUE,nouveau_sommet2);
1836 souaissa 143 }
1837     }
1838     }
1839     }
1840    
1841 souaissa 153 for(int i1=0;i1<nb_face1;i1++)
1842     {
1843     MG_FACE*face1=mggeo1->get_mg_face(i1);
1844     int face1_id=face1->get_id();
1845     if(!face1_conservees.est_dans_la_liste(face1_id))
1846     {
1847     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,face1);
1848     int nb_boucle1=face1->get_nb_mg_boucle();
1849     for(int j1=0;j1<nb_boucle1;j1++)
1850     {
1851     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1852     int nbarete1 = Boucle1->get_nb_mg_coarete();
1853     for (int w1 =0; w1<nbarete1;w1++)
1854     {
1855     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1856     MG_ARETE* arete1 = coArete1->get_arete();
1857     int id_art1=arete1->get_id();
1858     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,arete1);
1859 souaissa 143
1860 souaissa 153 }
1861     }
1862     }
1863     }
1864 souaissa 143
1865 souaissa 153 for(int i=0;i<nb_face1;i++)
1866     {
1867     MG_FACE* face1=mggeo1->get_mg_face(i);
1868     MG_SURFACE* surf1=face1->get_surface();
1869     int id1=face1->get_id();
1870     if(!face1_conservees.est_dans_la_liste(id1))
1871     {
1872     OT_TENSEUR tns1_surf(4),tns2_surf(4);
1873     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1874     vector<double2> isurf1;
1875     for(int r=0;r<4;r++)
1876     {
1877     isurf1.insert( isurf1.end(), tns1_surf(r,r));
1878     }
1879     for(int j=0;j<nb_face2;j++)
1880     {
1881     MG_FACE* face2=mggeo2->get_mg_face(j);
1882     MG_SURFACE* surf2=face2->get_surface();
1883     int id2=face2->get_id();
1884     CORRESPONDANCE CORRESP_FACE;
1885     OT_VECTEUR_4DD G1=surf1->get_vectorisation().calcule_barycentre(T1);
1886     OT_VECTEUR_4DD G2=surf2->get_vectorisation().calcule_barycentre(T2);
1887     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1888     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1889     vector<double2> isurf2;
1890     for(int r=0;r<4;r++)
1891     {
1892     isurf2.insert( isurf2.end(), tns1_surf(r,r));
1893     }
1894     vector<unsigned int> indx1;
1895     if(tns1_surf.listes_equivalentes(isurf1,isurf2,indx1))
1896     {
1897     if(G1==G2)
1898     {
1899     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,face1);
1900     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,face2);
1901     CORRESP_FACE.eleorigine=face1;
1902     CORRESP_FACE.elemodifie=face2;
1903     Results.ajouter_liste_topologie(CORRESP_FACE);
1904    
1905     }
1906     }
1907     }
1908     }
1909     }
1910    
1911 souaissa 158 identite.vide();
1912     for(int i=0;i<face1_conservees.get_nb();i++)
1913     {
1914     identite.ajouter( face1_conservees.get(i));
1915     identite.ajouter( face2_conservees.get(i));
1916     }
1917     this->affecter_les_couleurs(1);
1918    
1919 souaissa 143 }
1920    
1921 souaissa 158 int VCT_COMPARAISON::surfaces_sont_elles_identiques(MG_FACE* face1,MG_FACE* face2)
1922     {
1923     MG_SURFACE* surf1=face1->get_surface();
1924     MG_SURFACE* surf2=face2->get_surface();
1925     vector<double2> isurf1,isurf2;
1926     vector<unsigned int> indx1;
1927     TPL_LISTE_ENTITE<double> parm1,parm2;
1928     OT_VECTEUR_4DD Dv1,Dv2,axe3;
1929     OT_VECTEUR_4DD VNUL(0.,0.,0.,0.);
1930     double2 ZER=0.;
1931     OT_TENSEUR tm1_surf(4),tm2_surf(4),tns1_surf(4),tns2_surf(4),V1(4),V2(4);
1932     OT_VECTEUR_4DD G1=surf1->get_vectorisation().calcule_barycentre(T1);
1933     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1934     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1935     OT_VECTEUR_4DD G2=surf2->get_vectorisation().calcule_barycentre(T2);
1936     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1937     tm1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
1938     tm2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
1939    
1940     surf1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
1941     surf2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
1942    
1943     for(int r=0;r<4;r++)
1944     {
1945     isurf1.insert( isurf1.end(), tns1_surf(r,r));
1946     isurf2.insert( isurf2.end(), tns2_surf(r,r));
1947     }
1948    
1949     if(surf2->get_type_geometrique(parm2)==MGCo_PLAN)
1950     {
1951     axe3[0]= parm2.get(3);
1952     axe3[1]= parm2.get(4);
1953     axe3[2]= parm2.get(5);
1954     axe3[3]= 0;
1955     G1=face1->get_vectorisation().calcule_barycentre(T1);
1956     G2=face2->get_vectorisation().calcule_barycentre(T2);
1957    
1958     }
1959     if(surf2->get_type_geometrique(parm1)==MGCo_CYLINDRE||surf1->get_type_geometrique(parm2)==MGCo_CONE)
1960     {
1961     axe3[0]= parm2.get(3);
1962     axe3[1]= parm2.get(4);
1963     axe3[2]= parm2.get(5);
1964     axe3[3]= 0;
1965     }
1966     //axe3=surf1->get_vectorisation().get_nouveau_pt(T1,axe3);
1967     double2 d1=axe3[0]*G1[0]+axe3[1]*G1[1]+axe3[2]*G1[3];
1968     double2 d2=axe3[0]*G2[0]+axe3[1]*G2[1]+axe3[2]*G2[3];
1969    
1970     if(tm1_surf.est_til_equivalent(tm2_surf))
1971     {
1972     if (tns1_surf.listes_equivalentes(isurf1,isurf2,indx1))
1973     {
1974     OT_VECTEUR_4DD G1G2= G1-G2;
1975     double2 mm=G1G2*axe3;
1976     if(ZER==mm)
1977     {
1978     return 1;
1979     }
1980     }
1981     }
1982     return 0;
1983     }
1984    
1985 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)
1986 souaissa 143 {
1987 souaissa 153
1988 souaissa 143 OT_VECTEUR_4DD Dv1,Dv2,G1,gf1,gf2,G2;
1989     OT_TENSEUR V1(4),V2(4);
1990 souaissa 153 TPL_LISTE_ENTITE<int> lst1_som_trouve;
1991     TPL_LISTE_ENTITE<int> lst2_som_trouve;
1992     face1_ref->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
1993     G1=face1_ref->get_vectorisation().calcule_barycentre(T1);
1994 souaissa 143
1995 souaissa 153 /*
1996 souaissa 143 for(int r=0;r<4;r++) {
1997     for(int s=0;s<4;s++) {
1998     gf1[r]= gf1[r]+V1(s,r)*G1[s];
1999     }
2000 souaissa 153 } */
2001 souaissa 143
2002 souaissa 153 face2_ref->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
2003     G2=face2_ref->get_vectorisation().calcule_barycentre(T2);
2004     /*
2005 souaissa 143 for(int r=0;r<4;r++) {
2006     for(int s=0;s<4;s++) {
2007     gf2[r]= gf2[r]+V2(s,r)*G2[s];
2008     }
2009 souaissa 153 } */
2010 souaissa 143
2011     int nb_sommet1= mggeo1->get_nb_mg_sommet();
2012     int nb_sommet2= mggeo2->get_nb_mg_sommet();
2013    
2014    
2015 souaissa 153
2016 souaissa 143 for(int i=0;i<nb_sommet1;i++)
2017     {
2018     double xyz1[3];
2019 souaissa 153 OT_VECTEUR_4DD S1,s1, G1G1REF;
2020 souaissa 143 MG_SOMMET *som1=mggeo1->get_mg_sommet(i);
2021     MG_POINT* pt1=som1->get_point();
2022     int som1_id=som1->get_id();
2023     pt1->evaluer(xyz1);
2024     for(int t=0;t<3;t++) s1[t]=xyz1[t];
2025 souaissa 153 G1G1REF=s1-G1;
2026     G1G1REF=face1_ref->get_vectorisation().get_nouveau_pt(T1,G1G1REF);
2027     /*
2028 souaissa 143 for(int r=0;r<4;r++) {
2029     for(int s=0;s<4;s++) {
2030     S1[r]= S1[r]+V1(s,r)*s1[s];
2031     }
2032 souaissa 153 } */
2033 souaissa 143
2034 souaissa 153
2035 souaissa 143 for(int j=0;j<nb_sommet2;j++)
2036     {
2037     double xyz2[3];
2038 souaissa 153 OT_VECTEUR_4DD S2,s2,G2G2REF;
2039 souaissa 143 MG_SOMMET *som2=mggeo2->get_mg_sommet(j);
2040     MG_POINT* pt2=som2->get_point();
2041     int som2_id=som2->get_id();
2042 souaissa 153 if( lst1_som_trouve.est_dans_la_liste(som1_id)) break;
2043    
2044 souaissa 143 pt2->evaluer(xyz2);
2045     for(int t=0;t<3;t++) s2[t]=xyz2[t];
2046 souaissa 153 G2G2REF=s2-G2;
2047     /*
2048 souaissa 143 for(int r=0;r<4;r++) {
2049     for(int s=0;s<4;s++) {
2050     S2[r]= S2[r]+V2(s,r)*s2[s];
2051     }
2052 souaissa 153 } */
2053 souaissa 143
2054 souaissa 153 if (G1G1REF==G2G2REF)
2055 souaissa 143 {
2056 francois 144 Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,som1);
2057     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,som2);
2058 souaissa 143 CORRESPONDANCE CORRESP;
2059     CORRESP.eleorigine=som1;
2060     CORRESP.elemodifie=som2;
2061     Results.ajouter_liste_topologie(CORRESP);
2062 souaissa 153 lst_corrsp_sommets.ajouter(som1_id);
2063     lst_corrsp_sommets.ajouter(som2_id);
2064     lst1_som_trouve.ajouter(som1_id);
2065     lst2_som_trouve.ajouter(som2_id);
2066     }
2067 souaissa 143
2068     }
2069 souaissa 153
2070    
2071    
2072 souaissa 143 }
2073 souaissa 142
2074 souaissa 143
2075 souaissa 153 for(int i=0;i<nb_sommet1;i++)
2076     {
2077     MG_SOMMET *som=mggeo1->get_mg_sommet(i);
2078     int som_id=som->get_id();
2079     if(! lst1_som_trouve.est_dans_la_liste(som_id))
2080     {
2081 souaissa 143
2082 souaissa 153 Results.ajouter_liste_topologie(ORIGINE_DISPARUE,som);
2083 souaissa 143
2084 souaissa 153 }
2085 souaissa 143
2086 souaissa 153 }
2087 souaissa 143
2088 souaissa 153 for(int i=0;i<nb_sommet2;i++)
2089     {
2090     MG_SOMMET *som=mggeo2->get_mg_sommet(i);
2091     int som_id=som->get_id();
2092     if(! lst2_som_trouve.est_dans_la_liste(som_id))
2093     {
2094    
2095     Results.ajouter_liste_topologie(MODIFIE_APPARUE,som);
2096    
2097     }
2098    
2099     }
2100    
2101 souaissa 87 }
2102    
2103    
2104 souaissa 153
2105    
2106    
2107     void VCT_COMPARAISON::get_syteme_daxes_globale()
2108     {
2109    
2110     OT_VECTEUR_4DD Dv1,Dv2,Dw,G1,G2,G1G2;
2111     OT_TENSEUR p(4),q(4),pT,qT;
2112     int nb_face1=mggeo1->get_nb_mg_face();
2113     int nb_face2=mggeo1->get_nb_mg_face();
2114     OT_VECTEUR_4DD VNul(0.,0.,0.,0.);
2115     double2 cof=-1;
2116     int plan=-1;
2117     for(int i=3;i<nb_face1;i++)
2118     {
2119     OT_TENSEUR inertie_face1(4);
2120     vector<double2> iface1;
2121     MG_FACE* face1=mggeo1->get_mg_face(i);
2122     int id_face1=face1->get_id();
2123     face1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,p);
2124     pT=p.transpose();
2125     G1= face1->get_vectorisation().calcule_barycentre(T1);
2126     inertie_face1=face1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
2127     vector<OT_VECTEUR_4DD>& list_points1=face1->get_vectorisation().get_points_controle();
2128     vector<OT_VECTEUR_4DD>& list_vecteurs1=face1->get_vectorisation().get_vecteurs();
2129     OT_VECTEUR_4DD Normal1(0.,0.,0.,0.),N1;
2130     OT_VECTEUR_4DD axe11,axe12,axe13;
2131     int cmpt=0;
2132    
2133     OT_VECTEUR_4DD v11= list_vecteurs1[0];
2134     int nb_vecteur1=list_vecteurs1.size();
2135     for(unsigned int pi=0;pi<nb_vecteur1-1;pi++)
2136     {
2137    
2138     OT_VECTEUR_4DD v2= list_vecteurs1[pi+1];
2139     if(pi==0)
2140     Normal1=v11^v2;
2141     if (pi>0)
2142     N1=v11^v2;
2143     OT_VECTEUR_4DD colineaire= Normal1^N1;
2144     if(colineaire==VNul)
2145     {
2146     cmpt++;
2147     }
2148     }
2149     vector<OT_VECTEUR_4DD> axes1;
2150     if ( cmpt== list_vecteurs1.size()-1)
2151     {
2152     plan=1;
2153     axe11=list_vecteurs1[0];
2154     axe12=Normal1^axe11;
2155     axe13=Normal1;
2156     axes1.insert(axes1.end(),axe11);
2157     axes1.insert(axes1.end(),axe12);
2158     axes1.insert(axes1.end(),axe13);
2159     }
2160    
2161     VCT_OUTILS VOUTIL(4);
2162     OT_MATRICE_3D sys_axes1=VOUTIL.get_system_axes(G1,axes1,list_points1) ;
2163    
2164     for(int r=0;r<4;r++)
2165     {
2166     iface1.insert( iface1.end(), inertie_face1(r,r));
2167     }
2168    
2169     for(int j=4;j<nb_face2;j++)
2170     {
2171     OT_TENSEUR inertie_face2(4);
2172     vector<double2> iface2;
2173     MG_FACE* face2=mggeo2->get_mg_face(j);
2174     int id_face2=face2->get_id();
2175     face2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,q);
2176     G2= face2->get_vectorisation().calcule_barycentre(T2);
2177     qT=q.transpose();
2178     inertie_face2=face2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
2179     vector<OT_VECTEUR_4DD>& list_points2=face2->get_vectorisation().get_points_controle();
2180     vector<OT_VECTEUR_4DD>& list_vecteurs2=face2->get_vectorisation().get_vecteurs();
2181     OT_VECTEUR_4DD Normal2(0.,0.,0.,0.),N1;
2182     OT_VECTEUR_4DD axe21,axe22,axe23;
2183     int cmpt=0;
2184     OT_VECTEUR_4DD v21= list_vecteurs2[0];
2185     int nb_vecteur2=list_vecteurs2.size();
2186     for(unsigned int pj=0;pj<nb_vecteur2-1;pj++)
2187     {
2188     OT_VECTEUR_4DD v2= list_vecteurs2[pj+1];
2189     if(pj==0)
2190     Normal2=v21^v2;
2191     if (pj>0)
2192     N1=v21^v2;
2193     OT_VECTEUR_4DD colineaire= Normal2^N1;
2194     if(colineaire==VNul)
2195     {
2196     cmpt++;
2197     }
2198     }
2199     vector<OT_VECTEUR_4DD> axes2;
2200     if ( cmpt== list_vecteurs2.size()-1)
2201     {
2202     plan=1;
2203     axe21=list_vecteurs2[0];
2204     axe22=Normal2^axe21;
2205     axe23=Normal2;
2206     axes2.insert(axes2.end(),axe21);
2207     axes2.insert(axes2.end(),axe22);
2208     axes2.insert(axes2.end(),axe23);
2209     }
2210    
2211     VCT_OUTILS VOUTIL(4);
2212     OT_MATRICE_3D sys_axes2=VOUTIL.get_system_axes(G2,axes2,list_points2) ;
2213    
2214     OT_MATRICE_3D T= sys_axes2*sys_axes1.transpose();
2215    
2216    
2217    
2218    
2219    
2220     /*
2221     for(int r=0;r<4;r++)
2222     {
2223     iface2.insert( iface2.end(), inertie_face2(r,r));
2224     }
2225     vector<unsigned int> indx1,indx2;
2226     OT_TENSEUR T=q*pT;
2227    
2228     if(inertie_face2.listes_equivalentes(iface1,iface2,indx1))
2229     {
2230    
2231     for(int ii=0;ii<list_points1.size();ii++)
2232     {
2233     OT_VECTEUR_4DD pt1= list_points1[ii];
2234     OT_VECTEUR_4DD pt11;
2235    
2236     for(int r=0;r<4;r++)
2237     {
2238     for(int s=0;s<4;s++)
2239     pt11[r]=pt11[r]+T(r,s)*G1[s];
2240     }
2241    
2242     for(int jj=0;jj<list_points2.size();jj++)
2243     {
2244     OT_VECTEUR_4DD pt2= list_points2[jj];
2245     OT_VECTEUR_4DD pt22;
2246     for(int r=0;r<4;r++)
2247     {
2248     for(int s=0;s<4;s++)
2249     pt22[r]=pt22[r]+T(r,s)*G2[s];
2250     }
2251     if(pt11==G2)
2252     {
2253     int g=0;
2254     }
2255    
2256    
2257     }
2258    
2259    
2260    
2261     }
2262    
2263    
2264     } */
2265    
2266    
2267     }
2268     }
2269    
2270    
2271     }
2272    
2273    
2274    
2275    
2276    
2277 francois 144 std::ostream& operator <<(std::ostream& os,VCT_COMPARAISON& vct_cmp)
2278 souaissa 142 {
2279     vct_cmp.enregistrer(os) ;
2280     return os;
2281     }
2282 souaissa 87
2283    
2284    
2285 souaissa 142
2286    
2287 souaissa 87 void VCT_COMPARAISON::enregistrer(ostream& os)
2288 souaissa 142 {
2289     os<<"COMPARAISON VECTORIELLE DE DEUX GEOMETRIES"<<endl;
2290     int nb_cl=2;
2291     int nb_lg=similarite.get_nb()/2;
2292 souaissa 66 os<<"FACES_PREMIERE_GEOMETRIE : ";
2293     for(int j=0;j<nb_lg;j++)
2294 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+0);
2295 souaissa 66 os<<endl;
2296     os<<"FACES_SECONDE_GEOMETRIE : ";
2297     for(int j=0;j<nb_lg;j++)
2298 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+1);
2299 souaissa 66 os<<endl;
2300    
2301 souaissa 87 //affecter_une_couleur();
2302 souaissa 82
2303    
2304 souaissa 142 }
2305 souaissa 143
2306    
2307    
2308 souaissa 153 int VCT_COMPARAISON::modele_a_change_de_repere()
2309     {
2310     int nb_sommet1= mggeo1->get_nb_mg_sommet();
2311     int nb_sommet2= mggeo2->get_nb_mg_sommet();
2312 souaissa 143
2313 souaissa 153 int trouve=0;
2314     int cmt=0;
2315     for(int i=0;i<nb_sommet1;i++)
2316     {
2317     double xyz1[3];
2318     OT_VECTEUR_4DD S1,s1;
2319     MG_SOMMET *som1=
2320     mggeo1->get_mg_sommet(i);
2321     MG_POINT* pt1=som1->get_point();
2322     int som1_id=som1->get_id();
2323     pt1->evaluer(xyz1);
2324     for(int t=0;t<3;t++) s1[t]=xyz1[t];
2325    
2326    
2327     for(int j=0;j<nb_sommet2;j++)
2328     {
2329     double xyz2[3];
2330     OT_VECTEUR_4DD S2,s2;
2331     MG_SOMMET *som2=mggeo2->get_mg_sommet(j);
2332     MG_POINT* pt2=som2->get_point();
2333     int som2_id=som2->get_id();
2334     pt2->evaluer(xyz2);
2335     for(int t=0;t<3;t++) s2[t]=xyz2[t];
2336    
2337    
2338     if (s1==s2)
2339     {
2340     trouve=1;
2341     break;
2342     }
2343    
2344     }
2345     if (trouve==-1) return trouve;
2346     }
2347    
2348    
2349     return trouve;
2350    
2351     }
2352