ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 153
Committed: Tue Sep 9 19:09:08 2008 UTC (16 years, 8 months ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 75759 byte(s)
Log Message:
mamise a jour des classes vectorisation


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