ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/VMM/win32/visuctt.cpp
Revision: 34
Committed: Wed Aug 15 18:04:10 2007 UTC (18 years ago) by bournival
Original Path: magic/app/VMM/VMM/win32/visuctt.cpp
File size: 79497 byte(s)
Log Message:
Sylvain,
Je coupe les coques maintenant, alors je dois les importer d'un efaçon un peu différente.
Quelques autres trucs ailleur, surtout pour les coques et poutres

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