ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 159
Committed: Thu Sep 18 15:16:27 2008 UTC (16 years, 7 months ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 93810 byte(s)
Log Message:
misee a jour de 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 159 //if(v1==v2||((D1==VZER||D2==VZER)))
1244     if(courbes_sont_elles_identiques(arete1,arete2))
1245 souaissa 142 {
1246 souaissa 158 if(!arte2_trouvee.est_dans_la_liste(id_art2))
1247     {
1248     aretes_ident.ajouter(j1) ;
1249     aretes_ident.ajouter(id_art1) ;
1250     aretes_ident.ajouter(j2) ;
1251     aretes_ident.ajouter(id_art2) ;
1252     arte1_trouvee.ajouter(id_art1);
1253     arte2_trouvee.ajouter(id_art2);
1254     identique=1;
1255     }
1256 souaissa 142
1257 souaissa 153
1258 souaissa 142 }
1259    
1260     }
1261 souaissa 153 // }
1262 souaissa 142 if(identique>0) break;
1263     if(identique<0)
1264     {
1265     aretes_sim.ajouter(j1) ;
1266     aretes_sim.ajouter(id_art1) ;
1267     aretes_sim.ajouter(j2) ;
1268     aretes_sim.ajouter(id_art2) ;
1269     identique=-1;
1270     }
1271     }
1272     }
1273     } // aretes2
1274    
1275     } //boucle2
1276    
1277 souaissa 153 // }//condition 1 //aretes_identiques
1278 souaissa 142 }
1279    
1280     }
1281     }
1282    
1283     if(nb_aretes==aretes_ident.get_nb()/2) return 1;
1284     else return 0;
1285    
1286     }
1287    
1288 souaissa 153 void VCT_COMPARAISON::identifier_aretes_face_modifiee(MG_FACE* face1,MG_FACE* face2,TPL_LISTE_ENTITE<int>& aretes_identiques,
1289     TPL_LISTE_ENTITE<int>&aretes_simil,TPL_LISTE_ENTITE<int>&lst_corrsp_sommets,TPL_LISTE_ENTITE<int>& aret1_conservees,
1290     TPL_LISTE_ENTITE<int>& aret1_disparues,TPL_LISTE_ENTITE<int>& aret2_conservees ,TPL_LISTE_ENTITE<int>& aret2_nouvelles ,
1291     TPL_LISTE_ENTITE<int>& aret_partielles)
1292 souaissa 142 {
1293    
1294     int nb_boucle1=face1->get_nb_mg_boucle();
1295     int nb_boucle2=face2->get_nb_mg_boucle();
1296    
1297    
1298     int cmpt_arete=0;
1299    
1300     TPL_LISTE_ENTITE<int> boucle_face1;
1301     TPL_LISTE_ENTITE<int> boucle_face2;
1302    
1303     TPL_LISTE_ENTITE<int> aretes_ident_face1;
1304     TPL_LISTE_ENTITE<int> aretes_ident_face2;
1305     TPL_LISTE_ENTITE<int> aretes_face1;
1306     TPL_LISTE_ENTITE<int> aretes_face2;
1307     TPL_LISTE_ENTITE<int> aretes_dif_face2;
1308     TPL_LISTE_ENTITE<int> aretes_sim_face1;
1309     TPL_LISTE_ENTITE<int> aretes_sim_face2;
1310 souaissa 153 TPL_LISTE_ENTITE<int> lst_sommet1;
1311     TPL_LISTE_ENTITE<int> lst_sommet2;
1312 souaissa 142
1313 souaissa 153 for(int b=0;b<lst_corrsp_sommets.get_nb()/2;b++)
1314     {
1315     lst_sommet1.ajouter( lst_corrsp_sommets.get(2*b));
1316     lst_sommet2.ajouter( lst_corrsp_sommets.get(2*b+1));
1317     }
1318    
1319 souaissa 142 for(int b=0;b<aretes_identiques.get_nb()/4;b++)
1320 souaissa 87 {
1321 souaissa 153 int b1= aretes_identiques.get(4*b) ;
1322     int b2= aretes_identiques.get(4*b+2) ;
1323     int art1= aretes_identiques.get(4*b+1);
1324     int art2= aretes_identiques.get(4*b+3);
1325 souaissa 142 boucle_face1.ajouter( aretes_identiques.get(4*b));
1326     boucle_face2.ajouter( aretes_identiques.get(4*b+2));
1327     aretes_ident_face1.ajouter(aretes_identiques.get(4*b+1));
1328     aretes_ident_face2.ajouter(aretes_identiques.get(4*b+3));
1329 souaissa 158 aret1_conservees.ajouter(art1);
1330     aret2_conservees.ajouter(art2);
1331    
1332 souaissa 142 }
1333 souaissa 158
1334    
1335     for(int j1=0;j1<nb_boucle1;j1++)
1336     {
1337     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1338     int nbarete1 = Boucle1->get_nb_mg_coarete();
1339    
1340     for (int w1=0; w1<nbarete1;w1++)
1341     {
1342     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1343     MG_ARETE* arete1 = coArete1->get_arete();
1344     int id_art1=arete1->get_id();
1345     if(!aretes_ident_face1.est_dans_la_liste(id_art1))
1346     {
1347     aret1_disparues.ajouter(id_art1);
1348     }
1349     }
1350     }
1351    
1352     for(int j2=0;j2<nb_boucle2;j2++)
1353     {
1354     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1355     int nbarete2 = Boucle2->get_nb_mg_coarete();
1356     for (int w2=0; w2<nbarete2;w2++)
1357     {
1358     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1359     MG_ARETE* arete2 = coArete2->get_arete();
1360     int id_art2=arete2->get_id();
1361     if(!aretes_ident_face2.est_dans_la_liste(id_art2))
1362     {
1363     aret2_nouvelles.ajouter(id_art2);
1364     }
1365    
1366     }
1367     }
1368     /*
1369 souaissa 142 for(int b=0;b<aretes_simil.get_nb()/4;b++)
1370     {
1371     aretes_sim_face1.ajouter(aretes_simil.get(4*b+1));
1372     aretes_sim_face2.ajouter(aretes_simil.get(4*b+3));
1373     }
1374    
1375 souaissa 153 MG_FACE* Face_ref1=mggeo1->get_mg_faceid(face_ref1) ;
1376     MG_FACE* Face_ref2=mggeo2->get_mg_faceid(face_ref2) ;
1377    
1378 souaissa 142 for(int j1=0;j1<nb_boucle1;j1++)
1379     {
1380     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1381     int nbarete1 = Boucle1->get_nb_mg_coarete();
1382 souaissa 153 TPL_LISTE_ENTITE<int> lst_aret1_modif;
1383     TPL_LISTE_ENTITE<int> lst_aret2_modif;
1384     TPL_LISTE_ENTITE<int> lst_art1_partiel;
1385     TPL_LISTE_ENTITE<int> lst_art2_partiel;
1386 souaissa 142 int compt1=0;
1387     int boucle;
1388     int start_boucle,end_boucle;
1389     int cmpt=0;
1390     TPL_LISTE_ENTITE<int> arete_boucle1;
1391     TPL_LISTE_ENTITE<int> arete_boucle2;
1392    
1393     if(boucle_face1.est_dans_la_liste(j1))
1394     {
1395     for(int k=0;k<boucle_face1.get_nb();k++)
1396     {
1397     if (j1==boucle_face1.get(k))
1398     {
1399 souaissa 153 int art1=aretes_ident_face1.get(k);
1400     int art2= aretes_ident_face2.get(k);
1401 souaissa 142 arete_boucle1.ajouter(aretes_ident_face1.get(k));
1402     arete_boucle2.ajouter(aretes_ident_face2.get(k));
1403     boucle=boucle_face2.get(k);
1404     }
1405     }
1406     }
1407    
1408 souaissa 153 for (int w1=0; w1<nbarete1;w1++)
1409 souaissa 87 {
1410 souaissa 142
1411 souaissa 153 MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1412     MG_ARETE* arete1 = coArete1->get_arete();
1413     int id_art=arete1->get_id();
1414     int trouv=-1;
1415     for (int w1=0; w1<arete_boucle1.get_nb();w1++)
1416     {
1417     int id_art1=arete_boucle1.get(w1);
1418     int id_art2=arete_boucle2.get(w1);
1419    
1420     if(id_art1==id_art)
1421 souaissa 142 {
1422 souaissa 153 aret1_conservees.ajouter(id_art1);
1423     aret2_conservees.ajouter(id_art2);
1424     trouv=1;
1425     break;
1426 souaissa 142 }
1427 souaissa 153 }
1428     if(trouv<0)
1429 souaissa 142 {
1430 souaissa 153 //if(!aretes_sim_face1.est_dans_la_liste(id_art1))
1431     aret1_disparues.ajouter(id_art);
1432     //lst_aret1_modif.ajouter(id_art1);
1433 souaissa 142 }
1434 souaissa 153
1435     }
1436 souaissa 142
1437 souaissa 153 // for(int j2=0;j2<nb_boucle2;j2++)
1438     // {
1439     // MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1440     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(boucle);
1441 souaissa 142 int nbarete2 = Boucle2->get_nb_mg_coarete();
1442    
1443     for (int w2=0; w2<nbarete2;w2++)
1444 souaissa 153 {
1445 souaissa 142 MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1446     MG_ARETE* arete2 = coArete2->get_arete();
1447     int id_art2=arete2->get_id();
1448     if(!arete_boucle2.est_dans_la_liste(id_art2))
1449     {
1450     aret2_nouvelles.ajouter(id_art2);
1451 souaissa 153 //lst_aret2_modif.ajouter(id_art2);
1452     //for(int is=0;is<aretes_sim_face2.get_nb();is++)
1453     //{
1454     //if(aretes_sim_face2.get(is)==id_art2)
1455     // {
1456     // aret2_partielles.ajouter(id_art2);
1457     // }
1458     // }
1459 souaissa 142
1460     }
1461 souaissa 153 // else
1462    
1463     // aret2_conservees.ajouter(id_art2);
1464     }
1465    
1466     //verifier parmi les deux listes des aretes modifiees
1467     //celles qui sont nouvelles ou partiellements modifees
1468     /*
1469     for(int m1=0;m1<lst_aret1_modif.get_nb();m1++)
1470 souaissa 142 {
1471 souaissa 153 int id_art1=lst_aret1_modif.get(m1);
1472     MG_ARETE* art1=mggeo1->get_mg_areteid(id_art1);
1473 souaissa 142
1474 souaissa 153 OT_TENSEUR tm1_art(4),tm1_crb(4);
1475     MG_COURBE* courbe1=art1->get_courbe();
1476     tm1_art=art1->get_vectorisation().calcule_tenseur_metrique();
1477     tm1_crb=courbe1->get_vectorisation().calcule_tenseur_metrique();
1478 souaissa 142
1479 souaissa 153
1480     MG_COSOMMET* csomt1_art1= art1->get_cosommet1();
1481     MG_COSOMMET* csomt2_art1= art1->get_cosommet2();
1482     MG_SOMMET* som1_art1= csomt1_art1->get_sommet();
1483     MG_SOMMET* som2_art1= csomt2_art1->get_sommet();
1484     int id_som11= som1_art1->get_id();
1485     int id_som21= som2_art1->get_id();
1486     int s11_ou_s21;
1487     if(lst_sommet1.est_dans_la_liste(id_som11)) s11_ou_s21=1;
1488     if(lst_sommet1.est_dans_la_liste(id_som21)) s11_ou_s21=2;
1489 souaissa 142
1490 souaissa 153 if(lst_sommet1.est_dans_la_liste(id_som11)||lst_sommet1.est_dans_la_liste(id_som21))
1491     {
1492     for(int m2=0;m2<lst_aret2_modif.get_nb();m2++)
1493     {
1494     int id_art2=lst_aret2_modif.get(m2);
1495     MG_ARETE* art2=mggeo2->get_mg_areteid(id_art2);
1496     OT_TENSEUR tm2_art(4),tm2_crb(4);
1497     MG_COURBE* courbe2=art2->get_courbe();
1498     tm2_art=art1->get_vectorisation().calcule_tenseur_metrique();
1499     tm2_crb=courbe2->get_vectorisation().calcule_tenseur_metrique();
1500    
1501     MG_COSOMMET* csomt1_art2= art2->get_cosommet1();
1502     MG_COSOMMET* csomt2_art2= art2->get_cosommet2();
1503     MG_SOMMET* som1_art2= csomt1_art2->get_sommet();
1504     MG_SOMMET* som2_art2= csomt2_art2->get_sommet();
1505     int id_som12= som1_art2->get_id();
1506     int id_som22= som2_art2->get_id();
1507     int s12_ou_s22;
1508     if(lst_sommet2.est_dans_la_liste(id_som12)) s12_ou_s22=1;
1509     if(lst_sommet2.est_dans_la_liste(id_som22)) s12_ou_s22=2;
1510    
1511     //if(lst_sommet2.est_dans_la_liste(id_som12)||lst_sommet2.est_dans_la_liste(id_som22))
1512     // {
1513     if(tm1_art.est_til_equivalent(tm2_art)&&tm1_crb.est_til_equivalent(tm2_crb))
1514     {
1515     aret_partielles.ajouter(id_art1);
1516     aret_partielles.ajouter(id_art2);
1517     lst_art1_partiel.ajouter(id_art1);
1518     lst_art2_partiel.ajouter(id_art2);
1519     if (s11_ou_s21==1&&s12_ou_s22==1)
1520     {
1521     aret_partielles.ajouter(id_som11);
1522     }
1523     if (s11_ou_s21==2&&s12_ou_s22==1)
1524     {
1525     aret_partielles.ajouter(id_som21);
1526     }
1527     if (s12_ou_s22==1&&s12_ou_s22==2)
1528     {
1529     aret_partielles.ajouter(id_som12);
1530     }
1531     if (s12_ou_s22==2&&s12_ou_s22==2)
1532     {
1533     aret_partielles.ajouter(id_som22);
1534     }
1535    
1536     }
1537     // }
1538    
1539     }
1540     }
1541     } // for m1=
1542    
1543    
1544    
1545     for(int m1=0;m1<lst_aret1_modif.get_nb();m1++)
1546     {
1547     int id_art1=lst_aret1_modif.get(m1);
1548     if( !lst_art1_partiel.est_dans_la_liste(id_art1))
1549     aret1_disparues.ajouter(id_art1);
1550     }
1551     for(int m2=0;m2<lst_aret1_modif.get_nb();m2++)
1552     {
1553     int id_art2=lst_aret2_modif.get(m2);
1554     if( !lst_art2_partiel.est_dans_la_liste(id_art2))
1555     aret2_nouvelles.ajouter(id_art2);
1556 souaissa 158 } /
1557 souaissa 153
1558 souaissa 142 } //boucle_face1
1559    
1560    
1561 souaissa 153 for(int j2=0;j2<nb_boucle2;j2++)
1562     {
1563     MG_BOUCLE* Boucle2 = face2->get_mg_boucle(j2);
1564 souaissa 142
1565 souaissa 153 if (!boucle_face2.est_dans_la_liste(j2))
1566     {
1567     int nbarete2 = Boucle2->get_nb_mg_coarete();
1568     for (int w2=0; w2<nbarete2;w2++)
1569     {
1570     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1571     MG_ARETE* arete2 = coArete2->get_arete();
1572     int id_art2=arete2->get_id();
1573     aret2_nouvelles.ajouter(id_art2);
1574 souaissa 142
1575 souaissa 153 }
1576     }
1577     }//boucle j2
1578 souaissa 158 */
1579 souaissa 142
1580    
1581 souaissa 153 }
1582    
1583    
1584    
1585 souaissa 142 void VCT_COMPARAISON::identifier_les_modifications_appliquees(VCT_COMPARAISON_RESULTAT& Results)
1586     {
1587    
1588 souaissa 143 TPL_LISTE_ENTITE<int> face1_conservees;
1589     TPL_LISTE_ENTITE<int> face2_conservees;
1590     TPL_LISTE_ENTITE<int> faces_nouvelles;
1591 souaissa 142
1592 souaissa 143 TPL_LISTE_ENTITE<int> aret_ident;
1593     TPL_LISTE_ENTITE<int> aret_modif;
1594     int nb_face1=mggeo1->get_nb_mg_face();
1595     int nb_face2=mggeo2->get_nb_mg_face();
1596     TPL_LISTE_ENTITE<int> lst_face1,lst_face2,lst_facloc1,lst_facloc2,dif1,dif2;
1597    
1598 souaissa 153
1599 souaissa 158 TPL_LISTE_ENTITE<int> faces1_partiellement_modf;
1600     TPL_LISTE_ENTITE<int> faces2_partiellement_modf;
1601 souaissa 153 TPL_LISTE_ENTITE<int> Aret1_conservees;
1602     TPL_LISTE_ENTITE<int> Aret1_disparues;
1603     TPL_LISTE_ENTITE<int> Aret2_conservees ;
1604     TPL_LISTE_ENTITE<int> Aret2_nouvelles ;
1605     TPL_LISTE_ENTITE<int> Aret2_partielles ;
1606     TPL_LISTE_ENTITE<int> face1_disparues;
1607 souaissa 142 for(int i=0;i<nb_face1;i++)
1608     {
1609     OT_VECTEUR_4DD g1,G1;
1610     MG_FACE* face1=mggeo1->get_mg_face(i);
1611     int id1=face1->get_id();
1612     lst_face1.ajouter(id1);
1613 souaissa 87 }
1614 souaissa 142
1615     for(int i=0;i<nb_face2;i++)
1616     {
1617     OT_VECTEUR_4DD g1,G1;
1618     MG_FACE* face2=mggeo2->get_mg_face(i);
1619     int id2=face2->get_id();
1620     lst_face2.ajouter(id2);
1621     }
1622    
1623 souaissa 153
1624    
1625 souaissa 143 MG_FACE* Face_ref1=mggeo1->get_mg_faceid(face_ref1) ;
1626     MG_FACE* Face_ref2=mggeo2->get_mg_faceid(face_ref2) ;
1627 souaissa 145 int nb_faces_identique=identite.get_nb()/2;
1628     for(int i=0;i<nb_faces_identique;i++)
1629 souaissa 142 {
1630     CORRESPONDANCE CORRESP;
1631     int face1_id=identite.get(2*i);
1632     int face2_id=identite.get(2*i+1);
1633     MG_FACE* Face1=mggeo1->get_mg_faceid(face1_id);
1634     MG_FACE* Face2=mggeo2->get_mg_faceid(face2_id);
1635     face1_conservees.ajouter(face1_id);
1636     face2_conservees.ajouter(face2_id);
1637 souaissa 145 Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,Face1);
1638     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,Face2);
1639 souaissa 142 CORRESP.eleorigine=Face1;
1640     CORRESP.elemodifie=Face2;
1641     Results.ajouter_liste_topologie(CORRESP);
1642 souaissa 143
1643     //----------------------------------------
1644     TPL_LISTE_ENTITE<int> aretes_identiques;
1645     TPL_LISTE_ENTITE<int> aretes_similaires;
1646    
1647     //------------------------------------------
1648     this->comparer_aretes_faces(Face_ref1,Face_ref2,Face1,Face2,aretes_identiques,aretes_similaires);
1649    
1650     int nb_aretes_trouvees=aretes_identiques.get_nb()/4;
1651    
1652     if(nb_aretes_trouvees)
1653 souaissa 153 {
1654     CORRESPONDANCE corsp;
1655     for(int i1=0;i1<nb_aretes_trouvees;i1++)
1656     {
1657     int art1_id=aretes_identiques.get(4*i1+1);
1658     MG_ARETE*art1_cons=mggeo1->get_mg_areteid(art1_id);
1659     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,art1_cons);
1660     int art2_id=aretes_identiques.get(4*i1+3);
1661     MG_ARETE*art2_cons=mggeo2->get_mg_areteid(art2_id);
1662     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,art2_cons);
1663 souaissa 143
1664 souaissa 153 corsp.eleorigine=art1_cons;
1665     corsp.elemodifie=art2_cons;
1666     Results.ajouter_liste_topologie(corsp);
1667     }
1668     }
1669 souaissa 143
1670    
1671 souaissa 142 }
1672    
1673 souaissa 153 TPL_LISTE_ENTITE<int> lst_corrsp_sommets;
1674     this->identifier_les_sommets(Face_ref1,Face_ref2,lst_corrsp_sommets,Results);
1675 souaissa 143
1676    
1677     for(int t=0;t<lst_face1.get_nb();t++)
1678     {
1679     if(!face1_conservees.est_dans_la_liste(lst_face1.get(t)) )
1680 souaissa 142 dif1.ajouter(lst_face1.get(t));
1681 souaissa 143 }
1682     for(int it=0;it<lst_face2.get_nb();it++)
1683     {
1684     if(!face2_conservees.est_dans_la_liste(lst_face2.get(it)))
1685 souaissa 142 dif2.ajouter(lst_face2.get(it));
1686 souaissa 143 }
1687 souaissa 87
1688    
1689 souaissa 142 for(int i=0;i<dif1.get_nb();i++)
1690     {
1691     int Num1=dif1.get(i);
1692     MG_FACE* face1=mggeo1->get_mg_faceid(Num1);
1693 souaissa 153 MG_SURFACE* surf1=face1->get_surface();
1694 souaissa 158 OT_VECTEUR_4DD G1=face1->get_vectorisation().calcule_barycentre(T1);
1695 souaissa 153 G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1696 souaissa 142 for(int j=0;j<dif2.get_nb();j++)
1697     {
1698     int Num2=dif2.get(j);
1699     TPL_LISTE_ENTITE<int> aretes_identiques;
1700     TPL_LISTE_ENTITE<int> aretes_similaires;
1701     TPL_LISTE_ENTITE<int> aretes_conservees;
1702     TPL_LISTE_ENTITE<int> nouvelles_aretes ;
1703     TPL_LISTE_ENTITE<int> aret1_conservees;
1704     TPL_LISTE_ENTITE<int> aret1_disparues;
1705     TPL_LISTE_ENTITE<int> aret2_conservees ;
1706     TPL_LISTE_ENTITE<int> aret2_nouvelles ;
1707     TPL_LISTE_ENTITE<int> aret2_partielles ;
1708 souaissa 87
1709 souaissa 142 MG_FACE* face2=mggeo2->get_mg_faceid(Num2);
1710 souaissa 153 MG_SURFACE* surf2=face2->get_surface();
1711 souaissa 158 OT_VECTEUR_4DD G2=face2->get_vectorisation().calcule_barycentre(T2);
1712 souaissa 159 // if(!faces1_partiellement_modf.est_dans_la_liste(Num1))
1713     // {
1714 souaissa 145
1715 souaissa 158 if(surfaces_sont_elles_identiques(face1,face2)) //G1==G2
1716     {
1717 souaissa 153 comparer_aretes_faces(Face_ref1,Face_ref2,face1,face2,aretes_identiques,aretes_similaires);
1718     int nb_aretes_trouvees=aretes_identiques.get_nb()/2;
1719     if(nb_aretes_trouvees)
1720     identifier_aretes_face_modifiee(face1,face2,aretes_identiques,aretes_similaires,lst_corrsp_sommets,aret1_conservees,aret1_disparues,aret2_conservees ,aret2_nouvelles ,aret2_partielles);
1721     int id_face2=face2->get_id();
1722 souaissa 158
1723     if(nb_aretes_trouvees)
1724     {
1725 souaissa 159 // if (!face2_conservees.est_dans_la_liste(Num2))
1726     // {
1727 souaissa 153 CORRESPONDANCE CORRESP_FACE;
1728     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,face1);
1729     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,face2);
1730     CORRESP_FACE.eleorigine=face1;
1731     CORRESP_FACE.elemodifie=face2;
1732     Results.ajouter_liste_topologie(CORRESP_FACE);
1733     face1_conservees.ajouter(Num1);
1734     face2_conservees.ajouter(Num2);
1735 souaissa 143
1736 souaissa 153 for(int i1=0;i1<aret1_conservees.get_nb();i1++)
1737     {
1738     int art1_id=aret1_conservees.get(i1);
1739     Aret1_conservees.ajouter(art1_id);
1740     MG_ARETE*art1_cons=mggeo1->get_mg_areteid(art1_id);
1741     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,art1_cons);
1742     int art2_id= aret2_conservees.get(i1) ;
1743     Aret2_conservees.ajouter(art2_id);
1744     MG_ARETE*art2_cons=mggeo2->get_mg_areteid(art2_id);
1745     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,art2_cons);
1746     CORRESPONDANCE CORRESP;
1747     CORRESP.eleorigine=art1_cons;
1748     CORRESP.elemodifie=art2_cons;
1749     Results.ajouter_liste_topologie(CORRESP);
1750     }
1751 souaissa 142
1752 souaissa 153 for(int i1=0;i1<aret1_disparues.get_nb();i1++)
1753     {
1754     int art_dsp=aret1_disparues.get(i1) ;
1755     Aret1_disparues.ajouter(art_dsp);
1756     //MG_ARETE*art_disp=mggeo1->get_mg_areteid(art_dsp);
1757     //Results.ajouter_liste_topologie(ORIGINE_DISPARUE,art_disp);
1758     }
1759 souaissa 142
1760 souaissa 153 for(int i1=0;i1<aret2_nouvelles.get_nb();i1++)
1761     {
1762     int art_nv= aret2_nouvelles.get(i1) ;
1763     Aret2_nouvelles.ajouter(art_nv);
1764     //MG_ARETE*art_app=mggeo2->get_mg_areteid(art_nv);
1765     //Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1766     }
1767     //for(int i1=0;i1<aret2_partielles.get_nb()/2;i1++){
1768     // int art1_prt=aret2_partielles.get(2*i1);
1769     // int art2_prt=aret2_partielles.get(2*i1+1);
1770    
1771     //il faut metttre les points des sous artes avec leurs correspondances;
1772    
1773     //Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1774    
1775     // Aret2_partielles.ajouter(art1_prt);
1776     // }
1777 souaissa 158 faces1_partiellement_modf.ajouter(Num1);
1778     faces2_partiellement_modf.ajouter(Num2);
1779 souaissa 159 // }//verid
1780 souaissa 158 }// if()nb_aretes_trouvees
1781 souaissa 153
1782 souaissa 158 } //if (G1==G2)
1783 souaissa 159 // }
1784 souaissa 153 }
1785     }
1786    
1787    
1788    
1789    
1790    
1791     for(int i=0;i<Aret2_nouvelles.get_nb();i++)
1792     {
1793     int art_nouv=Aret2_nouvelles.get(i);
1794     if(! Aret2_conservees.est_dans_la_liste(Aret2_nouvelles.get(i)))
1795     {
1796     MG_ARETE*art_app=mggeo2->get_mg_areteid(art_nouv);
1797     Results.ajouter_liste_topologie(MODIFIE_APPARUE,art_app);
1798     }
1799     }
1800    
1801     for(int i=0;i<Aret1_disparues.get_nb();i++)
1802     {
1803     int art_nouv=Aret1_disparues.get(i);
1804     if(! Aret1_conservees.est_dans_la_liste(Aret1_disparues.get(i)))
1805     {
1806     MG_ARETE*art_disp=mggeo1->get_mg_areteid(art_nouv);
1807     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,art_disp);
1808     }
1809 souaissa 142 }
1810    
1811 souaissa 153
1812 souaissa 142 for(int j=0;j<dif2.get_nb();j++)
1813     {
1814 souaissa 158 if(!face2_conservees.est_dans_la_liste(dif2.get(j)))
1815 souaissa 142 {
1816     int nouv_face=dif2.get(j);
1817     faces_nouvelles.ajouter(nouv_face);
1818     MG_FACE* Face_Nouvelle=mggeo2->get_mg_faceid(nouv_face);
1819 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,Face_Nouvelle);
1820 souaissa 143 int nb_boucle2=Face_Nouvelle->get_nb_mg_boucle();
1821    
1822     for(int j=0;j<nb_boucle2;j++)
1823     {
1824     MG_BOUCLE* Boucle2 = Face_Nouvelle->get_mg_boucle(j);
1825     int nbarete2 = Boucle2->get_nb_mg_coarete();
1826     for(int w2=0;w2<nbarete2;w2++)
1827     {
1828     MG_COARETE* coArete2 = Boucle2->get_mg_coarete(w2);
1829     MG_ARETE* arete_nouvelle = coArete2->get_arete();
1830 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,arete_nouvelle);
1831 souaissa 143 MG_COSOMMET* cosommt1= arete_nouvelle->get_cosommet1();
1832     MG_COSOMMET* cosommt2= arete_nouvelle->get_cosommet2();
1833     MG_SOMMET* nouveau_sommet1= cosommt1->get_sommet();
1834     MG_SOMMET* nouveau_sommet2= cosommt2->get_sommet();
1835 souaissa 145 Results.ajouter_liste_topologie(MODIFIE_APPARUE,nouveau_sommet1);
1836     Results.ajouter_liste_topologie(MODIFIE_APPARUE,nouveau_sommet2);
1837 souaissa 143 }
1838     }
1839     }
1840     }
1841    
1842 souaissa 153 for(int i1=0;i1<nb_face1;i1++)
1843     {
1844     MG_FACE*face1=mggeo1->get_mg_face(i1);
1845     int face1_id=face1->get_id();
1846     if(!face1_conservees.est_dans_la_liste(face1_id))
1847     {
1848     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,face1);
1849     int nb_boucle1=face1->get_nb_mg_boucle();
1850     for(int j1=0;j1<nb_boucle1;j1++)
1851     {
1852     MG_BOUCLE* Boucle1 = face1->get_mg_boucle(j1);
1853     int nbarete1 = Boucle1->get_nb_mg_coarete();
1854     for (int w1 =0; w1<nbarete1;w1++)
1855     {
1856     MG_COARETE* coArete1 = Boucle1->get_mg_coarete(w1);
1857     MG_ARETE* arete1 = coArete1->get_arete();
1858     int id_art1=arete1->get_id();
1859     Results.ajouter_liste_topologie(ORIGINE_DISPARUE,arete1);
1860 souaissa 143
1861 souaissa 153 }
1862     }
1863     }
1864     }
1865 souaissa 143
1866 souaissa 153 for(int i=0;i<nb_face1;i++)
1867     {
1868     MG_FACE* face1=mggeo1->get_mg_face(i);
1869     MG_SURFACE* surf1=face1->get_surface();
1870     int id1=face1->get_id();
1871     if(!face1_conservees.est_dans_la_liste(id1))
1872     {
1873     OT_TENSEUR tns1_surf(4),tns2_surf(4);
1874     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1875     vector<double2> isurf1;
1876     for(int r=0;r<4;r++)
1877     {
1878     isurf1.insert( isurf1.end(), tns1_surf(r,r));
1879     }
1880     for(int j=0;j<nb_face2;j++)
1881     {
1882     MG_FACE* face2=mggeo2->get_mg_face(j);
1883     MG_SURFACE* surf2=face2->get_surface();
1884     int id2=face2->get_id();
1885     CORRESPONDANCE CORRESP_FACE;
1886     OT_VECTEUR_4DD G1=surf1->get_vectorisation().calcule_barycentre(T1);
1887     OT_VECTEUR_4DD G2=surf2->get_vectorisation().calcule_barycentre(T2);
1888     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1889     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1890     vector<double2> isurf2;
1891     for(int r=0;r<4;r++)
1892     {
1893     isurf2.insert( isurf2.end(), tns1_surf(r,r));
1894     }
1895     vector<unsigned int> indx1;
1896     if(tns1_surf.listes_equivalentes(isurf1,isurf2,indx1))
1897     {
1898     if(G1==G2)
1899     {
1900     Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,face1);
1901     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,face2);
1902     CORRESP_FACE.eleorigine=face1;
1903     CORRESP_FACE.elemodifie=face2;
1904     Results.ajouter_liste_topologie(CORRESP_FACE);
1905    
1906     }
1907     }
1908     }
1909     }
1910     }
1911    
1912 souaissa 158 identite.vide();
1913     for(int i=0;i<face1_conservees.get_nb();i++)
1914     {
1915     identite.ajouter( face1_conservees.get(i));
1916     identite.ajouter( face2_conservees.get(i));
1917     }
1918     this->affecter_les_couleurs(1);
1919    
1920 souaissa 143 }
1921    
1922 souaissa 158 int VCT_COMPARAISON::surfaces_sont_elles_identiques(MG_FACE* face1,MG_FACE* face2)
1923     {
1924     MG_SURFACE* surf1=face1->get_surface();
1925     MG_SURFACE* surf2=face2->get_surface();
1926     vector<double2> isurf1,isurf2;
1927     vector<unsigned int> indx1;
1928     TPL_LISTE_ENTITE<double> parm1,parm2;
1929     OT_VECTEUR_4DD Dv1,Dv2,axe3;
1930     OT_VECTEUR_4DD VNUL(0.,0.,0.,0.);
1931     double2 ZER=0.;
1932     OT_TENSEUR tm1_surf(4),tm2_surf(4),tns1_surf(4),tns2_surf(4),V1(4),V2(4);
1933     OT_VECTEUR_4DD G1=surf1->get_vectorisation().calcule_barycentre(T1);
1934     G1=surf1->get_vectorisation().get_nouveau_pt(T1,G1);
1935     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
1936     OT_VECTEUR_4DD G2=surf2->get_vectorisation().calcule_barycentre(T2);
1937     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
1938     tm1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
1939     tm2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
1940    
1941     surf1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
1942     surf2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
1943    
1944     for(int r=0;r<4;r++)
1945     {
1946     isurf1.insert( isurf1.end(), tns1_surf(r,r));
1947     isurf2.insert( isurf2.end(), tns2_surf(r,r));
1948     }
1949    
1950     if(surf2->get_type_geometrique(parm2)==MGCo_PLAN)
1951     {
1952     axe3[0]= parm2.get(3);
1953     axe3[1]= parm2.get(4);
1954     axe3[2]= parm2.get(5);
1955     axe3[3]= 0;
1956     G1=face1->get_vectorisation().calcule_barycentre(T1);
1957     G2=face2->get_vectorisation().calcule_barycentre(T2);
1958    
1959     }
1960 souaissa 159 if(surf2->get_type_geometrique(parm1)==MGCo_CYLINDRE||surf2->get_type_geometrique(parm2)==MGCo_CONE)
1961 souaissa 158 {
1962     axe3[0]= parm2.get(3);
1963     axe3[1]= parm2.get(4);
1964     axe3[2]= parm2.get(5);
1965     axe3[3]= 0;
1966     }
1967     //axe3=surf1->get_vectorisation().get_nouveau_pt(T1,axe3);
1968     double2 d1=axe3[0]*G1[0]+axe3[1]*G1[1]+axe3[2]*G1[3];
1969     double2 d2=axe3[0]*G2[0]+axe3[1]*G2[1]+axe3[2]*G2[3];
1970    
1971     if(tm1_surf.est_til_equivalent(tm2_surf))
1972     {
1973     if (tns1_surf.listes_equivalentes(isurf1,isurf2,indx1))
1974     {
1975     OT_VECTEUR_4DD G1G2= G1-G2;
1976     double2 mm=G1G2*axe3;
1977     if(ZER==mm)
1978     {
1979     return 1;
1980     }
1981     }
1982     }
1983     return 0;
1984     }
1985    
1986 souaissa 159
1987     int VCT_COMPARAISON::courbes_sont_elles_identiques(MG_ARETE* arete1,MG_ARETE* arete2)
1988     {
1989     MG_COURBE* courb1=arete1->get_courbe();
1990     MG_COURBE* courb2=arete2->get_courbe();
1991     vector<double2> icourb1,icourb2;
1992     vector<unsigned int> indx1;
1993     TPL_LISTE_ENTITE<double> parm1,parm2;
1994     OT_VECTEUR_4DD Dv1,Dv2,axe3;
1995     OT_VECTEUR_4DD VNUL(0.,0.,0.,0.);
1996     double2 ZER=0.;
1997     OT_TENSEUR tm1_surf(4),tm2_surf(4),tns1_surf(4),tns2_surf(4),V1(4),V2(4);
1998     OT_VECTEUR_4DD G1=courb1->get_vectorisation().calcule_barycentre(T1);
1999     G1=courb1->get_vectorisation().get_nouveau_pt(T1,G1);
2000     tns1_surf=courb1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
2001     OT_VECTEUR_4DD G2=courb2->get_vectorisation().calcule_barycentre(T2);
2002     tns2_surf=courb2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
2003     tm1_surf=courb1->get_vectorisation().calcule_tenseur_metrique();
2004     tm2_surf=courb2->get_vectorisation().calcule_tenseur_metrique();
2005    
2006     courb1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
2007     courb2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
2008    
2009     for(int r=0;r<4;r++)
2010     {
2011     icourb1.insert( icourb1.end(), tns1_surf(r,r));
2012     icourb2.insert( icourb2.end(), tns2_surf(r,r));
2013     }
2014    
2015     if(courb2->get_type_geometrique(parm2)==MGCo_LINE)
2016     {
2017     axe3[0]= parm2.get(3);
2018     axe3[1]= parm2.get(4);
2019     axe3[2]= parm2.get(5);
2020     axe3[3]= 0;
2021     G1=arete1->get_vectorisation().calcule_barycentre(T1);
2022     G2=arete2->get_vectorisation().calcule_barycentre(T2);
2023    
2024     }
2025     if(courb2->get_type_geometrique(parm1)==MGCo_CIRCLE||courb2->get_type_geometrique(parm2)==MGCo_ELLIPSE)
2026     {
2027     axe3[0]= parm2.get(3);
2028     axe3[1]= parm2.get(4);
2029     axe3[2]= parm2.get(5);
2030     axe3[3]= 0;
2031     }
2032    
2033     if(tm1_surf.est_til_equivalent(tm2_surf))
2034     {
2035     if (tns1_surf.listes_equivalentes(icourb1,icourb2,indx1))
2036     {
2037     OT_VECTEUR_4DD G1G2= G1-G2;
2038     OT_VECTEUR_4DD mm=G1G2^axe3;
2039     if(VNUL==mm)
2040     {
2041     return 1;
2042     }
2043     }
2044     }
2045     return 0;
2046    
2047    
2048    
2049    
2050     }
2051    
2052    
2053    
2054    
2055    
2056    
2057 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)
2058 souaissa 143 {
2059 souaissa 153
2060 souaissa 143 OT_VECTEUR_4DD Dv1,Dv2,G1,gf1,gf2,G2;
2061     OT_TENSEUR V1(4),V2(4);
2062 souaissa 153 TPL_LISTE_ENTITE<int> lst1_som_trouve;
2063     TPL_LISTE_ENTITE<int> lst2_som_trouve;
2064     face1_ref->get_vectorisation().calcule_axes_dinertie(T1,Dv1,V1);
2065     G1=face1_ref->get_vectorisation().calcule_barycentre(T1);
2066 souaissa 143
2067 souaissa 153 /*
2068 souaissa 143 for(int r=0;r<4;r++) {
2069     for(int s=0;s<4;s++) {
2070     gf1[r]= gf1[r]+V1(s,r)*G1[s];
2071     }
2072 souaissa 153 } */
2073 souaissa 143
2074 souaissa 153 face2_ref->get_vectorisation().calcule_axes_dinertie(T2,Dv2,V2);
2075     G2=face2_ref->get_vectorisation().calcule_barycentre(T2);
2076     /*
2077 souaissa 143 for(int r=0;r<4;r++) {
2078     for(int s=0;s<4;s++) {
2079     gf2[r]= gf2[r]+V2(s,r)*G2[s];
2080     }
2081 souaissa 153 } */
2082 souaissa 143
2083     int nb_sommet1= mggeo1->get_nb_mg_sommet();
2084     int nb_sommet2= mggeo2->get_nb_mg_sommet();
2085    
2086    
2087 souaissa 153
2088 souaissa 143 for(int i=0;i<nb_sommet1;i++)
2089     {
2090     double xyz1[3];
2091 souaissa 153 OT_VECTEUR_4DD S1,s1, G1G1REF;
2092 souaissa 143 MG_SOMMET *som1=mggeo1->get_mg_sommet(i);
2093     MG_POINT* pt1=som1->get_point();
2094     int som1_id=som1->get_id();
2095     pt1->evaluer(xyz1);
2096     for(int t=0;t<3;t++) s1[t]=xyz1[t];
2097 souaissa 153 G1G1REF=s1-G1;
2098     G1G1REF=face1_ref->get_vectorisation().get_nouveau_pt(T1,G1G1REF);
2099     /*
2100 souaissa 143 for(int r=0;r<4;r++) {
2101     for(int s=0;s<4;s++) {
2102     S1[r]= S1[r]+V1(s,r)*s1[s];
2103     }
2104 souaissa 153 } */
2105 souaissa 143
2106 souaissa 153
2107 souaissa 143 for(int j=0;j<nb_sommet2;j++)
2108     {
2109     double xyz2[3];
2110 souaissa 153 OT_VECTEUR_4DD S2,s2,G2G2REF;
2111 souaissa 143 MG_SOMMET *som2=mggeo2->get_mg_sommet(j);
2112     MG_POINT* pt2=som2->get_point();
2113     int som2_id=som2->get_id();
2114 souaissa 153 if( lst1_som_trouve.est_dans_la_liste(som1_id)) break;
2115    
2116 souaissa 143 pt2->evaluer(xyz2);
2117     for(int t=0;t<3;t++) s2[t]=xyz2[t];
2118 souaissa 153 G2G2REF=s2-G2;
2119     /*
2120 souaissa 143 for(int r=0;r<4;r++) {
2121     for(int s=0;s<4;s++) {
2122     S2[r]= S2[r]+V2(s,r)*s2[s];
2123     }
2124 souaissa 153 } */
2125 souaissa 143
2126 souaissa 153 if (G1G1REF==G2G2REF)
2127 souaissa 143 {
2128 francois 144 Results.ajouter_liste_topologie(ORIGINE_CONSERVEE,som1);
2129     Results.ajouter_liste_topologie(MODIFIE_CONSERVEE,som2);
2130 souaissa 143 CORRESPONDANCE CORRESP;
2131     CORRESP.eleorigine=som1;
2132     CORRESP.elemodifie=som2;
2133     Results.ajouter_liste_topologie(CORRESP);
2134 souaissa 153 lst_corrsp_sommets.ajouter(som1_id);
2135     lst_corrsp_sommets.ajouter(som2_id);
2136     lst1_som_trouve.ajouter(som1_id);
2137     lst2_som_trouve.ajouter(som2_id);
2138     }
2139 souaissa 143
2140     }
2141 souaissa 153
2142    
2143    
2144 souaissa 143 }
2145 souaissa 142
2146 souaissa 143
2147 souaissa 153 for(int i=0;i<nb_sommet1;i++)
2148     {
2149     MG_SOMMET *som=mggeo1->get_mg_sommet(i);
2150     int som_id=som->get_id();
2151     if(! lst1_som_trouve.est_dans_la_liste(som_id))
2152     {
2153 souaissa 143
2154 souaissa 153 Results.ajouter_liste_topologie(ORIGINE_DISPARUE,som);
2155 souaissa 143
2156 souaissa 153 }
2157 souaissa 143
2158 souaissa 153 }
2159 souaissa 143
2160 souaissa 153 for(int i=0;i<nb_sommet2;i++)
2161     {
2162     MG_SOMMET *som=mggeo2->get_mg_sommet(i);
2163     int som_id=som->get_id();
2164     if(! lst2_som_trouve.est_dans_la_liste(som_id))
2165     {
2166    
2167     Results.ajouter_liste_topologie(MODIFIE_APPARUE,som);
2168    
2169     }
2170    
2171     }
2172    
2173 souaissa 87 }
2174    
2175    
2176 souaissa 153
2177    
2178    
2179     void VCT_COMPARAISON::get_syteme_daxes_globale()
2180     {
2181    
2182     OT_VECTEUR_4DD Dv1,Dv2,Dw,G1,G2,G1G2;
2183     OT_TENSEUR p(4),q(4),pT,qT;
2184     int nb_face1=mggeo1->get_nb_mg_face();
2185     int nb_face2=mggeo1->get_nb_mg_face();
2186     OT_VECTEUR_4DD VNul(0.,0.,0.,0.);
2187     double2 cof=-1;
2188     int plan=-1;
2189     for(int i=3;i<nb_face1;i++)
2190     {
2191     OT_TENSEUR inertie_face1(4);
2192     vector<double2> iface1;
2193     MG_FACE* face1=mggeo1->get_mg_face(i);
2194     int id_face1=face1->get_id();
2195     face1->get_vectorisation().calcule_axes_dinertie(T1,Dv1,p);
2196     pT=p.transpose();
2197     G1= face1->get_vectorisation().calcule_barycentre(T1);
2198     inertie_face1=face1->get_vectorisation().calcule_tenseur_inertie_base_locale(T1);
2199     vector<OT_VECTEUR_4DD>& list_points1=face1->get_vectorisation().get_points_controle();
2200     vector<OT_VECTEUR_4DD>& list_vecteurs1=face1->get_vectorisation().get_vecteurs();
2201     OT_VECTEUR_4DD Normal1(0.,0.,0.,0.),N1;
2202     OT_VECTEUR_4DD axe11,axe12,axe13;
2203     int cmpt=0;
2204    
2205     OT_VECTEUR_4DD v11= list_vecteurs1[0];
2206     int nb_vecteur1=list_vecteurs1.size();
2207     for(unsigned int pi=0;pi<nb_vecteur1-1;pi++)
2208     {
2209    
2210     OT_VECTEUR_4DD v2= list_vecteurs1[pi+1];
2211     if(pi==0)
2212     Normal1=v11^v2;
2213     if (pi>0)
2214     N1=v11^v2;
2215     OT_VECTEUR_4DD colineaire= Normal1^N1;
2216     if(colineaire==VNul)
2217     {
2218     cmpt++;
2219     }
2220     }
2221     vector<OT_VECTEUR_4DD> axes1;
2222     if ( cmpt== list_vecteurs1.size()-1)
2223     {
2224     plan=1;
2225     axe11=list_vecteurs1[0];
2226     axe12=Normal1^axe11;
2227     axe13=Normal1;
2228     axes1.insert(axes1.end(),axe11);
2229     axes1.insert(axes1.end(),axe12);
2230     axes1.insert(axes1.end(),axe13);
2231     }
2232    
2233     VCT_OUTILS VOUTIL(4);
2234     OT_MATRICE_3D sys_axes1=VOUTIL.get_system_axes(G1,axes1,list_points1) ;
2235    
2236     for(int r=0;r<4;r++)
2237     {
2238     iface1.insert( iface1.end(), inertie_face1(r,r));
2239     }
2240    
2241     for(int j=4;j<nb_face2;j++)
2242     {
2243     OT_TENSEUR inertie_face2(4);
2244     vector<double2> iface2;
2245     MG_FACE* face2=mggeo2->get_mg_face(j);
2246     int id_face2=face2->get_id();
2247     face2->get_vectorisation().calcule_axes_dinertie(T2,Dv2,q);
2248     G2= face2->get_vectorisation().calcule_barycentre(T2);
2249     qT=q.transpose();
2250     inertie_face2=face2->get_vectorisation().calcule_tenseur_inertie_base_locale(T2);
2251     vector<OT_VECTEUR_4DD>& list_points2=face2->get_vectorisation().get_points_controle();
2252     vector<OT_VECTEUR_4DD>& list_vecteurs2=face2->get_vectorisation().get_vecteurs();
2253     OT_VECTEUR_4DD Normal2(0.,0.,0.,0.),N1;
2254     OT_VECTEUR_4DD axe21,axe22,axe23;
2255     int cmpt=0;
2256     OT_VECTEUR_4DD v21= list_vecteurs2[0];
2257     int nb_vecteur2=list_vecteurs2.size();
2258     for(unsigned int pj=0;pj<nb_vecteur2-1;pj++)
2259     {
2260     OT_VECTEUR_4DD v2= list_vecteurs2[pj+1];
2261     if(pj==0)
2262     Normal2=v21^v2;
2263     if (pj>0)
2264     N1=v21^v2;
2265     OT_VECTEUR_4DD colineaire= Normal2^N1;
2266     if(colineaire==VNul)
2267     {
2268     cmpt++;
2269     }
2270     }
2271     vector<OT_VECTEUR_4DD> axes2;
2272     if ( cmpt== list_vecteurs2.size()-1)
2273     {
2274     plan=1;
2275     axe21=list_vecteurs2[0];
2276     axe22=Normal2^axe21;
2277     axe23=Normal2;
2278     axes2.insert(axes2.end(),axe21);
2279     axes2.insert(axes2.end(),axe22);
2280     axes2.insert(axes2.end(),axe23);
2281     }
2282    
2283     VCT_OUTILS VOUTIL(4);
2284     OT_MATRICE_3D sys_axes2=VOUTIL.get_system_axes(G2,axes2,list_points2) ;
2285    
2286     OT_MATRICE_3D T= sys_axes2*sys_axes1.transpose();
2287    
2288    
2289    
2290    
2291    
2292     /*
2293     for(int r=0;r<4;r++)
2294     {
2295     iface2.insert( iface2.end(), inertie_face2(r,r));
2296     }
2297     vector<unsigned int> indx1,indx2;
2298     OT_TENSEUR T=q*pT;
2299    
2300     if(inertie_face2.listes_equivalentes(iface1,iface2,indx1))
2301     {
2302    
2303     for(int ii=0;ii<list_points1.size();ii++)
2304     {
2305     OT_VECTEUR_4DD pt1= list_points1[ii];
2306     OT_VECTEUR_4DD pt11;
2307    
2308     for(int r=0;r<4;r++)
2309     {
2310     for(int s=0;s<4;s++)
2311     pt11[r]=pt11[r]+T(r,s)*G1[s];
2312     }
2313    
2314     for(int jj=0;jj<list_points2.size();jj++)
2315     {
2316     OT_VECTEUR_4DD pt2= list_points2[jj];
2317     OT_VECTEUR_4DD pt22;
2318     for(int r=0;r<4;r++)
2319     {
2320     for(int s=0;s<4;s++)
2321     pt22[r]=pt22[r]+T(r,s)*G2[s];
2322     }
2323     if(pt11==G2)
2324     {
2325     int g=0;
2326     }
2327    
2328    
2329     }
2330    
2331    
2332    
2333     }
2334    
2335    
2336     } */
2337    
2338    
2339     }
2340     }
2341    
2342    
2343     }
2344    
2345    
2346    
2347    
2348    
2349 francois 144 std::ostream& operator <<(std::ostream& os,VCT_COMPARAISON& vct_cmp)
2350 souaissa 142 {
2351     vct_cmp.enregistrer(os) ;
2352     return os;
2353     }
2354 souaissa 87
2355    
2356    
2357 souaissa 142
2358    
2359 souaissa 87 void VCT_COMPARAISON::enregistrer(ostream& os)
2360 souaissa 142 {
2361     os<<"COMPARAISON VECTORIELLE DE DEUX GEOMETRIES"<<endl;
2362     int nb_cl=2;
2363     int nb_lg=similarite.get_nb()/2;
2364 souaissa 66 os<<"FACES_PREMIERE_GEOMETRIE : ";
2365     for(int j=0;j<nb_lg;j++)
2366 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+0);
2367 souaissa 66 os<<endl;
2368     os<<"FACES_SECONDE_GEOMETRIE : ";
2369     for(int j=0;j<nb_lg;j++)
2370 souaissa 87 os<<setw(5)<<similarite.get(j*nb_cl+1);
2371 souaissa 66 os<<endl;
2372    
2373 souaissa 87 //affecter_une_couleur();
2374 souaissa 82
2375    
2376 souaissa 142 }
2377 souaissa 143
2378    
2379    
2380 souaissa 153 int VCT_COMPARAISON::modele_a_change_de_repere()
2381     {
2382     int nb_sommet1= mggeo1->get_nb_mg_sommet();
2383     int nb_sommet2= mggeo2->get_nb_mg_sommet();
2384 souaissa 143
2385 souaissa 153 int trouve=0;
2386     int cmt=0;
2387     for(int i=0;i<nb_sommet1;i++)
2388     {
2389     double xyz1[3];
2390     OT_VECTEUR_4DD S1,s1;
2391     MG_SOMMET *som1=
2392     mggeo1->get_mg_sommet(i);
2393     MG_POINT* pt1=som1->get_point();
2394     int som1_id=som1->get_id();
2395     pt1->evaluer(xyz1);
2396     for(int t=0;t<3;t++) s1[t]=xyz1[t];
2397    
2398    
2399     for(int j=0;j<nb_sommet2;j++)
2400     {
2401     double xyz2[3];
2402     OT_VECTEUR_4DD S2,s2;
2403     MG_SOMMET *som2=mggeo2->get_mg_sommet(j);
2404     MG_POINT* pt2=som2->get_point();
2405     int som2_id=som2->get_id();
2406     pt2->evaluer(xyz2);
2407     for(int t=0;t<3;t++) s2[t]=xyz2[t];
2408    
2409    
2410     if (s1==s2)
2411     {
2412     trouve=1;
2413     break;
2414     }
2415    
2416     }
2417     if (trouve==-1) return trouve;
2418     }
2419    
2420    
2421     return trouve;
2422    
2423     }
2424