ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/VMM/win32/visuctt.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (15 years, 1 month ago) by francois
File size: 80188 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuillière et Vincent FRANCOIS
5     // Département de Génie Mécanique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du département
8     // de génie mécanique de l'Université du Québec à
9     // Trois Rivières
10     // Les librairies ne peuvent être utilisées sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // visuctt.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 à 11H26
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #include <vcl.h>
28     #include <io.h>
29     #pragma hdrstop
30    
31     #include <fstream.h>
32     //#include "fct_generateur_3d.h"
33     #include "tpl_grille.h"
34     #include "visuctt.h"
35     #include "config.h"
36     #include "applifonc.h"
37     #include "compocarte.h"
38     #include "main.h"
39     #include "visugraph.h"
40 francois 98 #include "magicform.h"
41 5 //---------------------------------------------------------------------------
42     #pragma package(smart_init)
43     #pragma resource "*.dfm"
44     Tvisucttform *visucttform;
45     //---------------------------------------------------------------------------
46     __fastcall Tvisucttform::Tvisucttform(TComponent* Owner)
47     : TForm(Owner),zoom(0),dx(0.0),dy(0.0),debut_trans(false),shrink(0),facteur_shrink(0.8),render(0),axe(0),debut_rot(0),grille(NULL)
48     {
49     }
50     //---------------------------------------------------------------------------
51     void __fastcall Tvisucttform::Fermer1Click(TObject *Sender)
52     {
53     Close();
54     if (grille!=NULL) delete grille;
55     }
56     //---------------------------------------------------------------------------
57    
58     void __fastcall Tvisucttform::FileExitItemClick(TObject *Sender)
59     {
60     TerminateProcess(GetCurrentProcess(),0);
61     }
62     //---------------------------------------------------------------------------
63    
64     void __fastcall Tvisucttform::FormClose(TObject *Sender,
65     TCloseAction &Action)
66     {
67     MainForm->ToolBar4->Visible=false;
68     MainForm->activecttform=NULL;
69     int nb=lst_cellule.size();
70     for (int i=0;i<nb;i++)
71     delete lst_cellule[i];
72     MainForm->StatusBar->Panels->Items[3]->Text="";
73     MainForm->StatusBar->Panels->Items[4]->Text="";
74     Action=caFree;
75     }
76     //---------------------------------------------------------------------------
77    
78    
79     void __fastcall Tvisucttform::Timer1Timer(TObject *Sender)
80     {
81     Timer1->Enabled=false;
82     FILE *in;
83     in=fopen(Caption.c_str(),"rt");
84     char mess[400];
85     fgets(mess,400,in);
86 bournival 34
87 francois 56
88 5 sscanf(mess,"%d %lf %lf %lf %lf %lf %lf %d %d %d",&nb_renseignement,&xmin,&ymin,&zmin,&xmax,&ymax,&zmax,&pasx,&pasy,&pasz);
89     for (int i=0;i<nb_renseignement;i++)
90     {
91     fgets(mess,400,in);
92     mess[strlen(mess)-1]=0;
93     ListBox1->Items->Add(mess);
94     }
95    
96     ListBox1->ItemIndex=0;
97     if (in!=NULL)
98     {
99     while (feof(in)==0)
100     {
101     char mess[400];
102     celluleaff* cell=new celluleaff(nb_renseignement);
103     fgets(mess,400,in);
104     sscanf(mess,"%lf %lf %lf",&(cell->coordpt1[0]),&(cell->coordpt1[1]),&(cell->coordpt1[2]));
105     char *p=strchr(mess,' ')+1;
106     p=strchr(p,' ')+1;
107     for (int l=0;l<nb_renseignement;l++)
108     {
109     double val;
110     p=strchr(p,' ')+1;
111     sscanf(p,"%lf",&val);
112     cell->change_valeur(l,0,val);
113     }
114     fgets(mess,400,in);
115     sscanf(mess,"%lf %lf %lf",&(cell->coordpt2[0]),&(cell->coordpt2[1]),&(cell->coordpt2[2]));
116     p=strchr(mess,' ')+1;
117     p=strchr(p,' ')+1;
118     for (int l=0;l<nb_renseignement;l++)
119     {
120     double val;
121     p=strchr(p,' ')+1;
122     sscanf(p,"%lf",&val);
123     cell->change_valeur(l,1,val);
124     }
125     fgets(mess,400,in);
126     sscanf(mess,"%lf %lf %lf",&(cell->coordpt3[0]),&(cell->coordpt3[1]),&(cell->coordpt3[2]));
127     p=strchr(mess,' ')+1;
128     p=strchr(p,' ')+1;
129     for (int l=0;l<nb_renseignement;l++)
130     {
131     double val;
132     p=strchr(p,' ')+1;
133     sscanf(p,"%lf",&val);
134     cell->change_valeur(l,2,val);
135     }
136     fgets(mess,400,in);
137     sscanf(mess,"%lf %lf %lf",&(cell->coordpt4[0]),&(cell->coordpt4[1]),&(cell->coordpt4[2]));
138     p=strchr(mess,' ')+1;
139     p=strchr(p,' ')+1;
140     for (int l=0;l<nb_renseignement;l++)
141     {
142     double val;
143     p=strchr(p,' ')+1;
144     sscanf(p,"%lf",&val);
145     cell->change_valeur(l,3,val);
146     }
147     fgets(mess,400,in);
148     sscanf(mess,"%lf %lf %lf",&(cell->coordpt5[0]),&(cell->coordpt5[1]),&(cell->coordpt5[2]));
149     p=strchr(mess,' ')+1;
150     p=strchr(p,' ')+1;
151     for (int l=0;l<nb_renseignement;l++)
152     {
153     double val;
154     p=strchr(p,' ')+1;
155     sscanf(p,"%lf",&val);
156     cell->change_valeur(l,4,val);
157     }
158     fgets(mess,400,in);
159     sscanf(mess,"%lf %lf %lf",&(cell->coordpt6[0]),&(cell->coordpt6[1]),&(cell->coordpt6[2]));
160     p=strchr(mess,' ')+1;
161     p=strchr(p,' ')+1;
162     for (int l=0;l<nb_renseignement;l++)
163     {
164     double val;
165     p=strchr(p,' ')+1;
166     sscanf(p,"%lf",&val);
167     cell->change_valeur(l,5,val);
168     }
169     fgets(mess,400,in);
170     sscanf(mess,"%lf %lf %lf",&(cell->coordpt7[0]),&(cell->coordpt7[1]),&(cell->coordpt7[2]));
171     p=strchr(mess,' ')+1;
172     p=strchr(p,' ')+1;
173     for (int l=0;l<nb_renseignement;l++)
174     {
175     double val;
176     p=strchr(p,' ')+1;
177     sscanf(p,"%lf",&val);
178     cell->change_valeur(l,6,val);
179     }
180     fgets(mess,400,in);
181     sscanf(mess,"%lf %lf %lf",&(cell->coordpt8[0]),&(cell->coordpt8[1]),&(cell->coordpt8[2]));
182     p=strchr(mess,' ')+1;
183     p=strchr(p,' ')+1;
184     for (int l=0;l<nb_renseignement;l++)
185     {
186     double val;
187     p=strchr(p,' ')+1;
188     sscanf(p,"%lf",&val);
189     cell->change_valeur(l,7,val);
190     }
191     lst_cellule.insert(lst_cellule.end(),cell);
192     }
193     int nb=lst_cellule.size();
194     if (nb>0)
195     {
196     double xmin=lst_cellule[0]->coordpt1[0];
197     double xmax=lst_cellule[0]->coordpt1[0];
198     double ymin=lst_cellule[0]->coordpt1[1];
199     double ymax=lst_cellule[0]->coordpt1[1];
200     double zmin=lst_cellule[0]->coordpt1[2];
201     double zmax=lst_cellule[0]->coordpt1[2];
202     for (int k=0;k<nb_renseignement;k++)
203     {
204     valmax[k]=lst_cellule[0]->get_valeur(k,0);
205     valmin[k]=lst_cellule[0]->get_valeur(k,0);
206     }
207     for (int i=0;i<nb;i++)
208     {
209     celluleaff* cell=lst_cellule[i];
210     if (cell->coordpt1[0]>xmax) xmax=cell->coordpt1[0];
211     if (cell->coordpt1[0]<xmin) xmin=cell->coordpt1[0];
212     if (cell->coordpt1[1]>ymax) ymax=cell->coordpt1[1];
213     if (cell->coordpt1[1]<ymin) ymin=cell->coordpt1[1];
214     if (cell->coordpt1[2]>zmax) zmax=cell->coordpt1[2];
215     if (cell->coordpt1[2]<zmin) zmin=cell->coordpt1[2];
216     if (cell->coordpt2[0]>xmax) xmax=cell->coordpt2[0];
217     if (cell->coordpt2[0]<xmin) xmin=cell->coordpt2[0];
218     if (cell->coordpt2[1]>ymax) ymax=cell->coordpt2[1];
219     if (cell->coordpt2[1]<ymin) ymin=cell->coordpt2[1];
220     if (cell->coordpt2[2]>zmax) zmax=cell->coordpt2[2];
221     if (cell->coordpt2[2]<zmin) zmin=cell->coordpt2[2];
222     if (cell->coordpt3[0]>xmax) xmax=cell->coordpt3[0];
223     if (cell->coordpt3[0]<xmin) xmin=cell->coordpt3[0];
224     if (cell->coordpt3[1]>ymax) ymax=cell->coordpt3[1];
225     if (cell->coordpt3[1]<ymin) ymin=cell->coordpt3[1];
226     if (cell->coordpt3[2]>zmax) zmax=cell->coordpt3[2];
227     if (cell->coordpt3[2]<zmin) zmin=cell->coordpt3[2];
228     if (cell->coordpt4[0]>xmax) xmax=cell->coordpt4[0];
229     if (cell->coordpt4[0]<xmin) xmin=cell->coordpt4[0];
230     if (cell->coordpt4[1]>ymax) ymax=cell->coordpt4[1];
231     if (cell->coordpt4[1]<ymin) ymin=cell->coordpt4[1];
232     if (cell->coordpt4[2]>zmax) zmax=cell->coordpt4[2];
233     if (cell->coordpt4[2]<zmin) zmin=cell->coordpt4[2];
234     if (cell->coordpt5[0]>xmax) xmax=cell->coordpt5[0];
235     if (cell->coordpt5[0]<xmin) xmin=cell->coordpt5[0];
236     if (cell->coordpt5[1]>ymax) ymax=cell->coordpt5[1];
237     if (cell->coordpt5[1]<ymin) ymin=cell->coordpt5[1];
238     if (cell->coordpt5[2]>zmax) zmax=cell->coordpt5[2];
239     if (cell->coordpt5[2]<zmin) zmin=cell->coordpt5[2];
240     if (cell->coordpt6[0]>xmax) xmax=cell->coordpt6[0];
241     if (cell->coordpt6[0]<xmin) xmin=cell->coordpt6[0];
242     if (cell->coordpt6[1]>ymax) ymax=cell->coordpt6[1];
243     if (cell->coordpt6[1]<ymin) ymin=cell->coordpt6[1];
244     if (cell->coordpt6[2]>zmax) zmax=cell->coordpt6[2];
245     if (cell->coordpt6[2]<zmin) zmin=cell->coordpt6[2];
246     if (cell->coordpt7[0]>xmax) xmax=cell->coordpt7[0];
247     if (cell->coordpt7[0]<xmin) xmin=cell->coordpt7[0];
248     if (cell->coordpt7[1]>ymax) ymax=cell->coordpt7[1];
249     if (cell->coordpt7[1]<ymin) ymin=cell->coordpt7[1];
250     if (cell->coordpt7[2]>zmax) zmax=cell->coordpt7[2];
251     if (cell->coordpt7[2]<zmin) zmin=cell->coordpt7[2];
252     if (cell->coordpt8[0]>xmax) xmax=cell->coordpt8[0];
253     if (cell->coordpt8[0]<xmin) xmin=cell->coordpt8[0];
254     if (cell->coordpt8[1]>ymax) ymax=cell->coordpt8[1];
255     if (cell->coordpt8[1]<ymin) ymin=cell->coordpt8[1];
256     if (cell->coordpt8[2]>zmax) zmax=cell->coordpt8[2];
257     if (cell->coordpt8[2]<zmin) zmin=cell->coordpt8[2];
258     for (int k=0;k<nb_renseignement;k++)
259     {
260     if (cell->get_valeur(k,0)>valmax[k]) valmax[k]=cell->get_valeur(k,0);
261     if (cell->get_valeur(k,0)<valmin[k]) valmin[k]=cell->get_valeur(k,0);
262     if (cell->get_valeur(k,1)>valmax[k]) valmax[k]=cell->get_valeur(k,1);
263     if (cell->get_valeur(k,1)<valmin[k]) valmin[k]=cell->get_valeur(k,1);
264     if (cell->get_valeur(k,2)>valmax[k]) valmax[k]=cell->get_valeur(k,2);
265     if (cell->get_valeur(k,2)<valmin[k]) valmin[k]=cell->get_valeur(k,2);
266     if (cell->get_valeur(k,3)>valmax[k]) valmax[k]=cell->get_valeur(k,3);
267     if (cell->get_valeur(k,3)<valmin[k]) valmin[k]=cell->get_valeur(k,3);
268     if (cell->get_valeur(k,4)>valmax[k]) valmax[k]=cell->get_valeur(k,4);
269     if (cell->get_valeur(k,4)<valmin[k]) valmin[k]=cell->get_valeur(k,4);
270     if (cell->get_valeur(k,5)>valmax[k]) valmax[k]=cell->get_valeur(k,5);
271     if (cell->get_valeur(k,5)<valmin[k]) valmin[k]=cell->get_valeur(k,5);
272     if (cell->get_valeur(k,6)>valmax[k]) valmax[k]=cell->get_valeur(k,6);
273     if (cell->get_valeur(k,6)<valmin[k]) valmin[k]=cell->get_valeur(k,6);
274     if (cell->get_valeur(k,7)>valmax[k]) valmax[k]=cell->get_valeur(k,7);
275     if (cell->get_valeur(k,7)<valmin[k]) valmin[k]=cell->get_valeur(k,7);
276     }
277     }
278     boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
279     grille=new TPL_GRILLE<celluleaff*>;
280     grille->initialiser(xmin,ymin,zmin,xmax,ymax,zmax,20,20,20);
281     for (int i=0;i<nb;i++)
282     {
283     celluleaff* cell=lst_cellule[i];
284     grille->inserer(cell);
285     }
286     recadre(dx,dy,0);
287     initvue();
288     redess();
289     TrackBar1->Min=0;
290     TrackBar1->Max=100;
291     TrackBar1->Position=0;
292     TrackBar2->Min=0;
293     TrackBar2->Max=100;
294     TrackBar2->Position=100;
295     TrackBar3->Min=0;
296     TrackBar3->Max=100;
297     TrackBar3->Position=0;
298     TrackBar4->Min=0;
299     TrackBar4->Max=100;
300     TrackBar4->Position=100;
301     TrackBar5->Min=0;
302     TrackBar5->Max=100;
303     TrackBar5->Position=0;
304     TrackBar6->Min=0;
305     TrackBar6->Max=100;
306     TrackBar6->Position=100;
307     return;
308     }
309     }
310     MessageBox(Handle,"Fichier non valide","Erreur",MB_OK);
311     Close();
312     }
313     //---------------------------------------------------------------------------
314    
315     void __fastcall Tvisucttform::FormActivate(TObject *Sender)
316     {
317     MainForm->ToolBar4->Visible=true;
318     MainForm->activecttform=this;
319     FILE* in=fopen(Caption.c_str(),"rt");
320     if (in!=NULL)
321     {
322     std::ftime ft;
323     getftime(fileno(in), &ft);
324     char mess[1000];
325     sprintf(mess,"Heure fichier: %02u:%02u:%02u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
326     MainForm->StatusBar->Panels->Items[3]->Text=mess;
327     sprintf(mess,"Jour fichier: %02u/%02u/%02u\n",ft.ft_day, ft.ft_month,ft.ft_year+1980);
328     MainForm->StatusBar->Panels->Items[4]->Text=mess;
329     fclose(in);
330     }
331    
332     }
333     //---------------------------------------------------------------------------
334    
335     void __fastcall Tvisucttform::FormDeactivate(TObject *Sender)
336     {
337     MainForm->ToolBar4->Visible=false;
338     MainForm->activecttform=NULL;
339     MainForm->StatusBar->Panels->Items[3]->Text="";
340     MainForm->StatusBar->Panels->Items[4]->Text="";
341     }
342     //---------------------------------------------------------------------------
343    
344     void __fastcall Tvisucttform::configExecute(TObject *Sender)
345     {
346     configwin->ShowModal();
347     }
348     //---------------------------------------------------------------------------
349    
350     void __fastcall Tvisucttform::FormCreate(TObject *Sender)
351     {
352     hdc = GetDC(Handle);
353     SetPixelFormatDescriptor();
354     hrc = wglCreateContext(hdc);
355     if (hrc == NULL)
356     ShowMessage(":-)~ hrc == NULL");
357     if(wglMakeCurrent(hdc, hrc) == false)
358     ShowMessage("Could not MakeCurrent");
359     glClearColor(MainForm->valeurconfig[57],MainForm->valeurconfig[58],MainForm->valeurconfig[59], 0.0f);
360     }
361     //---------------------------------------------------------------------------
362     void __fastcall Tvisucttform::SetPixelFormatDescriptor(void)
363     {
364     PIXELFORMATDESCRIPTOR pfd = {
365     sizeof(PIXELFORMATDESCRIPTOR),
366     1,
367     PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
368     PFD_TYPE_RGBA,
369     24,
370     0,0,0,0,0,0,
371     0,0,
372     0,0,0,0,0,
373     32,
374     0,
375     0,
376     PFD_MAIN_PLANE,
377     0,
378     0,0,
379     };
380     int PixelFormat = ChoosePixelFormat(hdc, &pfd);
381     SetPixelFormat(hdc, PixelFormat, &pfd);
382     }
383     //---------------------------------------------------------------------------
384     void __fastcall Tvisucttform::recadre(double dx,double dy,int etat)
385     {
386     wglMakeCurrent(hdc,hrc);
387     GLfloat w = ClientWidth-Panel1->Width;
388     GLfloat h = ClientHeight;
389     char mess[255];
390     if (etat==0) glViewport(0, 0, w, h);
391     glMatrixMode(GL_PROJECTION);
392     glLoadIdentity();
393     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
394     d=max(d,boite.get_zmax()-boite.get_zmin());
395     d=d*1.75/2.;
396     double aspect=w/h;
397     double xmin,ymin,xmax,ymax;
398     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
399     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
400     double zmin=boite.get_zcentre()-100*d;
401     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
402     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
403     double zmax=zmin+200.*d;
404     glOrtho(xmin,xmax,ymin,ymax,zmin,zmax);
405     }
406     //---------------------------------------------------------------------------
407     void __fastcall Tvisucttform::dessineaxe(void)
408     {
409     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
410     d=max(d,boite.get_zmax()-boite.get_zmin());
411     d=d*MainForm->valeurconfig[10];
412     glLineWidth(MainForm->valeurconfig[9]);
413     glBegin(GL_LINES);
414     glColor3f(MainForm->valeurconfig[0],MainForm->valeurconfig[1],MainForm->valeurconfig[2]);
415     glVertex3f(0.0,0.0,0.0);
416     glVertex3f(d,0.0,0.0);
417     glColor3f(MainForm->valeurconfig[3],MainForm->valeurconfig[4],MainForm->valeurconfig[5]);
418     glVertex3f(0.0,0.0,0.0);
419     glVertex3f(0.0,d,0.0);
420     glColor3f(MainForm->valeurconfig[6],MainForm->valeurconfig[7],MainForm->valeurconfig[8]);
421     glVertex3f(0.0,0.0,0.0);
422     glVertex3f(0.0,0.0,d);
423     glEnd();
424     }
425     //---------------------------------------------------------------------------
426    
427    
428     void __fastcall Tvisucttform::FormPaint(TObject *Sender)
429     {
430     wglMakeCurrent(hdc,hrc);
431     glClearColor(MainForm->valeurconfig[57],MainForm->valeurconfig[58],MainForm->valeurconfig[59], 0.0f);
432 francois 62 for (int i=0;i<14;i++)
433     {
434     RGB_r[i]=MainForm->valeurconfig[66+3*i]*255.;
435     RGB_g[i]=MainForm->valeurconfig[67+3*i]*255.;
436     RGB_b[i]=MainForm->valeurconfig[68+3*i]*255.;
437     }
438 5 redess();
439     }
440     //---------------------------------------------------------------------------
441     void __fastcall Tvisucttform::redess(void)
442     {
443     wglMakeCurrent(hdc,hrc);
444     glClearColor(MainForm->valeurconfig[57],MainForm->valeurconfig[58],MainForm->valeurconfig[59], 0.0f);
445 francois 98 Label1->Color=getcolor(RGB_r[11]/255.,RGB_g[11]/255.,RGB_b[11]/255.);
446 5 Label2->Color=getcolor(RGB_r[0]/255.,RGB_g[0]/255.,RGB_b[0]/255.);
447     char mess[100];
448     int numvaleur=ListBox1->ItemIndex;
449     sprintf(mess,"%f",valmax[numvaleur]);
450     Label3->Caption=mess;
451     sprintf(mess,"%f",valmin[numvaleur]);
452     Label4->Caption=mess;
453     wglMakeCurrent(hdc,hrc);
454     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
455     int nb=lst_cellule.size();
456     double ecart=valmax[numvaleur]-valmin[numvaleur];
457     double pr=MainForm->valeurconfig[60]-MainForm->valeurconfig[63];
458     double pg=MainForm->valeurconfig[61]-MainForm->valeurconfig[64];
459     double pb=MainForm->valeurconfig[62]-MainForm->valeurconfig[65];
460     if (render==1)
461     {
462     glEnable(GL_DEPTH_TEST);
463     glEnable(GL_POLYGON_OFFSET_FILL);
464     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
465     }
466     else
467     {
468     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
469     }
470     glBegin(GL_QUADS);
471     for (int i=0;i<nb;i++)
472     {
473     celluleaff* cell=lst_cellule[i];
474     double *xyz1=cell->coordpt1;
475     double *xyz2=cell->coordpt2;
476     double *xyz3=cell->coordpt3;
477     double *xyz4=cell->coordpt4;
478     double *xyz5=cell->coordpt5;
479     double *xyz6=cell->coordpt6;
480     double *xyz7=cell->coordpt7;
481     double *xyz8=cell->coordpt8;
482     BOITE_3D boite1(xyz1[0],xyz1[1],xyz1[2],xyz7[0],xyz7[1],xyz7[2]);
483     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
484     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
485     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
486     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
487     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
488     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
489     BOITE_3D boite2(x1,y1,z1,x2,y2,z2);
490     if (boite1*boite2)
491     {
492     double xyzs1[3],xyzs2[3],xyzs3[3],xyzs4[3],xyzs5[3],xyzs6[3],xyzs7[3],xyzs8[3];
493     if (shrink)
494     {
495     double xg=0.125*(xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0]+xyz5[0]+xyz6[0]+xyz7[0]+xyz8[0]);
496     double yg=0.125*(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1]+xyz5[1]+xyz6[1]+xyz7[1]+xyz8[1]);
497     double zg=0.125*(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2]+xyz5[2]+xyz6[2]+xyz7[2]+xyz8[2]);
498     xyzs1[0]=xg+facteur_shrink*(xyz1[0]-xg);
499     xyzs1[1]=yg+facteur_shrink*(xyz1[1]-yg);
500     xyzs1[2]=zg+facteur_shrink*(xyz1[2]-zg);
501     xyz1=xyzs1;
502     xyzs2[0]=xg+facteur_shrink*(xyz2[0]-xg);
503     xyzs2[1]=yg+facteur_shrink*(xyz2[1]-yg);
504     xyzs2[2]=zg+facteur_shrink*(xyz2[2]-zg);
505     xyz2=xyzs2;
506     xyzs3[0]=xg+facteur_shrink*(xyz3[0]-xg);
507     xyzs3[1]=yg+facteur_shrink*(xyz3[1]-yg);
508     xyzs3[2]=zg+facteur_shrink*(xyz3[2]-zg);
509     xyz3=xyzs3;
510     xyzs4[0]=xg+facteur_shrink*(xyz4[0]-xg);
511     xyzs4[1]=yg+facteur_shrink*(xyz4[1]-yg);
512     xyzs4[2]=zg+facteur_shrink*(xyz4[2]-zg);
513     xyz4=xyzs4;
514     xyzs5[0]=xg+facteur_shrink*(xyz5[0]-xg);
515     xyzs5[1]=yg+facteur_shrink*(xyz5[1]-yg);
516     xyzs5[2]=zg+facteur_shrink*(xyz5[2]-zg);
517     xyz5=xyzs5;
518     xyzs6[0]=xg+facteur_shrink*(xyz6[0]-xg);
519     xyzs6[1]=yg+facteur_shrink*(xyz6[1]-yg);
520     xyzs6[2]=zg+facteur_shrink*(xyz6[2]-zg);
521     xyz6=xyzs6;
522     xyzs7[0]=xg+facteur_shrink*(xyz7[0]-xg);
523     xyzs7[1]=yg+facteur_shrink*(xyz7[1]-yg);
524     xyzs7[2]=zg+facteur_shrink*(xyz7[2]-zg);
525     xyz7=xyzs7;
526     xyzs8[0]=xg+facteur_shrink*(xyz8[0]-xg);
527     xyzs8[1]=yg+facteur_shrink*(xyz8[1]-yg);
528     xyzs8[2]=zg+facteur_shrink*(xyz8[2]-zg);
529     xyz8=xyzs8;
530     }
531     if (ecart<0.0001) ecart=1;
532     //face1
533     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart);
534 francois 98 int pos=(int) ((cell->get_valeur(numvaleur,0)-valmin[numvaleur])*11./ecart);
535 5 if (pos<0) pos=0;
536 francois 98 if (pos>11) pos=11;
537 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
538     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
539     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart);
540 francois 98 pos=(int) ((cell->get_valeur(numvaleur,1)-valmin[numvaleur])*11./ecart);
541 5 if (pos<0) pos=0;
542 francois 98 if (pos>11) pos=11;
543 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
544     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
545     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart);
546 francois 98 pos=(int) ((cell->get_valeur(numvaleur,2)-valmin[numvaleur])*11./ecart);
547 5 if (pos<0) pos=0;
548 francois 98 if (pos>11) pos=11;
549 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
550     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
551     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart);
552 francois 98 pos=(int) ((cell->get_valeur(numvaleur,3)-valmin[numvaleur])*11./ecart);
553 5 if (pos<0) pos=0;
554 francois 98 if (pos>11) pos=11;
555 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
556     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
557     //face2
558     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart);
559 francois 98 pos=(int) ((cell->get_valeur(numvaleur,4)-valmin[numvaleur])*11./ecart);
560 5 if (pos<0) pos=0;
561 francois 98 if (pos>11) pos=11;
562 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
563     glVertex3f(xyz5[0],xyz5[1],xyz5[2]);
564     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart);
565 francois 98 pos=(int) ((cell->get_valeur(numvaleur,5)-valmin[numvaleur])*11./ecart);
566 5 if (pos<0) pos=0;
567 francois 98 if (pos>11) pos=11;
568 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
569     glVertex3f(xyz6[0],xyz6[1],xyz6[2]);
570     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart);
571 francois 98 pos=(int) ((cell->get_valeur(numvaleur,6)-valmin[numvaleur])*11./ecart);
572 5 if (pos<0) pos=0;
573 francois 98 if (pos>11) pos=11;
574 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
575     glVertex3f(xyz7[0],xyz7[1],xyz7[2]);
576     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart);
577 francois 98 pos=(int) ((cell->get_valeur(numvaleur,7)-valmin[numvaleur])*11./ecart);
578 5 if (pos<0) pos=0;
579 francois 98 if (pos>11) pos=11;
580 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
581     glVertex3f(xyz8[0],xyz8[1],xyz8[2]);
582     //face3
583     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart);
584 francois 98 pos=(int) ((cell->get_valeur(numvaleur,0)-valmin[numvaleur])*11./ecart);
585 5 if (pos<0) pos=0;
586 francois 98 if (pos>11) pos=11;
587 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
588     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
589     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart);
590 francois 98 pos=(int) ((cell->get_valeur(numvaleur,1)-valmin[numvaleur])*11./ecart);
591 5 if (pos<0) pos=0;
592 francois 98 if (pos>11) pos=11;
593 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
594     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
595     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart);
596 francois 98 pos=(int) ((cell->get_valeur(numvaleur,5)-valmin[numvaleur])*11./ecart);
597 5 if (pos<0) pos=0;
598 francois 98 if (pos>11) pos=11;
599 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
600     glVertex3f(xyz6[0],xyz6[1],xyz6[2]);
601     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart);
602 francois 98 pos=(int) ((cell->get_valeur(numvaleur,4)-valmin[numvaleur])*11./ecart);
603 5 if (pos<0) pos=0;
604 francois 98 if (pos>11) pos=11;
605 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
606     glVertex3f(xyz5[0],xyz5[1],xyz5[2]);
607     //face4
608     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,1)-valmin[numvaleur])/ecart);
609 francois 98 pos=(int) ((cell->get_valeur(numvaleur,1)-valmin[numvaleur])*11./ecart);
610 5 if (pos<0) pos=0;
611 francois 98 if (pos>11) pos=11;
612 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
613     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
614     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart);
615 francois 98 pos=(int) ((cell->get_valeur(numvaleur,2)-valmin[numvaleur])*11./ecart);
616 5 if (pos<0) pos=0;
617 francois 98 if (pos>11) pos=11;
618 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
619     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
620     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart);
621 francois 98 pos=(int) ((cell->get_valeur(numvaleur,6)-valmin[numvaleur])*11./ecart);
622 5 if (pos<0) pos=0;
623 francois 98 if (pos>11) pos=11;
624 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
625     glVertex3f(xyz7[0],xyz7[1],xyz7[2]);
626     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,5)-valmin[numvaleur])/ecart);
627 francois 98 pos=(int) ((cell->get_valeur(numvaleur,5)-valmin[numvaleur])*11./ecart);
628 5 if (pos<0) pos=0;
629 francois 98 if (pos>11) pos=11;
630 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
631     glVertex3f(xyz6[0],xyz6[1],xyz6[2]);
632     //face5
633     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,2)-valmin[numvaleur])/ecart);
634 francois 98 pos=(int) ((cell->get_valeur(numvaleur,2)-valmin[numvaleur])*11./ecart);
635 5 if (pos<0) pos=0;
636 francois 98 if (pos>11) pos=11;
637 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
638     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
639     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart);
640 francois 98 pos=(int) ((cell->get_valeur(numvaleur,3)-valmin[numvaleur])*11./ecart);
641 5 if (pos<0) pos=0;
642 francois 98 if (pos>11) pos=11;
643 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
644     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
645     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart);
646 francois 98 pos=(int) ((cell->get_valeur(numvaleur,7)-valmin[numvaleur])*11./ecart);
647 5 if (pos<0) pos=0;
648 francois 98 if (pos>11) pos=11;
649 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
650     glVertex3f(xyz8[0],xyz8[1],xyz8[2]);
651     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,6)-valmin[numvaleur])/ecart);
652 francois 98 pos=(int) ((cell->get_valeur(numvaleur,6)-valmin[numvaleur])*11./ecart);
653 5 if (pos<0) pos=0;
654 francois 98 if (pos>11) pos=11;
655 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
656     glVertex3f(xyz7[0],xyz7[1],xyz7[2]);
657     //face6
658     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,3)-valmin[numvaleur])/ecart);
659 francois 98 pos=(int) ((cell->get_valeur(numvaleur,3)-valmin[numvaleur])*11./ecart);
660 5 if (pos<0) pos=0;
661 francois 98 if (pos>11) pos=11;
662 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
663     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
664     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,0)-valmin[numvaleur])/ecart);
665 francois 98 pos=(int) ((cell->get_valeur(numvaleur,0)-valmin[numvaleur])*11./ecart);
666 5 if (pos<0) pos=0;
667 francois 98 if (pos>11) pos=11;
668 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
669     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
670     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,4)-valmin[numvaleur])/ecart);
671 francois 98 pos=(int) ((cell->get_valeur(numvaleur,4)-valmin[numvaleur])*11./ecart);
672 5 if (pos<0) pos=0;
673 francois 98 if (pos>11) pos=11;
674 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
675     glVertex3f(xyz5[0],xyz5[1],xyz5[2]);
676     glColor3f(MainForm->valeurconfig[63]+pr*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart,MainForm->valeurconfig[64]+pg*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart,MainForm->valeurconfig[65]+pb*(cell->get_valeur(numvaleur,7)-valmin[numvaleur])/ecart);
677 francois 98 pos=(int) ((cell->get_valeur(numvaleur,7)-valmin[numvaleur])*11./ecart);
678 5 if (pos<0) pos=0;
679 francois 98 if (pos>11) pos=11;
680 5 glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
681     glVertex3f(xyz8[0],xyz8[1],xyz8[2]);
682     }
683     }
684     glEnd();
685     if (axe==1) dessineaxe();
686     glFlush();
687     SwapBuffers(hdc);
688     }
689    
690     void __fastcall Tvisucttform::transformation(TObject *Sender, WORD &Key,TShiftState Shift)
691     {
692     wglMakeCurrent(hdc,hrc);
693     GLfloat w = ClientWidth-Panel1->Width;
694     GLfloat h = ClientHeight;
695     glMatrixMode(GL_MODELVIEW);
696     double un=0.005*min(w,h);
697     if (Key==VK_LEFT)
698     {
699     dx=dx+un;
700     recadre(dx,dy,1);
701     }
702     if (Key==VK_RIGHT)
703     {
704     dx=dx-un;
705     recadre(dx,dy,1);
706     }
707     if (Key==VK_UP)
708     {
709     dy=dy-un;
710     recadre(dx,dy,1);
711     }
712     if (Key==VK_DOWN)
713     {
714     dy=dy+un;
715     recadre(dx,dy,1);
716     }
717     if(Key == VK_F1)
718     {
719     zoom++;
720     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
721     glScalef(1.1,1.1,1.1);
722     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
723     }
724     if(Key == VK_F2)
725     {
726     zoom--;
727     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
728     glScalef(1./1.1,1./1.1,1./1.1);
729     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
730     }
731     if(Key == VK_F3)
732     {
733     dx=0.;
734     dy=0.;
735     zoom=0;
736     recadre(dx,dy,1);
737     initvue();
738     }
739     if(Key == VK_F4)
740     {
741     if (zoom>0)
742     glScalef(1./pow(1.1,zoom),1./pow(1.1,zoom),1./pow(1.1,zoom));
743     if (zoom<0)
744     glScalef(pow(1.1,-zoom),pow(1.1,-zoom),pow(1.1,-zoom));
745     zoom=0;
746     dx=0;
747     dy=0;
748     recadre(dx,dy,1);
749     }
750     if(Key == VK_HOME)
751     {
752     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
753     glRotatef(-5, 0.0, 1.0, 0.0);
754     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
755     }
756     if(Key == VK_END)
757     {
758     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
759     glRotatef(5, 0.0, 1.0, 0.0);
760     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
761     }
762     if(Key == VK_INSERT)
763     {
764     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
765     glRotatef(-5, 1.0, 0.0, 0.0);
766     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
767     }
768     if(Key == VK_DELETE)
769     {
770     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
771     glRotatef(5, 1.0, 0.0, 0.0);
772     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
773     }
774     if(Key == VK_PRIOR)
775     {
776     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
777     glRotatef(-5, 0.0, 0.0, 1.0);
778     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
779     }
780     if(Key == VK_NEXT)
781     {
782     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
783     glRotatef(5, 0.0, 0.0, 1.0);
784     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
785     }
786     if (Key==VK_ADD)
787     {
788     facteur_shrink=facteur_shrink+0.05;
789     if (facteur_shrink>1.) facteur_shrink=1;
790     }
791     if (Key==VK_SUBTRACT)
792     {
793     facteur_shrink=facteur_shrink-0.05;
794     if (facteur_shrink<0.) facteur_shrink=0.;
795     }
796    
797     redess();
798     }
799     //---------------------------------------------------------------------------
800     void __fastcall Tvisucttform::FormResize(TObject *Sender)
801     {
802     int w=ClientWidth-Panel1->Width;
803     int h=ClientHeight;
804     while(w==0)
805     {
806     Width++;
807     w=ClientWidth-Panel1->Width;
808     }
809     while(h==0)
810     {
811     Height++;
812     h=ClientHeight;
813     }
814    
815     recadre(dx,dy,0);
816     redess();
817     }
818     //---------------------------------------------------------------------------
819    
820     void __fastcall Tvisucttform::initvue(void)
821     {
822     wglMakeCurrent(hdc,hrc);
823     glMatrixMode(GL_MODELVIEW);
824     glLoadIdentity();
825     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
826 francois 98 /*glRotatef(-90., 0.0, 1.0, 0.0);
827 5 glRotatef(-90., 1.0, 0.0, 0.0);
828     glRotatef(45., 0.0, 1.0, 0.0);
829 francois 98 glRotatef(-45., 0.0, 0.0, 1.0);*/
830     glRotatef(35.26, 1.0, 0.0, 0.0);
831     glRotatef(45., 0.0, 1.0, 0.0);
832     glRotatef(-90., 1.0, 0.0, 0.0);
833     glRotatef(180., 0.0, 0.0, 1.0);
834    
835 5 glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
836     }
837     //---------------------------------------------------------------------------
838    
839     void __fastcall Tvisucttform::FormKeyDown(TObject *Sender, WORD &Key,
840     TShiftState Shift)
841     {
842     transformation(Sender,Key,Shift);
843     }
844     //---------------------------------------------------------------------------
845    
846     void __fastcall Tvisucttform::FormMouseDown(TObject *Sender,
847     TMouseButton Button, TShiftState Shift, int X, int Y)
848     {
849     if (Button==mbRight)
850     if (debut_trans==false)
851     {
852     debut_trans=true;
853     xdepart=X;
854     ydepart=Y;
855     }
856     if (Button==mbMiddle)
857     if (debut_rot==false)
858     {
859     debut_rot=true;
860     xrot=X;
861     yrot=Y;
862     }
863    
864     }
865     //---------------------------------------------------------------------------
866    
867     void __fastcall Tvisucttform::FormMouseMove(TObject *Sender,
868     TShiftState Shift, int X, int Y)
869     {
870     if (debut_trans==true)
871     {
872     GLfloat w = ClientWidth-Panel1->Width;
873     GLfloat h = ClientHeight;
874     double aspect=w/h;
875     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
876     d=max(d,boite.get_zmax()-boite.get_zmin());
877     d=d*1.5;
878     double xmin,ymin,xmax,ymax;
879     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
880     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
881     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
882     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
883     dx=dx+(xdepart-X)/2./w*(xmax-xmin);
884     dy=dy-(ydepart-Y)/2./h*(ymax-ymin);
885     recadre(dx,dy,1);
886     redess();
887     xdepart=X;
888     ydepart=Y;
889     }
890     if (debut_rot==true)
891     {
892     GLfloat w = ClientWidth-Panel1->Width;
893     GLfloat h = ClientHeight;
894     double deltax=X-xrot;
895     double deltay=Y-yrot;
896     double norme=deltax*deltax+deltay*deltay;
897     norme=sqrt(norme);
898     if (norme>=1.)
899     {
900     glMatrixMode(GL_MODELVIEW);
901     deltax=deltax*1.0/norme;
902     deltay=deltay*1.0/norme;
903     GLdouble matriceproj[16],matricevue[16];
904     GLint matriceport[4];
905     glGetIntegerv(GL_VIEWPORT,matriceport);
906     glGetDoublev(GL_MODELVIEW_MATRIX,matricevue);
907     glGetDoublev(GL_PROJECTION_MATRIX,matriceproj);
908     double orx,ory,orz;
909     double rx,ry,rz;
910     gluUnProject((GLdouble)xrot,(GLdouble)yrot,0.,matricevue,matriceproj,matriceport,&orx,&ory,&orz);
911     gluUnProject(xrot+deltay,yrot+deltax,0.,matricevue,matriceproj,matriceport,&rx,&ry,&rz);
912     rx=rx-orx;
913     ry=ry-ory;
914     rz=rz-orz;
915     double norme2=sqrt(rx*rx+ry*ry+rz*rz);
916     rx=rx/norme2;
917     ry=ry/norme2;
918     rz=rz/norme2;
919     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
920     glRotatef(norme/sqrt(w*h)*360, rx, ry, rz);
921     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
922     redess();
923     }
924     xrot=X;
925     yrot=Y;
926     }
927    
928    
929    
930     }
931     //---------------------------------------------------------------------------
932    
933     void __fastcall Tvisucttform::FormMouseUp(TObject *Sender,
934     TMouseButton Button, TShiftState Shift, int X, int Y)
935     {
936     if (Button==mbRight)
937     if (debut_trans==true)
938     {
939     GLfloat w = ClientWidth-Panel1->Width;
940     GLfloat h = ClientHeight;
941     double aspect=w/h;
942     debut_trans=false;
943     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
944     d=max(d,boite.get_zmax()-boite.get_zmin());
945     d=d*1.5;
946     double xmin,ymin,xmax,ymax;
947     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
948     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
949     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
950     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
951     dx=dx+(xdepart-X)/2./w*(xmax-xmin);
952     dy=dy-(ydepart-Y)/2./h*(ymax-ymin);
953     recadre(dx,dy,1);
954     redess();
955     xdepart=X;
956     ydepart=Y;
957     }
958     if (Button==mbMiddle) debut_rot=false;
959     }
960     //---------------------------------------------------------------------------
961    
962     void __fastcall Tvisucttform::FormMouseWheelDown(TObject *Sender,
963     TShiftState Shift, TPoint &MousePos, bool &Handled)
964     {
965     wglMakeCurrent(hdc,hrc);
966     glMatrixMode(GL_MODELVIEW);
967     zoom++;
968     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
969     glScalef(1.1,1.1,1.1);
970     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
971     redess();
972    
973     }
974     //---------------------------------------------------------------------------
975    
976     void __fastcall Tvisucttform::FormMouseWheelUp(TObject *Sender,
977     TShiftState Shift, TPoint &MousePos, bool &Handled)
978     {
979     wglMakeCurrent(hdc,hrc);
980     glMatrixMode(GL_MODELVIEW);
981     zoom--;
982     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
983     glScalef(1./1.1,1./1.1,1./1.1);
984     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
985     redess();
986    
987     }
988     //---------------------------------------------------------------------------
989    
990     void __fastcall Tvisucttform::axeonExecute(TObject *Sender)
991     {
992     axe=1;
993     redess();
994     }
995     //---------------------------------------------------------------------------
996    
997     void __fastcall Tvisucttform::axeoffExecute(TObject *Sender)
998     {
999     axe=0;
1000     redess();
1001     }
1002     //---------------------------------------------------------------------------
1003    
1004     void __fastcall Tvisucttform::shrinkonExecute(TObject *Sender)
1005     {
1006     shrink=1;
1007     redess();
1008     }
1009     //---------------------------------------------------------------------------
1010    
1011     void __fastcall Tvisucttform::shrinkoffExecute(TObject *Sender)
1012     {
1013     shrink=0;
1014     redess();
1015     }
1016     //---------------------------------------------------------------------------
1017    
1018     void __fastcall Tvisucttform::renderonExecute(TObject *Sender)
1019     {
1020     render=1;
1021     redess();
1022     }
1023     //---------------------------------------------------------------------------
1024    
1025     void __fastcall Tvisucttform::renderoffExecute(TObject *Sender)
1026     {
1027     render=0;
1028     redess();
1029     }
1030     //---------------------------------------------------------------------------
1031    
1032     void __fastcall Tvisucttform::xmExecute(TObject *Sender)
1033     {
1034     glMatrixMode(GL_MODELVIEW);
1035     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
1036     glRotatef(-5, 1.0, 0.0, 0.0);
1037     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
1038     redess();
1039     }
1040     //---------------------------------------------------------------------------
1041    
1042     void __fastcall Tvisucttform::xpExecute(TObject *Sender)
1043     {
1044     glMatrixMode(GL_MODELVIEW);
1045     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
1046     glRotatef(5, 1.0, 0.0, 0.0);
1047     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
1048     redess();
1049     }
1050     //---------------------------------------------------------------------------
1051    
1052     void __fastcall Tvisucttform::ymExecute(TObject *Sender)
1053     {
1054     glMatrixMode(GL_MODELVIEW);
1055     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
1056     glRotatef(-5, 0.0, 1.0, 0.0);
1057     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
1058     redess();
1059     }
1060     //---------------------------------------------------------------------------
1061    
1062     void __fastcall Tvisucttform::ypExecute(TObject *Sender)
1063     {
1064     glMatrixMode(GL_MODELVIEW);
1065     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
1066     glRotatef(5, 0.0, 1.0, 0.0);
1067     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
1068     redess();
1069     }
1070     //---------------------------------------------------------------------------
1071    
1072     void __fastcall Tvisucttform::zmExecute(TObject *Sender)
1073     {
1074     glMatrixMode(GL_MODELVIEW);
1075     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
1076     glRotatef(-5, 0.0, 0.0, 1.0);
1077     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
1078     redess();
1079     }
1080     //---------------------------------------------------------------------------
1081    
1082     void __fastcall Tvisucttform::zpExecute(TObject *Sender)
1083     {
1084     glMatrixMode(GL_MODELVIEW);
1085     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
1086     glRotatef(5, 0.0, 0.0, 1.0);
1087     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
1088     redess();
1089     }
1090     //---------------------------------------------------------------------------
1091     TColor __fastcall Tvisucttform::getcolor(double r,double g,double b)
1092     {
1093     int rr=int(r*255.);
1094     int gg=int(g*255.);
1095     int bb=int(b*255.);
1096     int color=rr+(gg<<8)+(bb<<16);
1097     return (TColor)color;
1098     }
1099     //---------------------------------------------------------------------------
1100    
1101     void __fastcall Tvisucttform::f3Execute(TObject *Sender)
1102     {
1103     dx=0.;
1104     dy=0.;
1105     zoom=0;
1106     recadre(dx,dy,1);
1107     initvue();
1108     redess();
1109    
1110     }
1111     //---------------------------------------------------------------------------
1112    
1113     void __fastcall Tvisucttform::f4Execute(TObject *Sender)
1114     {
1115     glMatrixMode(GL_MODELVIEW);
1116     if (zoom>0)
1117     glScalef(1./pow(1.1,zoom),1./pow(1.1,zoom),1./pow(1.1,zoom));
1118     if (zoom<0)
1119     glScalef(pow(1.1,-zoom),pow(1.1,-zoom),pow(1.1,-zoom));
1120     zoom=0;
1121     dx=0;
1122     dy=0;
1123     recadre(dx,dy,1);
1124     redess();
1125    
1126     }
1127     //---------------------------------------------------------------------------
1128    
1129     void __fastcall Tvisucttform::TrackBar1Change(TObject *Sender)
1130     {
1131     if (TrackBar2->Position<TrackBar1->Position) TrackBar2->Position=TrackBar1->Position;
1132     ActiveControl=NULL;
1133     redess();
1134     }
1135     //---------------------------------------------------------------------------
1136    
1137     void __fastcall Tvisucttform::TrackBar2Change(TObject *Sender)
1138     {
1139     if (TrackBar2->Position<TrackBar1->Position) TrackBar1->Position=TrackBar2->Position;
1140     ActiveControl=NULL;
1141     redess();
1142     }
1143     //---------------------------------------------------------------------------
1144    
1145    
1146     void __fastcall Tvisucttform::TrackBar3Change(TObject *Sender)
1147     {
1148     if (TrackBar4->Position<TrackBar3->Position) TrackBar4->Position=TrackBar3->Position;
1149     ActiveControl=NULL;
1150     redess();
1151    
1152     }
1153     //---------------------------------------------------------------------------
1154    
1155     void __fastcall Tvisucttform::TrackBar4Change(TObject *Sender)
1156     {
1157     if (TrackBar4->Position<TrackBar3->Position) TrackBar3->Position=TrackBar4->Position;
1158     ActiveControl=NULL;
1159     redess();
1160     }
1161     //---------------------------------------------------------------------------
1162    
1163     void __fastcall Tvisucttform::TrackBar5Change(TObject *Sender)
1164     {
1165     if (TrackBar6->Position<TrackBar5->Position) TrackBar6->Position=TrackBar5->Position;
1166     ActiveControl=NULL;
1167     redess();
1168     }
1169     //---------------------------------------------------------------------------
1170    
1171     void __fastcall Tvisucttform::TrackBar6Change(TObject *Sender)
1172     {
1173     if (TrackBar6->Position<TrackBar5->Position) TrackBar5->Position=TrackBar6->Position;
1174     ActiveControl=NULL;
1175     redess();
1176     }
1177     //---------------------------------------------------------------------------
1178    
1179     void __fastcall Tvisucttform::ListBox1Click(TObject *Sender)
1180     {
1181     wglMakeCurrent(hdc,hrc);
1182     glClearColor(MainForm->valeurconfig[57],MainForm->valeurconfig[58],MainForm->valeurconfig[59], 0.0f);
1183     ActiveControl=NULL;
1184     redess();
1185     }
1186     //---------------------------------------------------------------------------
1187    
1188     void __fastcall Tvisucttform::Appliquerunefonctionunchamps1Click(
1189     TObject *Sender)
1190     {
1191     afm->ComboBox1->Clear();
1192     afm->ComboBox2->ItemIndex=-1;
1193     for (int i=0;i<nb_renseignement;i++)
1194     afm->ComboBox1->Items->Add(ListBox1->Items->Strings[i]);
1195     afm->ShowModal();
1196     if (afm->etat==1)
1197     {
1198     int k=afm->ComboBox1->ItemIndex;
1199     int operation=afm->ComboBox2->ItemIndex;
1200     int nb=lst_cellule.size();
1201     valmax[k]=-1e308;
1202     valmin[k]=1e308;
1203     for (int i=0;i<nb;i++)
1204     {
1205     celluleaff* cell=lst_cellule[i];
1206     for (int l=0;l<8;l++)
1207     {
1208     double val=cell->get_valeur(k,l);
1209     switch (operation)
1210     {
1211     case 0 : val=fabs(val);break;
1212     case 1 : val=cos(val);break;
1213     case 2 : val=sin(val);break;
1214     case 3 : val=tan(val);break;
1215     case 4 : if ( (val<=1.) && (val>=-1.)) val=acos(val); else val=0.; break;
1216     case 5 : if ( (val<=1.) && (val>=-1.)) val=asin(val); else val=0.; break;
1217     case 6 : val=atan(val);break;
1218     case 7 : if (val>0.) val=log(val); else val=0.; break;
1219     case 8 : val=exp(val);break;
1220     case 9 : if (val>0.) val=log10(val); else val=0; break;
1221     case 10 : val=pow(10,val);break;
1222     case 11 : val=-val;break;
1223    
1224     }
1225     cell->change_valeur(k,l,val);
1226     if (val>valmax[k]) valmax[k]=val;
1227     if (val<valmin[k]) valmin[k]=val;
1228     }
1229     }
1230     switch (operation)
1231     {
1232     case 0 : ListBox1->Items->Strings[k]="| " + ListBox1->Items->Strings[k] + " |";break;
1233     case 1 : ListBox1->Items->Strings[k]="cos(" + ListBox1->Items->Strings[k] + ")";break;
1234     case 2 : ListBox1->Items->Strings[k]="sin(" + ListBox1->Items->Strings[k] + ")";break;
1235     case 3 : ListBox1->Items->Strings[k]="tg(" + ListBox1->Items->Strings[k] + ")";break;
1236     case 4 : ListBox1->Items->Strings[k]="acos(" + ListBox1->Items->Strings[k] + ")";break;
1237     case 5 : ListBox1->Items->Strings[k]="asin(" + ListBox1->Items->Strings[k] + ")";break;
1238     case 6 : ListBox1->Items->Strings[k]="atg(" + ListBox1->Items->Strings[k] + ")";break;
1239     case 7 : ListBox1->Items->Strings[k]="ln(" + ListBox1->Items->Strings[k] + ")";break;
1240     case 8 : ListBox1->Items->Strings[k]="e(" + ListBox1->Items->Strings[k] + ")";break;
1241     case 9 : ListBox1->Items->Strings[k]="log(" + ListBox1->Items->Strings[k] + ")";break;
1242     case 10 : ListBox1->Items->Strings[k]="10(" + ListBox1->Items->Strings[k] + ")";break;
1243     case 11 : ListBox1->Items->Strings[k]="-"+ListBox1->Items->Strings[k];break;
1244     }
1245    
1246     }
1247    
1248     }
1249     //---------------------------------------------------------------------------
1250    
1251    
1252    
1253     void __fastcall Tvisucttform::Enregistrercettecarte1Click(TObject *Sender)
1254     {
1255     if (SaveDialog1->Execute())
1256     {
1257     ofstream o(SaveDialog1->FileName.c_str(),ios::out|ios::trunc);
1258     o.precision(16);
1259     o.setf(ios::showpoint);
1260     int nb=lst_cellule.size();
1261     o << nb_renseignement << " " << xmin << " " << ymin << " " << zmin << " " << xmax << " " << ymax << " " << zmax << " " << pasx << " " << pasy << " " << pasz << endl;
1262     for (int i=0;i<nb_renseignement;i++)
1263     o << ListBox1->Items->Strings[i].c_str() << endl;
1264     for (int i=0;i<nb;i++)
1265     {
1266     celluleaff* cell=lst_cellule[i];
1267     double x1=cell->coordpt1[0];
1268     double y1=cell->coordpt1[1];
1269     double z1=cell->coordpt1[2];
1270     double x2=cell->coordpt7[0];
1271     double y2=cell->coordpt7[1];
1272     double z2=cell->coordpt7[2];
1273     o << x1 << " " << y1 << " " << z1;
1274     for (int i=0;i<nb_renseignement;i++)
1275     o << " " << cell->get_valeur(i,0);
1276     o << endl;
1277     o << x2 << " " << y1 << " " << z1 ;
1278     for (int i=0;i<nb_renseignement;i++)
1279     o << " " << cell->get_valeur(i,1);
1280     o << endl;
1281     o << x2 << " " << y2 << " " << z1 ;
1282     for (int i=0;i<nb_renseignement;i++)
1283     o << " " << cell->get_valeur(i,2);
1284     o << endl;
1285     o << x1 << " " << y2 << " " << z1 ;
1286     for (int i=0;i<nb_renseignement;i++)
1287     o << " " << cell->get_valeur(i,3);
1288     o << endl;
1289     o << x1 << " " << y1 << " " << z2 ;
1290     for (int i=0;i<nb_renseignement;i++)
1291     o << " " << cell->get_valeur(i,4);
1292     o << endl;
1293     o << x2 << " " << y1 << " " << z2 ;
1294     for (int i=0;i<nb_renseignement;i++)
1295     o << " " << cell->get_valeur(i,5);
1296     o << endl;
1297     o << x2 << " " << y2 << " " << z2 ;
1298     for (int i=0;i<nb_renseignement;i++)
1299     o << " " << cell->get_valeur(i,6);
1300     o << endl;
1301     o << x1 << " " << y2 << " " << z2 ;
1302     for (int i=0;i<nb_renseignement;i++)
1303     o << " " << cell->get_valeur(i,7);
1304     o << endl;
1305     }
1306    
1307     }
1308    
1309     }
1310     //---------------------------------------------------------------------------
1311    
1312    
1313     void __fastcall Tvisucttform::Composer1Click(TObject *Sender)
1314     {
1315     comc->ShowModal();
1316     if (comc->etat==1)
1317     {
1318     FILE *in;
1319     in=fopen(comc->Label2->Caption.c_str(),"rt");
1320     char mess[400];
1321     fgets(mess,400,in);
1322     int nb_renseignement2;
1323     double xmin2,ymin2,zmin2;
1324     double xmax2,ymax2,zmax2;
1325     int pasx2,pasy2,pasz2;
1326     sscanf(mess,"%d %lf %lf %lf %lf %lf %lf %d %d %d",&nb_renseignement2,&xmin2,&ymin2,&zmin2,&xmax2,&ymax2,&zmax2,&pasx2,&pasy2,&pasz2);
1327     if (nb_renseignement!=nb_renseignement2)
1328     {
1329     MessageBox(Handle,"Carte de taille imcompatible","Erreur",0);
1330     fclose(in);
1331     return;
1332     }
1333     for (int i=0;i<nb_renseignement;i++)
1334     fgets(mess,400,in);
1335     vector<celluleaff*> lst_cellule2;
1336     while (feof(in)==0)
1337     {
1338     char mess[400];
1339     celluleaff* cell=new celluleaff(nb_renseignement2);
1340     fgets(mess,400,in);
1341     sscanf(mess,"%lf %lf %lf",&(cell->coordpt1[0]),&(cell->coordpt1[1]),&(cell->coordpt1[2]));
1342     char *p=strchr(mess,' ')+1;
1343     p=strchr(p,' ')+1;
1344     for (int l=0;l<nb_renseignement2;l++)
1345     {
1346     double val;
1347     p=strchr(p,' ')+1;
1348     sscanf(p,"%lf",&val);
1349     cell->change_valeur(l,0,val);
1350     }
1351     fgets(mess,400,in);
1352     sscanf(mess,"%lf %lf %lf",&(cell->coordpt2[0]),&(cell->coordpt2[1]),&(cell->coordpt2[2]));
1353     p=strchr(mess,' ')+1;
1354     p=strchr(p,' ')+1;
1355     for (int l=0;l<nb_renseignement2;l++)
1356     {
1357     double val;
1358     p=strchr(p,' ')+1;
1359     sscanf(p,"%lf",&val);
1360     cell->change_valeur(l,1,val);
1361     }
1362     fgets(mess,400,in);
1363     sscanf(mess,"%lf %lf %lf",&(cell->coordpt3[0]),&(cell->coordpt3[1]),&(cell->coordpt3[2]));
1364     p=strchr(mess,' ')+1;
1365     p=strchr(p,' ')+1;
1366     for (int l=0;l<nb_renseignement2;l++)
1367     {
1368     double val;
1369     p=strchr(p,' ')+1;
1370     sscanf(p,"%lf",&val);
1371     cell->change_valeur(l,2,val);
1372     }
1373     fgets(mess,400,in);
1374     sscanf(mess,"%lf %lf %lf",&(cell->coordpt4[0]),&(cell->coordpt4[1]),&(cell->coordpt4[2]));
1375     p=strchr(mess,' ')+1;
1376     p=strchr(p,' ')+1;
1377     for (int l=0;l<nb_renseignement2;l++)
1378     {
1379     double val;
1380     p=strchr(p,' ')+1;
1381     sscanf(p,"%lf",&val);
1382     cell->change_valeur(l,3,val);
1383     }
1384     fgets(mess,400,in);
1385     sscanf(mess,"%lf %lf %lf",&(cell->coordpt5[0]),&(cell->coordpt5[1]),&(cell->coordpt5[2]));
1386     p=strchr(mess,' ')+1;
1387     p=strchr(p,' ')+1;
1388     for (int l=0;l<nb_renseignement2;l++)
1389     {
1390     double val;
1391     p=strchr(p,' ')+1;
1392     sscanf(p,"%lf",&val);
1393     cell->change_valeur(l,4,val);
1394     }
1395     fgets(mess,400,in);
1396     sscanf(mess,"%lf %lf %lf",&(cell->coordpt6[0]),&(cell->coordpt6[1]),&(cell->coordpt6[2]));
1397     p=strchr(mess,' ')+1;
1398     p=strchr(p,' ')+1;
1399     for (int l=0;l<nb_renseignement2;l++)
1400     {
1401     double val;
1402     p=strchr(p,' ')+1;
1403     sscanf(p,"%lf",&val);
1404     cell->change_valeur(l,5,val);
1405     }
1406     fgets(mess,400,in);
1407     sscanf(mess,"%lf %lf %lf",&(cell->coordpt7[0]),&(cell->coordpt7[1]),&(cell->coordpt7[2]));
1408     p=strchr(mess,' ')+1;
1409     p=strchr(p,' ')+1;
1410     for (int l=0;l<nb_renseignement2;l++)
1411     {
1412     double val;
1413     p=strchr(p,' ')+1;
1414     sscanf(p,"%lf",&val);
1415     cell->change_valeur(l,6,val);
1416     }
1417     fgets(mess,400,in);
1418     sscanf(mess,"%lf %lf %lf",&(cell->coordpt8[0]),&(cell->coordpt8[1]),&(cell->coordpt8[2]));
1419     p=strchr(mess,' ')+1;
1420     p=strchr(p,' ')+1;
1421     for (int l=0;l<nb_renseignement2;l++)
1422     {
1423     double val;
1424     p=strchr(p,' ')+1;
1425     sscanf(p,"%lf",&val);
1426     cell->change_valeur(l,7,val);
1427     }
1428     lst_cellule2.insert(lst_cellule2.end(),cell);
1429     }
1430     fclose(in);
1431    
1432     TPL_GRILLE<celluleaff*> grille;
1433     grille.initialiser(xmin-1.,ymin-1.,zmin-1.,xmax+1.,ymax+1.,zmax+1.,pasx,pasy,pasz);
1434     int nb2=lst_cellule2.size();
1435     for (int i=0;i<nb2;i++)
1436     grille.inserer(lst_cellule2[i]);
1437     int nb=lst_cellule.size();
1438     for (int k=0;k<nb_renseignement;k++)
1439     {
1440     valmin[k]=1e308;
1441     valmax[k]=-1e308;
1442     }
1443     for (int i=0;i<nb;i++)
1444     {
1445     celluleaff *cell=lst_cellule[i];
1446     for (int k=0;k<nb_renseignement;k++)
1447     {
1448     for (int l=0;l<8;l++)
1449     {
1450     double val=cell->get_valeur(k,l);
1451     double *xyz;
1452     if (l==0) xyz=cell->coordpt1;
1453     if (l==1) xyz=cell->coordpt2;
1454     if (l==2) xyz=cell->coordpt3;
1455     if (l==3) xyz=cell->coordpt4;
1456     if (l==4) xyz=cell->coordpt5;
1457     if (l==5) xyz=cell->coordpt6;
1458     if (l==6) xyz=cell->coordpt7;
1459     if (l==7) xyz=cell->coordpt8;
1460     TPL_MAP_ENTITE<celluleaff*> list_trouve;
1461     grille.rechercher(xyz[0],xyz[1],xyz[2],0.,list_trouve);
1462     int nbtrouve=list_trouve.get_nb();
1463     for (int itrou=0;itrou<nbtrouve;itrou++)
1464     {
1465     celluleaff* cell2=list_trouve.get(itrou);
1466     BOITE_3D boite1=cell2->get_boite_3D();
1467     double xsi=-1+2*(xyz[0]-boite1.get_xmin())/(boite1.get_xmax()-boite1.get_xmin());
1468     double eta=-1+2*(xyz[1]-boite1.get_ymin())/(boite1.get_ymax()-boite1.get_ymin());
1469     double psi=-1+2*(xyz[2]-boite1.get_zmin())/(boite1.get_zmax()-boite1.get_zmin());
1470     if ((xsi<1.0000000001) && (xsi>-1.0000000001) )
1471     if ((eta<1.0000000001) && (eta>-1.0000000001) )
1472     if ((psi<1.0000000001) && (psi>-1.0000000001) )
1473     {
1474     double a1=1+xsi;
1475     double b1=1+eta;
1476     double c1=1+psi;
1477     double a2=1-xsi;
1478     double b2=1-eta;
1479     double c2=1-psi;
1480     double N1=a2*b2*c2;
1481     double N3=a1*b1*c2;
1482     double N2=a1*b2*c2;
1483     double N4=a2*b1*c2;
1484     double N5=a2*b2*c1;
1485     double N6=a1*b2*c1;
1486     double N7=a1*b1*c1;
1487     double N8=a2*b1*c1;
1488     double valeur1=cell2->get_valeur(k,0);
1489     double valeur2=cell2->get_valeur(k,1);
1490     double valeur3=cell2->get_valeur(k,2);
1491     double valeur4=cell2->get_valeur(k,3);
1492     double valeur5=cell2->get_valeur(k,4);
1493     double valeur6=cell2->get_valeur(k,5);
1494     double valeur7=cell2->get_valeur(k,6);
1495     double valeur8=cell2->get_valeur(k,7);
1496     double res=N1*valeur1+N2*valeur2+N3*valeur3+N4*valeur4+N5*valeur5+N6*valeur6+N7*valeur7+N8*valeur8;
1497     res=res/8.;
1498     if (comc->ComboBox1->Text=="+") val=val+res;
1499     if (comc->ComboBox1->Text=="-") val=val-res;
1500     if (comc->ComboBox1->Text=="*") val=val*res;
1501     if (comc->ComboBox1->Text=="-%")
1502     if (fabs(val)<1e-10) val=0.; else val=(val-res)/val;
1503     cell->change_valeur(k,l,val);
1504     if (val>valmax[k]) valmax[k]=val;
1505     if (val<valmin[k]) valmin[k]=val;
1506     itrou=nbtrouve+1;
1507     }
1508     }
1509     }
1510     }
1511     }
1512    
1513    
1514     for (int i=0;i<nb2;i++)
1515     delete lst_cellule2[i];
1516     }
1517     }
1518     //---------------------------------------------------------------------------
1519    
1520     void __fastcall Tvisucttform::UpDown1Click(TObject *Sender,
1521     TUDBtnType Button)
1522     {
1523     int numvaleur=ListBox1->ItemIndex;
1524     double ecart=valmax[numvaleur]-valmin[numvaleur];
1525     if (Button==0) valmax[numvaleur]=ecart/2.*1.1+0.5*(valmin[numvaleur]+valmax[numvaleur]);
1526     if (Button==1) valmax[numvaleur]=ecart/2./1.1+0.5*(valmin[numvaleur]+valmax[numvaleur]);
1527     ecart=valmax[numvaleur]-valmin[numvaleur];
1528     if (ecart<1e-10) valmax[numvaleur]=valmin[numvaleur]+1e-10;
1529     redess();
1530    
1531     }
1532     //---------------------------------------------------------------------------
1533    
1534     void __fastcall Tvisucttform::UpDown2Click(TObject *Sender,
1535     TUDBtnType Button)
1536     {
1537     int numvaleur=ListBox1->ItemIndex;
1538     double ecart=valmax[numvaleur]-valmin[numvaleur];
1539     if (Button==0) valmin[numvaleur]=0.5*(valmin[numvaleur]+valmax[numvaleur])-ecart/2./1.1;
1540     if (Button==1) valmin[numvaleur]=0.5*(valmin[numvaleur]+valmax[numvaleur])-ecart/2.*1.1;
1541     ecart=valmax[numvaleur]-valmin[numvaleur];
1542     if (ecart<1e-10) valmin[numvaleur]=valmax[numvaleur]-1e-10;
1543     redess();
1544     }
1545     //---------------------------------------------------------------------------
1546    
1547     void __fastcall Tvisucttform::CheckBox1Click(TObject *Sender)
1548     {
1549     static double valmaxenreg[100];
1550     static double valminenreg[100];
1551     if (CheckBox1->Checked)
1552     {
1553     UpDown1->Visible=false;
1554     UpDown2->Visible=false;
1555     for (int i=0;i<nb_renseignement;i++)
1556     {
1557     valmax[i]=valmaxenreg[i];
1558     valmin[i]=valminenreg[i];
1559     }
1560     }
1561     else
1562     {
1563     UpDown1->Visible=true;
1564     UpDown2->Visible=true;
1565     for (int i=0;i<nb_renseignement;i++)
1566     {
1567     valmaxenreg[i]=valmax[i];
1568     valminenreg[i]=valmin[i];
1569     }
1570     }
1571     redess();
1572     }
1573     //---------------------------------------------------------------------------
1574    
1575     void __fastcall Tvisucttform::CheckBox2Click(TObject *Sender)
1576     {
1577     if (Panel2->Visible==true) Panel2->Visible=false; else Panel2->Visible=true;
1578     }
1579     //---------------------------------------------------------------------------
1580    
1581     void __fastcall Tvisucttform::Button1Click(TObject *Sender)
1582     {
1583     double x=atof(Edit1->Text.c_str());
1584     double y=atof(Edit2->Text.c_str());
1585     double z=atof(Edit3->Text.c_str());
1586     Edit4->Text="";
1587     double res=evaluer(x,y,z);
1588     Edit4->Text=res;
1589     }
1590     //---------------------------------------------------------------------------
1591     double __fastcall Tvisucttform::evaluer(double x,double y,double z)
1592     {
1593     TPL_MAP_ENTITE<celluleaff*> liste;
1594     grille->rechercher(x,y,z,1e-10,liste);
1595     int nb=liste.get_nb();
1596     for (int i=0;i<nb;i++)
1597     {
1598     celluleaff* cell=liste.get(i);
1599     BOITE_3D boite=cell->get_boite_3D();
1600     if (boite.contient(x,y,z))
1601     {
1602     double xsi=-1+2*(x-boite.get_xmin())/(boite.get_xmax()-boite.get_xmin());
1603     double eta=-1+2*(y-boite.get_ymin())/(boite.get_ymax()-boite.get_ymin());
1604     double psi=-1+2*(z-boite.get_zmin())/(boite.get_zmax()-boite.get_zmin());
1605     double a1=1+xsi;
1606     double b1=1+eta;
1607     double c1=1+psi;
1608     double a2=1-xsi;
1609     double b2=1-eta;
1610     double c2=1-psi;
1611     double N1=a2*b2*c2;
1612     double N3=a1*b1*c2;
1613     double N2=a1*b2*c2;
1614     double N4=a2*b1*c2;
1615     double N5=a2*b2*c1;
1616     double N6=a1*b2*c1;
1617     double N7=a1*b1*c1;
1618     double N8=a2*b1*c1;
1619     int k=ListBox1->ItemIndex;
1620     double valeur1=cell->get_valeur(k,0);
1621     double valeur2=cell->get_valeur(k,1);
1622     double valeur3=cell->get_valeur(k,2);
1623     double valeur4=cell->get_valeur(k,3);
1624     double valeur5=cell->get_valeur(k,4);
1625     double valeur6=cell->get_valeur(k,5);
1626     double valeur7=cell->get_valeur(k,6);
1627     double valeur8=cell->get_valeur(k,7);
1628     double res=N1*valeur1+N2*valeur2+N3*valeur3+N4*valeur4+N5*valeur5+N6*valeur6+N7*valeur7+N8*valeur8;
1629     res=res/8.;
1630     return(res);
1631     }
1632     }
1633     return(0);
1634     }
1635     //---------------------------------------------------------------------------
1636    
1637     void __fastcall Tvisucttform::Button2Click(TObject *Sender)
1638     {
1639     double x=atof(Edit5->Text.c_str());
1640     double y=atof(Edit6->Text.c_str());
1641     double z=atof(Edit7->Text.c_str());
1642     double dx=atof(Edit8->Text.c_str());
1643     double dy=atof(Edit9->Text.c_str());
1644     double dz=atof(Edit10->Text.c_str());
1645     double tmin=atof(Edit11->Text.c_str());
1646     double tmax=atof(Edit12->Text.c_str());
1647     int nbpoint=atoi(Edit13->Text.c_str());
1648    
1649     Tgraph *form2=new Tgraph(Application);
1650     form2->Width=MainForm->ClientWidth/2.;
1651     form2->Height=MainForm->ClientHeight/2.;
1652     form2->Left=MainForm->ClientWidth/2.+1;
1653     form2->Top=0;
1654     form2->Caption=Caption;
1655     form2->Series1->Clear();
1656     form2->Chart1->Title->Text->Clear();
1657     char chaine[500];
1658     sprintf(chaine,"Courbe de valeur de la carte de taille pour le critère %s",ListBox1->Items->Strings[ListBox1->ItemIndex].c_str());
1659     form2->Chart1->Title->Text->Add(chaine);
1660     form2->Chart1->LeftAxis->Title->Caption="Valeur";
1661     form2->Chart1->BottomAxis->Title->Caption="t";
1662    
1663     for (int i=0;i<=nbpoint;i++)
1664     {
1665     double t=tmin+i*1.0/nbpoint*(tmax-tmin);
1666     double xx=x+t*dx;
1667     double yy=y+t*dy;
1668     double zz=z+t*dz;
1669     double res=evaluer(xx,yy,zz);
1670     form2->Series1->AddXY(t,res,"",clRed);
1671     }
1672     }
1673     //---------------------------------------------------------------------------
1674    
1675     void __fastcall Tvisucttform::Button3Click(TObject *Sender)
1676     {
1677     if (SaveDialog1->Execute())
1678     {
1679     double x=atof(Edit5->Text.c_str());
1680     double y=atof(Edit6->Text.c_str());
1681     double z=atof(Edit7->Text.c_str());
1682     double dx=atof(Edit8->Text.c_str());
1683     double dy=atof(Edit9->Text.c_str());
1684     double dz=atof(Edit10->Text.c_str());
1685     double tmin=atof(Edit11->Text.c_str());
1686     double tmax=atof(Edit12->Text.c_str());
1687     int nbpoint=atoi(Edit13->Text.c_str());
1688     FILE *in=fopen(SaveDialog1->FileName.c_str(),"wt");
1689     for (int i=0;i<=nbpoint;i++)
1690     {
1691     double t=tmin+i*1.0/nbpoint*(tmax-tmin);
1692     double xx=x+t*dx;
1693     double yy=y+t*dy;
1694     double zz=z+t*dz;
1695     double res=evaluer(xx,yy,zz);
1696     fprintf(in,"%lf;%lf;%lf;%lf;%lf;\n",t,xx,yy,zz,res);
1697     }
1698     fclose(in);
1699     }
1700     }
1701     //---------------------------------------------------------------------------
1702    
1703 francois 98 void __fastcall Tvisucttform::maillageoctalExecute(TObject *Sender)
1704     {
1705     TVisuMagicform *Child;
1706     Child = new TVisuMagicform(Application,MainForm,NULL);
1707     Child->RadioButton1->Enabled=false;
1708     Child->RadioButton6->Enabled=false;
1709     Child->RadioButton7->Enabled=false;
1710     Child->RadioButton8->Enabled=true;
1711     Child->GroupBox3->Visible=false;
1712     Child->GroupBox4->Visible=false;
1713     Child->GroupBox5->Visible=true;
1714     Child->RadioButton8->Checked=true;
1715     Child->Caption=Caption;
1716     Child->Button1->Enabled=true;
1717     FILE* in=fopen(Caption.c_str(),"rt");
1718     if (in!=NULL)
1719     {
1720     std::ftime ft;
1721     getftime(fileno(in), &ft);
1722     char mess[1000];
1723     sprintf(mess,"Heure fichier: %02u:%02u:%02u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
1724     MainForm->StatusBar->Panels->Items[3]->Text=mess;
1725     sprintf(mess,"Jour fichier: %02u/%02u/%02u\n",ft.ft_day, ft.ft_month,ft.ft_year+1980);
1726     MainForm->StatusBar->Panels->Items[4]->Text=mess;
1727     fclose(in);
1728     }
1729     }
1730     //---------------------------------------------------------------------------
1731