ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/compare/src/visumain.cpp
Revision: 356
Committed: Fri Aug 10 15:07:05 2012 UTC (13 years ago) by francois
File size: 22234 byte(s)
Log Message:
Visualisation des fichiser step + correctiom bug visualisation lorsque des mailles manquent

File Contents

# Content
1 //------------------------------------------------------------
2 //------------------------------------------------------------
3 // MAGiC
4 // Jean Christophe Cuilli�e et Vincent FRANCOIS
5 // D�artement de G�ie M�anique - UQTR
6 //------------------------------------------------------------
7 // Le projet MAGIC est un projet de recherche du d�artement
8 // de g�ie m�anique de l'Universit�du Qu�ec �
9 // Trois Rivi�es
10 // Les librairies ne peuvent �re utilis�s sans l'accord
11 // des auteurs (contact : francois@uqtr.ca)
12 //------------------------------------------------------------
13 //------------------------------------------------------------
14 //
15 // main.cpp
16 //
17 //------------------------------------------------------------
18 //------------------------------------------------------------
19 // COPYRIGHT 2000
20 // Version du 02/03/2006 �11H25
21 //------------------------------------------------------------
22 //------------------------------------------------------------
23 #include "gestionversion.h"
24 #ifdef WINDOWS_VERSION
25 #include "fenetre.h"
26 #endif
27
28 #pragma hdrstop
29 #include <iostream>
30 #include "vtkdisplay.h"
31 #include "nutil.h"
32 #include "mg_file.h"
33 #include <map>
34 //---------------------------------------------------------------------------
35
36 void affiche(char* message)
37 {
38 #ifdef WINDOWS_VERSION
39 Form1->Memo1->Lines->Add(message);
40 #else
41 std::cout << message << std::endl;
42 #endif
43 }
44
45
46
47 struct groupe_couleur
48 {
49 int num;
50 std::map<unsigned long,unsigned long> A;
51 std::map<unsigned long,unsigned long> B;
52 bool est_dans_A(unsigned long val)
53 {
54 std::map<unsigned long,unsigned long>::iterator it=A.find(val);
55 if (it!=A.end()) return true;
56 return false;
57 };
58 bool est_dans_B(unsigned long val)
59 {
60 std::map<unsigned long,unsigned long>::iterator it=B.find(val);
61 if (it!=B.end()) return true;
62 return false;
63 };
64 };
65
66
67
68 struct data_fichier
69 {
70 std::string nomA;
71 std::string nomB;
72 std::map<int,groupe_couleur> list_face_similaire;
73 std::map<int,groupe_couleur> list_face_identique;
74 std::map<int,groupe_couleur> list_face_localise;
75 std::map<int,groupe_couleur> list_arete_localise;
76 std::map<int,groupe_couleur> list_sommet_localise;
77 std::map<int,groupe_couleur> list_face_modifie;
78 std::map<int,groupe_couleur> list_arete_modifie;
79 };
80
81
82 void ini_couleur(std::vector<color> &tabcoul,int dim)
83 {
84 int ecart=255/(dim+1);
85 std::map<int,int> list;
86 for (int i=0;i<dim*dim*dim;i++)
87 {
88 int r=rand()%dim+1;
89 int g=rand()%dim+1;
90 int b=rand()%dim+1;
91 int c=r*ecart+255*g*ecart+255*255*b*ecart;
92 std::pair<int,int> tmp(c,c);
93 std::pair<std::map<int,int>::iterator,bool> ret=list.insert(tmp);
94 if (ret.second==false) i--;
95 else
96 {
97 color cc(r*ecart,g*ecart,b*ecart);
98 tabcoul.push_back(cc);
99 }
100 }
101 }
102
103
104
105 void ajouter_liste_couleur(std::map<int,groupe_couleur> &list,unsigned long valA,unsigned long valB)
106 {
107 static int num_couleur=0;
108 std::map<int,groupe_couleur>::iterator it;
109 for (it=list.begin();it!=list.end();it++)
110 {
111 bool res=it->second.est_dans_A(valA);
112 if (res==true)
113 {
114 it->second.A.insert(std::pair<unsigned long,unsigned long>(valA,valA));
115 it->second.B.insert(std::pair<unsigned long,unsigned long>(valB,valB));
116 return;
117 }
118
119 res=it->second.est_dans_B(valB);
120 if (res==true)
121 {
122 it->second.A.insert(std::pair<unsigned long,unsigned long>(valA,valA));
123 it->second.B.insert(std::pair<unsigned long,unsigned long>(valB,valB));
124 return;
125 }
126
127 }
128 groupe_couleur gc;
129 std::pair<std::map<int,groupe_couleur>::iterator,bool> ret=list.insert(std::pair<int,groupe_couleur>(num_couleur,gc));
130 ret.first->second.num=num_couleur;
131 ret.first->second.A.insert(std::pair<unsigned long,unsigned long>(valA,valA));
132 ret.first->second.B.insert(std::pair<unsigned long,unsigned long>(valB,valB));
133 num_couleur++;
134 }
135
136
137 void lire_fichier(char *nom,data_fichier &data)
138 {
139 FILE* in=fopen(nom,"rt");
140
141 while (!feof(in))
142 {
143 char mess[255],mess2[255];
144 fgets(mess,255,in);
145 if (strlen(mess)>1)
146 if (mess[0]=='/')
147 if (mess[1]=='/') continue;
148 if (strcmp(mess,"Model A:\n")==0)
149 {
150 fgets(mess,255,in);
151 sscanf(mess,"%s",mess2);
152 data.nomA=mess2;
153 }
154 else if (strcmp(mess,"Model B:\n")==0)
155 {
156 fgets(mess,255,in);
157 sscanf(mess,"%s",mess2);
158 data.nomB=mess2;
159 }
160 else
161 {
162 char mot1[255],mot2[255],mot3[255];
163 int nb;
164 int n=sscanf(mess,"%d %s %s %s",&nb,mot1,mot2,mot3);
165 std::map<int,groupe_couleur> *list=NULL;
166 if (n>2)
167 {
168 if (strcmp(mot1,"Similar")==0)
169 if (strcmp(mot2,"faces")==0)
170 list= &(data.list_face_similaire);
171 if (strcmp(mot1,"Identical")==0)
172 if (strcmp(mot2,"faces")==0)
173 list= &(data.list_face_identique);
174 if (strcmp(mot1,"Localized")==0)
175 if (strcmp(mot2,"identical")==0)
176 if (strcmp(mot3,"faces")==0)
177 list=&(data.list_face_localise);
178 if (strcmp(mot1,"Localized")==0)
179 if (strcmp(mot2,"identical")==0)
180 if (strcmp(mot3,"edges")==0)
181 list=&(data.list_arete_localise);
182 if (strcmp(mot1,"Localized")==0)
183 if (strcmp(mot2,"identical")==0)
184 if (strcmp(mot3,"vertices")==0)
185 list=&(data.list_sommet_localise);
186 if (strcmp(mot1,"Localized")==0)
187 if (strcmp(mot2,"modified")==0)
188 if (strcmp(mot3,"faces")==0)
189 list=&(data.list_face_modifie);
190 if (strcmp(mot1,"Localized")==0)
191 if (strcmp(mot2,"modified")==0)
192 if (strcmp(mot3,"edges")==0)
193 list=&(data.list_arete_modifie);
194 if (list!=NULL)
195 for (int i=0;i<nb;i++)
196 {
197 fgets(mess,255,in);
198 unsigned long valA,valB;
199 sscanf(mess,"%lu %lu%",&valA,&valB);
200 ajouter_liste_couleur(*list,valA,valB);
201 }
202 }
203 }
204
205
206
207 }
208
209
210
211 fclose(in);
212 }
213
214
215 void affiche_structure(color base,MG_GEOMETRIE* geo,bool A,std::vector<color> &tabcoul,data_container &data, std::map<int,groupe_couleur> &list_face, std::map<int,groupe_couleur> &list_arete, std::map<int,groupe_couleur> &list_sommet)
216 {
217 unsigned long nb1=geo->get_mg_face(geo->get_nb_mg_face()-1)->get_id();
218 unsigned long nb2=geo->get_mg_arete(geo->get_nb_mg_arete()-1)->get_id();
219 unsigned long nb3=geo->get_mg_sommet(geo->get_nb_mg_sommet()-1)->get_id();
220 int nbid=nb1;
221 if (nb2>nbid) nbid=nb2;
222 if (nb3>nbid) nbid=nb3;
223 nbid=nbid+5;
224 bool affiche[nbid];
225 for (int i=0;i<nbid;i++)
226 affiche[i]=false;
227 std::map<int,groupe_couleur>::iterator it;
228 for (it=list_face.begin();it!=list_face.end();it++)
229 {
230 groupe_couleur gc=it->second;
231 properties ptr=data.getproptriangles();
232 ptr.c=color(tabcoul[gc.num].R,tabcoul[gc.num].G,tabcoul[gc.num].B,255);
233 ptr.edgeon=false;
234 data.setproptriangles(ptr);
235 std::map<unsigned long,unsigned long>::iterator it2;
236 std::map<unsigned long,unsigned long> *tmp;
237 if (A==true) tmp=&(gc.A);
238 else tmp=&(gc.B);
239
240 for (it2=tmp->begin();it2!=tmp->end();it2++)
241 {
242 MG_FACE* face=geo->get_mg_faceid(it2->second);
243 affiche[face->get_id()]=true;
244 double xg=0.,yg=0.,zg=0.,deno=0.;
245 int nbtri=face->get_lien_maillage()->get_nb();
246 for (int i=0;i<nbtri;i++)
247 {
248 MG_TRIANGLE* tri=(MG_TRIANGLE*)face->get_lien_maillage()->get(i);
249 double *xyz1=tri->get_noeud1()->get_coord();
250 double *xyz2=tri->get_noeud2()->get_coord();
251 double *xyz3=tri->get_noeud3()->get_coord();
252 npoint p1(xyz1[0],xyz1[1],xyz1[2]);
253 npoint p2(xyz2[0],xyz2[1],xyz2[2]);
254 npoint p3(xyz3[0],xyz3[1],xyz3[2]);
255 triangle tr;
256 tr.pts[0]=p1;
257 tr.pts[1]=p2;
258 tr.pts[2]=p3;
259 data.add_triangle(tr);
260 OT_VECTEUR_3D vec1(xyz1,xyz2);
261 OT_VECTEUR_3D vec2(xyz1,xyz3);
262 OT_VECTEUR_3D sur=vec1&vec2;
263 xg=xg+0.3333333333*(xyz1[0]+xyz2[0]+xyz3[0])*sur.get_longueur();
264 yg=yg+0.3333333333*(xyz1[1]+xyz2[1]+xyz3[1])*sur.get_longueur();
265 zg=zg+0.3333333333*(xyz1[2]+xyz2[2]+xyz3[2])*sur.get_longueur();
266 deno=deno+sur.get_longueur();
267 }
268 xg=xg/deno;
269 yg=yg/deno;
270 zg=zg/deno;
271 std::map<double,MG_TRIANGLE*> classetri;
272 for (int i=0;i<nbtri;i++)
273 {
274 MG_TRIANGLE* tri=(MG_TRIANGLE*)face->get_lien_maillage()->get(i);
275 double *xyz1=tri->get_noeud1()->get_coord();
276 double *xyz2=tri->get_noeud2()->get_coord();
277 double *xyz3=tri->get_noeud3()->get_coord();
278 double x=0.3333333333*(xyz1[0]+xyz2[0]+xyz3[0]);
279 double y=0.3333333333*(xyz1[1]+xyz2[1]+xyz3[1]);
280 double z=0.3333333333*(xyz1[2]+xyz2[2]+xyz3[2]);
281 OT_VECTEUR_3D vec(x-xg,y-yg,z-zg);
282 classetri.insert(std::pair<double,MG_TRIANGLE*>(vec.get_longueur2(),tri));
283 }
284 if (nbtri>0)
285 {
286 MG_TRIANGLE *tri=classetri.begin()->second;
287 double *xyz1=tri->get_noeud1()->get_coord();
288 double *xyz2=tri->get_noeud2()->get_coord();
289 double *xyz3=tri->get_noeud3()->get_coord();
290 npoint p(0.3333333333*(xyz1[0]+xyz2[0]+xyz3[0]),0.3333333333*(xyz1[1]+xyz2[1]+xyz3[1]),0.3333333333*(xyz1[2]+xyz2[2]+xyz3[2]));
291 point pp;
292 pp.pts=p;
293 char mess[255];
294 sprintf(mess,"F%lu",face->get_id());
295 pp.info=mess;
296 color cc=color(255-ptr.c.R,255-ptr.c.G,255-ptr.c.B);
297 std::pair<point,color> tmp(pp,cc);
298 data.add_text(2,tmp);
299 }
300
301 }
302 }
303 properties ptr=data.getproptriangles();
304 ptr.c=base;
305 ptr.edgeon=false;
306 data.setproptriangles(ptr);
307 LISTE_MG_FACE::iterator itface;
308 for (MG_FACE* face=geo->get_premier_face(itface);face!=NULL;face=geo->get_suivant_face(itface))
309 {
310 if (affiche[face->get_id()]==true) continue;
311 affiche[face->get_id()]=true;
312 int nbtri=face->get_lien_maillage()->get_nb();
313 double xg=0.,yg=0.,zg=0.,deno=0.;
314 for (int i=0;i<nbtri;i++)
315 {
316 MG_TRIANGLE* tri=(MG_TRIANGLE*)face->get_lien_maillage()->get(i);
317 double *xyz1=tri->get_noeud1()->get_coord();
318 double *xyz2=tri->get_noeud2()->get_coord();
319 double *xyz3=tri->get_noeud3()->get_coord();
320 npoint p1(xyz1[0],xyz1[1],xyz1[2]);
321 npoint p2(xyz2[0],xyz2[1],xyz2[2]);
322 npoint p3(xyz3[0],xyz3[1],xyz3[2]);
323 triangle tr;
324 tr.pts[0]=p1;
325 tr.pts[1]=p2;
326 tr.pts[2]=p3;
327 data.add_triangle(tr);
328 OT_VECTEUR_3D vec1(xyz1,xyz2);
329 OT_VECTEUR_3D vec2(xyz1,xyz3);
330 OT_VECTEUR_3D sur=vec1&vec2;
331 xg=xg+0.3333333333*(xyz1[0]+xyz2[0]+xyz3[0])*sur.get_longueur();
332 yg=yg+0.3333333333*(xyz1[1]+xyz2[1]+xyz3[1])*sur.get_longueur();
333 zg=zg+0.3333333333*(xyz1[2]+xyz2[2]+xyz3[2])*sur.get_longueur();
334 deno=deno+sur.get_longueur();
335 }
336 xg=xg/deno;
337 yg=yg/deno;
338 zg=zg/deno;
339 std::map<double,MG_TRIANGLE*> classetri;
340 for (int i=0;i<nbtri;i++)
341 {
342 MG_TRIANGLE* tri=(MG_TRIANGLE*)face->get_lien_maillage()->get(i);
343 double *xyz1=tri->get_noeud1()->get_coord();
344 double *xyz2=tri->get_noeud2()->get_coord();
345 double *xyz3=tri->get_noeud3()->get_coord();
346 double x=0.3333333333*(xyz1[0]+xyz2[0]+xyz3[0]);
347 double y=0.3333333333*(xyz1[1]+xyz2[1]+xyz3[1]);
348 double z=0.3333333333*(xyz1[2]+xyz2[2]+xyz3[2]);
349 OT_VECTEUR_3D vec(x-xg,y-yg,z-zg);
350 classetri.insert(std::pair<double,MG_TRIANGLE*>(vec.get_longueur2(),tri));
351 }
352 if (nbtri>0)
353 {
354 MG_TRIANGLE *tri=classetri.begin()->second;
355 double *xyz1=tri->get_noeud1()->get_coord();
356 double *xyz2=tri->get_noeud2()->get_coord();
357 double *xyz3=tri->get_noeud3()->get_coord();
358 npoint p(0.3333333333*(xyz1[0]+xyz2[0]+xyz3[0]),0.3333333333*(xyz1[1]+xyz2[1]+xyz3[1]),0.3333333333*(xyz1[2]+xyz2[2]+xyz3[2]));
359 point pp;
360 pp.pts=p;
361 char mess[255];
362 sprintf(mess,"F%lu",face->get_id());
363 pp.info=mess;
364 color cc=color(255-ptr.c.R,255-ptr.c.G,255-ptr.c.B);
365 std::pair<point,color> tmp(pp,cc);
366 data.add_text(2,tmp);
367 }
368 }
369
370
371 for (it=list_arete.begin();it!=list_arete.end();it++)
372 {
373 groupe_couleur gc=it->second;
374 properties ptr=data.getproplines();
375 ptr.c=tabcoul[gc.num];
376 ptr.thickness=5;
377 data.setproplines(ptr);
378 std::map<unsigned long,unsigned long>::iterator it2;
379 std::map<unsigned long,unsigned long> *tmp;
380 if (A==true) tmp=&(gc.A);
381 else tmp=&(gc.B);
382
383 for (it2=tmp->begin();it2!=tmp->end();it2++)
384 {
385 MG_ARETE* are=geo->get_mg_areteid(it2->second);
386 affiche[are->get_id()]=true;
387 int nbseg=are->get_lien_maillage()->get_nb();
388 double xg=0.,yg=0.,zg=0.,deno=0.;
389 for (int i=0;i<nbseg;i++)
390 {
391 MG_SEGMENT* seg=(MG_SEGMENT*)are->get_lien_maillage()->get(i);
392 double *xyz1=seg->get_noeud1()->get_coord();
393 double *xyz2=seg->get_noeud2()->get_coord();
394 npoint p1(xyz1[0],xyz1[1],xyz1[2]);
395 npoint p2(xyz2[0],xyz2[1],xyz2[2]);
396 line li;
397 li.pts[0]=p1;
398 li.pts[1]=p2;
399 data.add_line(li);
400 OT_VECTEUR_3D vec(xyz1,xyz2);
401 xg=xg+0.5*(xyz1[0]+xyz2[0])*vec.get_longueur();
402 yg=yg+0.5*(xyz1[1]+xyz2[1])*vec.get_longueur();
403 zg=zg+0.5*(xyz1[2]+xyz2[2])*vec.get_longueur();
404 deno=deno+vec.get_longueur();
405 }
406 xg=xg/deno;
407 yg=yg/deno;
408 zg=zg/deno;
409 std::map<double,MG_SEGMENT*> classeseg;
410 for (int i=0;i<nbseg;i++)
411 {
412 MG_SEGMENT* seg=(MG_SEGMENT*)are->get_lien_maillage()->get(i);
413 double *xyz1=seg->get_noeud1()->get_coord();
414 double *xyz2=seg->get_noeud2()->get_coord();
415 double x=0.5*(xyz1[0]+xyz2[0]);
416 double y=0.5*(xyz1[1]+xyz2[1]);
417 double z=0.5*(xyz1[2]+xyz2[2]);
418 OT_VECTEUR_3D vec(x-xg,y-yg,z-zg);
419 classeseg.insert(std::pair<double,MG_SEGMENT*>(vec.get_longueur2(),seg));
420 }
421 if (nbseg>0)
422 {
423 MG_SEGMENT* seg=classeseg.begin()->second;
424 double *xyz1=seg->get_noeud1()->get_coord();
425 double *xyz2=seg->get_noeud2()->get_coord();
426 npoint p(0.5*(xyz1[0]+xyz2[0]),0.5*(xyz1[1]+xyz2[1]),0.5*(xyz1[2]+xyz2[2]));
427 point pp;
428 pp.pts=p;
429 char mess[255];
430 sprintf(mess,"E%lu",are->get_id());
431 pp.info=mess;
432 color cc=color(ptr.c.R,ptr.c.G,ptr.c.B);
433 std::pair<point,color> tmp(pp,cc);
434 data.add_text(1,tmp);
435 }
436 }
437 }
438 ptr=data.getproplines();
439 ptr.c=color(255-base.R,255-base.G,255-base.B);
440 ptr.thickness=2;
441 data.setproplines(ptr);
442 LISTE_MG_ARETE::iterator itare;
443 for (MG_ARETE* are=geo->get_premier_arete(itare);are!=NULL;are=geo->get_suivant_arete(itare))
444 {
445 if (affiche[are->get_id()]==true) continue;
446 affiche[are->get_id()]=true;
447 int nbseg=are->get_lien_maillage()->get_nb();
448 double xg=0.,yg=0.,zg=0.,deno=0.;
449 for (int i=0;i<nbseg;i++)
450 {
451 MG_SEGMENT* seg=(MG_SEGMENT*)are->get_lien_maillage()->get(i);
452 double *xyz1=seg->get_noeud1()->get_coord();
453 double *xyz2=seg->get_noeud2()->get_coord();
454 npoint p1(xyz1[0],xyz1[1],xyz1[2]);
455 npoint p2(xyz2[0],xyz2[1],xyz2[2]);
456 line li;
457 li.pts[0]=p1;
458 li.pts[1]=p2;
459 data.add_line(li);
460 OT_VECTEUR_3D vec(xyz1,xyz2);
461 xg=xg+0.5*(xyz1[0]+xyz2[0])*vec.get_longueur();
462 yg=yg+0.5*(xyz1[1]+xyz2[1])*vec.get_longueur();
463 zg=zg+0.5*(xyz1[2]+xyz2[2])*vec.get_longueur();
464 deno=deno+vec.get_longueur();
465 }
466 xg=xg/deno;
467 yg=yg/deno;
468 zg=zg/deno;
469 std::map<double,MG_SEGMENT*> classeseg;
470 for (int i=0;i<nbseg;i++)
471 {
472 MG_SEGMENT* seg=(MG_SEGMENT*)are->get_lien_maillage()->get(i);
473 double *xyz1=seg->get_noeud1()->get_coord();
474 double *xyz2=seg->get_noeud2()->get_coord();
475 double x=0.5*(xyz1[0]+xyz2[0]);
476 double y=0.5*(xyz1[1]+xyz2[1]);
477 double z=0.5*(xyz1[2]+xyz2[2]);
478 OT_VECTEUR_3D vec(x-xg,y-yg,z-zg);
479 classeseg.insert(std::pair<double,MG_SEGMENT*>(vec.get_longueur2(),seg));
480 }
481 if (nbseg>0)
482 {
483 MG_SEGMENT* seg=classeseg.begin()->second;
484 double *xyz1=seg->get_noeud1()->get_coord();
485 double *xyz2=seg->get_noeud2()->get_coord();
486 npoint p(0.5*(xyz1[0]+xyz2[0]),0.5*(xyz1[1]+xyz2[1]),0.5*(xyz1[2]+xyz2[2]));
487 point pp;
488 pp.pts=p;
489 char mess[255];
490 sprintf(mess,"E%lu",are->get_id());
491 pp.info=mess;
492 color cc=color(ptr.c.R,ptr.c.G,ptr.c.B);
493 std::pair<point,color> tmp(pp,cc);
494 data.add_text(1,tmp);
495 }
496 }
497
498
499 for (it=list_sommet.begin();it!=list_sommet.end();it++)
500 {
501 groupe_couleur gc=it->second;
502 properties ptr=data.getproppoints();
503 ptr.c=tabcoul[gc.num];
504 ptr.pointsize=15;
505 data.setproppoints(ptr);
506 std::map<unsigned long,unsigned long>::iterator it2;
507 std::map<unsigned long,unsigned long> *tmp;
508 if (A==true) tmp=&(gc.A);
509 else tmp=&(gc.B);
510
511 for (it2=tmp->begin();it2!=tmp->end();it2++)
512 {
513 MG_SOMMET* som=geo->get_mg_sommetid(it2->second);
514 affiche[som->get_id()]=true;
515 int nbpoint=som->get_lien_maillage()->get_nb();
516 for (int i=0;i<nbpoint;i++)
517 {
518 MG_NOEUD* nd=(MG_NOEUD*)som->get_lien_maillage()->get(i);
519 double *xyz1=nd->get_coord();
520 npoint p1(xyz1[0],xyz1[1],xyz1[2]);
521 data.add_point(p1);
522 point pp;
523 pp.pts=p1;
524 char mess[255];
525 sprintf(mess,"V%lu",som->get_id());
526 pp.info=mess;
527 color cc=color(ptr.c.R,ptr.c.G,ptr.c.B);
528 std::pair<point,color> tmp(pp,cc);
529 data.add_text(0,tmp);
530 }
531 }
532 }
533 ptr=data.getproppoints();
534 ptr.c=color(255-base.R,255-base.G,255-base.B);
535 ptr.pointsize=4;
536
537 data.setproppoints(ptr);
538 LISTE_MG_SOMMET::iterator itsom;
539 for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som!=NULL;som=geo->get_suivant_sommet(itsom))
540 {
541 if (affiche[som->get_id()]==true) continue;
542 affiche[som->get_id()]=true;
543 int nbpoint=som->get_lien_maillage()->get_nb();
544 for (int i=0;i<nbpoint;i++)
545 {
546 MG_NOEUD* nd=(MG_NOEUD*)som->get_lien_maillage()->get(i);
547 double *xyz1=nd->get_coord();
548 npoint p1(xyz1[0],xyz1[1],xyz1[2]);
549 data.add_point(p1);
550 point pp;
551 pp.pts=p1;
552 char mess[255];
553 sprintf(mess,"V%lu",som->get_id());
554 pp.info=mess;
555 color cc=color(ptr.c.R,ptr.c.G,ptr.c.B);
556 std::pair<point,color> tmp(pp,cc);
557 data.add_text(0,tmp);
558 }
559
560 }
561
562
563
564 };
565
566
567
568
569
570
571
572 #ifdef WINDOWS_VERSION
573 int amain(int argc,char **argv)
574 #else
575 int main(int argc,char **argv)
576 #endif
577 {
578 color base=color(0,0,0);
579 char chemin[1000];
580 sprintf(chemin,"%s/.vtkdisplay",getenv("HOME"));
581 FILE *in=fopen(chemin,"rt");
582 if (in!=NULL)
583 {
584 char mess[255];
585 fgets(mess,255,in);
586 int R,G,B;
587 sscanf(mess,"%d %d %d",&R,&G,&B);
588 base=color(R,G,B);
589 fclose(in);
590 }
591 printf("******************************\n");
592 printf("* Comparison visualization *\n");
593 printf("* by *\n");
594 printf("* Jean-Christophe Cuillière *\n");
595 printf("* and *\n");
596 printf("* Vincent Francois *\n");
597 printf("* ERICCA-UQTR *\n");
598 printf("******************************\n\n\n");
599
600 if (argc!=4)
601 {
602 printf("Visucompare syntax error - Bad number arguments\n\n");
603 return 0;
604
605 }
606 if (!((strcmp(argv[1],"A")==0) || (strcmp(argv[1],"B")==0)))
607 {
608 printf("Visucompare syntax error - first argument not valid : %s\n\n",argv[1]);
609 return 0;
610
611 }
612
613 if (!( (strcmp(argv[2],"S")==0) || (strcmp(argv[2],"M")==0) || (strcmp(argv[2],"I")==0)|| (strcmp(argv[2],"L")==0) ))
614 {
615 printf("Visucompare syntax error - Second argument not valid : %s\n\n",argv[2]);
616 return 0;
617
618 }
619
620
621 std::map<int,groupe_couleur> list_vide;
622 std::vector<color> tabcoul;
623 ini_couleur(tabcoul,10);
624
625 data_fichier df;
626 lire_fichier(argv[3],df);
627 bool A;
628 MG_FILE *gest;
629 if (strcmp(argv[1],"A")==0) {printf("Reading file A\n");gest=new MG_FILE((char*)df.nomA.c_str());A=true;}
630 else if (strcmp(argv[1],"B")==0) {printf("Reading file B\n");gest=new MG_FILE((char*)df.nomB.c_str());A=false;}
631
632 printf(" Number of color group :\n");
633 if (strcmp(argv[2],"S")==0) printf(" Similar faces : %d Visible\n",df.list_face_similaire.size()); else printf(" Similar faces : %d\n",df.list_face_similaire.size());
634 if (strcmp(argv[2],"I")==0) printf(" Identical faces : %d Visible\n",df.list_face_identique.size()); else printf(" Identical faces : %d\n",df.list_face_identique.size());
635 if (strcmp(argv[2],"L")==0) printf(" Localized faces : %d Visible\n",df.list_face_localise.size()); else printf(" Localized faces : %d\n",df.list_face_localise.size());
636 if (strcmp(argv[2],"L")==0) printf(" Localized edges : %d Visible\n",df.list_arete_localise.size()); else printf(" Localized faces : %d\n",df.list_face_localise.size());
637 if (strcmp(argv[2],"L")==0) printf(" Localized vertices : %d Visible\n",df.list_sommet_localise.size()); else printf(" Localized faces : %d\n",df.list_face_localise.size());
638 if (strcmp(argv[2],"M")==0) printf(" Modified faces : %d Visible\n",df.list_face_modifie.size()); else printf(" Modified faces : %d \n",df.list_face_modifie.size());
639 if (strcmp(argv[2],"M")==0) printf(" Modified edges : %d Visible\n",df.list_arete_modifie.size()); else printf(" Modified edges : %d\n",df.list_arete_modifie.size());
640
641
642 MG_GEOMETRIE* geo=gest->get_mg_geometrie(0);
643 data_container data;
644
645
646 if (strcmp(argv[2],"M")==0) affiche_structure(base,geo,A,tabcoul,data,df.list_face_modifie,df.list_arete_modifie,list_vide);
647 if (strcmp(argv[2],"I")==0) affiche_structure(base,geo,A,tabcoul,data,df.list_face_identique,list_vide,list_vide);
648 if (strcmp(argv[2],"S")==0) affiche_structure(base,geo,A,tabcoul,data,df.list_face_similaire,list_vide,list_vide);
649 if (strcmp(argv[2],"L")==0) affiche_structure(base,geo,A,tabcoul,data,df.list_face_localise,df.list_arete_localise,df.list_sommet_localise);
650
651 printf("\n\n");
652 printf("Command on keyboard : \n");
653 printf(" e : End of vizualisation\n");
654 printf(" r : Reset Camera\n");
655 printf(" 1 : Vertex Numbers visible on/off\n");
656 printf(" 4 : Edge Numbers visible on/off\n");
657 printf(" 7 : Face Numbers visible on/off\n");
658 printf(" v : Vertices visible on/off\n");
659 printf(" l : Edges visible on/off\n");
660 printf(" t : Faces visible on/off\n");
661 printf(" j : Save camera on current directory\n");
662 printf(" k : Load camera from current directory\n");
663 printf(" w : Wireframe\n");
664 printf(" s : Modelframe\n");
665
666 char titre [255];
667 strcpy(titre,"Visucompare File ");
668 strcat(titre,argv[1]);
669 strcat(titre," ");
670 strcat(titre,argv[2]);
671 strcat(titre," ");
672 strcat(titre,argv[3]);
673
674
675 delete gest;
676 vtkdisplay d(base,titre);
677
678
679
680
681 d.init_data(data);
682 d.display(true);
683
684 return 0;
685 }
686
687
688
689 #pragma package(smart_init)