ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 154
Committed: Thu Sep 11 22:02:06 2008 UTC (16 years, 8 months ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 75878 byte(s)
Log Message:
mise a jour de la classe vct_comparaison 

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