ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/VMM/VMM/win32/visuwin.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (18 years, 2 months ago)
File size: 195445 byte(s)
Log Message:

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     // visuwin.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     #include "magicform.h"
31     #include "main.h"
32     #include "visuwin.h"
33     #include "veriwin.h"
34     #include "visuctt.h"
35     #include "visuarbre.h"
36     #include "config.h"
37     #include "ccfwin.h"
38     #include "carte3dform.h"
39     #include "matwin.h"
40     #include "importcosmos.h"
41     #include "importcarte.h"
42     #include "tpl_grille.h"
43     #include "ot_boite_3d.h"
44     #include "visuparametrique.h"
45     #include "solveur.h"
46     #include "recons.h"
47    
48     //---------------------------------------------------------------------------
49     #pragma package(smart_init)
50     #pragma resource "*.dfm"
51     TVisuWinform *VisuWinform;
52     //---------------------------------------------------------------------------
53     __fastcall TVisuWinform::TVisuWinform(TComponent* Owner)
54     : TForm(Owner),zoom(0),dx(0.0),dy(0.0),debut_trans(false),shrink(0),facteur_shrink(0.8),qualite(0),render(0),axe(0),noeud(0),affnoeud(0),affmaille(0),maille(7),debut_rot(0)
55     {
56     }
57     //---------------------------------------------------------------------------
58     void __fastcall TVisuWinform::FormClose(TObject *Sender,
59     TCloseAction &Action)
60     {
61     MainForm->ToolBar1->Visible=false;
62     MainForm->ToolBar3->Visible=false;
63     lst_visu.clear();
64     if (gest!=NULL) delete gest;
65     MainForm->StatusBar->Panels->Items[3]->Text="";
66     MainForm->StatusBar->Panels->Items[4]->Text="";
67     Action=caFree;
68     }
69     //---------------------------------------------------------------------------
70    
71     void __fastcall TVisuWinform::FormActivate(TObject *Sender)
72     {
73     MainForm->ToolBar1->Visible=true;
74     MainForm->ToolBar3->Visible=true;
75     MainForm->activewinform=this;
76     MainForm->ToolButton6->ImageIndex=iconeactive;
77     FILE* in=fopen(Caption.c_str(),"rt");
78     if (in!=NULL)
79     {
80     std::ftime ft;
81     getftime(fileno(in), &ft);
82     char mess[1000];
83     sprintf(mess,"Heure fichier: %02u:%02u:%02u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
84     MainForm->StatusBar->Panels->Items[3]->Text=mess;
85     sprintf(mess,"Jour fichier: %02u/%02u/%02u\n",ft.ft_day, ft.ft_month,ft.ft_year+1980);
86     MainForm->StatusBar->Panels->Items[4]->Text=mess;
87     fclose(in);
88     }
89     }
90     //---------------------------------------------------------------------------
91    
92     void __fastcall TVisuWinform::FormDeactivate(TObject *Sender)
93     {
94     MainForm->ToolBar1->Visible=false;
95     MainForm->ToolBar3->Visible=false;
96     MainForm->activewinform=NULL;
97     iconeactive=MainForm->ToolButton6->ImageIndex;
98     MainForm->StatusBar->Panels->Items[3]->Text="";
99     MainForm->StatusBar->Panels->Items[4]->Text="";
100     }
101     //---------------------------------------------------------------------------
102    
103    
104     void __fastcall TVisuWinform::lancermagicExecute(TObject *Sender)
105     {
106     TVisuMagicform *Child;
107     Child = new TVisuMagicform(Application,MainForm);
108     Child->Caption=Caption;
109     FILE* in=fopen(Caption.c_str(),"rt");
110     if (in!=NULL)
111     {
112     std::ftime ft;
113     getftime(fileno(in), &ft);
114     char mess[1000];
115     sprintf(mess,"Heure fichier: %02u:%02u:%02u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
116     MainForm->StatusBar->Panels->Items[3]->Text=mess;
117     sprintf(mess,"Jour fichier: %02u/%02u/%02u\n",ft.ft_day, ft.ft_month,ft.ft_year+1980);
118     MainForm->StatusBar->Panels->Items[4]->Text=mess;
119     fclose(in);
120     }
121     }
122     //---------------------------------------------------------------------------
123    
124    
125     void __fastcall TVisuWinform::miseajourarbre(void)
126     {
127     int nb_geometrie=gest->get_nb_mg_geometrie();
128     int nb_maillage=gest->get_nb_mg_maillage();
129     int nb_fem_maillage=gest->get_nb_fem_maillage();
130     TreeView1->Items->Clear();
131     TreeView1->Items->Add(NULL,"Modèle MAGiC");
132     TTreeNode *root = TreeView1->Items->Item[0];
133     root->ImageIndex=7;
134     root->SelectedIndex=7;
135     root->StateIndex=7;
136     TTreeNode *rootg= TreeView1->Items->AddChild(root,"Géométrie");
137     rootg->ImageIndex=7;
138     rootg->SelectedIndex=7;
139     rootg->StateIndex=7;
140     for (int i=0;i<nb_geometrie;i++)
141     {
142     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
143     char mess[100];
144     sprintf(mess,"%lu",mggeo->get_id());
145     TTreeNode* georoot=TreeView1->Items->AddChild(rootg,mess);
146     georoot->ImageIndex=7;
147     georoot->SelectedIndex=7;
148     georoot->StateIndex=7;
149     TTreeNode* nodvol=TreeView1->Items->AddChild(georoot,"Volume");
150     nodvol->ImageIndex=7;
151     nodvol->SelectedIndex=7;
152     nodvol->StateIndex=7;
153     int nbvol=mggeo->get_nb_mg_volume();
154     for (int j=0;j<nbvol;j++)
155     {
156     MG_VOLUME* mgvol=mggeo->get_mg_volume(j);
157     char mess[100];
158     sprintf(mess,"%lu",mgvol->get_id());
159     TTreeNode* node=TreeView1->Items->AddChild(nodvol,mess);
160     node->ImageIndex=-1;
161     node->SelectedIndex=-1;
162     node->StateIndex=-1;
163     }
164     TTreeNode* nodfac=TreeView1->Items->AddChild(georoot,"Face");
165     nodfac->ImageIndex=7;
166     nodfac->SelectedIndex=7;
167     nodfac->StateIndex=7;
168     int nbface=mggeo->get_nb_mg_face();
169     for (int j=0;j<nbface;j++)
170     {
171     MG_FACE* mgface=mggeo->get_mg_face(j);
172     char mess[100];
173     sprintf(mess,"%lu",mgface->get_id());
174     TTreeNode* node=TreeView1->Items->AddChild(nodfac,mess);
175     node->ImageIndex=-1;
176     node->SelectedIndex=-1;
177     node->StateIndex=-1;
178     }
179     TTreeNode* nodare=TreeView1->Items->AddChild(georoot,"Arête");
180     nodare->ImageIndex=7;
181     nodare->SelectedIndex=7;
182     nodare->StateIndex=7;
183     int nbare=mggeo->get_nb_mg_arete();
184     for (int j=0;j<nbare;j++)
185     {
186     MG_ARETE* mgare=mggeo->get_mg_arete(j);
187     char mess[100];
188     sprintf(mess,"%lu",mgare->get_id());
189     TTreeNode* node=TreeView1->Items->AddChild(nodare,mess);
190     node->ImageIndex=-1;
191     node->SelectedIndex=-1;
192     node->StateIndex=-1;
193     }
194     TTreeNode* nodsom=TreeView1->Items->AddChild(georoot,"Sommet");
195     nodsom->ImageIndex=7;
196     nodsom->SelectedIndex=7;
197     nodsom->StateIndex=7;
198     int nbsommet=mggeo->get_nb_mg_sommet();
199     for (int j=0;j<nbsommet;j++)
200     {
201     MG_SOMMET* mgsom=mggeo->get_mg_sommet(j);
202     char mess[100];
203     sprintf(mess,"%lu",mgsom->get_id());
204     TTreeNode* node=TreeView1->Items->AddChild(nodsom,mess);
205     node->ImageIndex=-1;
206     node->SelectedIndex=-1;
207     node->StateIndex=-1;
208     }
209     }
210     TTreeNode *rootm= TreeView1->Items->AddChild(root,"Maillage géométrique");
211     rootm->ImageIndex=7;
212     rootm->SelectedIndex=7;
213     rootm->StateIndex=7;
214     for (int i=0;i<nb_maillage;i++)
215     {
216     MG_MAILLAGE* mgmai=gest->get_mg_maillage(i);
217     char mess[100];
218     sprintf(mess,"%lu",mgmai->get_id());
219     TTreeNode* mairoot=TreeView1->Items->AddChild(rootm,mess);
220     mairoot->ImageIndex=7;
221     mairoot->SelectedIndex=7;
222     mairoot->StateIndex=7;
223     TTreeNode* node=TreeView1->Items->AddChild(mairoot,"Maillage 1D");
224     node->ImageIndex=-1;
225     node->SelectedIndex=-1;
226     node->StateIndex=-1;
227     node=TreeView1->Items->AddChild(mairoot,"Maillage 2D");
228     node->ImageIndex=-1;
229     node->SelectedIndex=-1;
230     node->StateIndex=-1;
231     node=TreeView1->Items->AddChild(mairoot,"Maillage 3D");
232     node->ImageIndex=-1;
233     node->SelectedIndex=-1;
234     node->StateIndex=-1;
235     }
236     TTreeNode *rootmfem=TreeView1->Items->AddChild(root,"Maillage FEM");
237     rootmfem->ImageIndex=7;
238     rootmfem->SelectedIndex=7;
239     rootmfem->StateIndex=7;
240     for (int i=0;i<nb_fem_maillage;i++)
241     {
242     FEM_MAILLAGE* femmai=gest->get_fem_maillage(i);
243     char mess[100];
244     sprintf(mess,"%lu",femmai->get_id());
245     TTreeNode* mairoot=TreeView1->Items->AddChild(rootmfem,mess);
246     mairoot->ImageIndex=7;
247     mairoot->SelectedIndex=7;
248     mairoot->StateIndex=7;
249     TTreeNode* node=TreeView1->Items->AddChild(mairoot,"Maillage 1D");
250     node->ImageIndex=-1;
251     node->SelectedIndex=-1;
252     node->StateIndex=-1;
253     node=TreeView1->Items->AddChild(mairoot,"Maillage 2D");
254     node->ImageIndex=-1;
255     node->SelectedIndex=-1;
256     node->StateIndex=-1;
257     node=TreeView1->Items->AddChild(mairoot,"Maillage 3D");
258     node->ImageIndex=-1;
259     node->SelectedIndex=-1;
260     node->StateIndex=-1;
261     }
262     changeimage(rootg,46);
263     initliste();
264     ComboBox1->Clear();
265     int nb=gest->get_nb_mg_solution();
266     for (int i=0;i<nb;i++)
267     {
268     MG_SOLUTION* sol=gest->get_mg_solution(i);
269     ComboBox1->Items->Add(sol->get_nom().c_str());
270     }
271     nb=gest->get_nb_fem_solution();
272     for (int i=0;i<nb;i++)
273     {
274     FEM_SOLUTION* sol=gest->get_fem_solution(i);
275     ComboBox1->Items->Add(sol->get_nom().c_str());
276     }
277     }
278    
279     void __fastcall TVisuWinform::initliste(void)
280     {
281     lst_face.vide();
282     lst_arete.vide();
283     lst_sommet.vide();
284     lst_volume.vide();
285     lst_m1d.vide();
286     lst_m2d.vide();
287     lst_m3d.vide();
288     lst_segment.clear();
289     lst_triangle.clear();
290     lst_tetra.clear();
291     lst_noeud.clear();
292     lst_m1d_fem.vide();
293     lst_m2d_fem.vide();
294     lst_m3d_fem.vide();
295     lst_segment_fem.clear();
296     lst_triangle_fem.clear();
297     lst_tetra_fem.clear();
298     lst_noeud_fem.clear();
299     TTreeNode *root = TreeView1->Items->Item[0];
300     TTreeNode *rootg = root->Item[0];
301     int nb_geo=rootg->Count;
302     if (nb_geo>0)
303     {
304     for (int i=0;i<nb_geo;i++)
305     {
306     TTreeNode *geo = rootg->Item[i];
307     MG_GEOMETRIE* mggeo=gest->get_mg_geometrieid(atol(geo->Text.c_str()));
308     TTreeNode *geovol = geo->Item[0];
309     int nb=geovol->Count;
310     for (int j=0;j<nb;j++)
311     {
312     TTreeNode *node=geovol->Item[j];
313     if (node->ImageIndex==46)
314     {
315     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(atol(node->Text.c_str()));
316     lst_volume.ajouter(mgvol);
317     }
318     }
319     TTreeNode *geoface = geo->Item[1];
320     nb=geoface->Count;
321     for (int j=0;j<nb;j++)
322     {
323     TTreeNode *node=geoface->Item[j];
324     if (node->ImageIndex==46)
325     {
326     MG_FACE* mgfac=mggeo->get_mg_faceid(atol(node->Text.c_str()));
327     lst_face.ajouter(mgfac);
328     }
329     }
330     TTreeNode *geoarete = geo->Item[2];
331     nb=geoarete->Count;
332     for (int j=0;j<nb;j++)
333     {
334     TTreeNode *node=geoarete->Item[j];
335     if (node->ImageIndex==46)
336     {
337     MG_ARETE* mgarete=mggeo->get_mg_areteid(atol(node->Text.c_str()));
338     lst_arete.ajouter(mgarete);
339     }
340     }
341     TTreeNode *geosommet = geo->Item[3];
342     nb=geosommet->Count;
343     for (int j=0;j<nb;j++)
344     {
345     TTreeNode *node=geosommet->Item[j];
346     if (node->ImageIndex==46)
347     {
348     MG_SOMMET* mgsommet=mggeo->get_mg_sommetid(atol(node->Text.c_str()));
349     lst_sommet.ajouter(mgsommet);
350     }
351     }
352    
353     }
354    
355     TTreeNode *rootm = root->Item[1];
356     int nb_mai=rootm->Count;
357     for (int i=0;i<nb_mai;i++)
358     {
359     TTreeNode *mai = rootm->Item[i];
360     MG_MAILLAGE* mgmai=gest->get_mg_maillageid(atol(mai->Text.c_str()));
361     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
362     {
363     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
364     if (sol==NULL) continue;
365     unsigned long idmai=sol->get_maillage()->get_id();
366     if (mgmai->get_id()!=idmai) continue;
367     }
368     TTreeNode *mai1d = mai->Item[0];
369     if (mai1d->ImageIndex==46) lst_m1d.ajouter(mgmai);
370     TTreeNode *mai2d = mai->Item[1];
371     if (mai2d->ImageIndex==46) lst_m2d.ajouter(mgmai);
372     TTreeNode *mai3d = mai->Item[2];
373     if (mai3d->ImageIndex==46) lst_m3d.ajouter(mgmai);
374     }
375    
376     TTreeNode *rootmfem = root->Item[2];
377     int nb_mai_fem=rootmfem->Count;
378     for (int i=0;i<nb_mai_fem;i++)
379     {
380     TTreeNode *mai = rootmfem->Item[i];
381     FEM_MAILLAGE* femmai=gest->get_fem_maillageid(atol(mai->Text.c_str()));
382     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
383     {
384     FEM_SOLUTION* sol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
385     if (sol==NULL) continue;
386     unsigned long idmai=sol->get_maillage()->get_id();
387     if (femmai->get_id()!=idmai) continue;
388     }
389     TTreeNode *mai1d = mai->Item[0];
390     if (mai1d->ImageIndex==46) lst_m1d_fem.ajouter(femmai);
391     TTreeNode *mai2d = mai->Item[1];
392     if (mai2d->ImageIndex==46) lst_m2d_fem.ajouter(femmai);
393     TTreeNode *mai3d = mai->Item[2];
394     if (mai3d->ImageIndex==46) lst_m3d_fem.ajouter(femmai);
395     }
396    
397     for (int i=0;i<lst_volume.get_nb();i++)
398     {
399     MG_VOLUME* mgvol=lst_volume.get(i);
400     int nb_m3d=lst_m3d.get_nb();
401     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_tet;
402     for (MG_TETRA* mgtet=(MG_TETRA*)mgvol->get_lien_maillage()->get_premier(it_tet);mgtet;mgtet=(MG_TETRA*)mgvol->get_lien_maillage()->get_suivant(it_tet))
403     {
404     int ok=0;
405     for (int k=0;k<nb_m3d;k++)
406     {
407     MG_MAILLAGE* mgmai=lst_m3d.get(k);
408     MG_TETRA* tetemp=mgmai->get_mg_tetraid(mgtet->get_id());
409     if (tetemp!=NULL) ok=1;
410     }
411     if (ok==1)
412     {
413     lst_tetra.insert(lst_tetra.end(),mgtet);
414     MG_NOEUD* noeud1=mgtet->get_noeud1();
415     MG_NOEUD* noeud2=mgtet->get_noeud2();
416     MG_NOEUD* noeud3=mgtet->get_noeud3();
417     MG_NOEUD* noeud4=mgtet->get_noeud4();
418     lst_noeud.insert(lst_noeud.end(),noeud1);
419     lst_noeud.insert(lst_noeud.end(),noeud2);
420     lst_noeud.insert(lst_noeud.end(),noeud3);
421     lst_noeud.insert(lst_noeud.end(),noeud4);
422     }
423     }
424     int nb_tet_fem=mgvol->get_lien_fem_maillage()->get_nb();
425     int nb_m3d_fem=lst_m3d_fem.get_nb();
426     for (int j=0;j<nb_tet_fem;j++)
427     {
428     FEM_TETRA* femtet=(FEM_TETRA*)mgvol->get_lien_fem_maillage()->get(j);
429     int ok=0;
430     for (int k=0;k<nb_m3d_fem;k++)
431     {
432     FEM_MAILLAGE* femmai=lst_m3d_fem.get(k);
433     FEM_TETRA* tetemp=femmai->get_fem_tetraid(femtet->get_id());
434     if (tetemp!=NULL) ok=1;
435     }
436     if (ok==1)
437     {
438     lst_tetra_fem.insert(lst_tetra_fem.end(),femtet);
439     int nb_noeud=femtet->get_nb_fem_noeud();
440     for (int k=0;k<nb_noeud;k++)
441     {
442     FEM_NOEUD* noeud=femtet->get_fem_noeud(k);
443     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
444     }
445     }
446     }
447     }
448     for (int i=0;i<lst_face.get_nb();i++)
449     {
450     MG_FACE* mgface=lst_face.get(i);
451     int nb_m2d=lst_m2d.get_nb();
452     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_tri;
453     for (MG_TRIANGLE* mgtri=(MG_TRIANGLE*)mgface->get_lien_maillage()->get_premier(it_tri);mgtri;mgtri=(MG_TRIANGLE*)mgface->get_lien_maillage()->get_suivant(it_tri))
454     {
455    
456     int ok=0;
457     for (int k=0;k<nb_m2d;k++)
458     {
459     MG_MAILLAGE* mgmai=lst_m2d.get(k);
460     MG_TRIANGLE* tritemp=mgmai->get_mg_triangleid(mgtri->get_id());
461     if (tritemp!=NULL) ok=1;
462     }
463     if (ok==1)
464     {
465     lst_triangle.insert(lst_triangle.end(),mgtri);
466     MG_NOEUD* noeud1=mgtri->get_noeud1();
467     MG_NOEUD* noeud2=mgtri->get_noeud2();
468     MG_NOEUD* noeud3=mgtri->get_noeud3();
469     lst_noeud.insert(lst_noeud.end(),noeud1);
470     lst_noeud.insert(lst_noeud.end(),noeud2);
471     lst_noeud.insert(lst_noeud.end(),noeud3);
472     }
473     }
474     int nb_tri_fem=mgface->get_lien_fem_maillage()->get_nb();
475     int nb_m2d_fem=lst_m2d_fem.get_nb();
476     for (int j=0;j<nb_tri_fem;j++)
477     {
478     FEM_TRIANGLE* femtri=(FEM_TRIANGLE*)mgface->get_lien_fem_maillage()->get(j);
479     int ok=0;
480     for (int k=0;k<nb_m2d_fem;k++)
481     {
482     FEM_MAILLAGE* femmai=lst_m2d_fem.get(k);
483     FEM_TRIANGLE* tritemp=femmai->get_fem_triangleid(femtri->get_id());
484     if (tritemp!=NULL) ok=1;
485     }
486     if (ok==1)
487     {
488     lst_triangle_fem.insert(lst_triangle_fem.end(),femtri);
489     int nb_noeud=femtri->get_nb_fem_noeud();
490     for (int k=0;k<nb_noeud;k++)
491     {
492     FEM_NOEUD* noeud=femtri->get_fem_noeud(k);
493     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
494     }
495     }
496     }
497     }
498     for (int i=0;i<lst_arete.get_nb();i++)
499     {
500     MG_ARETE* mgarete=lst_arete.get(i);
501     int nb_m1d=lst_m1d.get_nb();
502     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_are;
503     for (MG_SEGMENT* mgsegment=(MG_SEGMENT*)mgarete->get_lien_maillage()->get_premier(it_are);mgsegment;mgsegment=(MG_SEGMENT*)mgarete->get_lien_maillage()->get_suivant(it_are))
504     {
505     int ok=0;
506     for (int k=0;k<nb_m1d;k++)
507     {
508     MG_MAILLAGE* mgmai=lst_m1d.get(k);
509     MG_SEGMENT* segtemp=mgmai->get_mg_segmentid(mgsegment->get_id());
510     if (segtemp!=NULL) ok=1;
511     }
512     if (ok==1)
513     {
514     lst_segment.insert(lst_segment.end(),mgsegment);
515     MG_NOEUD* noeud1=mgsegment->get_noeud1();
516     MG_NOEUD* noeud2=mgsegment->get_noeud2();
517     lst_noeud.insert(lst_noeud.end(),noeud1);
518     lst_noeud.insert(lst_noeud.end(),noeud2);
519     }
520     }
521     int nb_seg_fem=mgarete->get_lien_fem_maillage()->get_nb();
522     int nb_m1d_fem=lst_m1d_fem.get_nb();
523     for (int j=0;j<nb_seg_fem;j++)
524     {
525     FEM_SEGMENT* femseg=(FEM_SEGMENT*)mgarete->get_lien_fem_maillage()->get(j);
526     int ok=0;
527     for (int k=0;k<nb_m1d_fem;k++)
528     {
529     FEM_MAILLAGE* femmai=lst_m1d_fem.get(k);
530     FEM_SEGMENT* segtemp=femmai->get_fem_segmentid(femseg->get_id());
531     if (segtemp!=NULL) ok=1;
532     }
533     if (ok==1)
534     {
535     lst_segment_fem.insert(lst_segment_fem.end(),femseg);
536     int nb_noeud=femseg->get_nb_fem_noeud();
537     for (int k=0;k<nb_noeud;k++)
538     {
539     FEM_NOEUD* noeud=femseg->get_fem_noeud(k);
540     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
541     }
542     }
543     }
544     }
545     }
546     else
547     {
548     TTreeNode *rootm = root->Item[1];
549     int nb_mai=rootm->Count;
550     for (int i=0;i<nb_mai;i++)
551     {
552     TTreeNode *mai = rootm->Item[i];
553     MG_MAILLAGE* mgmai=gest->get_mg_maillageid(atol(mai->Text.c_str()));
554     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
555     {
556     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
557     if (sol==NULL) continue;
558     unsigned long idmai=sol->get_maillage()->get_id();
559     if (mgmai->get_id()!=idmai) continue;
560     }
561     TTreeNode *mai1d = mai->Item[0];
562     if (mai1d->ImageIndex==46)
563     {
564     int nbseg=mgmai->get_nb_mg_segment();
565     for (int k=0;k<nbseg;k++)
566     {
567     MG_SEGMENT* seg=mgmai->get_mg_segment(k);
568     MG_NOEUD* noeud1=seg->get_noeud1();
569     MG_NOEUD* noeud2=seg->get_noeud2();
570     lst_noeud.insert(lst_noeud.end(),noeud1);
571     lst_noeud.insert(lst_noeud.end(),noeud2);
572     lst_segment.insert(lst_segment.end(),seg);
573     }
574     }
575     TTreeNode *mai2d = mai->Item[1];
576     if (mai2d->ImageIndex==46)
577     {
578     int nbtri=mgmai->get_nb_mg_triangle();
579     for (int k=0;k<nbtri;k++)
580     {
581     MG_TRIANGLE* tri=mgmai->get_mg_triangle(k);
582     MG_NOEUD* noeud1=tri->get_noeud1();
583     MG_NOEUD* noeud2=tri->get_noeud2();
584     MG_NOEUD* noeud3=tri->get_noeud3();
585     lst_noeud.insert(lst_noeud.end(),noeud1);
586     lst_noeud.insert(lst_noeud.end(),noeud2);
587     lst_noeud.insert(lst_noeud.end(),noeud3);
588     lst_triangle.insert(lst_triangle.end(),tri);
589     }
590     }
591     TTreeNode *mai3d = mai->Item[2];
592     if (mai3d->ImageIndex==46)
593     {
594     int nbtet=mgmai->get_nb_mg_tetra();
595     for (int k=0;k<nbtet;k++)
596     {
597     MG_TETRA* tet=mgmai->get_mg_tetra(k);
598     MG_NOEUD* noeud1=tet->get_noeud1();
599     MG_NOEUD* noeud2=tet->get_noeud2();
600     MG_NOEUD* noeud3=tet->get_noeud3();
601     MG_NOEUD* noeud4=tet->get_noeud4();
602     lst_noeud.insert(lst_noeud.end(),noeud1);
603     lst_noeud.insert(lst_noeud.end(),noeud2);
604     lst_noeud.insert(lst_noeud.end(),noeud3);
605     lst_noeud.insert(lst_noeud.end(),noeud4);
606     lst_tetra.insert(lst_tetra.end(),tet);
607     }
608     }
609     }
610     TTreeNode *rootmfem = root->Item[2];
611     int nb_mai_fem=rootmfem->Count;
612     for (int i=0;i<nb_mai_fem;i++)
613     {
614     TTreeNode *mai = rootm->Item[i];
615     FEM_MAILLAGE* femmai=gest->get_fem_maillageid(atol(mai->Text.c_str()));
616     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
617     {
618     FEM_SOLUTION* sol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
619     if (sol==NULL) continue;
620     unsigned long idmai=sol->get_maillage()->get_id();
621     if (femmai->get_id()!=idmai) continue;
622     }
623     TTreeNode *mai1d = mai->Item[0];
624     if (mai1d->ImageIndex==46)
625     {
626     int nbseg=femmai->get_nb_fem_segment();
627     for (int k=0;k<nbseg;k++)
628     {
629     FEM_SEGMENT* seg=femmai->get_fem_segment(k);
630     lst_segment_fem.insert(lst_segment_fem.end(),seg);
631     int nb_noeud=seg->get_nb_fem_noeud();
632     for (int l=0;l<nb_noeud;l++)
633     {
634     FEM_NOEUD* noeud=seg->get_fem_noeud(l);
635     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
636     }
637     }
638     }
639     TTreeNode *mai2d = mai->Item[1];
640     if (mai2d->ImageIndex==46)
641     {
642     int nbtri=femmai->get_nb_fem_triangle();
643     for (int k=0;k<nbtri;k++)
644     {
645     FEM_TRIANGLE* tri=femmai->get_fem_triangle(k);
646     lst_triangle_fem.insert(lst_triangle_fem.end(),tri);
647     int nb_noeud=tri->get_nb_fem_noeud();
648     for (int l=0;l<nb_noeud;l++)
649     {
650     FEM_NOEUD* noeud=tri->get_fem_noeud(l);
651     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
652     }
653     }
654     }
655     TTreeNode *mai3d = mai->Item[2];
656     if (mai3d->ImageIndex==46)
657     {
658     int nbtet=femmai->get_nb_fem_tetra();
659     for (int k=0;k<nbtet;k++)
660     {
661     FEM_TETRA* tet=femmai->get_fem_tetra(k);
662     lst_tetra_fem.insert(lst_tetra_fem.end(),tet);
663     int nb_noeud=tet->get_nb_fem_noeud();
664     for (int l=0;l<nb_noeud;l++)
665     {
666     FEM_NOEUD* noeud=tet->get_fem_noeud(l);
667     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
668     }
669     }
670    
671     }
672     }
673     }
674     }
675     //---------------------------------------------------------------------------
676    
677     void __fastcall TVisuWinform::Slectionner1Click(TObject *Sender)
678     {
679     TTreeNode* node=TreeView1->Selected;
680     changeimage(node,46);
681     initliste();
682     redess();
683     TreeView1->Enabled=false;
684     TreeView1->Enabled=true;
685     }
686     //---------------------------------------------------------------------------
687    
688    
689     void __fastcall TVisuWinform::changeimage(TTreeNode* node,int num)
690     {
691     if (node==NULL) return;
692     if (node->Count==0)
693     {
694     node->ImageIndex=num;
695     node->SelectedIndex=num;
696     node->StateIndex=num;
697     }
698     else
699     {
700     int nb=node->Count;
701     for (int i=0;i<nb;i++)
702     changeimage(node->Item[i],num);
703     }
704     }
705     //---------------------------------------------------------------------------
706    
707     void __fastcall TVisuWinform::Dselectionner1Click(TObject *Sender)
708     {
709     TTreeNode* node=TreeView1->Selected;
710     changeimage(node,-1);
711     initliste();
712     redess();
713     TreeView1->Enabled=false;
714     TreeView1->Enabled=true;
715     }
716     //---------------------------------------------------------------------------
717    
718     void __fastcall TVisuWinform::InverserSelection1Click(TObject *Sender)
719     {
720     TTreeNode* node=TreeView1->Selected;
721     inverseimage(node,-1,46);
722     initliste();
723     redess();
724     TreeView1->Enabled=false;
725     TreeView1->Enabled=true;
726     }
727     //---------------------------------------------------------------------------
728     void __fastcall TVisuWinform::inverseimage(TTreeNode* node,int num1,int num2)
729     {
730     if (node==NULL) return;
731     if (node->Count==0)
732     {
733     int num;
734     if (node->ImageIndex==num1) num=num2; else num=num1;
735     node->ImageIndex=num;
736     node->SelectedIndex=num;
737     node->StateIndex=num;
738     }
739     else
740     {
741     int nb=node->Count;
742     for (int i=0;i<nb;i++)
743     inverseimage(node->Item[i],num1,num2);
744     }
745     }
746     //---------------------------------------------------------------------------
747    
748     void __fastcall TVisuWinform::Etendre1Click(TObject *Sender)
749     {
750     TreeView1->FullExpand();
751     TreeView1->Enabled=false;
752     TreeView1->Enabled=true;
753     }
754     //---------------------------------------------------------------------------
755    
756     void __fastcall TVisuWinform::Rduire1Click(TObject *Sender)
757     {
758     TreeView1->FullCollapse();
759     TreeView1->Enabled=false;
760     TreeView1->Enabled=true;
761     }
762     //---------------------------------------------------------------------------
763    
764     void __fastcall TVisuWinform::miseajourmodeleExecute(TObject *Sender)
765     {
766     Screen->Cursor=crHourGlass;
767     Invalidate();
768     if (gest!=NULL) delete gest;
769     gest=new MG_FILE(Caption.c_str());
770     if (gest->get_code_de_lecture()==0)
771     {
772     MessageBox(Handle,"Erreur de lecture du fichier","Erreur", MB_OK);
773     delete gest;
774     gest=NULL;
775     Screen->Cursor=crDefault;
776     Invalidate();
777     Close();
778     return;
779     }
780     lst_visu.clear();
781     miseajourarbre();
782     Screen->Cursor=crDefault;
783     TreeView1->FullCollapse();
784     Invalidate();
785     ChangemodeExecute(Sender);
786     ChangemodeExecute(Sender);
787     TrackBar1->Min=0;
788     TrackBar1->Max=100;
789     TrackBar1->Position=0;
790     TrackBar2->Min=0;
791     TrackBar2->Max=100;
792     TrackBar2->Position=100;
793     TrackBar3->Min=0;
794     TrackBar3->Max=100;
795     TrackBar3->Position=0;
796     TrackBar4->Min=0;
797     TrackBar4->Max=100;
798     TrackBar4->Position=100;
799     TrackBar5->Min=0;
800     TrackBar5->Max=100;
801     TrackBar5->Position=0;
802     TrackBar6->Min=0;
803     TrackBar6->Max=100;
804     TrackBar6->Position=100;
805     FILE* in=fopen(Caption.c_str(),"rt");
806     if (in!=NULL)
807     {
808     std::ftime ft;
809     getftime(fileno(in), &ft);
810     char mess[1000];
811     sprintf(mess,"Heure fichier: %u:%u:%u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
812     MainForm->StatusBar->Panels->Items[3]->Text=mess;
813     sprintf(mess,"Jour fichier: %u/%u/%u\n",ft.ft_month, ft.ft_day,ft.ft_year+1980);
814     MainForm->StatusBar->Panels->Items[4]->Text=mess;
815     fclose(in);
816     }
817    
818     }
819     //---------------------------------------------------------------------------
820    
821     void __fastcall TVisuWinform::lancerverimeshExecute(TObject *Sender)
822     {
823     Tverimesh *Child;
824     Child = new Tverimesh(Application,*gest,boite,*this);
825     Child->Caption=Caption;
826     }
827     //---------------------------------------------------------------------------
828    
829     void __fastcall TVisuWinform::FormCreate(TObject *Sender)
830     {
831     hdc = GetDC(Handle);
832     SetPixelFormatDescriptor();
833     hrc = wglCreateContext(hdc);
834     if (hrc == NULL)
835     ShowMessage(":-)~ hrc == NULL");
836     if(wglMakeCurrent(hdc, hrc) == false)
837     ShowMessage("Could not MakeCurrent");
838     wglMakeCurrent (hdc, hrc);
839     SelectObject (hdc, GetStockObject (SYSTEM_FONT));
840     wglUseFontBitmaps (hdc, 0, 255, 1000);
841     glClearColor(MainForm->valeurconfig[11],MainForm->valeurconfig[12],MainForm->valeurconfig[13], 0.0f);
842     ListBox1->Height=TabSheet2->ClientHeight-ListBox1->Top-Label2->Height-Button3->Height;
843     ListBox3->Height=TabSheet6->ClientHeight-ListBox3->Top-5*Button3->Height;
844     Button6->Top=ListBox3->Top+ListBox3->Height+Button6->Height;
845     Button7->Top=ListBox3->Top+ListBox3->Height+3*Button6->Height;
846     Button3->Top=ListBox1->Top+ListBox1->Height;
847     RGB_r[0]=0;RGB_g[0]=0;RGB_b[0]=255;
848     RGB_r[1]=0;RGB_g[1]=100;RGB_b[1]=255;
849     RGB_r[2]=0;RGB_g[2]=200;RGB_b[2]=255;
850     RGB_r[3]=0;RGB_g[3]=255;RGB_b[3]=255;
851     RGB_r[4]=0;RGB_g[4]=255;RGB_b[4]=200;
852     RGB_r[5]=0;RGB_g[5]=255;RGB_b[5]=100;
853     RGB_r[6]=0;RGB_g[6]=255;RGB_b[6]=0;
854     RGB_r[7]=100;RGB_g[7]=255;RGB_b[7]=0;
855     RGB_r[8]=200;RGB_g[8]=255;RGB_b[8]=0;
856     RGB_r[9]=255;RGB_g[9]=255;RGB_b[9]=0;
857     RGB_r[10]=255;RGB_g[10]=150;RGB_b[10]=0;
858     RGB_r[11]=255;RGB_g[11]=0;RGB_b[11]=0;
859     RGB_r[12]=255;RGB_g[12]=0;RGB_b[12]=0;
860     RGB_r[13]=255;RGB_g[13]=137;RGB_b[13]=255;
861     TabSheet3->TabVisible=false;
862     TabSheet6->TabVisible=false;
863     PageControl1->ActivePage=TabSheet1;
864     TrackBar1->Min=0;
865     TrackBar1->Max=100;
866     TrackBar1->Position=0;
867     TrackBar2->Min=0;
868     TrackBar2->Max=100;
869     TrackBar2->Position=100;
870     TrackBar3->Min=0;
871     TrackBar3->Max=100;
872     TrackBar3->Position=0;
873     TrackBar4->Min=0;
874     TrackBar4->Max=100;
875     TrackBar4->Position=100;
876     TrackBar5->Min=0;
877     TrackBar5->Max=100;
878     TrackBar5->Position=0;
879     TrackBar6->Min=0;
880     TrackBar6->Max=100;
881     TrackBar6->Position=100;
882     }
883     //---------------------------------------------------------------------------
884     void __fastcall TVisuWinform::SetPixelFormatDescriptor(void)
885     {
886     PIXELFORMATDESCRIPTOR pfd = {
887     sizeof(PIXELFORMATDESCRIPTOR),
888     1,
889     PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
890     PFD_TYPE_RGBA,
891     24,
892     0,0,0,0,0,0,
893     0,0,
894     0,0,0,0,0,
895     32,
896     0,
897     0,
898     PFD_MAIN_PLANE,
899     0,
900     0,0,
901     };
902     int PixelFormat = ChoosePixelFormat(hdc, &pfd);
903     SetPixelFormat(hdc, PixelFormat, &pfd);
904     }
905     //---------------------------------------------------------------------------
906     void __fastcall TVisuWinform::FormPaint(TObject *Sender)
907     {
908     wglMakeCurrent(hdc,hrc);
909     glClearColor(MainForm->valeurconfig[11],MainForm->valeurconfig[12],MainForm->valeurconfig[13], 0.0f);
910     redess();
911     }
912     //---------------------------------------------------------------------------
913    
914     void __fastcall TVisuWinform::FormResize(TObject *Sender)
915     {
916     int w=ClientWidth-PageControl1->Width;
917     int h=ClientHeight;
918     while(w==0)
919     {
920     Width++;
921     w=ClientWidth-PageControl1->Width;
922     }
923     while(h==0)
924     {
925     Height++;
926     h=ClientHeight;
927     }
928    
929     recadre(dx,dy,0);
930     redess();
931     ListBox1->Height=TabSheet2->ClientHeight-ListBox1->Top-Label2->Height-Button3->Height;
932     Button3->Top=ListBox1->Top+ListBox1->Height;
933     ListBox3->Height=TabSheet6->ClientHeight-ListBox3->Top-5*Button3->Height;
934     Button6->Top=ListBox3->Top+ListBox3->Height+Button6->Height;
935     Button7->Top=ListBox3->Top+ListBox3->Height+3*Button6->Height;
936     }
937     //---------------------------------------------------------------------------
938    
939     void __fastcall TVisuWinform::ChangemodeExecute(TObject *Sender)
940     {
941     int passe2=0;
942     double xmin,xmax;
943     double ymin,ymax;
944     double zmin,zmax;
945     int passe=lst_visu.size();
946     if (passe==0)
947     {
948     int nbgeo=gest->get_nb_mg_geometrie();
949     //if (nbgeo>0)
950     for (int i=0;i<nbgeo;i++)
951     {
952     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
953     mggeo->cree_entite_visuel();
954     long nb=mggeo->get_nb_mg_visu_courbe();
955     for (long j=0;j<nb;j++)
956     {
957     double xyz1[3],xyz2[3];
958     MG_VISU_COURBE* mgvcrb=mggeo->get_mg_visu_courbe(j);
959     lst_visu.insert(lst_visu.end(),mgvcrb);
960     mgvcrb->get_coord(xyz1,xyz2);
961     if (passe2==0)
962     {
963     xmin=xyz1[0];
964     xmax=xyz1[0];
965     ymin=xyz1[1];
966     ymax=xyz1[1];
967     zmin=xyz1[2];
968     zmax=xyz1[2];
969     passe2=1;
970     }
971     if (xyz1[0]<xmin) xmin=xyz1[0];
972     if (xyz1[0]>xmax) xmax=xyz1[0];
973     if (xyz1[1]<ymin) ymin=xyz1[1];
974     if (xyz1[1]>ymax) ymax=xyz1[1];
975     if (xyz1[2]<zmin) zmin=xyz1[2];
976     if (xyz1[2]>zmax) zmax=xyz1[2];
977     }
978     // boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
979     }
980     //else
981     for (unsigned long i=0;i<gest->get_nb_mg_maillage();i++)
982     {
983     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
984     LISTE_MG_NOEUD::iterator it;
985     for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
986     {
987     double *xyz=noeud->get_coord();
988     if (xyz[0]<xmin) xmin=xyz[0];
989     if (xyz[0]>xmax) xmax=xyz[0];
990     if (xyz[1]<ymin) ymin=xyz[1];
991     if (xyz[1]>ymax) ymax=xyz[1];
992     if (xyz[2]<zmin) zmin=xyz[2];
993     if (xyz[2]>zmax) zmax=xyz[2];
994     }
995    
996     }
997     for (unsigned long i=0;i<gest->get_nb_fem_maillage();i++)
998     {
999     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
1000     LISTE_FEM_NOEUD::iterator it;
1001     for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1002     {
1003     double *xyz=noeud->get_coord();
1004     if (xyz[0]<xmin) xmin=xyz[0];
1005     if (xyz[0]>xmax) xmax=xyz[0];
1006     if (xyz[1]<ymin) ymin=xyz[1];
1007     if (xyz[1]>ymax) ymax=xyz[1];
1008     if (xyz[2]<zmin) zmin=xyz[2];
1009     if (xyz[2]>zmax) zmax=xyz[2];
1010     }
1011    
1012     }
1013     boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
1014    
1015     }
1016     if (TreeView1->Enabled==true)
1017     {
1018     TreeView1->Enabled=false;
1019     MainForm->ToolButton6->ImageIndex=48;
1020     }
1021     else
1022     {
1023     TreeView1->Enabled=true;
1024     MainForm->ToolButton6->ImageIndex=43;
1025     }
1026     recadre(dx,dy,0);
1027     if (passe==0) initvue();
1028     redess();
1029     }
1030     //---------------------------------------------------------------------------
1031     void __fastcall TVisuWinform::dessinegeo(void)
1032     {
1033     glLineWidth(MainForm->valeurconfig[29]);
1034    
1035     glBegin(GL_LINES);
1036     glColor3f(MainForm->valeurconfig[26],MainForm->valeurconfig[27],MainForm->valeurconfig[28] );
1037     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1038     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1039     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1040     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1041     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1042     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1043     double dx=(x2-x1)*1.01;
1044     double dy=(y2-y1)*1.01;
1045     double dz=(z2-z1)*1.01;
1046     double xm=(x1+x2)/2.;
1047     x1=xm-dx/2.;x2=xm+dx/2.;
1048     double ym=(y1+y2)/2.;
1049     y1=ym-dy/2.;y2=ym+dy/2.;
1050     double zm=(z1+z2)/2.;
1051     z1=zm-dz/2.;z2=zm+dz/2.;
1052     BOITE_3D boite2(x1,y1,z1,x2,y2,z2);
1053     int nb=lst_visu.size();
1054     for (int i=0;i<nb;i++)
1055     {
1056     MG_VISU_COURBE* mgvcrb=lst_visu[i];
1057     double xyz1[3];
1058     double xyz2[3];
1059     mgvcrb->get_coord(xyz1,xyz2);
1060     BOITE_3D boitmp=mgvcrb->get_boite_3D();
1061     if (boite2*boitmp)
1062     {
1063     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1064     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1065     }
1066     }
1067     glEnd();
1068     }
1069     //---------------------------------------------------------------------------
1070     void __fastcall TVisuWinform::dessinemai(void)
1071     {
1072     glLineWidth(1.);
1073     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1074     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1075     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1076     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1077     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1078     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1079     double dx=(x2-x1)*1.01;
1080     double dy=(y2-y1)*1.01;
1081     double dz=(z2-z1)*1.01;
1082     double xm=(x1+x2)/2.;
1083     x1=xm-dx/2.;x2=xm+dx/2.;
1084     double ym=(y1+y2)/2.;
1085     y1=ym-dy/2.;y2=ym+dy/2.;
1086     double zm=(z1+z2)/2.;
1087     z1=zm-dz/2.;z2=zm+dz/2.;
1088     BOITE_3D boite2(x1,y1,z1,x2+1e-8,y2+1e-8,z2+1e-8);
1089    
1090     if (noeud)
1091     {
1092     glColor3f(MainForm->valeurconfig[30],MainForm->valeurconfig[31],MainForm->valeurconfig[32]);
1093     glPointSize(MainForm->valeurconfig[33]);
1094     glBegin(GL_POINTS);
1095     int nb=lst_noeud.size();
1096     for (int i=0;i<nb;i++)
1097     {
1098     MG_NOEUD* noeud1=lst_noeud[i];
1099     BOITE_3D boitmp=noeud1->get_boite_3D();
1100     if (!(boitmp*boite2)) continue;
1101     int dim;
1102     if (noeud1->get_lien_topologie()==NULL) dim=-1;
1103     else dim=noeud1->get_lien_topologie()->get_dimension();
1104     /*if (dim==0) dim=1;
1105     dim--;*/
1106     if (dim>-1)
1107     {
1108     int binoeud[4];
1109     binoeud[0]=noeud%2;
1110     binoeud[1]=(noeud/2)%2;
1111     binoeud[2]=(noeud/4)%2;
1112     binoeud[3]=(noeud/8)%2;
1113     if (binoeud[dim])
1114     {
1115     double *xyz1=noeud1->get_coord();
1116     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1117     }
1118     }
1119     else
1120     {
1121     double *xyz1=noeud1->get_coord();
1122     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1123     }
1124     }
1125     glEnd();
1126     if (affnoeud)
1127     {
1128     for (int i=0;i<nb;i++)
1129     {
1130     MG_NOEUD* noeud1=lst_noeud[i];
1131     BOITE_3D boitmp=noeud1->get_boite_3D();
1132     if (!(boitmp*boite2)) continue;
1133     int dim;
1134     if (noeud1->get_lien_topologie()==NULL) dim=-1;
1135     else dim=noeud1->get_lien_topologie()->get_dimension();
1136     /*if (dim==0) dim=1;
1137     dim--;*/
1138     int binoeud[4];
1139     binoeud[0]=noeud%2;
1140     binoeud[1]=(noeud/2)%2;
1141     binoeud[2]=(noeud/4)%2;
1142     binoeud[3]=(noeud/8)%2;
1143     if (dim>-1)
1144     {
1145     if (binoeud[dim])
1146     {
1147     unsigned long id=noeud1->get_id();
1148     double *xyz=noeud1->get_coord();
1149     char mess[30];
1150     sprintf(mess,"%lu",id);
1151     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
1152     glListBase (1000);
1153     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1154     }
1155    
1156     }
1157     else
1158     {
1159     unsigned long id=noeud1->get_id();
1160     double *xyz=noeud1->get_coord();
1161     char mess[30];
1162     sprintf(mess,"%lu",id);
1163     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
1164     glListBase (1000);
1165     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1166     }
1167     }
1168    
1169     }
1170     }
1171     int bmaille[3];
1172     bmaille[0]=maille%2;
1173     bmaille[1]=(maille/2)%2;
1174     bmaille[2]=(maille/4)%2;
1175     if (bmaille[0])
1176     {
1177     glLineWidth(MainForm->valeurconfig[17]);
1178     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
1179     glBegin(GL_LINES);
1180     int nb=lst_segment.size();
1181     for (int i=0;i<nb;i++)
1182     {
1183     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
1184     MG_SEGMENT* mgsegment=lst_segment[i];
1185     BOITE_3D boitmp=mgsegment->get_boite_3D();
1186     if (!(boitmp*boite2)) continue;
1187     MG_NOEUD* noeud1=mgsegment->get_noeud1();
1188     MG_NOEUD* noeud2=mgsegment->get_noeud2();
1189     double *xyz1=noeud1->get_coord();
1190     double *xyz2=noeud2->get_coord();
1191     if ((mgsegment->get_lien_topologie()==toposel) && (mgsegment->get_lien_topologie()!=NULL) )
1192     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
1193     if (CheckBox1->Checked==true)
1194     {
1195     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1196     if (pos>11) pos=11;
1197     if (pos<0) pos=0;
1198     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1199     }
1200     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1201     if (CheckBox1->Checked==true)
1202     {
1203     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1204     if (pos>11) pos=11;
1205     if (pos<0) pos=0;
1206     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1207     }
1208     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1209     }
1210     glEnd();
1211     if (affmaille)
1212     {
1213     for (int i=0;i<nb;i++)
1214     {
1215     MG_SEGMENT* mgsegment=lst_segment[i];
1216     BOITE_3D boitmp=mgsegment->get_boite_3D();
1217     if (!(boitmp*boite2)) continue;
1218     MG_NOEUD* noeud1=mgsegment->get_noeud1();
1219     MG_NOEUD* noeud2=mgsegment->get_noeud2();
1220     unsigned long id=mgsegment->get_id();
1221     double *xyz1=noeud1->get_coord();
1222     double *xyz2=noeud2->get_coord();
1223     char mess[30];
1224     sprintf(mess,"%lu",id);
1225     glRasterPos3f(0.5*(xyz1[0]+xyz2[0]),0.5*(xyz1[1]+xyz2[1]),0.5*(xyz1[2]+xyz2[2]));
1226     glListBase (1000);
1227     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1228     }
1229     }
1230     }
1231     //triangle
1232     if (bmaille[1])
1233     {
1234     if (render>0)
1235     {
1236     if (render>1) InitShading();
1237     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1238     glEnable(GL_DEPTH_TEST);
1239     glEnable(GL_POLYGON_OFFSET_FILL);
1240     glPolygonOffset(1.0,1.0);
1241     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
1242     glBegin(GL_TRIANGLES);
1243     glEdgeFlag(GL_TRUE);
1244     int nb=lst_triangle.size();
1245     for (int i=0;i<nb;i++)
1246     {
1247     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1248     MG_TRIANGLE* mgtri=lst_triangle[i];
1249     BOITE_3D boitmp=mgtri->get_boite_3D();
1250     if (!(boitmp*boite2)) continue;
1251     MG_NOEUD* noeud1=mgtri->get_noeud1();
1252     MG_NOEUD* noeud2=mgtri->get_noeud2();
1253     MG_NOEUD* noeud3=mgtri->get_noeud3();
1254     double *xyz1=noeud1->get_coord();
1255     double *xyz2=noeud2->get_coord();
1256     double *xyz3=noeud3->get_coord();
1257     if ((mgtri->get_lien_topologie()==toposel) && (mgtri->get_lien_topologie()!=NULL) )
1258     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
1259     if (qualite==1)
1260     {
1261     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
1262     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1263     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1264     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1265     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1266     }
1267     if (shrink)
1268     {
1269     double xg=0.33333333333333*(xyz1[0]+xyz2[0]+xyz3[0]);
1270     double yg=0.33333333333333*(xyz1[1]+xyz2[1]+xyz3[1]);
1271     double zg=0.33333333333333*(xyz1[2]+xyz2[2]+xyz3[2]);
1272     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1273     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1274     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1275     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1276     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1277     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1278     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1279     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1280     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1281     if (CheckBox1->Checked==true)
1282     {
1283     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1284     if (pos>11) pos=11;
1285     if (pos<0) pos=0;
1286     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1287     }
1288     glVertex3f(x1,y1,z1);
1289     if (CheckBox1->Checked==true)
1290     {
1291     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1292     if (pos>11) pos=11;
1293     if (pos<0) pos=0;
1294     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1295     }
1296     glVertex3f(x3,y3,z3);
1297     if (CheckBox1->Checked==true)
1298     {
1299     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1300     if (pos>11) pos=11;
1301     if (pos<0) pos=0;
1302     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1303     }
1304     glVertex3f(x2,y2,z2);
1305     }
1306     else
1307     {
1308     if (CheckBox1->Checked==true)
1309     {
1310     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1311     if (pos>11) pos=11;
1312     if (pos<0) pos=0;
1313     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1314     }
1315     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1316     if (CheckBox1->Checked==true)
1317     {
1318     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1319     if (pos>11) pos=11;
1320     if (pos<0) pos=0;
1321     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1322     }
1323     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1324     if (CheckBox1->Checked==true)
1325     {
1326     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1327     if (pos>11) pos=11;
1328     if (pos<0) pos=0;
1329     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1330     }
1331     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1332     }
1333     }
1334     glEnd();
1335     }
1336    
1337     glFlush();
1338     if (render>0)
1339     {
1340     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1341     glLineWidth(MainForm->valeurconfig[40]);
1342     if (render>1) InitShading();
1343     }
1344     else
1345     {
1346     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
1347     glLineWidth(MainForm->valeurconfig[21]);
1348     }
1349     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
1350     glBegin(GL_TRIANGLES);
1351     glEdgeFlag(GL_TRUE);
1352     int nb=lst_triangle.size();
1353     for (int i=0;i<nb;i++)
1354     {
1355     if (render>0)
1356     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1357     else
1358     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
1359     MG_TRIANGLE* mgtri=lst_triangle[i];
1360     BOITE_3D boitmp=mgtri->get_boite_3D();
1361     if (!(boitmp*boite2)) continue;
1362     MG_NOEUD* noeud1=mgtri->get_noeud1();
1363     MG_NOEUD* noeud2=mgtri->get_noeud2();
1364     MG_NOEUD* noeud3=mgtri->get_noeud3();
1365     double *xyz1=noeud1->get_coord();
1366     double *xyz2=noeud2->get_coord();
1367     double *xyz3=noeud3->get_coord();
1368     if ( ((mgtri->get_lien_topologie()==toposel)&& (mgtri->get_lien_topologie()!=NULL) && (render==0)) || ((mgtri->get_lien_topologie()==toposel)&&(render==1) && (mgtri->get_lien_topologie()!=NULL) && (MainForm->valeurconfig[56]==0.)))
1369     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
1370     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1371     {
1372     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
1373     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1374     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1375     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1376     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1377     }
1378     if (shrink)
1379     {
1380     double xg=0.33333333333333*(xyz1[0]+xyz2[0]+xyz3[0]);
1381     double yg=0.33333333333333*(xyz1[1]+xyz2[1]+xyz3[1]);
1382     double zg=0.33333333333333*(xyz1[2]+xyz2[2]+xyz3[2]);
1383     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1384     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1385     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1386     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1387     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1388     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1389     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1390     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1391     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1392     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1393     {
1394     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1395     if (pos>11) pos=11;
1396     if (pos<0) pos=0;
1397     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1398     }
1399     glVertex3f(x1,y1,z1);
1400     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1401     {
1402     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1403     if (pos>11) pos=11;
1404     if (pos<0) pos=0;
1405     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1406     }
1407     glVertex3f(x3,y3,z3);
1408     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1409     {
1410     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1411     if (pos>11) pos=11;
1412     if (pos<0) pos=0;
1413     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1414     }
1415     glVertex3f(x2,y2,z2);
1416     }
1417     else
1418     {
1419     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1420     {
1421     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1422     if (pos>11) pos=11;
1423     if (pos<0) pos=0;
1424     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1425     }
1426     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1427     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1428     {
1429     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1430     if (pos>11) pos=11;
1431     if (pos<0) pos=0;
1432     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1433     }
1434     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1435     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1436     {
1437     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1438     if (pos>11) pos=11;
1439     if (pos<0) pos=0;
1440     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1441     }
1442     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1443     }
1444     }
1445     glEnd();
1446     if (affmaille)
1447     {
1448     for (int i=0;i<nb;i++)
1449     {
1450     MG_TRIANGLE* mgtri=lst_triangle[i];
1451     BOITE_3D boitmp=mgtri->get_boite_3D();
1452     if (!(boitmp*boite2)) continue;
1453     MG_NOEUD* noeud1=mgtri->get_noeud1();
1454     MG_NOEUD* noeud2=mgtri->get_noeud2();
1455     MG_NOEUD* noeud3=mgtri->get_noeud3();
1456     double *xyz1=noeud1->get_coord();
1457     double *xyz2=noeud2->get_coord();
1458     double *xyz3=noeud3->get_coord();
1459     unsigned long id=mgtri->get_id();
1460     char mess[30];
1461     sprintf(mess,"%lu",id);
1462     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1463     {
1464     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
1465     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1466     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1467     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1468     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1469     }
1470     glRasterPos3f((xyz1[0]+xyz2[0]+xyz3[0])/3.,(xyz1[1]+xyz2[1]+xyz3[1])/3.,(xyz1[2]+xyz2[2]+xyz3[2])/3.);
1471     glListBase (1000);
1472     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1473     }
1474     }
1475     if (render==2)
1476     {
1477     glDisable(GL_LIGHTING);
1478     glDisable(GL_LIGHT0);
1479     glDisable(GL_LIGHT1);
1480     }
1481     }
1482     //tetra
1483     if (bmaille[2])
1484     {
1485     if (render==1)
1486     {
1487     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1488     glEnable(GL_DEPTH_TEST);
1489     glEnable(GL_POLYGON_OFFSET_FILL);
1490     glPolygonOffset(1.0,1.0);
1491     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
1492     glBegin(GL_TRIANGLES);
1493     glEdgeFlag(GL_TRUE);
1494     int nb=lst_tetra.size();
1495     for (int i=0;i<nb;i++)
1496     {
1497     MG_TETRA* mgtri=lst_tetra[i];
1498     BOITE_3D boitmp=mgtri->get_boite_3D();
1499     if (!(boitmp*boite2)) continue;
1500     MG_NOEUD* noeud1=mgtri->get_noeud1();
1501     MG_NOEUD* noeud2=mgtri->get_noeud2();
1502     MG_NOEUD* noeud3=mgtri->get_noeud3();
1503     MG_NOEUD* noeud4=mgtri->get_noeud4();
1504     double *xyz1=noeud1->get_coord();
1505     double *xyz2=noeud2->get_coord();
1506     double *xyz3=noeud3->get_coord();
1507     double *xyz4=noeud4->get_coord();
1508     if ((mgtri->get_lien_topologie()==toposel) && (mgtri->get_lien_topologie()!=NULL) )
1509     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
1510     if (qualite==1)
1511     {
1512     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
1513     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1514     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1515     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1516     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1517     }
1518     if (shrink)
1519     {
1520     double xg=0.25*(xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0]);
1521     double yg=0.25*(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1]);
1522     double zg=0.25*(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2]);
1523     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1524     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1525     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1526     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1527     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1528     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1529     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1530     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1531     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1532     double x4=xg+facteur_shrink*(xyz4[0]-xg);
1533     double y4=yg+facteur_shrink*(xyz4[1]-yg);
1534     double z4=zg+facteur_shrink*(xyz4[2]-zg);
1535     if (CheckBox1->Checked==true)
1536     {
1537     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1538     if (pos>11) pos=11;
1539     if (pos<0) pos=0;
1540     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1541     }
1542     glVertex3f(x1,y1,z1);
1543     if (CheckBox1->Checked==true)
1544     {
1545     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1546     if (pos>11) pos=11;
1547     if (pos<0) pos=0;
1548     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1549     }
1550     glVertex3f(x3,y3,z3);
1551     if (CheckBox1->Checked==true)
1552     {
1553     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1554     if (pos>11) pos=11;
1555     if (pos<0) pos=0;
1556     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1557     }
1558     glVertex3f(x2,y2,z2);
1559     if (CheckBox1->Checked==true)
1560     {
1561     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1562     if (pos>11) pos=11;
1563     if (pos<0) pos=0;
1564     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1565     }
1566     glVertex3f(x1,y1,z1);
1567     if (CheckBox1->Checked==true)
1568     {
1569     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1570     if (pos>11) pos=11;
1571     if (pos<0) pos=0;
1572     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1573     }
1574     glVertex3f(x2,y2,z2);
1575     if (CheckBox1->Checked==true)
1576     {
1577     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1578     if (pos>11) pos=11;
1579     if (pos<0) pos=0;
1580     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1581     }
1582     glVertex3f(x4,y4,z4);
1583     if (CheckBox1->Checked==true)
1584     {
1585     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1586     if (pos>11) pos=11;
1587     if (pos<0) pos=0;
1588     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1589     }
1590     glVertex3f(x2,y2,z2);
1591     if (CheckBox1->Checked==true)
1592     {
1593     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1594     if (pos>11) pos=11;
1595     if (pos<0) pos=0;
1596     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1597     }
1598     glVertex3f(x3,y3,z3);
1599     if (CheckBox1->Checked==true)
1600     {
1601     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1602     if (pos>11) pos=11;
1603     if (pos<0) pos=0;
1604     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1605     }
1606     glVertex3f(x4,y4,z4);
1607     if (CheckBox1->Checked==true)
1608     {
1609     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1610     if (pos>11) pos=11;
1611     if (pos<0) pos=0;
1612     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1613     }
1614     glVertex3f(x1,y1,z1);
1615     if (CheckBox1->Checked==true)
1616     {
1617     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1618     if (pos>11) pos=11;
1619     if (pos<0) pos=0;
1620     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1621     }
1622     glVertex3f(x4,y4,z4);
1623     if (CheckBox1->Checked==true)
1624     {
1625     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1626     if (pos>11) pos=11;
1627     if (pos<0) pos=0;
1628     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1629     }
1630     glVertex3f(x3,y3,z3);
1631     }
1632     else
1633     {
1634     if (CheckBox1->Checked==true)
1635     {
1636     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1637     if (pos>11) pos=11;
1638     if (pos<0) pos=0;
1639     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1640     }
1641     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1642     if (CheckBox1->Checked==true)
1643     {
1644     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1645     if (pos>11) pos=11;
1646     if (pos<0) pos=0;
1647     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1648     }
1649     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1650     if (CheckBox1->Checked==true)
1651     {
1652     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1653     if (pos>11) pos=11;
1654     if (pos<0) pos=0;
1655     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1656     }
1657     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1658     if (CheckBox1->Checked==true)
1659     {
1660     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1661     if (pos>11) pos=11;
1662     if (pos<0) pos=0;
1663     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1664     }
1665     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1666     if (CheckBox1->Checked==true)
1667     {
1668     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1669     if (pos>11) pos=11;
1670     if (pos<0) pos=0;
1671     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1672     }
1673     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1674     if (CheckBox1->Checked==true)
1675     {
1676     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1677     if (pos>11) pos=11;
1678     if (pos<0) pos=0;
1679     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1680     }
1681     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1682     if (CheckBox1->Checked==true)
1683     {
1684     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1685     if (pos>11) pos=11;
1686     if (pos<0) pos=0;
1687     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1688     }
1689     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1690     if (CheckBox1->Checked==true)
1691     {
1692     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1693     if (pos>11) pos=11;
1694     if (pos<0) pos=0;
1695     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1696     }
1697     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1698     if (CheckBox1->Checked==true)
1699     {
1700     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1701     if (pos>11) pos=11;
1702     if (pos<0) pos=0;
1703     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1704     }
1705     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1706     if (CheckBox1->Checked==true)
1707     {
1708     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1709     if (pos>11) pos=11;
1710     if (pos<0) pos=0;
1711     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1712     }
1713     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1714     if (CheckBox1->Checked==true)
1715     {
1716     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1717     if (pos>11) pos=11;
1718     if (pos<0) pos=0;
1719     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1720     }
1721     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1722     if (CheckBox1->Checked==true)
1723     {
1724     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1725     if (pos>11) pos=11;
1726     if (pos<0) pos=0;
1727     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1728     }
1729     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1730     }
1731     }
1732     glEnd();
1733     }
1734    
1735     glFlush();
1736     if (render==1)
1737     {
1738     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1739     glLineWidth(MainForm->valeurconfig[40]);
1740     }
1741     else
1742     {
1743     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
1744     glLineWidth(MainForm->valeurconfig[25]);
1745     }
1746     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
1747     glBegin(GL_TRIANGLES);
1748     glEdgeFlag(GL_TRUE);
1749     int nb=lst_tetra.size();
1750     for (int i=0;i<nb;i++)
1751     {
1752     if (render==1)
1753     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1754     else
1755     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
1756     MG_TETRA* mgtri=lst_tetra[i];
1757     BOITE_3D boitmp=mgtri->get_boite_3D();
1758     if (!(boitmp*boite2)) continue;
1759     MG_NOEUD* noeud1=mgtri->get_noeud1();
1760     MG_NOEUD* noeud2=mgtri->get_noeud2();
1761     MG_NOEUD* noeud3=mgtri->get_noeud3();
1762     MG_NOEUD* noeud4=mgtri->get_noeud4();
1763     double *xyz1=noeud1->get_coord();
1764     double *xyz2=noeud2->get_coord();
1765     double *xyz3=noeud3->get_coord();
1766     double *xyz4=noeud4->get_coord();
1767     if ( ((mgtri->get_lien_topologie()==toposel) && (mgtri->get_lien_topologie()!=NULL) && (render==0)) || ((mgtri->get_lien_topologie()==toposel)&& (mgtri->get_lien_topologie()!=NULL) &&(render==1) && (MainForm->valeurconfig[56]==0.)))
1768     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
1769     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1770     {
1771     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
1772     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1773     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1774     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1775     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1776     }
1777     if (shrink)
1778     {
1779     double xg=0.25*(xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0]);
1780     double yg=0.25*(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1]);
1781     double zg=0.25*(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2]);
1782     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1783     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1784     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1785     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1786     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1787     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1788     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1789     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1790     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1791     double x4=xg+facteur_shrink*(xyz4[0]-xg);
1792     double y4=yg+facteur_shrink*(xyz4[1]-yg);
1793     double z4=zg+facteur_shrink*(xyz4[2]-zg);
1794     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1795     {
1796     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1797     if (pos>11) pos=11;
1798     if (pos<0) pos=0;
1799     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1800     }
1801     glVertex3f(x1,y1,z1);
1802     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1803     {
1804     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1805     if (pos>11) pos=11;
1806     if (pos<0) pos=0;
1807     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1808     }
1809     glVertex3f(x3,y3,z3);
1810     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1811     {
1812     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1813     if (pos>11) pos=11;
1814     if (pos<0) pos=0;
1815     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1816     }
1817     glVertex3f(x2,y2,z2);
1818     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1819     {
1820     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1821     if (pos>11) pos=11;
1822     if (pos<0) pos=0;
1823     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1824     }
1825     glVertex3f(x1,y1,z1);
1826     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1827     {
1828     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1829     if (pos>11) pos=11;
1830     if (pos<0) pos=0;
1831     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1832     }
1833     glVertex3f(x2,y2,z2);
1834     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1835     {
1836     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1837     if (pos>11) pos=11;
1838     if (pos<0) pos=0;
1839     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1840     }
1841     glVertex3f(x4,y4,z4);
1842     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1843     {
1844     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1845     if (pos>11) pos=11;
1846     if (pos<0) pos=0;
1847     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1848     }
1849     glVertex3f(x2,y2,z2);
1850     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1851     {
1852     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1853     if (pos>11) pos=11;
1854     if (pos<0) pos=0;
1855     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1856     }
1857     glVertex3f(x3,y3,z3);
1858     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1859     {
1860     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1861     if (pos>11) pos=11;
1862     if (pos<0) pos=0;
1863     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1864     }
1865     glVertex3f(x4,y4,z4);
1866     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1867     {
1868     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1869     if (pos>11) pos=11;
1870     if (pos<0) pos=0;
1871     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1872     }
1873     glVertex3f(x1,y1,z1);
1874     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1875     {
1876     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1877     if (pos>11) pos=11;
1878     if (pos<0) pos=0;
1879     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1880     }
1881     glVertex3f(x4,y4,z4);
1882     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1883     {
1884     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1885     if (pos>11) pos=11;
1886     if (pos<0) pos=0;
1887     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1888     }
1889     glVertex3f(x3,y3,z3);
1890     }
1891     else
1892     {
1893     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1894     {
1895     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1896     if (pos>11) pos=11;
1897     if (pos<0) pos=0;
1898     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1899     }
1900     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1901     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1902     {
1903     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1904     if (pos>11) pos=11;
1905     if (pos<0) pos=0;
1906     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1907     }
1908     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1909     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1910     {
1911     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1912     if (pos>11) pos=11;
1913     if (pos<0) pos=0;
1914     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1915     }
1916     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1917     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1918     {
1919     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1920     if (pos>11) pos=11;
1921     if (pos<0) pos=0;
1922     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1923     }
1924     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1925     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1926     {
1927     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1928     if (pos>11) pos=11;
1929     if (pos<0) pos=0;
1930     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1931     }
1932     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1933     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1934     {
1935     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1936     if (pos>11) pos=11;
1937     if (pos<0) pos=0;
1938     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1939     }
1940     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1941     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1942     {
1943     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1944     if (pos>11) pos=11;
1945     if (pos<0) pos=0;
1946     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1947     }
1948     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1949     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1950     {
1951     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1952     if (pos>11) pos=11;
1953     if (pos<0) pos=0;
1954     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1955     }
1956     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1957     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1958     {
1959     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1960     if (pos>11) pos=11;
1961     if (pos<0) pos=0;
1962     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1963     }
1964     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1965     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1966     {
1967     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1968     if (pos>11) pos=11;
1969     if (pos<0) pos=0;
1970     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1971     }
1972     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1973     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1974     {
1975     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1976     if (pos>11) pos=11;
1977     if (pos<0) pos=0;
1978     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1979     }
1980     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1981     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1982     {
1983     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1984     if (pos>11) pos=11;
1985     if (pos<0) pos=0;
1986     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1987     }
1988     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1989     }
1990     }
1991     glEnd();
1992     if (affmaille)
1993     {
1994     for (int i=0;i<nb;i++)
1995     {
1996     MG_TETRA* mgtri=lst_tetra[i];
1997     BOITE_3D boitmp=mgtri->get_boite_3D();
1998     if (!(boitmp*boite2)) continue;
1999     MG_NOEUD* noeud1=mgtri->get_noeud1();
2000     MG_NOEUD* noeud2=mgtri->get_noeud2();
2001     MG_NOEUD* noeud3=mgtri->get_noeud3();
2002     MG_NOEUD* noeud4=mgtri->get_noeud4();
2003     double *xyz1=noeud1->get_coord();
2004     double *xyz2=noeud2->get_coord();
2005     double *xyz3=noeud3->get_coord();
2006     double *xyz4=noeud4->get_coord();
2007     unsigned long id=mgtri->get_id();
2008     char mess[30];
2009     sprintf(mess,"%lu",id);
2010     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
2011     {
2012     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
2013     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
2014     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
2015     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
2016     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
2017     }
2018     glRasterPos3f((xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0])/4.,(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1])/4.,(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2])/4.);
2019     glListBase (1000);
2020     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
2021     }
2022     }
2023     if (render==2)
2024     {
2025     glDisable(GL_LIGHTING);
2026     glDisable(GL_LIGHT0);
2027     glDisable(GL_LIGHT1);
2028     }
2029     }
2030     }
2031     //---------------------------------------------------------------------------
2032     void __fastcall TVisuWinform::dessineaxe(void)
2033     {
2034     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2035     d=max(d,boite.get_zmax()-boite.get_zmin());
2036     d=d*MainForm->valeurconfig[10];
2037     glLineWidth(MainForm->valeurconfig[9]);
2038     glBegin(GL_LINES);
2039     glColor3f(MainForm->valeurconfig[0],MainForm->valeurconfig[1],MainForm->valeurconfig[2]);
2040     glVertex3f(0.0,0.0,0.0);
2041     glVertex3f(d,0.0,0.0);
2042     glColor3f(MainForm->valeurconfig[3],MainForm->valeurconfig[4],MainForm->valeurconfig[5]);
2043     glVertex3f(0.0,0.0,0.0);
2044     glVertex3f(0.0,d,0.0);
2045     glColor3f(MainForm->valeurconfig[6],MainForm->valeurconfig[7],MainForm->valeurconfig[8]);
2046     glVertex3f(0.0,0.0,0.0);
2047     glVertex3f(0.0,0.0,d);
2048     glEnd();
2049    
2050     }
2051     //---------------------------------------------------------------------------
2052    
2053     void __fastcall TVisuWinform::FormKeyDown(TObject *Sender, WORD &Key,
2054     TShiftState Shift)
2055     {
2056     transformation(Sender,Key,Shift);
2057     }
2058     //---------------------------------------------------------------------------
2059     void __fastcall TVisuWinform::redess(void)
2060     {
2061     wglMakeCurrent(hdc,hrc);
2062     glClearColor(MainForm->valeurconfig[11],MainForm->valeurconfig[12],MainForm->valeurconfig[13], 0.0f);
2063     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
2064     if (TreeView1->Enabled==false) dessinegeo(); else {dessinemai();dessinemaifem();}
2065     if (axe==1) dessineaxe();
2066     glFlush();
2067     SwapBuffers(hdc);
2068     }
2069    
2070     //---------------------------------------------------------------------------
2071     void __fastcall TVisuWinform::recadre(double dx,double dy,int etat)
2072     {
2073     wglMakeCurrent(hdc,hrc);
2074     GLfloat w = ClientWidth-PageControl1->Width;
2075     GLfloat h = ClientHeight;
2076     char mess[255];
2077     if (etat==0) glViewport(0, 0, w, h);
2078     glMatrixMode(GL_PROJECTION);
2079     glLoadIdentity();
2080     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2081     d=max(d,boite.get_zmax()-boite.get_zmin());
2082     d=d*1.5/2.;
2083     double aspect=w/h;
2084     double xmin,ymin,xmax,ymax;
2085     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
2086     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
2087     double zmin=boite.get_zcentre()-100*d;
2088     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
2089     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
2090     double zmax=zmin+200.*d;
2091     glOrtho(xmin,xmax,ymin,ymax,zmin,zmax);
2092     }
2093     //---------------------------------------------------------------------------
2094    
2095     void __fastcall TVisuWinform::initvue(void)
2096     {
2097     wglMakeCurrent(hdc,hrc);
2098     glMatrixMode(GL_MODELVIEW);
2099     glLoadIdentity();
2100     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2101     /*glRotatef(-90., 0.0, 1.0, 0.0);
2102     glRotatef(-90., 1.0, 0.0, 0.0);
2103     glRotatef(45., 0.0, 1.0, 0.0);
2104     glRotatef(-45., 0.0, 0.0, 1.0);*/
2105     glRotatef(35.26, 1.0, 0.0, 0.0);
2106     glRotatef(45., 0.0, 1.0, 0.0);
2107     glRotatef(-90., 1.0, 0.0, 0.0);
2108     glRotatef(180., 0.0, 0.0, 1.0);
2109    
2110    
2111     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2112     }
2113    
2114    
2115     void __fastcall TVisuWinform::FormMouseWheelDown(TObject *Sender,
2116     TShiftState Shift, TPoint &MousePos, bool &Handled)
2117     {
2118     wglMakeCurrent(hdc,hrc);
2119     glMatrixMode(GL_MODELVIEW);
2120     zoom++;
2121     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2122     glScalef(1.1,1.1,1.1);
2123     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2124     redess();
2125     }
2126     //---------------------------------------------------------------------------
2127    
2128    
2129     void __fastcall TVisuWinform::FormMouseWheelUp(TObject *Sender,
2130     TShiftState Shift, TPoint &MousePos, bool &Handled)
2131     {
2132     wglMakeCurrent(hdc,hrc);
2133     glMatrixMode(GL_MODELVIEW);
2134     zoom--;
2135     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2136     glScalef(1./1.1,1./1.1,1./1.1);
2137     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2138     redess();
2139     }
2140     //---------------------------------------------------------------------------
2141    
2142     void __fastcall TVisuWinform::Fermer1Click(TObject *Sender)
2143     {
2144     Close();
2145     }
2146     //---------------------------------------------------------------------------
2147    
2148    
2149     void __fastcall TVisuWinform::FormMouseDown(TObject *Sender,
2150     TMouseButton Button, TShiftState Shift, int X, int Y)
2151     {
2152     if (Button==mbRight)
2153     {
2154     if (Shift.Contains(ssCtrl))
2155     {
2156     TPoint pt(X,Y);
2157     TPoint pt2=ClientToScreen(pt);
2158     PopupMenu2->Popup(pt2.x,pt2.y);
2159     }
2160     else if (debut_trans==false)
2161     {
2162     debut_trans=true;
2163     xdepart=X;
2164     ydepart=Y;
2165     }
2166     }
2167     if (Button==mbMiddle)
2168     if (debut_rot==false)
2169     {
2170     debut_rot=true;
2171     xrot=X;
2172     yrot=Y;
2173     }
2174    
2175     }
2176     //---------------------------------------------------------------------------
2177    
2178     void __fastcall TVisuWinform::FormMouseUp(TObject *Sender,
2179     TMouseButton Button, TShiftState Shift, int X, int Y)
2180     {
2181     if (Button==mbRight)
2182     if (debut_trans==true)
2183     {
2184     GLfloat w = ClientWidth-PageControl1->Width;
2185     GLfloat h = ClientHeight;
2186     double aspect=w/h;
2187     debut_trans=false;
2188     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2189     d=max(d,boite.get_zmax()-boite.get_zmin());
2190     d=d*1.5;
2191     double xmin,ymin,xmax,ymax;
2192     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
2193     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
2194     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
2195     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
2196     dx=dx+(xdepart-X)/2./w*(xmax-xmin);
2197     dy=dy-(ydepart-Y)/2./h*(ymax-ymin);
2198     recadre(dx,dy,1);
2199     redess();
2200     xdepart=X;
2201     ydepart=Y;
2202     }
2203    
2204     if (Button==mbMiddle) debut_rot=false;
2205     }
2206     //---------------------------------------------------------------------------
2207    
2208     void __fastcall TVisuWinform::FormMouseMove(TObject *Sender,
2209     TShiftState Shift, int X, int Y)
2210     {
2211     if (debut_trans==true)
2212     {
2213     GLfloat w = ClientWidth-PageControl1->Width;
2214     GLfloat h = ClientHeight;
2215     double aspect=w/h;
2216     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2217     d=max(d,boite.get_zmax()-boite.get_zmin());
2218     d=d*1.5;
2219     double xmin,ymin,xmax,ymax;
2220     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
2221     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
2222     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
2223     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
2224     dx=dx+(xdepart-X)/2./w*(xmax-xmin);
2225     dy=dy-(ydepart-Y)/2./h*(ymax-ymin);
2226     recadre(dx,dy,1);
2227     redess();
2228     xdepart=X;
2229     ydepart=Y;
2230     }
2231     if (debut_rot==true)
2232     {
2233     GLfloat w = ClientWidth-PageControl1->Width;
2234     GLfloat h = ClientHeight;
2235     double deltax=X-xrot;
2236     double deltay=Y-yrot;
2237     double norme=deltax*deltax+deltay*deltay;
2238     norme=sqrt(norme);
2239     if (norme>=1.)
2240     {
2241     glMatrixMode(GL_MODELVIEW);
2242     deltax=deltax*1.0/norme;
2243     deltay=deltay*1.0/norme;
2244     GLdouble matriceproj[16],matricevue[16];
2245     GLint matriceport[4];
2246     glGetIntegerv(GL_VIEWPORT,matriceport);
2247     glGetDoublev(GL_MODELVIEW_MATRIX,matricevue);
2248     glGetDoublev(GL_PROJECTION_MATRIX,matriceproj);
2249     double orx,ory,orz;
2250     double rx,ry,rz;
2251     gluUnProject((GLdouble)xrot,(GLdouble)yrot,0.,matricevue,matriceproj,matriceport,&orx,&ory,&orz);
2252     gluUnProject(xrot+deltay,yrot+deltax,0.,matricevue,matriceproj,matriceport,&rx,&ry,&rz);
2253     rx=rx-orx;
2254     ry=ry-ory;
2255     rz=rz-orz;
2256     double norme2=sqrt(rx*rx+ry*ry+rz*rz);
2257     rx=rx/norme2;
2258     ry=ry/norme2;
2259     rz=rz/norme2;
2260     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2261     glRotatef(norme/sqrt(w*h)*360, rx, ry, rz);
2262     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2263     redess();
2264     }
2265     xrot=X;
2266     yrot=Y;
2267     }
2268    
2269     }
2270     //---------------------------------------------------------------------------
2271    
2272    
2273    
2274    
2275    
2276     void __fastcall TVisuWinform::TreeView1KeyDown(TObject *Sender, WORD &Key,
2277     TShiftState Shift)
2278     {
2279     transformation(Sender,Key,Shift);
2280     }
2281     //---------------------------------------------------------------------------
2282     void __fastcall TVisuWinform::transformation(TObject *Sender, WORD &Key,TShiftState Shift)
2283     {
2284     wglMakeCurrent(hdc,hrc);
2285     GLfloat w = ClientWidth-PageControl1->Width;
2286     GLfloat h = ClientHeight;
2287     glMatrixMode(GL_MODELVIEW);
2288     double un=0.005*min(w,h);
2289     if (Key==VK_LEFT)
2290     {
2291     dx=dx+un;
2292     recadre(dx,dy,1);
2293     }
2294     if (Key==VK_RIGHT)
2295     {
2296     dx=dx-un;
2297     recadre(dx,dy,1);
2298     }
2299     if (Key==VK_UP)
2300     {
2301     dy=dy-un;
2302     recadre(dx,dy,1);
2303     }
2304     if (Key==VK_DOWN)
2305     {
2306     dy=dy+un;
2307     recadre(dx,dy,1);
2308     }
2309     if(Key == VK_F1)
2310     {
2311     zoom++;
2312     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2313     glScalef(1.1,1.1,1.1);
2314     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2315     }
2316     if(Key == VK_F2)
2317     {
2318     zoom--;
2319     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2320     glScalef(1./1.1,1./1.1,1./1.1);
2321     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2322     }
2323     if(Key == VK_F3)
2324     {
2325     dx=0.;
2326     dy=0.;
2327     zoom=0;
2328     recadre(dx,dy,1);
2329     initvue();
2330     }
2331     if(Key == VK_F4)
2332     {
2333     if (zoom>0)
2334     glScalef(1./pow(1.1,zoom),1./pow(1.1,zoom),1./pow(1.1,zoom));
2335     if (zoom<0)
2336     glScalef(pow(1.1,-zoom),pow(1.1,-zoom),pow(1.1,-zoom));
2337     zoom=0;
2338     dx=0;
2339     dy=0;
2340     recadre(dx,dy,1);
2341     }
2342     if(Key == VK_HOME)
2343     {
2344     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2345     glRotatef(-5, 0.0, 1.0, 0.0);
2346     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2347     }
2348     if(Key == VK_END)
2349     {
2350     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2351     glRotatef(5, 0.0, 1.0, 0.0);
2352     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2353     }
2354     if(Key == VK_INSERT)
2355     {
2356     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2357     glRotatef(-5, 1.0, 0.0, 0.0);
2358     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2359     }
2360     if(Key == VK_DELETE)
2361     {
2362     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2363     glRotatef(5, 1.0, 0.0, 0.0);
2364     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2365     }
2366     if(Key == VK_PRIOR)
2367     {
2368     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2369     glRotatef(-5, 0.0, 0.0, 1.0);
2370     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2371     }
2372     if(Key == VK_NEXT)
2373     {
2374     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2375     glRotatef(5, 0.0, 0.0, 1.0);
2376     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2377     }
2378     if (Key==VK_ADD)
2379     {
2380     facteur_shrink=facteur_shrink+0.05;
2381     if (facteur_shrink>1.) facteur_shrink=1;
2382     }
2383     if (Key==VK_SUBTRACT)
2384     {
2385     facteur_shrink=facteur_shrink-0.05;
2386     if (facteur_shrink<0.) facteur_shrink=0.;
2387     }
2388    
2389     redess();
2390     }
2391     //---------------------------------------------------------------------------
2392    
2393    
2394    
2395     void __fastcall TVisuWinform::shrinkonExecute(TObject *Sender)
2396     {
2397     shrink=1;
2398     redess();
2399     }
2400     //---------------------------------------------------------------------------
2401    
2402     void __fastcall TVisuWinform::shrinkoffExecute(TObject *Sender)
2403     {
2404     shrink=0;
2405     redess();
2406     }
2407     //---------------------------------------------------------------------------
2408    
2409     void __fastcall TVisuWinform::renderfilExecute(TObject *Sender)
2410     {
2411     render=0;
2412     redess();
2413     }
2414     //---------------------------------------------------------------------------
2415    
2416     void __fastcall TVisuWinform::rendershadeExecute(TObject *Sender)
2417     {
2418     render=1;
2419     redess();
2420     }
2421     //---------------------------------------------------------------------------
2422    
2423     void __fastcall TVisuWinform::axeonExecute(TObject *Sender)
2424     {
2425     axe=1;
2426     redess();
2427     }
2428     //---------------------------------------------------------------------------
2429    
2430     void __fastcall TVisuWinform::axeoffExecute(TObject *Sender)
2431     {
2432     axe=0;
2433     redess();
2434     }
2435     //---------------------------------------------------------------------------
2436    
2437     void __fastcall TVisuWinform::qualiteonExecute(TObject *Sender)
2438     {
2439     qualite=1;
2440     redess();
2441     }
2442     //---------------------------------------------------------------------------
2443    
2444     void __fastcall TVisuWinform::qualiteoffExecute(TObject *Sender)
2445     {
2446     qualite=0;
2447     redess();
2448     }
2449     //---------------------------------------------------------------------------
2450    
2451     void __fastcall TVisuWinform::renderlightExecute(TObject *Sender)
2452     {
2453     render=2;
2454     redess();
2455     }
2456     //---------------------------------------------------------------------------
2457    
2458     void __fastcall TVisuWinform::noeudonExecute(TObject *Sender)
2459     {
2460     noeud=1;
2461     redess();
2462     }
2463     //---------------------------------------------------------------------------
2464    
2465     void __fastcall TVisuWinform::noeudoffExecute(TObject *Sender)
2466     {
2467     noeud=0;
2468     redess();
2469     }
2470     //---------------------------------------------------------------------------
2471    
2472     void __fastcall TVisuWinform::configExecute(TObject *Sender)
2473     {
2474     configwin->ShowModal();
2475     }
2476     //---------------------------------------------------------------------------
2477    
2478     void __fastcall TVisuWinform::FileExitItemClick(TObject *Sender)
2479     {
2480     TerminateProcess(GetCurrentProcess(),0);
2481     }
2482     //---------------------------------------------------------------------------
2483    
2484     void __fastcall TVisuWinform::f3Execute(TObject *Sender)
2485     {
2486     dx=0.;
2487     dy=0.;
2488     zoom=0;
2489     recadre(dx,dy,1);
2490     initvue();
2491     redess();
2492     }
2493     //---------------------------------------------------------------------------
2494    
2495     void __fastcall TVisuWinform::f4Execute(TObject *Sender)
2496     {
2497     glMatrixMode(GL_MODELVIEW);
2498     if (zoom>0)
2499     glScalef(1./pow(1.1,zoom),1./pow(1.1,zoom),1./pow(1.1,zoom));
2500     if (zoom<0)
2501     glScalef(pow(1.1,-zoom),pow(1.1,-zoom),pow(1.1,-zoom));
2502     zoom=0;
2503     dx=0;
2504     dy=0;
2505     recadre(dx,dy,1);
2506     redess();
2507     }
2508     //---------------------------------------------------------------------------
2509    
2510     void __fastcall TVisuWinform::xmExecute(TObject *Sender)
2511     {
2512     glMatrixMode(GL_MODELVIEW);
2513     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2514     glRotatef(-5, 1.0, 0.0, 0.0);
2515     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2516     redess();
2517     }
2518     //---------------------------------------------------------------------------
2519    
2520     void __fastcall TVisuWinform::xpExecute(TObject *Sender)
2521     {
2522     glMatrixMode(GL_MODELVIEW);
2523     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2524     glRotatef(5, 1.0, 0.0, 0.0);
2525     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2526     redess();
2527     }
2528     //---------------------------------------------------------------------------
2529    
2530     void __fastcall TVisuWinform::ymExecute(TObject *Sender)
2531     {
2532     glMatrixMode(GL_MODELVIEW);
2533     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2534     glRotatef(-5, 0.0, 1.0, 0.0);
2535     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2536     redess();
2537     }
2538     //---------------------------------------------------------------------------
2539    
2540     void __fastcall TVisuWinform::ypExecute(TObject *Sender)
2541     {
2542     glMatrixMode(GL_MODELVIEW);
2543     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2544     glRotatef(5, 0.0, 1.0, 0.0);
2545     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2546     redess();
2547     }
2548     //---------------------------------------------------------------------------
2549    
2550     void __fastcall TVisuWinform::zmExecute(TObject *Sender)
2551     {
2552     glMatrixMode(GL_MODELVIEW);
2553     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2554     glRotatef(-5, 0.0, 0.0, 1.0);
2555     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2556     redess();
2557     }
2558     //---------------------------------------------------------------------------
2559    
2560     void __fastcall TVisuWinform::zpExecute(TObject *Sender)
2561     {
2562     glMatrixMode(GL_MODELVIEW);
2563     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2564     glRotatef(5, 0.0, 0.0, 1.0);
2565     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2566     redess();
2567     }
2568     //---------------------------------------------------------------------------
2569    
2570     void __fastcall TVisuWinform::afnoeudonExecute(TObject *Sender)
2571     {
2572     affnoeud=1;
2573     redess();
2574     }
2575     //---------------------------------------------------------------------------
2576    
2577     void __fastcall TVisuWinform::afnoeudoffExecute(TObject *Sender)
2578     {
2579     affnoeud=0;
2580     redess();
2581     }
2582     //---------------------------------------------------------------------------
2583    
2584     void __fastcall TVisuWinform::afmailleonExecute(TObject *Sender)
2585     {
2586     affmaille=1;
2587     redess();
2588     }
2589     //---------------------------------------------------------------------------
2590    
2591     void __fastcall TVisuWinform::afmailleoffExecute(TObject *Sender)
2592     {
2593     affmaille=0;
2594     redess();
2595     }
2596     //---------------------------------------------------------------------------
2597     void __fastcall TVisuWinform::InitShading(void)
2598     {
2599     /*GLfloat infinite[] = { 1000.0, 1000.0, 1000.0, 1.0 };
2600     GLfloat infinite2[] = { 0.0, 0.0, -0.7, 0.0 };
2601     GLfloat ambient[] = { 0.5, 0.5, 0.5, 0.5 };
2602     GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
2603     GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
2604     GLfloat mat_spec[]= {1.0,1.0,1.0,1.0};
2605     GLfloat mat_shi[]= {50.};
2606     diffuse[0]=MainForm->valeurconfig[34];
2607     diffuse[1]=MainForm->valeurconfig[35];
2608     diffuse[2]=MainForm->valeurconfig[36];
2609    
2610    
2611    
2612     glShadeModel(GL_SMOOTH);
2613    
2614     // glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
2615     glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
2616     //glLightfv(GL_LIGHT0, GL_SPECULAR, diffuse);;
2617     glLightfv(GL_LIGHT0, GL_POSITION, infinite);
2618     glMaterialfv(GL_FRONT,GL_SPECULAR,mat_spec);
2619     glMaterialfv(GL_FRONT,GL_SHININESS,mat_shi);
2620     glEnable(GL_LIGHTING);
2621     glEnable(GL_LIGHT0);
2622     //glEnable(GL_LIGHT1);
2623     glDepthFunc(GL_LESS);
2624     glEnable(GL_DEPTH_TEST);
2625     glEnable(GL_NORMALIZE);
2626     //glColorMaterial(GL_FRONT, GL_DIFFUSE);
2627     //glEnable(GL_COLOR_MATERIAL);*/
2628     }
2629     //---------------------------------------------------------------------------
2630    
2631    
2632     void __fastcall TVisuWinform::ComboBox1Change(TObject *Sender)
2633     {
2634     MG_SOLUTION* sol=NULL;
2635     FEM_SOLUTION* sol2=NULL;
2636     if ((unsigned int)ComboBox1->ItemIndex<gest->get_nb_mg_solution()) sol=gest->get_mg_solution(ComboBox1->ItemIndex);
2637     else sol2=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
2638     if (sol!=NULL)
2639     {
2640     ListBox1->Clear();
2641     int nb=sol->get_nb_champ();
2642     for (int i=0;i<nb;i++)
2643     ListBox1->Items->Add(sol->get_legende(i).c_str());
2644     if (ListBox1->ItemIndex==-1) CheckBox1->Checked=false;
2645     unsigned long idmai=sol->get_maillage()->get_id();
2646     char mess[30];
2647     sprintf(mess,"du maillage %lu",idmai) ;
2648     Label3->Caption=mess;
2649     if (CheckBox1->Checked==false)
2650     TabSheet3->TabVisible=false;
2651     }
2652     if (sol2!=NULL)
2653     {
2654     ListBox1->Clear();
2655     int nb=sol2->get_nb_champ();
2656     for (int i=0;i<nb;i++)
2657     ListBox1->Items->Add(sol2->get_legende(i).c_str());
2658     if (ListBox1->ItemIndex==-1) CheckBox1->Checked=false;
2659     unsigned long idmai=sol2->get_maillage()->get_id();
2660     char mess[30];
2661     sprintf(mess,"du maillage fem %lu",idmai) ;
2662     Label3->Caption=mess;
2663     if (CheckBox1->Checked==false)
2664     TabSheet3->TabVisible=false;
2665     }
2666     }
2667     //---------------------------------------------------------------------------
2668    
2669     void __fastcall TVisuWinform::CheckBox1Click(TObject *Sender)
2670     {
2671     if (ListBox1->ItemIndex==-1)
2672     {
2673     CheckBox1->Checked=false;
2674     TabSheet3->TabVisible=false;
2675     }
2676     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
2677     {
2678     MG_SOLUTION* sol=NULL;
2679     FEM_SOLUTION* sol2=NULL;
2680     if ((unsigned int)ComboBox1->ItemIndex<gest->get_nb_mg_solution()) sol=gest->get_mg_solution(ComboBox1->ItemIndex);
2681     else sol2=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
2682     if (sol!=NULL)
2683     {
2684     sol->active_solution(ListBox1->ItemIndex);
2685     lmin=sol->get_legende_min();
2686     lmax=sol->get_legende_max();
2687     TabSheet3->TabVisible=true;
2688     dessine_legende();
2689     }
2690     if (sol2!=NULL)
2691     {
2692     sol2->active_solution(ListBox1->ItemIndex);
2693     lmin=sol2->get_legende_min();
2694     lmax=sol2->get_legende_max();
2695     TabSheet3->TabVisible=true;
2696     dessine_legende();
2697     }
2698    
2699     }
2700     if (CheckBox1->Checked==false)
2701     TabSheet3->TabVisible=false;
2702     if (CheckBox1->Checked==false) Button3->Visible=false; else Button3->Visible=true;
2703     initliste();
2704     redess();
2705     }
2706     //---------------------------------------------------------------------------
2707     void __fastcall TVisuWinform::ListBox1Click(TObject *Sender)
2708     {
2709     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
2710     {
2711     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
2712     FEM_SOLUTION* sol2=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
2713     if (sol!=NULL)
2714     {
2715     sol->active_solution(ListBox1->ItemIndex);
2716     lmin=sol->get_legende_min();
2717     lmax=sol->get_legende_max();
2718     TabSheet3->TabVisible=true;
2719     dessine_legende();
2720     redess();
2721     }
2722     if (sol2!=NULL)
2723     {
2724     sol2->active_solution(ListBox1->ItemIndex);
2725     lmin=sol2->get_legende_min();
2726     lmax=sol2->get_legende_max();
2727     TabSheet3->TabVisible=true;
2728     dessine_legende();
2729     redess();
2730     }
2731     }
2732    
2733     }
2734     //---------------------------------------------------------------------------
2735     void __fastcall TVisuWinform::dessine_legende(void)
2736     {
2737     Label4->Color=(TColor)(RGB_r[11]+(RGB_g[11]<<8)+(RGB_b[11]<<16));
2738     Label5->Color=(TColor)(RGB_r[10]+(RGB_g[10]<<8)+(RGB_b[10]<<16));
2739     Label6->Color=(TColor)(RGB_r[9]+(RGB_g[9]<<8)+(RGB_b[9]<<16));
2740     Label7->Color=(TColor)(RGB_r[8]+(RGB_g[8]<<8)+(RGB_b[8]<<16));
2741     Label8->Color=(TColor)(RGB_r[7]+(RGB_g[7]<<8)+(RGB_b[7]<<16));
2742     Label9->Color=(TColor)(RGB_r[6]+(RGB_g[6]<<8)+(RGB_b[6]<<16));
2743     Label10->Color=(TColor)(RGB_r[5]+(RGB_g[5]<<8)+(RGB_b[5]<<16));
2744     Label11->Color=(TColor)(RGB_r[4]+(RGB_g[4]<<8)+(RGB_b[4]<<16));
2745     Label12->Color=(TColor)(RGB_r[3]+(RGB_g[3]<<8)+(RGB_b[3]<<16));
2746     Label13->Color=(TColor)(RGB_r[2]+(RGB_g[2]<<8)+(RGB_b[2]<<16));
2747     Label14->Color=(TColor)(RGB_r[1]+(RGB_g[1]<<8)+(RGB_b[1]<<16));
2748     Label15->Color=(TColor)(RGB_r[0]+(RGB_g[0]<<8)+(RGB_b[0]<<16));
2749    
2750     Label4->Width=18;
2751     Label4->Height=18;
2752     Label5->Width=18;
2753     Label5->Height=18;
2754     Label5->Top=Label4->Top+Label4->Height;
2755     Label5->Left=Label4->Left;
2756     Label6->Width=18;
2757     Label6->Height=18;
2758     Label6->Top=Label5->Top+Label4->Height;
2759     Label6->Left=Label4->Left;
2760     Label7->Width=18;
2761     Label7->Height=18;
2762     Label7->Top=Label6->Top+Label4->Height;
2763     Label7->Left=Label4->Left;
2764     Label8->Width=18;
2765     Label8->Height=18;
2766     Label8->Top=Label7->Top+Label4->Height;
2767     Label8->Left=Label4->Left;
2768     Label9->Width=18;
2769     Label9->Height=18;
2770     Label9->Top=Label8->Top+Label4->Height;
2771     Label9->Left=Label4->Left;
2772     Label10->Width=18;
2773     Label10->Height=18;
2774     Label10->Top=Label9->Top+Label4->Height;
2775     Label10->Left=Label4->Left;
2776     Label11->Width=18;
2777     Label11->Height=18;
2778     Label11->Top=Label10->Top+Label4->Height;
2779     Label11->Left=Label4->Left;
2780     Label12->Width=18;
2781     Label12->Height=18;
2782     Label12->Top=Label11->Top+Label4->Height;
2783     Label12->Left=Label4->Left;
2784     Label13->Width=18;
2785     Label13->Height=18;
2786     Label13->Top=Label12->Top+Label4->Height;
2787     Label13->Left=Label4->Left;
2788     Label14->Width=18;
2789     Label14->Height=18;
2790     Label14->Top=Label13->Top+Label4->Height;
2791     Label14->Left=Label4->Left;
2792     Label15->Width=18;
2793     Label15->Height=18;
2794     Label15->Top=Label14->Top+Label4->Height;
2795     Label15->Left=Label4->Left;
2796    
2797     Label16->Left=Label4->Left+2*Label4->Width;
2798     Label16->Top=Label4->Top-9;
2799     Label17->Left=Label4->Left+2*Label4->Width;
2800     Label17->Top=Label5->Top-9;
2801     Label18->Left=Label4->Left+2*Label4->Width;
2802     Label18->Top=Label6->Top-9;
2803     Label19->Left=Label4->Left+2*Label4->Width;
2804     Label19->Top=Label7->Top-9;
2805     Label20->Left=Label4->Left+2*Label4->Width;
2806     Label20->Top=Label8->Top-9;
2807     Label21->Left=Label4->Left+2*Label4->Width;
2808     Label21->Top=Label9->Top-9;
2809     Label22->Left=Label4->Left+2*Label4->Width;
2810     Label22->Top=Label10->Top-9;
2811     Label23->Left=Label4->Left+2*Label4->Width;
2812     Label23->Top=Label11->Top-9;
2813     Label24->Left=Label4->Left+2*Label4->Width;
2814     Label24->Top=Label12->Top-9;
2815     Label25->Left=Label4->Left+2*Label4->Width;
2816     Label25->Top=Label13->Top-9;
2817     Label26->Left=Label4->Left+2*Label4->Width;
2818     Label26->Top=Label14->Top-9;
2819     Label27->Left=Label4->Left+2*Label4->Width;
2820     Label27->Top=Label15->Top-9;
2821     Label28->Left=Label4->Left+2*Label4->Width;
2822     Label28->Top=Label15->Top+Label15->Height-9;
2823     char mess[30];
2824     sprintf(mess,"%le",lmin+12.*(lmax-lmin)/12.);
2825     Label16->Caption=mess;
2826     sprintf(mess,"%le",lmin+11.*(lmax-lmin)/12.);
2827     Label17->Caption=mess;
2828     sprintf(mess,"%le",lmin+10.*(lmax-lmin)/12.);
2829     Label18->Caption=mess;
2830     sprintf(mess,"%le",lmin+9.*(lmax-lmin)/12.);
2831     Label19->Caption=mess;
2832     sprintf(mess,"%le",lmin+8.*(lmax-lmin)/12.);
2833     Label20->Caption=mess;
2834     sprintf(mess,"%le",lmin+7.*(lmax-lmin)/12.);
2835     Label21->Caption=mess;
2836     sprintf(mess,"%le",lmin+6.*(lmax-lmin)/12.);
2837     Label22->Caption=mess;
2838     sprintf(mess,"%le",lmin+5.*(lmax-lmin)/12.);
2839     Label23->Caption=mess;
2840     sprintf(mess,"%le",lmin+4.*(lmax-lmin)/12.);
2841     Label24->Caption=mess;
2842     sprintf(mess,"%le",lmin+3.*(lmax-lmin)/12.);
2843     Label25->Caption=mess;
2844     sprintf(mess,"%le",lmin+2.*(lmax-lmin)/12.);
2845     Label26->Caption=mess;
2846     sprintf(mess,"%le",lmin+1.*(lmax-lmin)/12.);
2847     Label27->Caption=mess;
2848     sprintf(mess,"%le",lmin+0.*(lmax-lmin)/12.);
2849     Label28->Caption=mess;
2850     Label29->Caption=ListBox1->Items->Strings[ListBox1->ItemIndex];
2851    
2852     }
2853     //---------------------------------------------------------------------------
2854    
2855     void __fastcall TVisuWinform::CheckBox2Click(TObject *Sender)
2856     {
2857     CheckBox3->Checked=CheckBox2->Checked;
2858     redess();
2859     }
2860     //---------------------------------------------------------------------------
2861    
2862    
2863     void __fastcall TVisuWinform::CheckBox2KeyDown(TObject *Sender, WORD &Key,
2864     TShiftState Shift)
2865     {
2866     transformation(Sender,Key,Shift);
2867     }
2868     //---------------------------------------------------------------------------
2869    
2870     void __fastcall TVisuWinform::ComboBox1KeyDown(TObject *Sender, WORD &Key,
2871     TShiftState Shift)
2872     {
2873     transformation(Sender,Key,Shift);
2874     }
2875     //---------------------------------------------------------------------------
2876    
2877     void __fastcall TVisuWinform::CheckBox1KeyDown(TObject *Sender, WORD &Key,
2878     TShiftState Shift)
2879     {
2880     transformation(Sender,Key,Shift);
2881     }
2882     //---------------------------------------------------------------------------
2883    
2884     void __fastcall TVisuWinform::ListBox1KeyDown(TObject *Sender, WORD &Key,
2885     TShiftState Shift)
2886     {
2887     transformation(Sender,Key,Shift);
2888     }
2889     //---------------------------------------------------------------------------
2890    
2891     void __fastcall TVisuWinform::CheckBox3Click(TObject *Sender)
2892     {
2893     CheckBox2->Checked=CheckBox3->Checked;
2894     redess();
2895     }
2896     //---------------------------------------------------------------------------
2897    
2898    
2899    
2900     void __fastcall TVisuWinform::Temprature2Click(TObject *Sender)
2901     {
2902     ajouterccf("Saisie d'une température","Tp",true,true,true,true,true) ;
2903     }
2904     //---------------------------------------------------------------------------
2905    
2906     void __fastcall TVisuWinform::Montrerlaslection1Click(TObject *Sender)
2907     {
2908     if (Montrerlaslection1->Checked==true) Montrerlaslection1->Checked=false;
2909     else Montrerlaslection1->Checked=true;
2910     TreeView1Change(Sender,NULL);
2911     }
2912     //---------------------------------------------------------------------------
2913    
2914     void __fastcall TVisuWinform::TreeView1Change(TObject *Sender,
2915     TTreeNode *Node)
2916     {
2917     if (Montrerlaslection1->Checked==false) {toposel=NULL;redess();MainForm->StatusBar->Panels->Items[2]->Text="";return;}
2918     TTreeNode* node=TreeView1->Selected;
2919     int nb=node->Count;
2920     MG_VOLUME* mgvol=NULL;
2921     MG_FACE* mgface=NULL;
2922     MG_ARETE* mgarete=NULL;
2923     int nb_geo=gest->get_nb_mg_geometrie();
2924     for (int i=0;i<nb_geo;i++)
2925     {
2926     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
2927     if (nb==0)
2928     {
2929     TTreeNode* node_parent=node->Parent;
2930     mgvol=mggeo->get_mg_volumeid(atol(node->Text.c_str()));
2931     mgface=mggeo->get_mg_faceid(atol(node->Text.c_str()));
2932     mgarete=mggeo->get_mg_areteid(atol(node->Text.c_str()));
2933     MainForm->StatusBar->Panels->Items[2]->Text=node_parent->Text+" "+node->Text;;
2934     }
2935     }
2936     toposel=NULL;
2937     if (mgvol!=NULL) toposel=mgvol;
2938     if (mgface!=NULL) toposel=mgface;
2939     if (mgarete!=NULL) toposel=mgarete;
2940     redess();
2941     ActiveControl=NULL;
2942     }
2943     //---------------------------------------------------------------------------
2944    
2945     void __fastcall TVisuWinform::TreeView1Click(TObject *Sender)
2946     {
2947     ActiveControl=NULL;
2948     }
2949     //---------------------------------------------------------------------------
2950    
2951    
2952    
2953     void __fastcall TVisuWinform::Mesh9820001Click(TObject *Sender)
2954     {
2955     int nb=gest->get_nb_mg_maillage();
2956     char chaine[500];
2957     for (int i=0;i<nb;i++)
2958     {
2959     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
2960     if (i==0) sprintf(chaine,"Maillage %lu|*.*", mai->get_id());
2961     else
2962     {
2963     char chaine2[200];
2964     sprintf(chaine2,"|Maillage %lu|*.*", mai->get_id());
2965     strcat(chaine,chaine2);
2966     }
2967     }
2968     SaveDialog1->Filter=chaine;
2969     if (SaveDialog1->Execute())
2970     {
2971     MG_MAILLAGE* mai=gest->get_mg_maillage(SaveDialog1->FilterIndex-1);
2972     string namefic=SaveDialog1->FileName.c_str();
2973     mai->exporter_mesh(namefic);
2974    
2975     }
2976     }
2977     //---------------------------------------------------------------------------
2978    
2979     void __fastcall TVisuWinform::Giref1Click(TObject *Sender)
2980     {
2981     int nb=gest->get_nb_mg_maillage();
2982     if (nb==0)
2983     {
2984     MessageBox(Handle,"Pas de maillage","Erreur",MB_OK);
2985     return ;
2986     }
2987     char chaine[500];
2988     for (int i=0;i<nb;i++)
2989     {
2990     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
2991     if (i==0) sprintf(chaine,"Maillage %lu|*.*", mai->get_id());
2992     else
2993     {
2994     char chaine2[200];
2995     sprintf(chaine2,"|Maillage %lu|*.*", mai->get_id());
2996     strcat(chaine,chaine2);
2997     }
2998     }
2999     SaveDialog1->Filter=chaine;
3000     if (SaveDialog1->Execute())
3001     {
3002     MG_MAILLAGE* mai=gest->get_mg_maillage(SaveDialog1->FilterIndex-1);
3003     string namefic=SaveDialog1->FileName.c_str();
3004     mai->exporter_giref(namefic);
3005     }
3006    
3007     }
3008     //---------------------------------------------------------------------------
3009    
3010    
3011    
3012    
3013    
3014     void __fastcall TVisuWinform::ajouterccf(char* cap,char *type,int val,int sommet,int arete,int face,int volume)
3015     {
3016     ccfwinform->Caption=cap;
3017     int nb_geo=gest->get_nb_mg_geometrie();
3018     ccfwinform->ComboBox5->Clear();
3019     ccfwinform->ComboBox1->Clear();
3020     ccfwinform->ComboBox2->Clear();
3021     ccfwinform->ComboBox3->Clear();
3022     ccfwinform->ComboBox4->Clear();
3023     if (sommet)
3024     {
3025     ccfwinform->RadioButton1->Visible=true;
3026     ccfwinform->ComboBox1->Visible=true;
3027     }
3028     else
3029     {
3030     ccfwinform->RadioButton1->Visible=false;
3031     ccfwinform->ComboBox1->Visible=false;
3032     }
3033     if (arete)
3034     {
3035     ccfwinform->RadioButton2->Visible=true;
3036     ccfwinform->ComboBox2->Visible=true;
3037     }
3038     else
3039     {
3040     ccfwinform->RadioButton2->Visible=false;
3041     ccfwinform->ComboBox2->Visible=false;
3042     }
3043     if (face)
3044     {
3045     ccfwinform->RadioButton3->Visible=true;
3046     ccfwinform->ComboBox3->Visible=true;
3047     }
3048     else
3049     {
3050     ccfwinform->RadioButton3->Visible=false;
3051     ccfwinform->ComboBox3->Visible=false;
3052     }
3053     if (volume)
3054     {
3055     ccfwinform->RadioButton4->Visible=true;
3056     ccfwinform->ComboBox4->Visible=true;
3057     }
3058     else
3059     {
3060     ccfwinform->RadioButton4->Visible=false;
3061     ccfwinform->ComboBox4->Visible=false;
3062     }
3063     ccfwinform->CheckBox1->Visible=ccfwinform->ComboBox2->Visible;
3064     ccfwinform->CheckBox2->Visible=ccfwinform->ComboBox3->Visible;
3065     ccfwinform->CheckBox3->Visible=ccfwinform->ComboBox4->Visible;
3066    
3067     for (int i=0;i<nb_geo;i++)
3068     {
3069     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
3070     char mess[30];
3071     sprintf(mess,"%lu",mggeo->get_id());
3072     ccfwinform->ComboBox5->Items->Add(mess);
3073     }
3074     ccfwinform->active(gest,type);
3075     ccfwinform->Label4->Caption=Caption;
3076     ccfwinform->Edit1->ReadOnly=false;
3077     ccfwinform->Edit1->Text="";
3078     if (val==false)
3079     {
3080     ccfwinform->Edit1->Text="0";
3081     ccfwinform->Edit1->ReadOnly=true;
3082     }
3083     ccfwinform->ShowModal();
3084     }
3085     void __fastcall TVisuWinform::X1Click(TObject *Sender)
3086     {
3087     ajouterccf("Saisie d'un blocage selon l'axe x","Dx",false,true,true,true,true) ;
3088     }
3089     //---------------------------------------------------------------------------
3090    
3091     void __fastcall TVisuWinform::Y1Click(TObject *Sender)
3092     {
3093     ajouterccf("Saisie d'un blocage selon l'axe y","Dy",false,true,true,true,true) ;
3094    
3095     }
3096     //---------------------------------------------------------------------------
3097    
3098     void __fastcall TVisuWinform::Z1Click(TObject *Sender)
3099     {
3100     ajouterccf("Saisie d'un blocage selon l'axe z","Dz",false,true,true,true,true) ;
3101    
3102     }
3103     //---------------------------------------------------------------------------
3104    
3105     void __fastcall TVisuWinform::Tous1Click(TObject *Sender)
3106     {
3107     ajouterccf("Saisie d'un blocage dans toutes les directions","Da",false,true,true,true,true) ;
3108    
3109     }
3110     //---------------------------------------------------------------------------
3111    
3112     void __fastcall TVisuWinform::X2Click(TObject *Sender)
3113     {
3114     ajouterccf("Saisie d'une force selon l'axe x","Fx",true,true,false,false,false) ;
3115    
3116     }
3117     //---------------------------------------------------------------------------
3118    
3119     void __fastcall TVisuWinform::Y2Click(TObject *Sender)
3120     {
3121     ajouterccf("Saisie d'une force selon l'axe y","Fy",true,true,false,false,false) ;
3122    
3123     }
3124     //---------------------------------------------------------------------------
3125    
3126     void __fastcall TVisuWinform::Z2Click(TObject *Sender)
3127     {
3128     ajouterccf("Saisie d'une force selon l'axe z","Fz",true,true,false,false,false) ;
3129    
3130     }
3131     //---------------------------------------------------------------------------
3132    
3133     void __fastcall TVisuWinform::Matriaux1Click(TObject *Sender)
3134     {
3135     Tmatwinform *Child;
3136     Child = new Tmatwinform(Application);
3137     Child->Caption=Caption;
3138     Child->gest=gest;
3139     Child->Label6->Caption=Caption;
3140     Child->ShowModal();
3141     }
3142     //---------------------------------------------------------------------------
3143    
3144    
3145     void __fastcall TVisuWinform::mailleonExecute(TObject *Sender)
3146     {
3147     maille=1;
3148     redess();
3149     }
3150     //---------------------------------------------------------------------------
3151    
3152     void __fastcall TVisuWinform::mailleoffExecute(TObject *Sender)
3153     {
3154     maille=0;
3155     redess();
3156     }
3157     //---------------------------------------------------------------------------
3158    
3159     void __fastcall TVisuWinform::N1D1Click(TObject *Sender)
3160     {
3161     N1D1->Checked=!N1D1->Checked;
3162     noeud=0;
3163     if (N0D1->Checked) noeud=noeud+1;
3164     if (N1D1->Checked) noeud=noeud+2;
3165     if (N2D1->Checked) noeud=noeud+4;
3166     if (N3D1->Checked) noeud=noeud+8;
3167     redess();
3168     }
3169     //---------------------------------------------------------------------------
3170    
3171     void __fastcall TVisuWinform::N2D1Click(TObject *Sender)
3172     {
3173     N2D1->Checked=!N2D1->Checked;
3174     noeud=0;
3175     if (N0D1->Checked) noeud=noeud+1;
3176     if (N1D1->Checked) noeud=noeud+2;
3177     if (N2D1->Checked) noeud=noeud+4;
3178     if (N3D1->Checked) noeud=noeud+8;
3179     redess();
3180     }
3181     //---------------------------------------------------------------------------
3182    
3183     void __fastcall TVisuWinform::N3D1Click(TObject *Sender)
3184     {
3185     N3D1->Checked=!N3D1->Checked;
3186     noeud=0;
3187     if (N0D1->Checked) noeud=noeud+1;
3188     if (N1D1->Checked) noeud=noeud+2;
3189     if (N2D1->Checked) noeud=noeud+4;
3190     if (N3D1->Checked) noeud=noeud+8;
3191     redess();
3192     }
3193     //---------------------------------------------------------------------------
3194    
3195    
3196    
3197     void __fastcall TVisuWinform::Tous2Click(TObject *Sender)
3198     {
3199     N1D1->Checked=true;
3200     N2D1->Checked=true;
3201     N3D1->Checked=true;
3202     noeud=15;
3203     redess();
3204     }
3205     //---------------------------------------------------------------------------
3206    
3207    
3208     void __fastcall TVisuWinform::N1D2Click(TObject *Sender)
3209     {
3210     N1D2->Checked=!N1D2->Checked;
3211     maille=0;
3212     if (N1D2->Checked) maille=maille+1;
3213     if (N2D2->Checked) maille=maille+2;
3214     if (N3D2->Checked) maille=maille+4;
3215     redess();
3216     }
3217     //---------------------------------------------------------------------------
3218    
3219     void __fastcall TVisuWinform::N2D2Click(TObject *Sender)
3220     {
3221     N2D2->Checked=!N2D2->Checked;
3222     maille=0;
3223     if (N1D2->Checked) maille=maille+1;
3224     if (N2D2->Checked) maille=maille+2;
3225     if (N3D2->Checked) maille=maille+4;
3226     redess();
3227     }
3228     //---------------------------------------------------------------------------
3229    
3230     void __fastcall TVisuWinform::N3D2Click(TObject *Sender)
3231     {
3232     N3D2->Checked=!N3D2->Checked;
3233     maille=0;
3234     if (N1D2->Checked) maille=maille+1;
3235     if (N2D2->Checked) maille=maille+2;
3236     if (N3D2->Checked) maille=maille+4;
3237     redess();
3238     }
3239     //---------------------------------------------------------------------------
3240    
3241     void __fastcall TVisuWinform::Tous3Click(TObject *Sender)
3242     {
3243     N1D2->Checked=true;
3244     N2D2->Checked=true;
3245     N3D2->Checked=true;
3246     maille=7;
3247     redess();
3248     }
3249     //---------------------------------------------------------------------------
3250    
3251     void __fastcall TVisuWinform::Aucun1Click(TObject *Sender)
3252     {
3253     N0D1->Checked=false;
3254     N1D1->Checked=false;
3255     N2D1->Checked=false;
3256     N3D1->Checked=false;
3257     noeud=0;
3258     redess();
3259     }
3260     //---------------------------------------------------------------------------
3261    
3262     void __fastcall TVisuWinform::Aucun2Click(TObject *Sender)
3263     {
3264     N1D2->Checked=false;
3265     N2D2->Checked=false;
3266     N3D2->Checked=false;
3267     maille=0;
3268     redess();
3269     }
3270    
3271     //---------------------------------------------------------------------------
3272    
3273     void __fastcall TVisuWinform::X3Click(TObject *Sender)
3274     {
3275     ajouterccf("Saisie d'une pression selon l'axe x","Px",true,false,true,true,false) ;
3276    
3277     }
3278     //---------------------------------------------------------------------------
3279    
3280     void __fastcall TVisuWinform::Y3Click(TObject *Sender)
3281     {
3282     ajouterccf("Saisie d'une pression selon l'axe y","Py",true,false,true,true,false) ;
3283    
3284     }
3285     //---------------------------------------------------------------------------
3286    
3287     void __fastcall TVisuWinform::Z3Click(TObject *Sender)
3288     {
3289     ajouterccf("Saisie d'une pression selon l'axe z","Pz",true,false,true,true,false) ;
3290    
3291     }
3292     //---------------------------------------------------------------------------
3293    
3294     void __fastcall TVisuWinform::Normal1Click(TObject *Sender)
3295     {
3296     ajouterccf("Saisie d'une pression normale","Pn",true,false,false,true,false) ;
3297    
3298     }
3299     //---------------------------------------------------------------------------
3300    
3301    
3302     void __fastcall TVisuWinform::ResultatCosmosM1Click(TObject *Sender)
3303     {
3304     int nb=gest->get_nb_fem_maillage();
3305     if (nb==0)
3306     {
3307     MessageBox(Handle,"Pas de maillage FEM","Erreur",MB_OK);
3308     return ;
3309     }
3310     TCosmosWin *fen=new TCosmosWin(Owner);
3311    
3312     fen->ComboBox1->Clear();
3313     for (int i=0;i<nb;i++)
3314     {
3315     char chaine[500];
3316     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
3317     sprintf(chaine,"%lu", mai->get_id());
3318     fen->ComboBox1->Items->Add(chaine);
3319     }
3320     fen->Label2->Caption=Caption;
3321     fen->changegestionnaire(gest);
3322     fen->Show();
3323     }
3324     //---------------------------------------------------------------------------
3325    
3326    
3327     void __fastcall TVisuWinform::lancerg3dExecute(TObject *Sender)
3328     {
3329     Twincarte *Child;
3330     Child = new Twincarte(Application,*gest);
3331     Child->Caption=Caption;
3332     }
3333     //---------------------------------------------------------------------------
3334    
3335    
3336    
3337     void __fastcall TVisuWinform::TrackBar2Change(TObject *Sender)
3338     {
3339     if (TrackBar2->Position<TrackBar1->Position) TrackBar1->Position=TrackBar2->Position;
3340     ActiveControl=NULL;
3341     redess();
3342     }
3343     //---------------------------------------------------------------------------
3344    
3345     void __fastcall TVisuWinform::TrackBar1Change(TObject *Sender)
3346     {
3347     if (TrackBar2->Position<TrackBar1->Position) TrackBar2->Position=TrackBar1->Position;
3348     ActiveControl=NULL;
3349     redess();
3350     }
3351     //---------------------------------------------------------------------------
3352    
3353     void __fastcall TVisuWinform::TrackBar3Change(TObject *Sender)
3354     {
3355     if (TrackBar4->Position<TrackBar3->Position) TrackBar4->Position=TrackBar3->Position;
3356     ActiveControl=NULL;
3357     redess();
3358     }
3359     //---------------------------------------------------------------------------
3360    
3361     void __fastcall TVisuWinform::TrackBar4Change(TObject *Sender)
3362     {
3363     if (TrackBar4->Position<TrackBar3->Position) TrackBar3->Position=TrackBar4->Position;
3364     ActiveControl=NULL;
3365     redess();
3366    
3367     }
3368     //---------------------------------------------------------------------------
3369    
3370     void __fastcall TVisuWinform::TrackBar5Change(TObject *Sender)
3371     {
3372     if (TrackBar6->Position<TrackBar5->Position) TrackBar6->Position=TrackBar5->Position;
3373     ActiveControl=NULL;
3374     redess();
3375    
3376     }
3377     //---------------------------------------------------------------------------
3378    
3379     void __fastcall TVisuWinform::TrackBar6Change(TObject *Sender)
3380     {
3381     if (TrackBar6->Position<TrackBar5->Position) TrackBar5->Position=TrackBar6->Position;
3382     ActiveControl=NULL;
3383     redess();
3384     }
3385     //---------------------------------------------------------------------------
3386    
3387     void __fastcall TVisuWinform::Button1Click(TObject *Sender)
3388     {
3389     AnsiString InputString = InputBox("Information","Entrez la valeur maximale de la legende ?", "");
3390     double val=atof(InputString.c_str());
3391     if (val>lmin) lmax=val;
3392     dessine_legende();
3393     redess();
3394     }
3395     //---------------------------------------------------------------------------
3396     void __fastcall TVisuWinform::Button2Click(TObject *Sender)
3397     {
3398     AnsiString InputString = InputBox("Information","Entrez la valeur minimale de la legende ?", "");
3399     double val=atof(InputString.c_str());
3400     if (val<lmax) lmin=val;
3401     dessine_legende();
3402     redess();
3403     }
3404     //---------------------------------------------------------------------------
3405    
3406     void __fastcall TVisuWinform::Button3Click(TObject *Sender)
3407     {
3408     PageControl1->Enabled=false;
3409     PageControl2->Visible=true;
3410     TabSheet5->TabVisible=true;
3411     ComboBox2->Clear();
3412     ListBox2->Clear();
3413     Label35->Caption="Champs";
3414     Edit1->Visible=false;
3415     ListBox2->Visible=true;
3416     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
3417     MG_MAILLAGE* mai=NULL;
3418     if (sol!=NULL) mai=sol->get_maillage();
3419     int nb=gest->get_nb_mg_solution();
3420     for (int i=0;i<nb;i++)
3421     {
3422     MG_SOLUTION* sol=gest->get_mg_solution(i);
3423     MG_MAILLAGE* maitmp=sol->get_maillage();
3424     if (maitmp!=mai)
3425     {
3426     ComboBox2->Items->Add("Solution incompatible");
3427     continue;
3428     }
3429     char chaine[1000];
3430     sprintf(chaine,"%s",sol->get_nom().c_str());
3431     ComboBox2->Items->Add(chaine);
3432     }
3433     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
3434     FEM_MAILLAGE* femmai=NULL;
3435     if (femsol!=NULL) femmai=femsol->get_maillage();
3436     nb=gest->get_nb_fem_solution();
3437     for (int i=0;i<nb;i++)
3438     {
3439     FEM_SOLUTION* sol=gest->get_fem_solution(i);
3440     FEM_MAILLAGE* maitmp=sol->get_maillage();
3441     if (maitmp!=femmai)
3442     {
3443     ComboBox2->Items->Add("Solution incompatible");
3444     continue;
3445     }
3446     char chaine[1000];
3447     sprintf(chaine,"%s",sol->get_nom().c_str());
3448     ComboBox2->Items->Add(chaine);
3449     }
3450    
3451     ComboBox2->Items->Add("Constante");
3452     ComboBox2->Items->Add("Fonction");
3453     ListBox3->Clear();
3454     char chaine[100];
3455     sprintf(chaine,"%s@%s",ListBox1->Items->Strings[ListBox1->ItemIndex].c_str(),ComboBox1->Text.c_str());
3456     ListBox3->Items->Add(chaine);
3457     }
3458     //---------------------------------------------------------------------------
3459    
3460     void __fastcall TVisuWinform::Button4Click(TObject *Sender)
3461     {
3462     PageControl2->Visible=false;
3463     TabSheet5->TabVisible=false;
3464     PageControl1->Enabled=true;
3465     }
3466     //---------------------------------------------------------------------------
3467    
3468     void __fastcall TVisuWinform::Button5Click(TObject *Sender)
3469     {
3470     PageControl2->Visible=false;
3471     TabSheet5->TabVisible=false;
3472     PageControl1->Enabled=true;
3473     TabSheet6->TabVisible=true;
3474     TabSheet2->TabVisible=false;
3475     PageControl1->ActivePage=TabSheet6;
3476     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox2->ItemIndex);
3477     if (((ListBox2->ItemIndex!=-1) || (ComboBox2->Text=="Constante") || (ComboBox2->Text=="Fonction") )&& (ComboBox3->Text!=""))
3478     {
3479     if (gest->get_mg_solution(ComboBox1->ItemIndex)!=NULL)
3480     {
3481     MG_MAILLAGE* mai=gest->get_mg_solution(ComboBox1->ItemIndex)->get_maillage();
3482     int nb=mai->get_nb_mg_noeud();
3483     lmin=1e308;
3484     lmax=-1e308;
3485     for (int i=0;i<nb;i++)
3486     {
3487     MG_NOEUD* noeud=mai->get_mg_noeud(i);
3488     double val=noeud->get_solution();
3489     double val2;
3490     if (ComboBox2->Text=="Constante") val2=atof(Edit1->Text.c_str()); else if (ComboBox2->Text!="Fonction") val2=sol->lire(i,ListBox2->ItemIndex);
3491     if (ComboBox3->Text=="+") val=val+val2;
3492     if (ComboBox3->Text=="-") val=val-val2;
3493     if (ComboBox3->Text=="*") val=val*val2;
3494     if (ComboBox3->Text=="/")
3495     if (fabs(val2)>1e-10) val=val/val2; else val=val/fabs(val)*1e308;
3496     if (ComboBox3->Text=="|x|") val=fabs(val);
3497     if (val<lmin) lmin=val;
3498     if (val>lmax) lmax=val;
3499     noeud->change_solution(val);
3500     }
3501     if (!(lmax>lmin)) lmax=lmin+1e-6;
3502     char chaine[100];
3503     if (ComboBox3->Text=="|x|") strcpy(chaine,"|x|");
3504     else if (ComboBox2->Text=="Constante") sprintf(chaine,"%s %s",ComboBox3->Text.c_str(),Edit1->Text.c_str());
3505     else sprintf(chaine,"%s %s@%s",ComboBox3->Text.c_str(),ListBox2->Items->Strings[ListBox2->ItemIndex].c_str(),ComboBox2->Text.c_str());
3506     ListBox3->Items->Add(chaine);
3507     dessine_legende();
3508     redess();
3509     }
3510     }
3511     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox2->ItemIndex-gest->get_nb_mg_solution());
3512     if (((ListBox2->ItemIndex!=-1) || (ComboBox2->Text=="Constante") || (ComboBox2->Text=="Fonction") )&& (ComboBox3->Text!="") )
3513     {
3514     if (gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution())!=NULL)
3515     {
3516     FEM_MAILLAGE* mai=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution())->get_maillage();
3517     int nb=mai->get_nb_fem_noeud();
3518     lmin=1e308;
3519     lmax=-1e308;
3520     for (int i=0;i<nb;i++)
3521     {
3522     FEM_NOEUD* noeud=mai->get_fem_noeud(i);
3523     double val=noeud->get_solution();
3524     double val2;
3525     if (ComboBox2->Text=="Constante") val2=atof(Edit1->Text.c_str()); else if (ComboBox2->Text!="Fonction") val2=femsol->lire(i,ListBox2->ItemIndex);
3526     if (ComboBox3->Text=="+") val=val+val2;
3527     if (ComboBox3->Text=="-") val=val-val2;
3528     if (ComboBox3->Text=="*") val=val*val2;
3529     if (ComboBox3->Text=="/")
3530     if (fabs(val2)>1e-10) val=val/val2; else val=val/fabs(val)*1e308;
3531     if (ComboBox3->Text=="|x|") val=fabs(val);
3532     if (val<lmin) lmin=val;
3533     if (val>lmax) lmax=val;
3534     noeud->change_solution(val);
3535     }
3536     if (!(lmax>lmin)) lmax=lmin+1e-6;
3537     char chaine[100];
3538     if (ComboBox3->Text=="|x|") strcpy(chaine,"|x|");
3539     else if (ComboBox2->Text=="Constante") sprintf(chaine,"%s %s",ComboBox3->Text.c_str(),Edit1->Text.c_str());
3540     else sprintf(chaine,"%s %s@%s",ComboBox3->Text.c_str(),ListBox2->Items->Strings[ListBox2->ItemIndex].c_str(),ComboBox2->Text.c_str());
3541     ListBox3->Items->Add(chaine);
3542     dessine_legende();
3543     redess();
3544     }
3545     }
3546    
3547     }
3548     //---------------------------------------------------------------------------
3549    
3550     void __fastcall TVisuWinform::ComboBox2Change(TObject *Sender)
3551     {
3552     ComboBox3->Clear();
3553     ComboBox3->Items->Add("+");
3554     ComboBox3->Items->Add("-");
3555     ComboBox3->Items->Add("*");
3556     ComboBox3->Items->Add("/");
3557     if (ComboBox2->Text=="Solution incompatible")
3558     {
3559     ComboBox2->ItemIndex=-1;
3560     return;
3561     }
3562     if (ComboBox2->Text=="Fonction")
3563     {
3564     ComboBox3->Clear();
3565     ComboBox3->Items->Add("|x|");
3566     return;
3567     }
3568     if (ComboBox2->Text=="Constante")
3569     {
3570     ListBox2->Visible=false;
3571     Label35->Caption="Valeur";
3572     Edit1->Visible=true;
3573     return;
3574     }
3575     Label35->Caption="Champs";
3576     Edit1->Visible=false;
3577     ListBox2->Visible=true;
3578     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox2->ItemIndex);
3579     if (sol!=NULL)
3580     {
3581     ListBox2->Clear();
3582     int nb=sol->get_nb_champ();
3583     for (int i=0;i<nb;i++)
3584     ListBox2->Items->Add(sol->get_legende(i).c_str());
3585     }
3586     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox2->ItemIndex-gest->get_nb_mg_solution());
3587     if (femsol!=NULL)
3588     {
3589     ListBox2->Clear();
3590     int nb=femsol->get_nb_champ();
3591     for (int i=0;i<nb;i++)
3592     ListBox2->Items->Add(femsol->get_legende(i).c_str());
3593     }
3594    
3595     }
3596     //---------------------------------------------------------------------------
3597    
3598     void __fastcall TVisuWinform::Button6Click(TObject *Sender)
3599     {
3600     PageControl1->Enabled=false;
3601     PageControl2->Visible=true;
3602     TabSheet5->TabVisible=true;
3603     ComboBox2->Clear();
3604     ListBox2->Clear();
3605     Label35->Caption="Champs";
3606     Edit1->Visible=false;
3607     ListBox2->Visible=true;
3608     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
3609     MG_MAILLAGE* mai=NULL;
3610     if (sol!=NULL) mai=sol->get_maillage();
3611     int nb=gest->get_nb_mg_solution();
3612     for (int i=0;i<nb;i++)
3613     {
3614     MG_SOLUTION* sol=gest->get_mg_solution(i);
3615     MG_MAILLAGE* maitmp=sol->get_maillage();
3616     if (maitmp!=mai)
3617     {
3618     ComboBox2->Items->Add("Solution incompatible");
3619     continue;
3620     }
3621     char chaine[1000];
3622     sprintf(chaine,"%s",sol->get_nom().c_str());
3623     ComboBox2->Items->Add(chaine);
3624     }
3625     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
3626     FEM_MAILLAGE* femmai=NULL;
3627     if (femsol!=NULL) femmai=femsol->get_maillage();
3628     nb=gest->get_nb_fem_solution();
3629     for (int i=0;i<nb;i++)
3630     {
3631     FEM_SOLUTION* femsol=gest->get_fem_solution(i);
3632     FEM_MAILLAGE* maitmp=femsol->get_maillage();
3633     if (maitmp!=femmai)
3634     {
3635     ComboBox2->Items->Add("Solution incompatible");
3636     continue;
3637     }
3638     char chaine[1000];
3639     sprintf(chaine,"%s",femsol->get_nom().c_str());
3640     ComboBox2->Items->Add(chaine);
3641     }
3642     ComboBox2->Items->Add("Constante");
3643     ComboBox2->Items->Add("Fonction");
3644     }
3645     //---------------------------------------------------------------------------
3646    
3647     void __fastcall TVisuWinform::Button7Click(TObject *Sender)
3648     {
3649     TabSheet2->TabVisible=true;
3650     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
3651     if (sol!=NULL)
3652     {
3653     sol->active_solution(ListBox1->ItemIndex);
3654     lmin=sol->get_legende_min();
3655     lmax=sol->get_legende_max();
3656     }
3657     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
3658     if (femsol!=NULL)
3659     {
3660     femsol->active_solution(ListBox1->ItemIndex);
3661     lmin=femsol->get_legende_min();
3662     lmax=femsol->get_legende_max();
3663     }
3664     TabSheet6->TabVisible=false;
3665     PageControl1->ActivePage=TabSheet2;
3666     dessine_legende();
3667     redess();
3668     }
3669     //---------------------------------------------------------------------------
3670    
3671    
3672     void __fastcall TVisuWinform::Vu1Click(TObject *Sender)
3673     {
3674     Tvisupara *Child;
3675     Child = new Tvisupara(Application);
3676     Child->gest=gest;
3677     int nbmai=gest->get_nb_mg_maillage();
3678     for (int i=0;i<nbmai;i++)
3679     {
3680     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
3681     long id=mai->get_id();
3682     Child->ListBox1->Items->Add(id);
3683     }
3684     int nbgeo=gest->get_nb_mg_geometrie();
3685     for (int i=0;i<nbgeo;i++)
3686     {
3687     MG_GEOMETRIE* geo=gest->get_mg_geometrie(i);
3688     long id=geo->get_id();
3689     Child->ListBox3->Items->Add(id);
3690     }
3691     Child->Caption=Caption;
3692     }
3693     //---------------------------------------------------------------------------
3694    
3695     void __fastcall TVisuWinform::X4Click(TObject *Sender)
3696     {
3697     ajouterccf("Saisie d'un déplacement imposé selon l'axe x","Dx",true,true,true,true,false) ;
3698     }
3699     //---------------------------------------------------------------------------
3700    
3701     void __fastcall TVisuWinform::Y4Click(TObject *Sender)
3702     {
3703     ajouterccf("Saisie d'un déplacement imposé selon l'axe y","Dy",true,true,true,true,false) ;
3704     }
3705     //---------------------------------------------------------------------------
3706    
3707     void __fastcall TVisuWinform::Z4Click(TObject *Sender)
3708     {
3709     ajouterccf("Saisie d'un déplacement imposé selon l'axe z","Dz",true,true,true,true,false) ;
3710     }
3711     //---------------------------------------------------------------------------
3712    
3713    
3714    
3715     void __fastcall TVisuWinform::Resolution1Click(TObject *Sender)
3716     {
3717     Tfsolve *fsolve=new Tfsolve(Application,gest);
3718     fsolve->Caption=Caption;
3719     fsolve->ComboBox1->Clear();
3720     int nbmai=gest->get_nb_mg_maillage();
3721     for (int i=0;i<nbmai;i++)
3722     {
3723     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
3724     fsolve->ComboBox1->Items->Add(mai->get_id());
3725     }
3726     fsolve->Show();
3727     }
3728     //---------------------------------------------------------------------------
3729    
3730     //---------------------------------------------------------------------------
3731     void __fastcall TVisuWinform::dessinemaifem(void)
3732     {
3733     glLineWidth(1.);
3734     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
3735     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
3736     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
3737     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
3738     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
3739     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
3740     double dx=(x2-x1)*1.01;
3741     double dy=(y2-y1)*1.01;
3742     double dz=(z2-z1)*1.01;
3743     double xm=(x1+x2)/2.;
3744     x1=xm-dx/2.;x2=xm+dx/2.;
3745     double ym=(y1+y2)/2.;
3746     y1=ym-dy/2.;y2=ym+dy/2.;
3747     double zm=(z1+z2)/2.;
3748     z1=zm-dz/2.;z2=zm+dz/2.;
3749     BOITE_3D boite2(x1,y1,z1,x2+1e-8,y2+1e-8,z2+1e-8);
3750    
3751     if (noeud)
3752     {
3753     glColor3f(MainForm->valeurconfig[30],MainForm->valeurconfig[31],MainForm->valeurconfig[32]);
3754     glPointSize(MainForm->valeurconfig[33]);
3755     glBegin(GL_POINTS);
3756     int nb=lst_noeud_fem.size();
3757     for (int i=0;i<nb;i++)
3758     {
3759     FEM_NOEUD* noeud1=lst_noeud_fem[i];
3760     BOITE_3D boitmp=noeud1->get_boite_3D();
3761     if (!(boitmp*boite2)) continue;
3762     int dim;
3763     if (noeud1->get_lien_topologie()==NULL) dim=-1;
3764     else dim=noeud1->get_lien_topologie()->get_dimension();
3765     /*if (dim==0) dim=1;
3766     dim--;*/
3767     if (dim>-1)
3768     {
3769     int binoeud[4];
3770     binoeud[0]=noeud%2;
3771     binoeud[1]=(noeud/2)%2;
3772     binoeud[2]=(noeud/4)%2;
3773     binoeud[3]=(noeud/8)%2;
3774     if (binoeud[dim])
3775     {
3776     double *xyz1=noeud1->get_coord();
3777     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
3778     }
3779     }
3780     else
3781     {
3782     double *xyz1=noeud1->get_coord();
3783     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
3784     }
3785     }
3786     glEnd();
3787     if (affnoeud)
3788     {
3789     for (int i=0;i<nb;i++)
3790     {
3791     FEM_NOEUD* noeud1=lst_noeud_fem[i];
3792     BOITE_3D boitmp=noeud1->get_boite_3D();
3793     if (!(boitmp*boite2)) continue;
3794     int dim;
3795     if (noeud1->get_lien_topologie()==NULL) dim=-1;
3796     else dim=noeud1->get_lien_topologie()->get_dimension();
3797     /*if (dim==0) dim=1;
3798     dim--;*/
3799     int binoeud[4];
3800     binoeud[0]=noeud%2;
3801     binoeud[1]=(noeud/2)%2;
3802     binoeud[2]=(noeud/4)%2;
3803     binoeud[3]=(noeud/8)%2;
3804     if (dim>-1)
3805     {
3806     if (binoeud[dim])
3807     {
3808     char mess[30];
3809     if (Id1->Checked)
3810     {
3811     unsigned long id=noeud1->get_id();
3812     sprintf(mess,"%lu",id);
3813     }
3814     if (Numero1->Checked)
3815     {
3816     int num=noeud1->get_numero();
3817     sprintf(mess,"%d",num);
3818     }
3819     if (NumeroOptimise1->Checked)
3820     {
3821     int num=noeud1->get_numero_opt();
3822     sprintf(mess,"%d",num);
3823     }
3824     double *xyz=noeud1->get_coord();
3825     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
3826     glListBase (1000);
3827     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
3828     }
3829    
3830     }
3831     else
3832     {
3833     double *xyz=noeud1->get_coord();
3834     char mess[30];
3835     if (Id1->Checked)
3836     {
3837     unsigned long id=noeud1->get_id();
3838     sprintf(mess,"%lu",id);
3839     }
3840     if (Numero1->Checked)
3841     {
3842     int num=noeud1->get_numero();
3843     sprintf(mess,"%d",num);
3844     }
3845     if (NumeroOptimise1->Checked)
3846     {
3847     int num=noeud1->get_numero_opt();
3848     sprintf(mess,"%d",num);
3849     }
3850     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
3851     glListBase (1000);
3852     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
3853     }
3854     }
3855    
3856     }
3857     }
3858     int bmaille[3];
3859     bmaille[0]=maille%2;
3860     bmaille[1]=(maille/2)%2;
3861     bmaille[2]=(maille/4)%2;
3862     if (bmaille[0])
3863     {
3864     glLineWidth(MainForm->valeurconfig[17]);
3865     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
3866     glBegin(GL_LINES);
3867     int nb=lst_segment_fem.size();
3868     for (int i=0;i<nb;i++)
3869     {
3870     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
3871     FEM_SEGMENT* femsegment=lst_segment_fem[i];
3872     BOITE_3D boitmp=femsegment->get_boite_3D();
3873     if (!(boitmp*boite2)) continue;
3874     int nbnoeud=femsegment->get_nb_fem_noeud();
3875     FEM_NOEUD* noeud1=femsegment->get_fem_noeud(0);
3876     FEM_NOEUD* noeud2=femsegment->get_fem_noeud(1);
3877     double *xyz1=noeud1->get_coord();
3878     double *xyz2=noeud2->get_coord();
3879     if ((femsegment->get_lien_topologie()==toposel) && (femsegment->get_lien_topologie()!=NULL) )
3880     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
3881     if (CheckBox1->Checked==true)
3882     {
3883     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
3884     if (pos>11) pos=11;
3885     if (pos<0) pos=0;
3886     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
3887     }
3888     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
3889     if (CheckBox1->Checked==true)
3890     {
3891     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
3892     if (pos>11) pos=11;
3893     if (pos<0) pos=0;
3894     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
3895     }
3896     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
3897     if (nbnoeud==3)
3898     {
3899     FEM_NOEUD* noeud1=femsegment->get_fem_noeud(1);
3900     FEM_NOEUD* noeud2=femsegment->get_fem_noeud(2);
3901     double *xyz1=noeud1->get_coord();
3902     double *xyz2=noeud2->get_coord();
3903     if ((femsegment->get_lien_topologie()==toposel) && (femsegment->get_lien_topologie()!=NULL) )
3904     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
3905     if (CheckBox1->Checked==true)
3906     {
3907     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
3908     if (pos>11) pos=11;
3909     if (pos<0) pos=0;
3910     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
3911     }
3912     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
3913     if (CheckBox1->Checked==true)
3914     {
3915     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
3916     if (pos>11) pos=11;
3917     if (pos<0) pos=0;
3918     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
3919     }
3920     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
3921     }
3922     }
3923     glEnd();
3924    
3925     if (affmaille)
3926     {
3927     for (int i=0;i<nb;i++)
3928     {
3929     FEM_SEGMENT* femsegment=lst_segment_fem[i];
3930     BOITE_3D boitmp=femsegment->get_boite_3D();
3931     if (!(boitmp*boite2)) continue;
3932     FEM_NOEUD* noeud1=femsegment->get_fem_noeud(0);
3933     FEM_NOEUD* noeud2=femsegment->get_fem_noeud(femsegment->get_nb_fem_noeud()-1);
3934     unsigned long id=femsegment->get_id();
3935     double *xyz1=noeud1->get_coord();
3936     double *xyz2=noeud2->get_coord();
3937     char mess[30];
3938     sprintf(mess,"%lu",id);
3939     glRasterPos3f(0.5*(xyz1[0]+xyz2[0]),0.5*(xyz1[1]+xyz2[1]),0.5*(xyz1[2]+xyz2[2]));
3940     glListBase (1000);
3941     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
3942     }
3943     }
3944     }
3945    
3946     //triangle
3947     if (bmaille[1])
3948     {
3949     if (render>0)
3950     {
3951     if (render>1) InitShading();
3952     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
3953     glEnable(GL_DEPTH_TEST);
3954     glEnable(GL_POLYGON_OFFSET_FILL);
3955     glPolygonOffset(1.0,1.0);
3956     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
3957     glBegin(GL_TRIANGLES);
3958     glEdgeFlag(GL_TRUE);
3959     int nb=lst_triangle_fem.size();
3960     for (int i=0;i<nb;i++)
3961     {
3962     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
3963     FEM_TRIANGLE* femtri=lst_triangle_fem[i];
3964     BOITE_3D boitmp=femtri->get_boite_3D();
3965     if (!(boitmp*boite2)) continue;
3966     int nbfemnoeud=femtri->get_nb_fem_noeud();
3967     if (nbfemnoeud==3) dessinetrifem(femtri,femtri->get_fem_noeud(0),femtri->get_fem_noeud(1),femtri->get_fem_noeud(2));
3968     if (nbfemnoeud==6)
3969     {
3970     dessinetrifem(femtri,femtri->get_fem_noeud(0),femtri->get_fem_noeud(1),femtri->get_fem_noeud(5));
3971     dessinetrifem(femtri,femtri->get_fem_noeud(1),femtri->get_fem_noeud(2),femtri->get_fem_noeud(3));
3972     dessinetrifem(femtri,femtri->get_fem_noeud(1),femtri->get_fem_noeud(3),femtri->get_fem_noeud(5));
3973     dessinetrifem(femtri,femtri->get_fem_noeud(5),femtri->get_fem_noeud(3),femtri->get_fem_noeud(4));
3974     }
3975     }
3976     glEnd();
3977     }
3978    
3979     glFlush();
3980     if (render>0)
3981     {
3982     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
3983     glLineWidth(MainForm->valeurconfig[40]);
3984     if (render>1) InitShading();
3985     }
3986     else
3987     {
3988     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
3989     glLineWidth(MainForm->valeurconfig[21]);
3990     }
3991     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
3992     glBegin(GL_LINES);
3993     glEdgeFlag(GL_TRUE);
3994     int nb=lst_triangle_fem.size();
3995     for (int i=0;i<nb;i++)
3996     {
3997     if (render>0)
3998     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
3999     else
4000     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
4001     FEM_TRIANGLE* femtri=lst_triangle_fem[i];
4002     BOITE_3D boitmp=femtri->get_boite_3D();
4003     if (!(boitmp*boite2)) continue;
4004     int nb_fem_noeud=femtri->get_nb_fem_noeud();
4005     double xg=0.;
4006     double yg=0.;
4007     double zg=0.;
4008     for (int j=0;j<nb_fem_noeud;j++)
4009     {
4010     FEM_NOEUD* no=femtri->get_fem_noeud(j);
4011     xg=xg+no->get_x();
4012     yg=yg+no->get_y();
4013     zg=zg+no->get_z();
4014     }
4015     xg=xg/nb_fem_noeud;
4016     yg=yg/nb_fem_noeud;
4017     zg=zg/nb_fem_noeud;
4018     for (int j=0;j<nb_fem_noeud;j++)
4019     {
4020     FEM_NOEUD* no1=femtri->get_fem_noeud(j);
4021     FEM_NOEUD* no2;
4022     if (j+1!=nb_fem_noeud) no2=femtri->get_fem_noeud(j+1); else no2=femtri->get_fem_noeud(0);
4023     double *xyz1=no1->get_coord();
4024     double *xyz2=no2->get_coord();
4025     if ( ((femtri->get_lien_topologie()==toposel)&& (femtri->get_lien_topologie()!=NULL) && (render==0)) || ((femtri->get_lien_topologie()==toposel)&&(render==1) && (femtri->get_lien_topologie()!=NULL) && (MainForm->valeurconfig[56]==0.)))
4026     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
4027    
4028     if (shrink)
4029     {
4030     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4031     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4032     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4033     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4034     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4035     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4036     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4037     {
4038     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4039     if (pos>11) pos=11;
4040     if (pos<0) pos=0;
4041     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4042     }
4043     glVertex3f(x1,y1,z1);
4044     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4045     {
4046     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4047     if (pos>11) pos=11;
4048     if (pos<0) pos=0;
4049     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4050     }
4051     glVertex3f(x2,y2,z2);
4052    
4053     }
4054     else
4055     {
4056     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4057     {
4058     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4059     if (pos>11) pos=11;
4060     if (pos<0) pos=0;
4061     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4062     }
4063     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4064     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4065     {
4066     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4067     if (pos>11) pos=11;
4068     if (pos<0) pos=0;
4069     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4070     }
4071     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4072     }
4073     }
4074     }
4075     glEnd();
4076     if (affmaille)
4077     {
4078     for (int i=0;i<nb;i++)
4079     {
4080     FEM_TRIANGLE* femtri=lst_triangle_fem[i];
4081     BOITE_3D boitmp=femtri->get_boite_3D();
4082     if (!(boitmp*boite2)) continue;
4083     int n1,n2,n3;
4084     int nb=femtri->get_nb_fem_noeud();
4085     if (nb==3) {n1=0;n2=1;n3=2;}
4086     if (nb==6) {n1=0;n2=2;n3=4;}
4087     FEM_NOEUD* noeud1=femtri->get_fem_noeud(n1);
4088     FEM_NOEUD* noeud2=femtri->get_fem_noeud(n2);
4089     FEM_NOEUD* noeud3=femtri->get_fem_noeud(n3);
4090     double *xyz1=noeud1->get_coord();
4091     double *xyz2=noeud2->get_coord();
4092     double *xyz3=noeud3->get_coord();
4093     unsigned long id=femtri->get_id();
4094     char mess[30];
4095     sprintf(mess,"%lu",id);
4096     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4097     {
4098     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
4099     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4100     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4101     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4102     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4103     }
4104     glRasterPos3f((xyz1[0]+xyz2[0]+xyz3[0])/3.,(xyz1[1]+xyz2[1]+xyz3[1])/3.,(xyz1[2]+xyz2[2]+xyz3[2])/3.);
4105     glListBase (1000);
4106     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
4107     }
4108     }
4109     if (render==2)
4110     {
4111     glDisable(GL_LIGHTING);
4112     glDisable(GL_LIGHT0);
4113     glDisable(GL_LIGHT1);
4114     }
4115     }
4116     //tetra
4117     if (bmaille[2])
4118     {
4119     if (render==1)
4120     {
4121     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
4122     glEnable(GL_DEPTH_TEST);
4123     glEnable(GL_POLYGON_OFFSET_FILL);
4124     glPolygonOffset(1.0,1.0);
4125     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
4126     glBegin(GL_TRIANGLES);
4127     glEdgeFlag(GL_TRUE);
4128     int nb=lst_tetra_fem.size();
4129     for (int i=0;i<nb;i++)
4130     {
4131     FEM_TETRA* femtet=lst_tetra_fem[i];
4132     BOITE_3D boitmp=femtet->get_boite_3D();
4133     if (!(boitmp*boite2)) continue;
4134     int nb_noeud=femtet->get_nb_fem_noeud();
4135     if (nb_noeud==4)
4136     {
4137     dessinetritetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1),femtet->get_fem_noeud(2));
4138     dessinetritetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1),femtet->get_fem_noeud(3));
4139     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4140     dessinetritetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(0),femtet->get_fem_noeud(3));
4141     }
4142     if (nb_noeud==10)
4143     {
4144     dessinetritetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1),femtet->get_fem_noeud(5));
4145     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4146     dessinetritetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(4),femtet->get_fem_noeud(5));
4147     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(3),femtet->get_fem_noeud(5));
4148     dessinetritetfem(femtet,femtet->get_fem_noeud(9),femtet->get_fem_noeud(7),femtet->get_fem_noeud(6));
4149     dessinetritetfem(femtet,femtet->get_fem_noeud(7),femtet->get_fem_noeud(2),femtet->get_fem_noeud(1));
4150     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(0),femtet->get_fem_noeud(6));
4151     dessinetritetfem(femtet,femtet->get_fem_noeud(7),femtet->get_fem_noeud(1),femtet->get_fem_noeud(6));
4152     dessinetritetfem(femtet,femtet->get_fem_noeud(9),femtet->get_fem_noeud(8),femtet->get_fem_noeud(7));
4153     dessinetritetfem(femtet,femtet->get_fem_noeud(8),femtet->get_fem_noeud(4),femtet->get_fem_noeud(3));
4154     dessinetritetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(2),femtet->get_fem_noeud(7));
4155     dessinetritetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(7),femtet->get_fem_noeud(8));
4156     dessinetritetfem(femtet,femtet->get_fem_noeud(9),femtet->get_fem_noeud(6),femtet->get_fem_noeud(8));
4157     dessinetritetfem(femtet,femtet->get_fem_noeud(6),femtet->get_fem_noeud(0),femtet->get_fem_noeud(5));
4158     dessinetritetfem(femtet,femtet->get_fem_noeud(5),femtet->get_fem_noeud(4),femtet->get_fem_noeud(8));
4159     dessinetritetfem(femtet,femtet->get_fem_noeud(5),femtet->get_fem_noeud(8),femtet->get_fem_noeud(6));
4160     }
4161     }
4162     glEnd();
4163     }
4164    
4165     glFlush();
4166     if (render==1)
4167     {
4168     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
4169     glLineWidth(MainForm->valeurconfig[40]);
4170     }
4171     else
4172     {
4173     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
4174     glLineWidth(MainForm->valeurconfig[25]);
4175     }
4176     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
4177     glBegin(GL_LINES);
4178     glEdgeFlag(GL_TRUE);
4179     int nb=lst_tetra_fem.size();
4180     for (int i=0;i<nb;i++)
4181     {
4182     if (render==1)
4183     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
4184     else
4185     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
4186     FEM_TETRA* femtet=lst_tetra_fem[i];
4187     BOITE_3D boitmp=femtet->get_boite_3D();
4188     if (!(boitmp*boite2)) continue;
4189     int nb_noeud=femtet->get_nb_fem_noeud();
4190     if (nb_noeud==4)
4191     {
4192     dessinesegtetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1));
4193     dessinesegtetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2));
4194     dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4195     dessinesegtetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(0));
4196     }
4197     if (nb_noeud==10)
4198     {
4199     dessinesegtetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1));
4200     dessinesegtetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2));
4201     dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4202     dessinesegtetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(4));
4203     dessinesegtetfem(femtet,femtet->get_fem_noeud(4),femtet->get_fem_noeud(5));
4204     dessinesegtetfem(femtet,femtet->get_fem_noeud(5),femtet->get_fem_noeud(0));
4205     dessinesegtetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(6));
4206     dessinesegtetfem(femtet,femtet->get_fem_noeud(6),femtet->get_fem_noeud(9));
4207     dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(7));
4208     dessinesegtetfem(femtet,femtet->get_fem_noeud(7),femtet->get_fem_noeud(9));
4209     dessinesegtetfem(femtet,femtet->get_fem_noeud(4),femtet->get_fem_noeud(8));
4210     dessinesegtetfem(femtet,femtet->get_fem_noeud(8),femtet->get_fem_noeud(9));
4211     }
4212     }
4213     glEnd();
4214     if (affmaille)
4215     {
4216     for (int i=0;i<nb;i++)
4217     {
4218     FEM_TETRA* femtet=lst_tetra_fem[i];
4219     BOITE_3D boitmp=femtet->get_boite_3D();
4220     if (!(boitmp*boite2)) continue;
4221     FEM_NOEUD *noeud1,*noeud2,*noeud3,*noeud4;
4222     int nb_noeud=femtet->get_nb_fem_noeud();
4223     if (nb_noeud==4)
4224     {
4225     noeud1=femtet->get_fem_noeud(0);
4226     noeud2=femtet->get_fem_noeud(1);
4227     noeud3=femtet->get_fem_noeud(2);
4228     noeud4=femtet->get_fem_noeud(3);
4229     }
4230     if (nb_noeud==10)
4231     {
4232     noeud1=femtet->get_fem_noeud(0);
4233     noeud2=femtet->get_fem_noeud(2);
4234     noeud3=femtet->get_fem_noeud(4);
4235     noeud4=femtet->get_fem_noeud(9);
4236     }
4237     double *xyz1=noeud1->get_coord();
4238     double *xyz2=noeud2->get_coord();
4239     double *xyz3=noeud3->get_coord();
4240     double *xyz4=noeud4->get_coord();
4241     unsigned long id=femtet->get_id();
4242     char mess[30];
4243     sprintf(mess,"%lu",id);
4244     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4245     {
4246     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
4247     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4248     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4249     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4250     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4251     }
4252     glRasterPos3f((xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0])/4.,(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1])/4.,(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2])/4.);
4253     glListBase (1000);
4254     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
4255     }
4256     }
4257     if (render==2)
4258     {
4259     glDisable(GL_LIGHTING);
4260     glDisable(GL_LIGHT0);
4261     glDisable(GL_LIGHT1);
4262     }
4263     }
4264     }
4265    
4266    
4267    
4268     void __fastcall TVisuWinform::dessinetrifem(FEM_TRIANGLE* femtri,FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_NOEUD* no3)
4269     {
4270     double *xyz1=no1->get_coord();
4271     double *xyz2=no2->get_coord();
4272     double *xyz3=no3->get_coord();
4273     if ((femtri->get_lien_topologie()==toposel) && (femtri->get_lien_topologie()!=NULL) )
4274     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
4275     if (qualite==1)
4276     {
4277     double qual;
4278     if (femtri->get_nb_fem_noeud()==3) qual=OPERATEUR::qualite_triangle(femtri->get_fem_noeud(0)->get_coord(),femtri->get_fem_noeud(1)->get_coord(),femtri->get_fem_noeud(2)->get_coord());
4279     if (femtri->get_nb_fem_noeud()==6) qual=OPERATEUR::qualite_triangle(femtri->get_fem_noeud(0)->get_coord(),femtri->get_fem_noeud(2)->get_coord(),femtri->get_fem_noeud(4)->get_coord());
4280     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4281     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4282     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4283     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4284     }
4285     if (shrink)
4286     {
4287     int nb=femtri->get_nb_fem_noeud();
4288     double xg=0.;
4289     double yg=0.;
4290     double zg=0.;
4291     for (int i=0;i<nb;i++)
4292     {
4293     FEM_NOEUD* no=femtri->get_fem_noeud(i);
4294     xg=xg+no->get_x();
4295     yg=yg+no->get_y();
4296     zg=zg+no->get_z();
4297     }
4298     xg=xg/nb;
4299     yg=yg/nb;
4300     zg=zg/nb;
4301     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4302     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4303     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4304     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4305     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4306     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4307     double x3=xg+facteur_shrink*(xyz3[0]-xg);
4308     double y3=yg+facteur_shrink*(xyz3[1]-yg);
4309     double z3=zg+facteur_shrink*(xyz3[2]-zg);
4310     if (CheckBox1->Checked==true)
4311     {
4312     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4313     if (pos>11) pos=11;
4314     if (pos<0) pos=0;
4315     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4316     }
4317     glVertex3f(x1,y1,z1);
4318     if (CheckBox1->Checked==true)
4319     {
4320     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4321     if (pos>11) pos=11;
4322     if (pos<0) pos=0;
4323     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4324     }
4325     glVertex3f(x3,y3,z3);
4326     if (CheckBox1->Checked==true)
4327     {
4328     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4329     if (pos>11) pos=11;
4330     if (pos<0) pos=0;
4331     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4332     }
4333     glVertex3f(x2,y2,z2);
4334     }
4335     else
4336     {
4337     if (CheckBox1->Checked==true)
4338     {
4339     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4340     if (pos>11) pos=11;
4341     if (pos<0) pos=0;
4342     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4343     }
4344     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4345     if (CheckBox1->Checked==true)
4346     {
4347     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4348     if (pos>11) pos=11;
4349     if (pos<0) pos=0;
4350     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4351     }
4352     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
4353     if (CheckBox1->Checked==true)
4354     {
4355     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4356     if (pos>11) pos=11;
4357     if (pos<0) pos=0;
4358     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4359     }
4360     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4361     }
4362     }
4363    
4364     void __fastcall TVisuWinform::dessinetritetfem(FEM_TETRA* femtet,FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_NOEUD* no3)
4365     {
4366     double *xyz1=no1->get_coord();
4367     double *xyz2=no2->get_coord();
4368     double *xyz3=no3->get_coord();
4369     if ((femtet->get_lien_topologie()==toposel) && (femtet->get_lien_topologie()!=NULL) )
4370     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
4371     if (qualite==1)
4372     {
4373     double qual;
4374     if (femtet->get_nb_fem_noeud()==4) qual=OPERATEUR::qualite_tetra(femtet->get_fem_noeud(0)->get_coord(),femtet->get_fem_noeud(1)->get_coord(),femtet->get_fem_noeud(2)->get_coord(),femtet->get_fem_noeud(3)->get_coord());
4375     if (femtet->get_nb_fem_noeud()==10) qual=OPERATEUR::qualite_tetra(femtet->get_fem_noeud(0)->get_coord(),femtet->get_fem_noeud(2)->get_coord(),femtet->get_fem_noeud(4)->get_coord(),femtet->get_fem_noeud(9)->get_coord());
4376     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4377     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4378     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4379     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4380     }
4381     if (shrink)
4382     {
4383     int nb=femtet->get_nb_fem_noeud();
4384     double xg=0.;
4385     double yg=0.;
4386     double zg=0.;
4387     for (int i=0;i<nb;i++)
4388     {
4389     FEM_NOEUD* no=femtet->get_fem_noeud(i);
4390     xg=xg+no->get_x();
4391     yg=yg+no->get_y();
4392     zg=zg+no->get_z();
4393     }
4394     xg=xg/nb;
4395     yg=yg/nb;
4396     zg=zg/nb;
4397     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4398     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4399     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4400     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4401     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4402     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4403     double x3=xg+facteur_shrink*(xyz3[0]-xg);
4404     double y3=yg+facteur_shrink*(xyz3[1]-yg);
4405     double z3=zg+facteur_shrink*(xyz3[2]-zg);
4406     if (CheckBox1->Checked==true)
4407     {
4408     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4409     if (pos>11) pos=11;
4410     if (pos<0) pos=0;
4411     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4412     }
4413     glVertex3f(x1,y1,z1);
4414     if (CheckBox1->Checked==true)
4415     {
4416     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4417     if (pos>11) pos=11;
4418     if (pos<0) pos=0;
4419     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4420     }
4421     glVertex3f(x3,y3,z3);
4422     if (CheckBox1->Checked==true)
4423     {
4424     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4425     if (pos>11) pos=11;
4426     if (pos<0) pos=0;
4427     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4428     }
4429     glVertex3f(x2,y2,z2);
4430     }
4431     else
4432     {
4433     if (CheckBox1->Checked==true)
4434     {
4435     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4436     if (pos>11) pos=11;
4437     if (pos<0) pos=0;
4438     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4439     }
4440     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4441     if (CheckBox1->Checked==true)
4442     {
4443     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4444     if (pos>11) pos=11;
4445     if (pos<0) pos=0;
4446     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4447     }
4448     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
4449     if (CheckBox1->Checked==true)
4450     {
4451     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4452     if (pos>11) pos=11;
4453     if (pos<0) pos=0;
4454     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4455     }
4456     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4457     }
4458     }
4459     void __fastcall TVisuWinform::dessinesegtetfem(FEM_TETRA* femtet,FEM_NOEUD* no1,FEM_NOEUD* no2)
4460     {
4461     double *xyz1=no1->get_coord();
4462     double *xyz2=no2->get_coord();
4463     if ((femtet->get_lien_topologie()==toposel) && (femtet->get_lien_topologie()!=NULL) )
4464     glColor3f(RGB_r[13]/255.,RGB_g[13]/255.,RGB_b[13]/255.);
4465     if (shrink)
4466     {
4467     int nb=femtet->get_nb_fem_noeud();
4468     double xg=0.;
4469     double yg=0.;
4470     double zg=0.;
4471     for (int i=0;i<nb;i++)
4472     {
4473     FEM_NOEUD* no=femtet->get_fem_noeud(i);
4474     xg=xg+no->get_x();
4475     yg=yg+no->get_y();
4476     zg=zg+no->get_z();
4477     }
4478     xg=xg/nb;
4479     yg=yg/nb;
4480     zg=zg/nb;
4481     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4482     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4483     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4484     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4485     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4486     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4487     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4488     {
4489     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4490     if (pos>11) pos=11;
4491     if (pos<0) pos=0;
4492     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4493     }
4494     glVertex3f(x1,y1,z1);
4495     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4496     {
4497     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4498     if (pos>11) pos=11;
4499     if (pos<0) pos=0;
4500     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4501     }
4502     glVertex3f(x2,y2,z2);
4503     }
4504     else
4505     {
4506     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4507     {
4508     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4509     if (pos>11) pos=11;
4510     if (pos<0) pos=0;
4511     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4512     }
4513     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4514     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4515     {
4516     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4517     if (pos>11) pos=11;
4518     if (pos<0) pos=0;
4519     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4520     }
4521     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4522     }
4523     }
4524     void __fastcall TVisuWinform::Id1Click(TObject *Sender)
4525     {
4526     Id1->Checked=true;
4527     Numero1->Checked=false;
4528     NumeroOptimise1->Checked=false;
4529     }
4530     //---------------------------------------------------------------------------
4531    
4532     void __fastcall TVisuWinform::Numero1Click(TObject *Sender)
4533     {
4534     Id1->Checked=false;
4535     Numero1->Checked=true;
4536     NumeroOptimise1->Checked=false;
4537     }
4538     //---------------------------------------------------------------------------
4539    
4540     void __fastcall TVisuWinform::NumeroOptimise1Click(TObject *Sender)
4541     {
4542     Id1->Checked=false;
4543     Numero1->Checked=false;
4544     NumeroOptimise1->Checked=true;
4545     }
4546     //---------------------------------------------------------------------------
4547    
4548    
4549     void __fastcall TVisuWinform::Cartedetaille3Click(TObject *Sender)
4550     {
4551     Tfimcarte *fimcarte=new Tfimcarte(Application,gest);
4552     fimcarte->Caption=Caption;
4553     fimcarte->ComboBox1->Clear();
4554     fimcarte->ComboBox2->Clear();
4555     int nbmai=gest->get_nb_mg_maillage();
4556     for (int i=0;i<nbmai;i++)
4557     {
4558     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
4559     fimcarte->ComboBox1->Items->Add(mai->get_id());
4560     }
4561     int nbmaifem=gest->get_nb_fem_maillage();
4562     for (int i=0;i<nbmaifem;i++)
4563     {
4564     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
4565     fimcarte->ComboBox2->Items->Add(mai->get_id());
4566     }
4567     fimcarte->Show();
4568     }
4569     //---------------------------------------------------------------------------
4570    
4571    
4572    
4573    
4574    
4575     void __fastcall TVisuWinform::voirarbreExecute(TObject *Sender)
4576     {
4577     Tfvisuarbre *Child;
4578     Child = new Tfvisuarbre(Application,gest);
4579     Child->Caption=Caption;
4580     }
4581     //---------------------------------------------------------------------------
4582    
4583     void __fastcall TVisuWinform::Reconstruction1Click(TObject *Sender)
4584     {
4585     Tfrecons *frecons=new Tfrecons(Application,gest);
4586     frecons->Caption=Caption;
4587     frecons->ListBox1->Clear();
4588     int nbmai=gest->get_nb_fem_maillage();
4589     for (int i=0;i<nbmai;i++)
4590     {
4591     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
4592     frecons->ListBox1->Items->Add(mai->get_id());
4593     }
4594     frecons->Show();
4595     }
4596     //---------------------------------------------------------------------------
4597    
4598     void __fastcall TVisuWinform::N0D1Click(TObject *Sender)
4599     {
4600     N0D1->Checked=!N0D1->Checked;
4601     noeud=0;
4602     if (N0D1->Checked) noeud=noeud+1;
4603     if (N1D1->Checked) noeud=noeud+2;
4604     if (N2D1->Checked) noeud=noeud+4;
4605     if (N3D1->Checked) noeud=noeud+8;
4606     redess();
4607    
4608     }
4609     //---------------------------------------------------------------------------
4610