ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/comparaison/src/vct_comparaison.cpp
Revision: 82
Committed: Thu Apr 10 15:21:34 2008 UTC (17 years, 1 month ago) by souaissa
Original Path: magic/lib/vectorisation/vectorisation/src/vct_comparaison.cpp
File size: 5840 byte(s)
Log Message:

File Contents

# User Rev Content
1 souaissa 66 //---------------------------------------------------------------------------
2     #include"gestionversion.h"
3    
4     #pragma hdrstop
5    
6     #include "vct_comparaison.h"
7 souaissa 74 #include"ot_mathematique.h"
8     #include <iomanip.h>
9     #include "vct.h"
10 souaissa 66 //---------------------------------------------------------------------------
11    
12     #pragma package(smart_init)
13    
14    
15     VCT_COMPARAISON::VCT_COMPARAISON(char*fil1,char*fil2)
16     {
17    
18     gest1=new MG_FILE(fil1);
19     gest2=new MG_FILE(fil2);
20    
21    
22     }
23    
24     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
25    
26 souaissa 82 void VCT_COMPARAISON:: comparer_vectorisation_geometrie()
27 souaissa 66 {
28    
29     MG_GEOMETRIE*mggeo1=gest1->get_mg_geometrie(0);
30     MG_GEOMETRIE*mggeo2=gest2->get_mg_geometrie(0);
31    
32     int nb_face1=mggeo1->get_nb_mg_face();
33     int nb_face2=mggeo2->get_nb_mg_face();
34    
35 souaissa 82 for(int i=0;i<nb_face1; i++)
36 souaissa 66 {
37     MG_FACE* face1=mggeo1->get_mg_face(i);
38 souaissa 74 MG_SURFACE*surf1=face1->get_surface();
39 souaissa 66 int id1=face1->get_id();
40 souaissa 74 OT_TENSEUR tns1_face(4),tns1_surf(4);
41     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
42     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
43 souaissa 66
44 souaissa 74 tns1_face=face1->get_vectorisation().calcule_tenseur_metrique();
45     tns1_surf=surf1->get_vectorisation().calcule_tenseur_metrique();
46 souaissa 66
47     for(int j=0;j<nb_face2;j++)
48     {
49    
50     MG_FACE* face2=mggeo2->get_mg_face(j);
51 souaissa 74 MG_SURFACE*surf2=face2->get_surface();
52 souaissa 66 int id2=face2->get_id();
53 souaissa 74 OT_TENSEUR tns2_face(4),tns2_surf(4);
54     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
55     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
56     tns2_face=face2->get_vectorisation().calcule_tenseur_metrique();
57     tns2_surf=surf2->get_vectorisation().calcule_tenseur_metrique();
58 souaissa 66
59 souaissa 74 if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
60 souaissa 66 {
61 souaissa 74 if(tns1_face.est_til_equivalent(tns2_face))
62 souaissa 66 {
63 souaissa 74 if(tns1_surf.est_til_equivalent(tns2_surf))
64     similarite.insert(similarite.end(),i);
65     similarite.insert(similarite.end(),j);
66 souaissa 66 }
67    
68     /*
69     if (tns1_arete==tns2_arete)
70     {
71     carte_geometrique_aretes(i,j)=1;
72     }
73    
74     if(tns1_arete.is_equivalent_at(tns2_arete))
75     {
76     carte_geometrique_aretes(i,j)=1;
77     }
78     if((tns1_face==tns2_face))//&&(tns1_arete==tns2_arete))
79     {
80     carte_geometrique_faces(i,j)=1;
81     }
82     */
83    
84     }
85    
86     }
87     }
88    
89    
90    
91    
92    
93    
94    
95     }
96    
97    
98     VCT_COMPARAISON::~VCT_COMPARAISON()
99     {
100     delete gest1;
101     delete gest2;
102     }
103    
104    
105    
106 souaissa 82
107     void VCT_COMPARAISON:: comparer_inertie_geometrie()
108     {
109    
110     MG_GEOMETRIE*mggeo1=gest1->get_mg_geometrie(0);
111     MG_GEOMETRIE*mggeo2=gest2->get_mg_geometrie(0);
112    
113     int nb_face1=mggeo1->get_nb_mg_face();
114     int nb_face2=mggeo2->get_nb_mg_face();
115    
116     for(int i=0;i<nb_face1; i++)
117     {
118     MG_FACE* face1=mggeo1->get_mg_face(i);
119     MG_SURFACE*surf1=face1->get_surface();
120     int id1=face1->get_id();
121     OT_TENSEUR tns1_face(4),tns1_surf(4);
122     int nb_top1_pts= face1->get_vectorisation().get_nb_points();
123     int nb_geo1_pts= surf1->get_vectorisation().get_nb_points();
124    
125     tns1_face=face1->get_vectorisation().calcule_tenseur_inertie_base_locale();
126     tns1_surf=surf1->get_vectorisation().calcule_tenseur_inertie_base_locale();
127     vector<double2> ifac1; vector<double2>isurf1;
128     for(int r=0;r<4;r++)
129     {
130     ifac1.insert( ifac1.end(), tns1_face(r,r));
131     isurf1.insert( isurf1.end(), tns1_surf(r,r));
132     }
133    
134     for(int j=0;j<nb_face2;j++)
135     {
136    
137     MG_FACE* face2=mggeo2->get_mg_face(j);
138     MG_SURFACE*surf2=face2->get_surface();
139     int id2=face2->get_id();
140     OT_TENSEUR tns2_face(4),tns2_surf(4);
141     int nb_top2_pts= face2->get_vectorisation().get_nb_points();
142     int nb_geo2_pts= surf2->get_vectorisation().get_nb_points();
143     tns2_face=face2->get_vectorisation().calcule_tenseur_inertie_base_locale();
144     tns2_surf=surf2->get_vectorisation().calcule_tenseur_inertie_base_locale();
145     vector<double2> ifac2; vector<double2> isurf2;
146     for(int r=0;r<4;r++)
147     {
148     ifac2.insert( ifac2.end(), tns2_face(r,r));
149     isurf2.insert( isurf2.end(), tns2_surf(r,r));
150     }
151    
152     if(nb_geo1_pts==nb_geo2_pts&&nb_top1_pts==nb_top2_pts)
153     {
154     vector<unsigned int> indx1,indx2;
155     if(tns1_face.listes_equivalentes(ifac1,ifac2,indx1))
156     {
157     if(tns1_face.listes_equivalentes(isurf1,isurf2,indx2))
158     {
159     similarite.insert(similarite.end(),id1);
160     similarite.insert(similarite.end(),id2);
161     }
162     }
163     }
164    
165     }
166    
167     }
168    
169    
170     }
171    
172    
173    
174    
175    
176    
177    
178    
179    
180    
181 souaissa 66 void VCT_COMPARAISON::enregistrer(std::ostream& os)
182     {
183     os<<"COMPARAISON VECTORIELLE DE DEUX GEOMETRIES"<<endl;
184     int nb_cl=2;
185 souaissa 82 int nb_lg=similarite.size()/2;
186 souaissa 66 os<<"FACES_PREMIERE_GEOMETRIE : ";
187     for(int j=0;j<nb_lg;j++)
188 souaissa 82 os<<setw(5)<<similarite[j*nb_cl+0];
189 souaissa 66 os<<endl;
190     os<<"FACES_SECONDE_GEOMETRIE : ";
191     for(int j=0;j<nb_lg;j++)
192 souaissa 82 os<<setw(5)<<similarite[j*nb_cl+1];
193 souaissa 66 os<<endl;
194    
195 souaissa 82
196    
197    
198 souaissa 66 }
199    
200    
201     std::ostream& operator <<(std::ostream& os,const VCT_COMPARAISON& vct_cmp)
202     {
203     vct_cmp.enregistrer(os) ;
204     return os;
205     }