ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/VMM/VMM/win32/visuwin.cpp
Revision: 98
Committed: Fri May 9 14:38:25 2008 UTC (17 years, 3 months ago) by francois
File size: 252855 byte(s)
Log Message:
Version des applications aux 9 mai 2008

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 francois 56 #include "mg_export.h"
48 francois 98 #include "vct.h"
49     #include "affmatrice.h"
50 5
51     //---------------------------------------------------------------------------
52     #pragma package(smart_init)
53     #pragma resource "*.dfm"
54     TVisuWinform *VisuWinform;
55     //---------------------------------------------------------------------------
56     __fastcall TVisuWinform::TVisuWinform(TComponent* Owner)
57     : 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)
58     {
59     }
60     //---------------------------------------------------------------------------
61     void __fastcall TVisuWinform::FormClose(TObject *Sender,
62     TCloseAction &Action)
63     {
64     MainForm->ToolBar1->Visible=false;
65     MainForm->ToolBar3->Visible=false;
66     lst_visu.clear();
67     if (gest!=NULL) delete gest;
68     MainForm->StatusBar->Panels->Items[3]->Text="";
69     MainForm->StatusBar->Panels->Items[4]->Text="";
70     Action=caFree;
71     }
72     //---------------------------------------------------------------------------
73    
74     void __fastcall TVisuWinform::FormActivate(TObject *Sender)
75     {
76     MainForm->ToolBar1->Visible=true;
77     MainForm->ToolBar3->Visible=true;
78     MainForm->activewinform=this;
79     MainForm->ToolButton6->ImageIndex=iconeactive;
80     FILE* in=fopen(Caption.c_str(),"rt");
81     if (in!=NULL)
82     {
83     std::ftime ft;
84     getftime(fileno(in), &ft);
85     char mess[1000];
86     sprintf(mess,"Heure fichier: %02u:%02u:%02u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
87     MainForm->StatusBar->Panels->Items[3]->Text=mess;
88     sprintf(mess,"Jour fichier: %02u/%02u/%02u\n",ft.ft_day, ft.ft_month,ft.ft_year+1980);
89     MainForm->StatusBar->Panels->Items[4]->Text=mess;
90     fclose(in);
91     }
92     }
93     //---------------------------------------------------------------------------
94    
95     void __fastcall TVisuWinform::FormDeactivate(TObject *Sender)
96     {
97     MainForm->ToolBar1->Visible=false;
98     MainForm->ToolBar3->Visible=false;
99     MainForm->activewinform=NULL;
100     iconeactive=MainForm->ToolButton6->ImageIndex;
101     MainForm->StatusBar->Panels->Items[3]->Text="";
102     MainForm->StatusBar->Panels->Items[4]->Text="";
103     }
104     //---------------------------------------------------------------------------
105    
106    
107     void __fastcall TVisuWinform::lancermagicExecute(TObject *Sender)
108     {
109     TVisuMagicform *Child;
110 francois 62 Child = new TVisuMagicform(Application,MainForm,gest);
111 5 Child->Caption=Caption;
112     FILE* in=fopen(Caption.c_str(),"rt");
113     if (in!=NULL)
114     {
115     std::ftime ft;
116     getftime(fileno(in), &ft);
117     char mess[1000];
118     sprintf(mess,"Heure fichier: %02u:%02u:%02u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
119     MainForm->StatusBar->Panels->Items[3]->Text=mess;
120     sprintf(mess,"Jour fichier: %02u/%02u/%02u\n",ft.ft_day, ft.ft_month,ft.ft_year+1980);
121     MainForm->StatusBar->Panels->Items[4]->Text=mess;
122     fclose(in);
123     }
124     }
125     //---------------------------------------------------------------------------
126    
127    
128     void __fastcall TVisuWinform::miseajourarbre(void)
129     {
130     int nb_geometrie=gest->get_nb_mg_geometrie();
131     int nb_maillage=gest->get_nb_mg_maillage();
132     int nb_fem_maillage=gest->get_nb_fem_maillage();
133     TreeView1->Items->Clear();
134     TreeView1->Items->Add(NULL,"Modèle MAGiC");
135     TTreeNode *root = TreeView1->Items->Item[0];
136     root->ImageIndex=7;
137     root->SelectedIndex=7;
138     root->StateIndex=7;
139     TTreeNode *rootg= TreeView1->Items->AddChild(root,"Géométrie");
140     rootg->ImageIndex=7;
141     rootg->SelectedIndex=7;
142     rootg->StateIndex=7;
143     for (int i=0;i<nb_geometrie;i++)
144     {
145     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
146     char mess[100];
147     sprintf(mess,"%lu",mggeo->get_id());
148     TTreeNode* georoot=TreeView1->Items->AddChild(rootg,mess);
149     georoot->ImageIndex=7;
150     georoot->SelectedIndex=7;
151     georoot->StateIndex=7;
152     TTreeNode* nodvol=TreeView1->Items->AddChild(georoot,"Volume");
153     nodvol->ImageIndex=7;
154     nodvol->SelectedIndex=7;
155     nodvol->StateIndex=7;
156     int nbvol=mggeo->get_nb_mg_volume();
157     for (int j=0;j<nbvol;j++)
158     {
159     MG_VOLUME* mgvol=mggeo->get_mg_volume(j);
160     char mess[100];
161     sprintf(mess,"%lu",mgvol->get_id());
162     TTreeNode* node=TreeView1->Items->AddChild(nodvol,mess);
163     node->ImageIndex=-1;
164     node->SelectedIndex=-1;
165     node->StateIndex=-1;
166     }
167     TTreeNode* nodfac=TreeView1->Items->AddChild(georoot,"Face");
168     nodfac->ImageIndex=7;
169     nodfac->SelectedIndex=7;
170     nodfac->StateIndex=7;
171     int nbface=mggeo->get_nb_mg_face();
172     for (int j=0;j<nbface;j++)
173     {
174     MG_FACE* mgface=mggeo->get_mg_face(j);
175     char mess[100];
176     sprintf(mess,"%lu",mgface->get_id());
177     TTreeNode* node=TreeView1->Items->AddChild(nodfac,mess);
178     node->ImageIndex=-1;
179     node->SelectedIndex=-1;
180     node->StateIndex=-1;
181     }
182     TTreeNode* nodare=TreeView1->Items->AddChild(georoot,"Arête");
183     nodare->ImageIndex=7;
184     nodare->SelectedIndex=7;
185     nodare->StateIndex=7;
186     int nbare=mggeo->get_nb_mg_arete();
187     for (int j=0;j<nbare;j++)
188     {
189     MG_ARETE* mgare=mggeo->get_mg_arete(j);
190     char mess[100];
191     sprintf(mess,"%lu",mgare->get_id());
192     TTreeNode* node=TreeView1->Items->AddChild(nodare,mess);
193     node->ImageIndex=-1;
194     node->SelectedIndex=-1;
195     node->StateIndex=-1;
196     }
197     TTreeNode* nodsom=TreeView1->Items->AddChild(georoot,"Sommet");
198     nodsom->ImageIndex=7;
199     nodsom->SelectedIndex=7;
200     nodsom->StateIndex=7;
201     int nbsommet=mggeo->get_nb_mg_sommet();
202     for (int j=0;j<nbsommet;j++)
203     {
204     MG_SOMMET* mgsom=mggeo->get_mg_sommet(j);
205     char mess[100];
206     sprintf(mess,"%lu",mgsom->get_id());
207     TTreeNode* node=TreeView1->Items->AddChild(nodsom,mess);
208     node->ImageIndex=-1;
209     node->SelectedIndex=-1;
210     node->StateIndex=-1;
211     }
212     }
213     TTreeNode *rootm= TreeView1->Items->AddChild(root,"Maillage géométrique");
214     rootm->ImageIndex=7;
215     rootm->SelectedIndex=7;
216     rootm->StateIndex=7;
217     for (int i=0;i<nb_maillage;i++)
218     {
219     MG_MAILLAGE* mgmai=gest->get_mg_maillage(i);
220     char mess[100];
221     sprintf(mess,"%lu",mgmai->get_id());
222     TTreeNode* mairoot=TreeView1->Items->AddChild(rootm,mess);
223     mairoot->ImageIndex=7;
224     mairoot->SelectedIndex=7;
225     mairoot->StateIndex=7;
226     TTreeNode* node=TreeView1->Items->AddChild(mairoot,"Maillage 1D");
227     node->ImageIndex=-1;
228     node->SelectedIndex=-1;
229     node->StateIndex=-1;
230     node=TreeView1->Items->AddChild(mairoot,"Maillage 2D");
231     node->ImageIndex=-1;
232     node->SelectedIndex=-1;
233     node->StateIndex=-1;
234     node=TreeView1->Items->AddChild(mairoot,"Maillage 3D");
235     node->ImageIndex=-1;
236     node->SelectedIndex=-1;
237     node->StateIndex=-1;
238     }
239     TTreeNode *rootmfem=TreeView1->Items->AddChild(root,"Maillage FEM");
240     rootmfem->ImageIndex=7;
241     rootmfem->SelectedIndex=7;
242     rootmfem->StateIndex=7;
243     for (int i=0;i<nb_fem_maillage;i++)
244     {
245     FEM_MAILLAGE* femmai=gest->get_fem_maillage(i);
246     char mess[100];
247     sprintf(mess,"%lu",femmai->get_id());
248     TTreeNode* mairoot=TreeView1->Items->AddChild(rootmfem,mess);
249     mairoot->ImageIndex=7;
250     mairoot->SelectedIndex=7;
251     mairoot->StateIndex=7;
252     TTreeNode* node=TreeView1->Items->AddChild(mairoot,"Maillage 1D");
253     node->ImageIndex=-1;
254     node->SelectedIndex=-1;
255     node->StateIndex=-1;
256     node=TreeView1->Items->AddChild(mairoot,"Maillage 2D");
257     node->ImageIndex=-1;
258     node->SelectedIndex=-1;
259     node->StateIndex=-1;
260     node=TreeView1->Items->AddChild(mairoot,"Maillage 3D");
261     node->ImageIndex=-1;
262     node->SelectedIndex=-1;
263     node->StateIndex=-1;
264     }
265     changeimage(rootg,46);
266     initliste();
267     ComboBox1->Clear();
268     int nb=gest->get_nb_mg_solution();
269     for (int i=0;i<nb;i++)
270     {
271     MG_SOLUTION* sol=gest->get_mg_solution(i);
272     ComboBox1->Items->Add(sol->get_nom().c_str());
273     }
274     nb=gest->get_nb_fem_solution();
275     for (int i=0;i<nb;i++)
276     {
277     FEM_SOLUTION* sol=gest->get_fem_solution(i);
278     ComboBox1->Items->Add(sol->get_nom().c_str());
279     }
280     }
281    
282     void __fastcall TVisuWinform::initliste(void)
283     {
284     lst_face.vide();
285     lst_arete.vide();
286     lst_sommet.vide();
287     lst_volume.vide();
288     lst_m1d.vide();
289     lst_m2d.vide();
290     lst_m3d.vide();
291     lst_segment.clear();
292     lst_triangle.clear();
293     lst_tetra.clear();
294     lst_noeud.clear();
295     lst_m1d_fem.vide();
296     lst_m2d_fem.vide();
297     lst_m3d_fem.vide();
298     lst_segment_fem.clear();
299     lst_triangle_fem.clear();
300     lst_tetra_fem.clear();
301     lst_noeud_fem.clear();
302     TTreeNode *root = TreeView1->Items->Item[0];
303     TTreeNode *rootg = root->Item[0];
304     int nb_geo=rootg->Count;
305     if (nb_geo>0)
306     {
307     for (int i=0;i<nb_geo;i++)
308     {
309     TTreeNode *geo = rootg->Item[i];
310     MG_GEOMETRIE* mggeo=gest->get_mg_geometrieid(atol(geo->Text.c_str()));
311     TTreeNode *geovol = geo->Item[0];
312     int nb=geovol->Count;
313     for (int j=0;j<nb;j++)
314     {
315     TTreeNode *node=geovol->Item[j];
316     if (node->ImageIndex==46)
317     {
318     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(atol(node->Text.c_str()));
319     lst_volume.ajouter(mgvol);
320     }
321     }
322     TTreeNode *geoface = geo->Item[1];
323     nb=geoface->Count;
324     for (int j=0;j<nb;j++)
325     {
326     TTreeNode *node=geoface->Item[j];
327     if (node->ImageIndex==46)
328     {
329     MG_FACE* mgfac=mggeo->get_mg_faceid(atol(node->Text.c_str()));
330     lst_face.ajouter(mgfac);
331     }
332     }
333     TTreeNode *geoarete = geo->Item[2];
334     nb=geoarete->Count;
335     for (int j=0;j<nb;j++)
336     {
337     TTreeNode *node=geoarete->Item[j];
338     if (node->ImageIndex==46)
339     {
340     MG_ARETE* mgarete=mggeo->get_mg_areteid(atol(node->Text.c_str()));
341     lst_arete.ajouter(mgarete);
342     }
343     }
344     TTreeNode *geosommet = geo->Item[3];
345     nb=geosommet->Count;
346     for (int j=0;j<nb;j++)
347     {
348     TTreeNode *node=geosommet->Item[j];
349     if (node->ImageIndex==46)
350     {
351     MG_SOMMET* mgsommet=mggeo->get_mg_sommetid(atol(node->Text.c_str()));
352     lst_sommet.ajouter(mgsommet);
353     }
354     }
355    
356     }
357    
358     TTreeNode *rootm = root->Item[1];
359     int nb_mai=rootm->Count;
360     for (int i=0;i<nb_mai;i++)
361     {
362     TTreeNode *mai = rootm->Item[i];
363     MG_MAILLAGE* mgmai=gest->get_mg_maillageid(atol(mai->Text.c_str()));
364     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
365     {
366     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
367     if (sol==NULL) continue;
368     unsigned long idmai=sol->get_maillage()->get_id();
369     if (mgmai->get_id()!=idmai) continue;
370     }
371     TTreeNode *mai1d = mai->Item[0];
372     if (mai1d->ImageIndex==46) lst_m1d.ajouter(mgmai);
373     TTreeNode *mai2d = mai->Item[1];
374     if (mai2d->ImageIndex==46) lst_m2d.ajouter(mgmai);
375     TTreeNode *mai3d = mai->Item[2];
376     if (mai3d->ImageIndex==46) lst_m3d.ajouter(mgmai);
377     }
378    
379     TTreeNode *rootmfem = root->Item[2];
380     int nb_mai_fem=rootmfem->Count;
381     for (int i=0;i<nb_mai_fem;i++)
382     {
383     TTreeNode *mai = rootmfem->Item[i];
384     FEM_MAILLAGE* femmai=gest->get_fem_maillageid(atol(mai->Text.c_str()));
385     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
386     {
387     FEM_SOLUTION* sol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
388     if (sol==NULL) continue;
389     unsigned long idmai=sol->get_maillage()->get_id();
390     if (femmai->get_id()!=idmai) continue;
391     }
392     TTreeNode *mai1d = mai->Item[0];
393     if (mai1d->ImageIndex==46) lst_m1d_fem.ajouter(femmai);
394     TTreeNode *mai2d = mai->Item[1];
395     if (mai2d->ImageIndex==46) lst_m2d_fem.ajouter(femmai);
396     TTreeNode *mai3d = mai->Item[2];
397     if (mai3d->ImageIndex==46) lst_m3d_fem.ajouter(femmai);
398     }
399    
400     for (int i=0;i<lst_volume.get_nb();i++)
401     {
402     MG_VOLUME* mgvol=lst_volume.get(i);
403     int nb_m3d=lst_m3d.get_nb();
404     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_tet;
405     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))
406     {
407 francois 62 if (CheckListBox1->Checked[(mgtet->get_origine()-1000)/10]==false) continue;
408 5 int ok=0;
409     for (int k=0;k<nb_m3d;k++)
410     {
411     MG_MAILLAGE* mgmai=lst_m3d.get(k);
412     MG_TETRA* tetemp=mgmai->get_mg_tetraid(mgtet->get_id());
413     if (tetemp!=NULL) ok=1;
414     }
415     if (ok==1)
416     {
417     lst_tetra.insert(lst_tetra.end(),mgtet);
418     MG_NOEUD* noeud1=mgtet->get_noeud1();
419     MG_NOEUD* noeud2=mgtet->get_noeud2();
420     MG_NOEUD* noeud3=mgtet->get_noeud3();
421     MG_NOEUD* noeud4=mgtet->get_noeud4();
422     lst_noeud.insert(lst_noeud.end(),noeud1);
423     lst_noeud.insert(lst_noeud.end(),noeud2);
424     lst_noeud.insert(lst_noeud.end(),noeud3);
425     lst_noeud.insert(lst_noeud.end(),noeud4);
426     }
427     }
428     int nb_tet_fem=mgvol->get_lien_fem_maillage()->get_nb();
429     int nb_m3d_fem=lst_m3d_fem.get_nb();
430     for (int j=0;j<nb_tet_fem;j++)
431     {
432     FEM_TETRA* femtet=(FEM_TETRA*)mgvol->get_lien_fem_maillage()->get(j);
433 francois 62 if (CheckListBox1->Checked[(femtet->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
434 5 int ok=0;
435     for (int k=0;k<nb_m3d_fem;k++)
436     {
437     FEM_MAILLAGE* femmai=lst_m3d_fem.get(k);
438     FEM_TETRA* tetemp=femmai->get_fem_tetraid(femtet->get_id());
439     if (tetemp!=NULL) ok=1;
440     }
441     if (ok==1)
442     {
443     lst_tetra_fem.insert(lst_tetra_fem.end(),femtet);
444     int nb_noeud=femtet->get_nb_fem_noeud();
445     for (int k=0;k<nb_noeud;k++)
446     {
447     FEM_NOEUD* noeud=femtet->get_fem_noeud(k);
448     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
449     }
450     }
451     }
452     }
453     for (int i=0;i<lst_face.get_nb();i++)
454     {
455     MG_FACE* mgface=lst_face.get(i);
456     int nb_m2d=lst_m2d.get_nb();
457     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_tri;
458     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))
459     {
460 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
461 5 int ok=0;
462     for (int k=0;k<nb_m2d;k++)
463     {
464     MG_MAILLAGE* mgmai=lst_m2d.get(k);
465     MG_TRIANGLE* tritemp=mgmai->get_mg_triangleid(mgtri->get_id());
466     if (tritemp!=NULL) ok=1;
467     }
468     if (ok==1)
469     {
470     lst_triangle.insert(lst_triangle.end(),mgtri);
471     MG_NOEUD* noeud1=mgtri->get_noeud1();
472     MG_NOEUD* noeud2=mgtri->get_noeud2();
473     MG_NOEUD* noeud3=mgtri->get_noeud3();
474     lst_noeud.insert(lst_noeud.end(),noeud1);
475     lst_noeud.insert(lst_noeud.end(),noeud2);
476     lst_noeud.insert(lst_noeud.end(),noeud3);
477     }
478     }
479     int nb_tri_fem=mgface->get_lien_fem_maillage()->get_nb();
480     int nb_m2d_fem=lst_m2d_fem.get_nb();
481     for (int j=0;j<nb_tri_fem;j++)
482     {
483     FEM_TRIANGLE* femtri=(FEM_TRIANGLE*)mgface->get_lien_fem_maillage()->get(j);
484 francois 62 if (CheckListBox1->Checked[(femtri->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
485 5 int ok=0;
486     for (int k=0;k<nb_m2d_fem;k++)
487     {
488     FEM_MAILLAGE* femmai=lst_m2d_fem.get(k);
489     FEM_TRIANGLE* tritemp=femmai->get_fem_triangleid(femtri->get_id());
490     if (tritemp!=NULL) ok=1;
491     }
492     if (ok==1)
493     {
494     lst_triangle_fem.insert(lst_triangle_fem.end(),femtri);
495     int nb_noeud=femtri->get_nb_fem_noeud();
496     for (int k=0;k<nb_noeud;k++)
497     {
498     FEM_NOEUD* noeud=femtri->get_fem_noeud(k);
499     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
500     }
501     }
502     }
503     }
504     for (int i=0;i<lst_arete.get_nb();i++)
505     {
506     MG_ARETE* mgarete=lst_arete.get(i);
507     int nb_m1d=lst_m1d.get_nb();
508     TPL_SET<MG_ELEMENT_MAILLAGE*>::ITERATEUR it_are;
509     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))
510     {
511 francois 62 if (CheckListBox1->Checked[(mgsegment->get_origine()-1000)/10]==false) continue;
512 5 int ok=0;
513     for (int k=0;k<nb_m1d;k++)
514     {
515     MG_MAILLAGE* mgmai=lst_m1d.get(k);
516     MG_SEGMENT* segtemp=mgmai->get_mg_segmentid(mgsegment->get_id());
517     if (segtemp!=NULL) ok=1;
518     }
519     if (ok==1)
520     {
521     lst_segment.insert(lst_segment.end(),mgsegment);
522     MG_NOEUD* noeud1=mgsegment->get_noeud1();
523     MG_NOEUD* noeud2=mgsegment->get_noeud2();
524     lst_noeud.insert(lst_noeud.end(),noeud1);
525     lst_noeud.insert(lst_noeud.end(),noeud2);
526     }
527     }
528     int nb_seg_fem=mgarete->get_lien_fem_maillage()->get_nb();
529     int nb_m1d_fem=lst_m1d_fem.get_nb();
530     for (int j=0;j<nb_seg_fem;j++)
531     {
532     FEM_SEGMENT* femseg=(FEM_SEGMENT*)mgarete->get_lien_fem_maillage()->get(j);
533 francois 62 if (CheckListBox1->Checked[(femseg->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
534 5 int ok=0;
535     for (int k=0;k<nb_m1d_fem;k++)
536     {
537     FEM_MAILLAGE* femmai=lst_m1d_fem.get(k);
538     FEM_SEGMENT* segtemp=femmai->get_fem_segmentid(femseg->get_id());
539     if (segtemp!=NULL) ok=1;
540     }
541     if (ok==1)
542     {
543     lst_segment_fem.insert(lst_segment_fem.end(),femseg);
544     int nb_noeud=femseg->get_nb_fem_noeud();
545     for (int k=0;k<nb_noeud;k++)
546     {
547     FEM_NOEUD* noeud=femseg->get_fem_noeud(k);
548     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
549     }
550     }
551     }
552     }
553     }
554     else
555     {
556     TTreeNode *rootm = root->Item[1];
557     int nb_mai=rootm->Count;
558     for (int i=0;i<nb_mai;i++)
559     {
560     TTreeNode *mai = rootm->Item[i];
561     MG_MAILLAGE* mgmai=gest->get_mg_maillageid(atol(mai->Text.c_str()));
562     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
563     {
564     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
565     if (sol==NULL) continue;
566     unsigned long idmai=sol->get_maillage()->get_id();
567     if (mgmai->get_id()!=idmai) continue;
568     }
569     TTreeNode *mai1d = mai->Item[0];
570     if (mai1d->ImageIndex==46)
571     {
572     int nbseg=mgmai->get_nb_mg_segment();
573     for (int k=0;k<nbseg;k++)
574     {
575     MG_SEGMENT* seg=mgmai->get_mg_segment(k);
576 francois 62 if (CheckListBox1->Checked[(seg->get_origine()-1000)/10]==false) continue;
577 5 MG_NOEUD* noeud1=seg->get_noeud1();
578     MG_NOEUD* noeud2=seg->get_noeud2();
579     lst_noeud.insert(lst_noeud.end(),noeud1);
580     lst_noeud.insert(lst_noeud.end(),noeud2);
581     lst_segment.insert(lst_segment.end(),seg);
582     }
583     }
584     TTreeNode *mai2d = mai->Item[1];
585     if (mai2d->ImageIndex==46)
586     {
587     int nbtri=mgmai->get_nb_mg_triangle();
588     for (int k=0;k<nbtri;k++)
589     {
590     MG_TRIANGLE* tri=mgmai->get_mg_triangle(k);
591 francois 62 if (CheckListBox1->Checked[(tri->get_origine()-1000)/10]==false) continue;
592 5 MG_NOEUD* noeud1=tri->get_noeud1();
593     MG_NOEUD* noeud2=tri->get_noeud2();
594     MG_NOEUD* noeud3=tri->get_noeud3();
595     lst_noeud.insert(lst_noeud.end(),noeud1);
596     lst_noeud.insert(lst_noeud.end(),noeud2);
597     lst_noeud.insert(lst_noeud.end(),noeud3);
598     lst_triangle.insert(lst_triangle.end(),tri);
599     }
600     }
601     TTreeNode *mai3d = mai->Item[2];
602     if (mai3d->ImageIndex==46)
603     {
604     int nbtet=mgmai->get_nb_mg_tetra();
605     for (int k=0;k<nbtet;k++)
606     {
607     MG_TETRA* tet=mgmai->get_mg_tetra(k);
608 francois 62 if (CheckListBox1->Checked[(tet->get_origine()-1000)/10]==false) continue;
609 5 MG_NOEUD* noeud1=tet->get_noeud1();
610     MG_NOEUD* noeud2=tet->get_noeud2();
611     MG_NOEUD* noeud3=tet->get_noeud3();
612     MG_NOEUD* noeud4=tet->get_noeud4();
613     lst_noeud.insert(lst_noeud.end(),noeud1);
614     lst_noeud.insert(lst_noeud.end(),noeud2);
615     lst_noeud.insert(lst_noeud.end(),noeud3);
616     lst_noeud.insert(lst_noeud.end(),noeud4);
617     lst_tetra.insert(lst_tetra.end(),tet);
618     }
619     }
620     }
621     TTreeNode *rootmfem = root->Item[2];
622     int nb_mai_fem=rootmfem->Count;
623     for (int i=0;i<nb_mai_fem;i++)
624     {
625     TTreeNode *mai = rootm->Item[i];
626     FEM_MAILLAGE* femmai=gest->get_fem_maillageid(atol(mai->Text.c_str()));
627     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
628     {
629     FEM_SOLUTION* sol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
630     if (sol==NULL) continue;
631     unsigned long idmai=sol->get_maillage()->get_id();
632     if (femmai->get_id()!=idmai) continue;
633     }
634     TTreeNode *mai1d = mai->Item[0];
635     if (mai1d->ImageIndex==46)
636     {
637     int nbseg=femmai->get_nb_fem_segment();
638     for (int k=0;k<nbseg;k++)
639     {
640     FEM_SEGMENT* seg=femmai->get_fem_segment(k);
641 francois 62 if (CheckListBox1->Checked[(seg->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
642 5 lst_segment_fem.insert(lst_segment_fem.end(),seg);
643     int nb_noeud=seg->get_nb_fem_noeud();
644     for (int l=0;l<nb_noeud;l++)
645     {
646     FEM_NOEUD* noeud=seg->get_fem_noeud(l);
647     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
648     }
649     }
650     }
651     TTreeNode *mai2d = mai->Item[1];
652     if (mai2d->ImageIndex==46)
653     {
654     int nbtri=femmai->get_nb_fem_triangle();
655     for (int k=0;k<nbtri;k++)
656     {
657     FEM_TRIANGLE* tri=femmai->get_fem_triangle(k);
658 francois 62 if (CheckListBox1->Checked[(tri->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
659 5 lst_triangle_fem.insert(lst_triangle_fem.end(),tri);
660     int nb_noeud=tri->get_nb_fem_noeud();
661     for (int l=0;l<nb_noeud;l++)
662     {
663     FEM_NOEUD* noeud=tri->get_fem_noeud(l);
664     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
665     }
666     }
667     }
668     TTreeNode *mai3d = mai->Item[2];
669     if (mai3d->ImageIndex==46)
670     {
671     int nbtet=femmai->get_nb_fem_tetra();
672     for (int k=0;k<nbtet;k++)
673     {
674     FEM_TETRA* tet=femmai->get_fem_tetra(k);
675 francois 62 if (CheckListBox1->Checked[(tet->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
676 5 lst_tetra_fem.insert(lst_tetra_fem.end(),tet);
677     int nb_noeud=tet->get_nb_fem_noeud();
678     for (int l=0;l<nb_noeud;l++)
679     {
680     FEM_NOEUD* noeud=tet->get_fem_noeud(l);
681     lst_noeud_fem.insert(lst_noeud_fem.end(),noeud);
682     }
683     }
684    
685     }
686     }
687     }
688     }
689     //---------------------------------------------------------------------------
690    
691     void __fastcall TVisuWinform::Slectionner1Click(TObject *Sender)
692     {
693     TTreeNode* node=TreeView1->Selected;
694     changeimage(node,46);
695     initliste();
696     redess();
697     TreeView1->Enabled=false;
698     TreeView1->Enabled=true;
699     }
700     //---------------------------------------------------------------------------
701    
702    
703     void __fastcall TVisuWinform::changeimage(TTreeNode* node,int num)
704     {
705     if (node==NULL) return;
706     if (node->Count==0)
707     {
708     node->ImageIndex=num;
709     node->SelectedIndex=num;
710     node->StateIndex=num;
711     }
712     else
713     {
714     int nb=node->Count;
715     for (int i=0;i<nb;i++)
716     changeimage(node->Item[i],num);
717     }
718     }
719     //---------------------------------------------------------------------------
720    
721     void __fastcall TVisuWinform::Dselectionner1Click(TObject *Sender)
722     {
723     TTreeNode* node=TreeView1->Selected;
724     changeimage(node,-1);
725     initliste();
726     redess();
727     TreeView1->Enabled=false;
728     TreeView1->Enabled=true;
729     }
730     //---------------------------------------------------------------------------
731    
732     void __fastcall TVisuWinform::InverserSelection1Click(TObject *Sender)
733     {
734     TTreeNode* node=TreeView1->Selected;
735     inverseimage(node,-1,46);
736     initliste();
737     redess();
738     TreeView1->Enabled=false;
739     TreeView1->Enabled=true;
740     }
741     //---------------------------------------------------------------------------
742     void __fastcall TVisuWinform::inverseimage(TTreeNode* node,int num1,int num2)
743     {
744     if (node==NULL) return;
745     if (node->Count==0)
746     {
747     int num;
748     if (node->ImageIndex==num1) num=num2; else num=num1;
749     node->ImageIndex=num;
750     node->SelectedIndex=num;
751     node->StateIndex=num;
752     }
753     else
754     {
755     int nb=node->Count;
756     for (int i=0;i<nb;i++)
757     inverseimage(node->Item[i],num1,num2);
758     }
759     }
760     //---------------------------------------------------------------------------
761    
762     void __fastcall TVisuWinform::Etendre1Click(TObject *Sender)
763     {
764     TreeView1->FullExpand();
765     TreeView1->Enabled=false;
766     TreeView1->Enabled=true;
767     }
768     //---------------------------------------------------------------------------
769    
770     void __fastcall TVisuWinform::Rduire1Click(TObject *Sender)
771     {
772     TreeView1->FullCollapse();
773     TreeView1->Enabled=false;
774     TreeView1->Enabled=true;
775     }
776     //---------------------------------------------------------------------------
777    
778     void __fastcall TVisuWinform::miseajourmodeleExecute(TObject *Sender)
779     {
780     Screen->Cursor=crHourGlass;
781     Invalidate();
782 francois 98 if (gest!=NULL) delete gest;
783     tabcouleur.clear();
784     tabnode.clear();
785 5 gest=new MG_FILE(Caption.c_str());
786     if (gest->get_code_de_lecture()==0)
787     {
788     MessageBox(Handle,"Erreur de lecture du fichier","Erreur", MB_OK);
789     delete gest;
790     gest=NULL;
791     Screen->Cursor=crDefault;
792     Invalidate();
793     Close();
794     return;
795     }
796     lst_visu.clear();
797     miseajourarbre();
798     Screen->Cursor=crDefault;
799     TreeView1->FullCollapse();
800     Invalidate();
801     ChangemodeExecute(Sender);
802     ChangemodeExecute(Sender);
803     TrackBar1->Min=0;
804     TrackBar1->Max=100;
805     TrackBar1->Position=0;
806     TrackBar2->Min=0;
807     TrackBar2->Max=100;
808     TrackBar2->Position=100;
809     TrackBar3->Min=0;
810     TrackBar3->Max=100;
811     TrackBar3->Position=0;
812     TrackBar4->Min=0;
813     TrackBar4->Max=100;
814     TrackBar4->Position=100;
815     TrackBar5->Min=0;
816     TrackBar5->Max=100;
817     TrackBar5->Position=0;
818     TrackBar6->Min=0;
819     TrackBar6->Max=100;
820     TrackBar6->Position=100;
821     FILE* in=fopen(Caption.c_str(),"rt");
822     if (in!=NULL)
823     {
824     std::ftime ft;
825     getftime(fileno(in), &ft);
826     char mess[1000];
827     sprintf(mess,"Heure fichier: %u:%u:%u\n",ft.ft_hour, ft.ft_min,ft.ft_tsec * 2);
828     MainForm->StatusBar->Panels->Items[3]->Text=mess;
829     sprintf(mess,"Jour fichier: %u/%u/%u\n",ft.ft_month, ft.ft_day,ft.ft_year+1980);
830     MainForm->StatusBar->Panels->Items[4]->Text=mess;
831     fclose(in);
832     }
833    
834     }
835     //---------------------------------------------------------------------------
836    
837     void __fastcall TVisuWinform::lancerverimeshExecute(TObject *Sender)
838     {
839     Tverimesh *Child;
840     Child = new Tverimesh(Application,*gest,boite,*this);
841     Child->Caption=Caption;
842     }
843     //---------------------------------------------------------------------------
844    
845     void __fastcall TVisuWinform::FormCreate(TObject *Sender)
846     {
847     hdc = GetDC(Handle);
848     SetPixelFormatDescriptor();
849     hrc = wglCreateContext(hdc);
850     if (hrc == NULL)
851     ShowMessage(":-)~ hrc == NULL");
852     if(wglMakeCurrent(hdc, hrc) == false)
853     ShowMessage("Could not MakeCurrent");
854     wglMakeCurrent (hdc, hrc);
855     SelectObject (hdc, GetStockObject (SYSTEM_FONT));
856     wglUseFontBitmaps (hdc, 0, 255, 1000);
857     glClearColor(MainForm->valeurconfig[11],MainForm->valeurconfig[12],MainForm->valeurconfig[13], 0.0f);
858     ListBox1->Height=TabSheet2->ClientHeight-ListBox1->Top-Label2->Height-Button3->Height;
859     ListBox3->Height=TabSheet6->ClientHeight-ListBox3->Top-5*Button3->Height;
860     Button6->Top=ListBox3->Top+ListBox3->Height+Button6->Height;
861     Button7->Top=ListBox3->Top+ListBox3->Height+3*Button6->Height;
862     Button3->Top=ListBox1->Top+ListBox1->Height;
863     TabSheet3->TabVisible=false;
864     TabSheet6->TabVisible=false;
865 francois 56 TabSheet7->TabVisible=false;
866 5 PageControl1->ActivePage=TabSheet1;
867     TrackBar1->Min=0;
868     TrackBar1->Max=100;
869     TrackBar1->Position=0;
870     TrackBar2->Min=0;
871     TrackBar2->Max=100;
872     TrackBar2->Position=100;
873     TrackBar3->Min=0;
874     TrackBar3->Max=100;
875     TrackBar3->Position=0;
876     TrackBar4->Min=0;
877     TrackBar4->Max=100;
878     TrackBar4->Position=100;
879     TrackBar5->Min=0;
880     TrackBar5->Max=100;
881     TrackBar5->Position=0;
882     TrackBar6->Min=0;
883     TrackBar6->Max=100;
884     TrackBar6->Position=100;
885 francois 62 CheckListBox1->Checked[0]=true;
886     CheckListBox1->Checked[1]=true;
887     CheckListBox1->Checked[2]=true;
888     CheckListBox1->Checked[3]=true;
889     CheckListBox1->Checked[4]=true;
890 5 }
891     //---------------------------------------------------------------------------
892     void __fastcall TVisuWinform::SetPixelFormatDescriptor(void)
893     {
894     PIXELFORMATDESCRIPTOR pfd = {
895     sizeof(PIXELFORMATDESCRIPTOR),
896     1,
897     PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
898     PFD_TYPE_RGBA,
899     24,
900     0,0,0,0,0,0,
901     0,0,
902     0,0,0,0,0,
903     32,
904     0,
905     0,
906     PFD_MAIN_PLANE,
907     0,
908     0,0,
909     };
910     int PixelFormat = ChoosePixelFormat(hdc, &pfd);
911     SetPixelFormat(hdc, PixelFormat, &pfd);
912     }
913     //---------------------------------------------------------------------------
914     void __fastcall TVisuWinform::FormPaint(TObject *Sender)
915     {
916     wglMakeCurrent(hdc,hrc);
917     glClearColor(MainForm->valeurconfig[11],MainForm->valeurconfig[12],MainForm->valeurconfig[13], 0.0f);
918 francois 62 for (int i=0;i<14;i++)
919     {
920     RGB_r[i]=MainForm->valeurconfig[66+3*i]*255.;
921     RGB_g[i]=MainForm->valeurconfig[67+3*i]*255.;
922     RGB_b[i]=MainForm->valeurconfig[68+3*i]*255.;
923     }
924 5 redess();
925 francois 98 TreeView1Click(Sender);
926 5 }
927     //---------------------------------------------------------------------------
928    
929     void __fastcall TVisuWinform::FormResize(TObject *Sender)
930     {
931     int w=ClientWidth-PageControl1->Width;
932     int h=ClientHeight;
933     while(w==0)
934     {
935     Width++;
936     w=ClientWidth-PageControl1->Width;
937     }
938     while(h==0)
939     {
940     Height++;
941     h=ClientHeight;
942     }
943    
944     recadre(dx,dy,0);
945     redess();
946     ListBox1->Height=TabSheet2->ClientHeight-ListBox1->Top-Label2->Height-Button3->Height;
947     Button3->Top=ListBox1->Top+ListBox1->Height;
948     ListBox3->Height=TabSheet6->ClientHeight-ListBox3->Top-5*Button3->Height;
949     Button6->Top=ListBox3->Top+ListBox3->Height+Button6->Height;
950     Button7->Top=ListBox3->Top+ListBox3->Height+3*Button6->Height;
951     }
952     //---------------------------------------------------------------------------
953    
954     void __fastcall TVisuWinform::ChangemodeExecute(TObject *Sender)
955     {
956     int passe2=0;
957     double xmin,xmax;
958     double ymin,ymax;
959     double zmin,zmax;
960     int passe=lst_visu.size();
961     if (passe==0)
962     {
963     int nbgeo=gest->get_nb_mg_geometrie();
964     //if (nbgeo>0)
965     for (int i=0;i<nbgeo;i++)
966     {
967     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
968     mggeo->cree_entite_visuel();
969     long nb=mggeo->get_nb_mg_visu_courbe();
970     for (long j=0;j<nb;j++)
971     {
972     double xyz1[3],xyz2[3];
973     MG_VISU_COURBE* mgvcrb=mggeo->get_mg_visu_courbe(j);
974     lst_visu.insert(lst_visu.end(),mgvcrb);
975     mgvcrb->get_coord(xyz1,xyz2);
976     if (passe2==0)
977     {
978     xmin=xyz1[0];
979     xmax=xyz1[0];
980     ymin=xyz1[1];
981     ymax=xyz1[1];
982     zmin=xyz1[2];
983     zmax=xyz1[2];
984     passe2=1;
985     }
986     if (xyz1[0]<xmin) xmin=xyz1[0];
987     if (xyz1[0]>xmax) xmax=xyz1[0];
988     if (xyz1[1]<ymin) ymin=xyz1[1];
989     if (xyz1[1]>ymax) ymax=xyz1[1];
990     if (xyz1[2]<zmin) zmin=xyz1[2];
991     if (xyz1[2]>zmax) zmax=xyz1[2];
992     }
993     // boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
994     }
995     //else
996     for (unsigned long i=0;i<gest->get_nb_mg_maillage();i++)
997     {
998     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
999     LISTE_MG_NOEUD::iterator it;
1000     for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1001     {
1002     double *xyz=noeud->get_coord();
1003     if (xyz[0]<xmin) xmin=xyz[0];
1004     if (xyz[0]>xmax) xmax=xyz[0];
1005     if (xyz[1]<ymin) ymin=xyz[1];
1006     if (xyz[1]>ymax) ymax=xyz[1];
1007     if (xyz[2]<zmin) zmin=xyz[2];
1008     if (xyz[2]>zmax) zmax=xyz[2];
1009     }
1010    
1011     }
1012     for (unsigned long i=0;i<gest->get_nb_fem_maillage();i++)
1013     {
1014     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
1015     LISTE_FEM_NOEUD::iterator it;
1016     for (FEM_NOEUD* noeud=mai->get_premier_noeud(it);noeud;noeud=mai->get_suivant_noeud(it))
1017     {
1018     double *xyz=noeud->get_coord();
1019     if (xyz[0]<xmin) xmin=xyz[0];
1020     if (xyz[0]>xmax) xmax=xyz[0];
1021     if (xyz[1]<ymin) ymin=xyz[1];
1022     if (xyz[1]>ymax) ymax=xyz[1];
1023     if (xyz[2]<zmin) zmin=xyz[2];
1024     if (xyz[2]>zmax) zmax=xyz[2];
1025     }
1026    
1027     }
1028     boite.reinit(xmin,ymin,zmin,xmax,ymax,zmax);
1029    
1030     }
1031     if (TreeView1->Enabled==true)
1032     {
1033     TreeView1->Enabled=false;
1034     MainForm->ToolButton6->ImageIndex=48;
1035     }
1036     else
1037     {
1038     TreeView1->Enabled=true;
1039     MainForm->ToolButton6->ImageIndex=43;
1040     }
1041     recadre(dx,dy,0);
1042     if (passe==0) initvue();
1043     redess();
1044     }
1045     //---------------------------------------------------------------------------
1046     void __fastcall TVisuWinform::dessinegeo(void)
1047     {
1048     glLineWidth(MainForm->valeurconfig[29]);
1049    
1050     glBegin(GL_LINES);
1051     glColor3f(MainForm->valeurconfig[26],MainForm->valeurconfig[27],MainForm->valeurconfig[28] );
1052     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1053     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1054     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1055     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1056     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1057     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1058     double dx=(x2-x1)*1.01;
1059     double dy=(y2-y1)*1.01;
1060     double dz=(z2-z1)*1.01;
1061     double xm=(x1+x2)/2.;
1062     x1=xm-dx/2.;x2=xm+dx/2.;
1063     double ym=(y1+y2)/2.;
1064     y1=ym-dy/2.;y2=ym+dy/2.;
1065     double zm=(z1+z2)/2.;
1066     z1=zm-dz/2.;z2=zm+dz/2.;
1067     BOITE_3D boite2(x1,y1,z1,x2,y2,z2);
1068     int nb=lst_visu.size();
1069     for (int i=0;i<nb;i++)
1070     {
1071     MG_VISU_COURBE* mgvcrb=lst_visu[i];
1072     double xyz1[3];
1073     double xyz2[3];
1074     mgvcrb->get_coord(xyz1,xyz2);
1075     BOITE_3D boitmp=mgvcrb->get_boite_3D();
1076     if (boite2*boitmp)
1077     {
1078     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1079     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1080     }
1081     }
1082     glEnd();
1083     }
1084     //---------------------------------------------------------------------------
1085     void __fastcall TVisuWinform::dessinemai(void)
1086     {
1087     glLineWidth(1.);
1088     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1089     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1090     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1091     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
1092     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
1093     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
1094     double dx=(x2-x1)*1.01;
1095     double dy=(y2-y1)*1.01;
1096     double dz=(z2-z1)*1.01;
1097     double xm=(x1+x2)/2.;
1098     x1=xm-dx/2.;x2=xm+dx/2.;
1099     double ym=(y1+y2)/2.;
1100     y1=ym-dy/2.;y2=ym+dy/2.;
1101     double zm=(z1+z2)/2.;
1102     z1=zm-dz/2.;z2=zm+dz/2.;
1103     BOITE_3D boite2(x1,y1,z1,x2+1e-8,y2+1e-8,z2+1e-8);
1104    
1105     if (noeud)
1106     {
1107     glColor3f(MainForm->valeurconfig[30],MainForm->valeurconfig[31],MainForm->valeurconfig[32]);
1108     glPointSize(MainForm->valeurconfig[33]);
1109     glBegin(GL_POINTS);
1110     int nb=lst_noeud.size();
1111     for (int i=0;i<nb;i++)
1112     {
1113     MG_NOEUD* noeud1=lst_noeud[i];
1114 francois 56 if (N12->Checked)
1115     if (!estdansfiltre(noeud1->get_id())) continue;
1116 francois 62 if (CheckListBox1->Checked[(noeud1->get_origine()-1000)/10]==false) continue;
1117 5 BOITE_3D boitmp=noeud1->get_boite_3D();
1118     if (!(boitmp*boite2)) continue;
1119     int dim;
1120     if (noeud1->get_lien_topologie()==NULL) dim=-1;
1121     else dim=noeud1->get_lien_topologie()->get_dimension();
1122     /*if (dim==0) dim=1;
1123     dim--;*/
1124     if (dim>-1)
1125     {
1126     int binoeud[4];
1127     binoeud[0]=noeud%2;
1128     binoeud[1]=(noeud/2)%2;
1129     binoeud[2]=(noeud/4)%2;
1130     binoeud[3]=(noeud/8)%2;
1131     if (binoeud[dim])
1132     {
1133     double *xyz1=noeud1->get_coord();
1134     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1135     }
1136     }
1137     else
1138     {
1139     double *xyz1=noeud1->get_coord();
1140     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1141     }
1142     }
1143     glEnd();
1144     if (affnoeud)
1145     {
1146     for (int i=0;i<nb;i++)
1147     {
1148     MG_NOEUD* noeud1=lst_noeud[i];
1149 francois 56 if (N12->Checked)
1150     if (!estdansfiltre(noeud1->get_id())) continue;
1151 francois 62 if (CheckListBox1->Checked[(noeud1->get_origine()-1000)/10]==false) continue;
1152 5 BOITE_3D boitmp=noeud1->get_boite_3D();
1153     if (!(boitmp*boite2)) continue;
1154     int dim;
1155     if (noeud1->get_lien_topologie()==NULL) dim=-1;
1156     else dim=noeud1->get_lien_topologie()->get_dimension();
1157     /*if (dim==0) dim=1;
1158     dim--;*/
1159     int binoeud[4];
1160     binoeud[0]=noeud%2;
1161     binoeud[1]=(noeud/2)%2;
1162     binoeud[2]=(noeud/4)%2;
1163     binoeud[3]=(noeud/8)%2;
1164     if (dim>-1)
1165     {
1166     if (binoeud[dim])
1167     {
1168     unsigned long id=noeud1->get_id();
1169     double *xyz=noeud1->get_coord();
1170     char mess[30];
1171     sprintf(mess,"%lu",id);
1172     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
1173     glListBase (1000);
1174     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1175     }
1176    
1177     }
1178     else
1179     {
1180     unsigned long id=noeud1->get_id();
1181     double *xyz=noeud1->get_coord();
1182     char mess[30];
1183     sprintf(mess,"%lu",id);
1184     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
1185     glListBase (1000);
1186     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1187     }
1188     }
1189    
1190     }
1191     }
1192     int bmaille[3];
1193     bmaille[0]=maille%2;
1194     bmaille[1]=(maille/2)%2;
1195     bmaille[2]=(maille/4)%2;
1196     if (bmaille[0])
1197     {
1198     glLineWidth(MainForm->valeurconfig[17]);
1199     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
1200     glBegin(GL_LINES);
1201     int nb=lst_segment.size();
1202     for (int i=0;i<nb;i++)
1203     {
1204     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
1205     MG_SEGMENT* mgsegment=lst_segment[i];
1206 francois 56 if (N12->Checked)
1207     if (!estdansfiltre(mgsegment->get_id())) continue;
1208 francois 62 if (CheckListBox1->Checked[(mgsegment->get_origine()-1000)/10]==false) continue;
1209 5 BOITE_3D boitmp=mgsegment->get_boite_3D();
1210     if (!(boitmp*boite2)) continue;
1211     MG_NOEUD* noeud1=mgsegment->get_noeud1();
1212     MG_NOEUD* noeud2=mgsegment->get_noeud2();
1213     double *xyz1=noeud1->get_coord();
1214     double *xyz2=noeud2->get_coord();
1215 francois 56 if (qualite==2)
1216     {
1217     int pos=(int) ((mgsegment->get_origine()-1000)/10);
1218 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1219 francois 56 }
1220 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
1221     TColor coul;
1222     if (mgsegment->get_lien_topologie()!=NULL)
1223     {
1224     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(mgsegment->get_lien_topologie()->get_id());
1225     if (j!=tabcouleur.end())
1226     {
1227     toposel=mgsegment->get_lien_topologie();
1228     coul=tabcouleur[mgsegment->get_lien_topologie()->get_id()];
1229     }
1230     }
1231 5 if ((mgsegment->get_lien_topologie()==toposel) && (mgsegment->get_lien_topologie()!=NULL) )
1232 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
1233 5 if (CheckBox1->Checked==true)
1234     {
1235     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1236     if (pos>11) pos=11;
1237     if (pos<0) pos=0;
1238     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1239     }
1240     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1241     if (CheckBox1->Checked==true)
1242     {
1243     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1244     if (pos>11) pos=11;
1245     if (pos<0) pos=0;
1246     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1247     }
1248     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1249     }
1250     glEnd();
1251     if (affmaille)
1252     {
1253     for (int i=0;i<nb;i++)
1254     {
1255     MG_SEGMENT* mgsegment=lst_segment[i];
1256 francois 56 if (N12->Checked)
1257     if (!estdansfiltre(mgsegment->get_id())) continue;
1258 francois 62 if (CheckListBox1->Checked[(mgsegment->get_origine()-1000)/10]==false) continue;
1259 5 BOITE_3D boitmp=mgsegment->get_boite_3D();
1260     if (!(boitmp*boite2)) continue;
1261     MG_NOEUD* noeud1=mgsegment->get_noeud1();
1262     MG_NOEUD* noeud2=mgsegment->get_noeud2();
1263 francois 56 if (qualite==2)
1264     {
1265     int pos=(int) ((mgsegment->get_origine()-1000)/10);
1266 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1267 francois 56 }
1268 5 unsigned long id=mgsegment->get_id();
1269     double *xyz1=noeud1->get_coord();
1270     double *xyz2=noeud2->get_coord();
1271     char mess[30];
1272     sprintf(mess,"%lu",id);
1273     glRasterPos3f(0.5*(xyz1[0]+xyz2[0]),0.5*(xyz1[1]+xyz2[1]),0.5*(xyz1[2]+xyz2[2]));
1274     glListBase (1000);
1275     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1276     }
1277     }
1278     }
1279     //triangle
1280     if (bmaille[1])
1281     {
1282     if (render>0)
1283     {
1284     if (render>1) InitShading();
1285     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1286     glEnable(GL_DEPTH_TEST);
1287     glEnable(GL_POLYGON_OFFSET_FILL);
1288     glPolygonOffset(1.0,1.0);
1289     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
1290     glBegin(GL_TRIANGLES);
1291     glEdgeFlag(GL_TRUE);
1292     int nb=lst_triangle.size();
1293     for (int i=0;i<nb;i++)
1294     {
1295     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1296     MG_TRIANGLE* mgtri=lst_triangle[i];
1297 francois 56 if (N12->Checked)
1298     if (!estdansfiltre(mgtri->get_id())) continue;
1299 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
1300 5 BOITE_3D boitmp=mgtri->get_boite_3D();
1301     if (!(boitmp*boite2)) continue;
1302     MG_NOEUD* noeud1=mgtri->get_noeud1();
1303     MG_NOEUD* noeud2=mgtri->get_noeud2();
1304     MG_NOEUD* noeud3=mgtri->get_noeud3();
1305     double *xyz1=noeud1->get_coord();
1306     double *xyz2=noeud2->get_coord();
1307     double *xyz3=noeud3->get_coord();
1308 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
1309     TColor coul;
1310     if (mgtri->get_lien_topologie()!=NULL)
1311     {
1312     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(mgtri->get_lien_topologie()->get_id());
1313     if (j!=tabcouleur.end())
1314     {
1315     toposel=mgtri->get_lien_topologie();
1316     coul=tabcouleur[mgtri->get_lien_topologie()->get_id()];
1317     }
1318     }
1319 5 if ((mgtri->get_lien_topologie()==toposel) && (mgtri->get_lien_topologie()!=NULL) )
1320 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
1321 5 if (qualite==1)
1322     {
1323     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
1324     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1325     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1326     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1327     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1328     }
1329 francois 56 if (qualite==2)
1330     {
1331 francois 62 int pos=(int) ((mgtri->get_origine()-1000)/10);
1332     glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1333 francois 56 }
1334 5 if (shrink)
1335     {
1336     double xg=0.33333333333333*(xyz1[0]+xyz2[0]+xyz3[0]);
1337     double yg=0.33333333333333*(xyz1[1]+xyz2[1]+xyz3[1]);
1338     double zg=0.33333333333333*(xyz1[2]+xyz2[2]+xyz3[2]);
1339     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1340     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1341     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1342     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1343     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1344     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1345     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1346     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1347     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1348     if (CheckBox1->Checked==true)
1349     {
1350     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1351     if (pos>11) pos=11;
1352     if (pos<0) pos=0;
1353     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1354     }
1355     glVertex3f(x1,y1,z1);
1356     if (CheckBox1->Checked==true)
1357     {
1358     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1359     if (pos>11) pos=11;
1360     if (pos<0) pos=0;
1361     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1362     }
1363     glVertex3f(x3,y3,z3);
1364     if (CheckBox1->Checked==true)
1365     {
1366     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1367     if (pos>11) pos=11;
1368     if (pos<0) pos=0;
1369     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1370     }
1371     glVertex3f(x2,y2,z2);
1372     }
1373     else
1374     {
1375     if (CheckBox1->Checked==true)
1376     {
1377     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1378     if (pos>11) pos=11;
1379     if (pos<0) pos=0;
1380     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1381     }
1382     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1383     if (CheckBox1->Checked==true)
1384     {
1385     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1386     if (pos>11) pos=11;
1387     if (pos<0) pos=0;
1388     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1389     }
1390     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1391     if (CheckBox1->Checked==true)
1392     {
1393     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1394     if (pos>11) pos=11;
1395     if (pos<0) pos=0;
1396     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1397     }
1398     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1399     }
1400     }
1401     glEnd();
1402     }
1403    
1404     glFlush();
1405     if (render>0)
1406     {
1407     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1408     glLineWidth(MainForm->valeurconfig[40]);
1409     if (render>1) InitShading();
1410     }
1411     else
1412     {
1413     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
1414     glLineWidth(MainForm->valeurconfig[21]);
1415     }
1416     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
1417     glBegin(GL_TRIANGLES);
1418     glEdgeFlag(GL_TRUE);
1419     int nb=lst_triangle.size();
1420     for (int i=0;i<nb;i++)
1421     {
1422     if (render>0)
1423     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1424     else
1425     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
1426     MG_TRIANGLE* mgtri=lst_triangle[i];
1427 francois 56 if (N12->Checked)
1428     if (!estdansfiltre(mgtri->get_id())) continue;
1429 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
1430 5 BOITE_3D boitmp=mgtri->get_boite_3D();
1431     if (!(boitmp*boite2)) continue;
1432     MG_NOEUD* noeud1=mgtri->get_noeud1();
1433     MG_NOEUD* noeud2=mgtri->get_noeud2();
1434     MG_NOEUD* noeud3=mgtri->get_noeud3();
1435     double *xyz1=noeud1->get_coord();
1436     double *xyz2=noeud2->get_coord();
1437     double *xyz3=noeud3->get_coord();
1438 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
1439     TColor coul;
1440     if (mgtri->get_lien_topologie()!=NULL)
1441     {
1442     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(mgtri->get_lien_topologie()->get_id());
1443     if (j!=tabcouleur.end())
1444     {
1445     toposel=mgtri->get_lien_topologie();
1446     coul=tabcouleur[mgtri->get_lien_topologie()->get_id()];
1447     }
1448     }
1449 5 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.)))
1450 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
1451 5 if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1452     {
1453     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
1454     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1455     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1456     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1457     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1458     }
1459 francois 56 if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1460     {
1461 francois 62 int pos=(int) ((mgtri->get_origine()-1000)/10);
1462     glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1463     }
1464 francois 56
1465 5 if (shrink)
1466     {
1467     double xg=0.33333333333333*(xyz1[0]+xyz2[0]+xyz3[0]);
1468     double yg=0.33333333333333*(xyz1[1]+xyz2[1]+xyz3[1]);
1469     double zg=0.33333333333333*(xyz1[2]+xyz2[2]+xyz3[2]);
1470     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1471     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1472     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1473     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1474     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1475     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1476     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1477     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1478     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1479     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1480     {
1481     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1482     if (pos>11) pos=11;
1483     if (pos<0) pos=0;
1484     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1485     }
1486     glVertex3f(x1,y1,z1);
1487     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1488     {
1489     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1490     if (pos>11) pos=11;
1491     if (pos<0) pos=0;
1492     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1493     }
1494     glVertex3f(x3,y3,z3);
1495     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1496     {
1497     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1498     if (pos>11) pos=11;
1499     if (pos<0) pos=0;
1500     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1501     }
1502     glVertex3f(x2,y2,z2);
1503     }
1504     else
1505     {
1506     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1507     {
1508     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1509     if (pos>11) pos=11;
1510     if (pos<0) pos=0;
1511     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1512     }
1513     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1514     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1515     {
1516     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1517     if (pos>11) pos=11;
1518     if (pos<0) pos=0;
1519     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1520     }
1521     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1522     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1523     {
1524     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1525     if (pos>11) pos=11;
1526     if (pos<0) pos=0;
1527     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1528     }
1529     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1530     }
1531     }
1532     glEnd();
1533     if (affmaille)
1534     {
1535     for (int i=0;i<nb;i++)
1536     {
1537     MG_TRIANGLE* mgtri=lst_triangle[i];
1538 francois 56 if (N12->Checked)
1539     if (!estdansfiltre(mgtri->get_id())) continue;
1540 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
1541 5 BOITE_3D boitmp=mgtri->get_boite_3D();
1542     if (!(boitmp*boite2)) continue;
1543     MG_NOEUD* noeud1=mgtri->get_noeud1();
1544     MG_NOEUD* noeud2=mgtri->get_noeud2();
1545     MG_NOEUD* noeud3=mgtri->get_noeud3();
1546     double *xyz1=noeud1->get_coord();
1547     double *xyz2=noeud2->get_coord();
1548     double *xyz3=noeud3->get_coord();
1549     unsigned long id=mgtri->get_id();
1550     char mess[30];
1551     sprintf(mess,"%lu",id);
1552     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1553     {
1554     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
1555     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1556     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1557     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1558     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1559     }
1560 francois 56 if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1561     {
1562     int pos=(int) ((mgtri->get_origine()-1000)/10);
1563 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1564 francois 56 }
1565 5 glRasterPos3f((xyz1[0]+xyz2[0]+xyz3[0])/3.,(xyz1[1]+xyz2[1]+xyz3[1])/3.,(xyz1[2]+xyz2[2]+xyz3[2])/3.);
1566     glListBase (1000);
1567     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
1568     }
1569     }
1570     if (render==2)
1571     {
1572     glDisable(GL_LIGHTING);
1573     glDisable(GL_LIGHT0);
1574     glDisable(GL_LIGHT1);
1575     }
1576     }
1577     //tetra
1578     if (bmaille[2])
1579     {
1580     if (render==1)
1581     {
1582     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1583     glEnable(GL_DEPTH_TEST);
1584     glEnable(GL_POLYGON_OFFSET_FILL);
1585     glPolygonOffset(1.0,1.0);
1586     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
1587     glBegin(GL_TRIANGLES);
1588     glEdgeFlag(GL_TRUE);
1589     int nb=lst_tetra.size();
1590     for (int i=0;i<nb;i++)
1591     {
1592 francois 98 glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
1593 5 MG_TETRA* mgtri=lst_tetra[i];
1594 francois 56 if (N12->Checked)
1595     if (!estdansfiltre(mgtri->get_id())) continue;
1596 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
1597 5 BOITE_3D boitmp=mgtri->get_boite_3D();
1598     if (!(boitmp*boite2)) continue;
1599     MG_NOEUD* noeud1=mgtri->get_noeud1();
1600     MG_NOEUD* noeud2=mgtri->get_noeud2();
1601     MG_NOEUD* noeud3=mgtri->get_noeud3();
1602     MG_NOEUD* noeud4=mgtri->get_noeud4();
1603     double *xyz1=noeud1->get_coord();
1604     double *xyz2=noeud2->get_coord();
1605     double *xyz3=noeud3->get_coord();
1606     double *xyz4=noeud4->get_coord();
1607 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
1608     TColor coul;
1609     if (mgtri->get_lien_topologie()!=NULL)
1610     {
1611     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(mgtri->get_lien_topologie()->get_id());
1612     if (j!=tabcouleur.end())
1613     {
1614     toposel=mgtri->get_lien_topologie();
1615     coul=tabcouleur[mgtri->get_lien_topologie()->get_id()];
1616     }
1617     }
1618 5 if ((mgtri->get_lien_topologie()==toposel) && (mgtri->get_lien_topologie()!=NULL) )
1619 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
1620 5 if (qualite==1)
1621     {
1622     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
1623     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1624     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1625     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1626     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1627     }
1628 francois 56 if (qualite==2)
1629     {
1630     int pos=(int) ((mgtri->get_origine()-1000)/10);
1631 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1632 francois 56 }
1633 5 if (shrink)
1634     {
1635     double xg=0.25*(xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0]);
1636     double yg=0.25*(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1]);
1637     double zg=0.25*(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2]);
1638     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1639     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1640     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1641     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1642     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1643     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1644     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1645     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1646     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1647     double x4=xg+facteur_shrink*(xyz4[0]-xg);
1648     double y4=yg+facteur_shrink*(xyz4[1]-yg);
1649     double z4=zg+facteur_shrink*(xyz4[2]-zg);
1650     if (CheckBox1->Checked==true)
1651     {
1652     int pos=(int) ((noeud1->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(x1,y1,z1);
1658     if (CheckBox1->Checked==true)
1659     {
1660     int pos=(int) ((noeud3->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(x3,y3,z3);
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(x2,y2,z2);
1674     if (CheckBox1->Checked==true)
1675     {
1676     int pos=(int) ((noeud1->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(x1,y1,z1);
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(x2,y2,z2);
1690     if (CheckBox1->Checked==true)
1691     {
1692     int pos=(int) ((noeud4->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(x4,y4,z4);
1698     if (CheckBox1->Checked==true)
1699     {
1700     int pos=(int) ((noeud2->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(x2,y2,z2);
1706     if (CheckBox1->Checked==true)
1707     {
1708     int pos=(int) ((noeud3->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(x3,y3,z3);
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(x4,y4,z4);
1722     if (CheckBox1->Checked==true)
1723     {
1724     int pos=(int) ((noeud1->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(x1,y1,z1);
1730     if (CheckBox1->Checked==true)
1731     {
1732     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1733     if (pos>11) pos=11;
1734     if (pos<0) pos=0;
1735     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1736     }
1737     glVertex3f(x4,y4,z4);
1738     if (CheckBox1->Checked==true)
1739     {
1740     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1741     if (pos>11) pos=11;
1742     if (pos<0) pos=0;
1743     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1744     }
1745     glVertex3f(x3,y3,z3);
1746     }
1747     else
1748     {
1749     if (CheckBox1->Checked==true)
1750     {
1751     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1752     if (pos>11) pos=11;
1753     if (pos<0) pos=0;
1754     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1755     }
1756     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1757     if (CheckBox1->Checked==true)
1758     {
1759     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1760     if (pos>11) pos=11;
1761     if (pos<0) pos=0;
1762     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1763     }
1764     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1765     if (CheckBox1->Checked==true)
1766     {
1767     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1768     if (pos>11) pos=11;
1769     if (pos<0) pos=0;
1770     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1771     }
1772     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1773     if (CheckBox1->Checked==true)
1774     {
1775     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1776     if (pos>11) pos=11;
1777     if (pos<0) pos=0;
1778     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1779     }
1780     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1781     if (CheckBox1->Checked==true)
1782     {
1783     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1784     if (pos>11) pos=11;
1785     if (pos<0) pos=0;
1786     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1787     }
1788     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1789     if (CheckBox1->Checked==true)
1790     {
1791     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1792     if (pos>11) pos=11;
1793     if (pos<0) pos=0;
1794     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1795     }
1796     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1797     if (CheckBox1->Checked==true)
1798     {
1799     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1800     if (pos>11) pos=11;
1801     if (pos<0) pos=0;
1802     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1803     }
1804     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
1805     if (CheckBox1->Checked==true)
1806     {
1807     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1808     if (pos>11) pos=11;
1809     if (pos<0) pos=0;
1810     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1811     }
1812     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1813     if (CheckBox1->Checked==true)
1814     {
1815     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1816     if (pos>11) pos=11;
1817     if (pos<0) pos=0;
1818     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1819     }
1820     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1821     if (CheckBox1->Checked==true)
1822     {
1823     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1824     if (pos>11) pos=11;
1825     if (pos<0) pos=0;
1826     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1827     }
1828     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
1829     if (CheckBox1->Checked==true)
1830     {
1831     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1832     if (pos>11) pos=11;
1833     if (pos<0) pos=0;
1834     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1835     }
1836     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
1837     if (CheckBox1->Checked==true)
1838     {
1839     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1840     if (pos>11) pos=11;
1841     if (pos<0) pos=0;
1842     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1843     }
1844     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
1845     }
1846     }
1847     glEnd();
1848     }
1849    
1850     glFlush();
1851     if (render==1)
1852     {
1853     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1854     glLineWidth(MainForm->valeurconfig[40]);
1855     }
1856     else
1857     {
1858     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
1859     glLineWidth(MainForm->valeurconfig[25]);
1860     }
1861     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
1862     glBegin(GL_TRIANGLES);
1863     glEdgeFlag(GL_TRUE);
1864     int nb=lst_tetra.size();
1865     for (int i=0;i<nb;i++)
1866     {
1867     if (render==1)
1868     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
1869     else
1870     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
1871     MG_TETRA* mgtri=lst_tetra[i];
1872 francois 56 if (N12->Checked)
1873     if (!estdansfiltre(mgtri->get_id())) continue;
1874 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
1875 5 BOITE_3D boitmp=mgtri->get_boite_3D();
1876     if (!(boitmp*boite2)) continue;
1877     MG_NOEUD* noeud1=mgtri->get_noeud1();
1878     MG_NOEUD* noeud2=mgtri->get_noeud2();
1879     MG_NOEUD* noeud3=mgtri->get_noeud3();
1880     MG_NOEUD* noeud4=mgtri->get_noeud4();
1881     double *xyz1=noeud1->get_coord();
1882     double *xyz2=noeud2->get_coord();
1883     double *xyz3=noeud3->get_coord();
1884     double *xyz4=noeud4->get_coord();
1885 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
1886     TColor coul;
1887     if (mgtri->get_lien_topologie()!=NULL)
1888     {
1889     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(mgtri->get_lien_topologie()->get_id());
1890     if (j!=tabcouleur.end())
1891     {
1892     toposel=mgtri->get_lien_topologie();
1893     coul=tabcouleur[mgtri->get_lien_topologie()->get_id()];
1894     }
1895     }
1896 5 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.)))
1897 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
1898 5 if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1899     {
1900     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
1901     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
1902     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
1903     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
1904     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
1905     }
1906 francois 56 if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
1907     {
1908 francois 62 int pos=(int) ((mgtri->get_origine()-1000)/10);
1909     glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
1910 francois 56 }
1911 5 if (shrink)
1912     {
1913     double xg=0.25*(xyz1[0]+xyz2[0]+xyz3[0]+xyz4[0]);
1914     double yg=0.25*(xyz1[1]+xyz2[1]+xyz3[1]+xyz4[1]);
1915     double zg=0.25*(xyz1[2]+xyz2[2]+xyz3[2]+xyz4[2]);
1916     double x1=xg+facteur_shrink*(xyz1[0]-xg);
1917     double y1=yg+facteur_shrink*(xyz1[1]-yg);
1918     double z1=zg+facteur_shrink*(xyz1[2]-zg);
1919     double x2=xg+facteur_shrink*(xyz2[0]-xg);
1920     double y2=yg+facteur_shrink*(xyz2[1]-yg);
1921     double z2=zg+facteur_shrink*(xyz2[2]-zg);
1922     double x3=xg+facteur_shrink*(xyz3[0]-xg);
1923     double y3=yg+facteur_shrink*(xyz3[1]-yg);
1924     double z3=zg+facteur_shrink*(xyz3[2]-zg);
1925     double x4=xg+facteur_shrink*(xyz4[0]-xg);
1926     double y4=yg+facteur_shrink*(xyz4[1]-yg);
1927     double z4=zg+facteur_shrink*(xyz4[2]-zg);
1928     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1929     {
1930     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1931     if (pos>11) pos=11;
1932     if (pos<0) pos=0;
1933     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1934     }
1935     glVertex3f(x1,y1,z1);
1936     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1937     {
1938     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1939     if (pos>11) pos=11;
1940     if (pos<0) pos=0;
1941     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1942     }
1943     glVertex3f(x3,y3,z3);
1944     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1945     {
1946     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1947     if (pos>11) pos=11;
1948     if (pos<0) pos=0;
1949     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1950     }
1951     glVertex3f(x2,y2,z2);
1952     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1953     {
1954     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
1955     if (pos>11) pos=11;
1956     if (pos<0) pos=0;
1957     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1958     }
1959     glVertex3f(x1,y1,z1);
1960     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1961     {
1962     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1963     if (pos>11) pos=11;
1964     if (pos<0) pos=0;
1965     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1966     }
1967     glVertex3f(x2,y2,z2);
1968     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1969     {
1970     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1971     if (pos>11) pos=11;
1972     if (pos<0) pos=0;
1973     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1974     }
1975     glVertex3f(x4,y4,z4);
1976     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1977     {
1978     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
1979     if (pos>11) pos=11;
1980     if (pos<0) pos=0;
1981     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1982     }
1983     glVertex3f(x2,y2,z2);
1984     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1985     {
1986     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
1987     if (pos>11) pos=11;
1988     if (pos<0) pos=0;
1989     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1990     }
1991     glVertex3f(x3,y3,z3);
1992     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
1993     {
1994     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
1995     if (pos>11) pos=11;
1996     if (pos<0) pos=0;
1997     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
1998     }
1999     glVertex3f(x4,y4,z4);
2000     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2001     {
2002     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
2003     if (pos>11) pos=11;
2004     if (pos<0) pos=0;
2005     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2006     }
2007     glVertex3f(x1,y1,z1);
2008     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2009     {
2010     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
2011     if (pos>11) pos=11;
2012     if (pos<0) pos=0;
2013     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2014     }
2015     glVertex3f(x4,y4,z4);
2016     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2017     {
2018     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
2019     if (pos>11) pos=11;
2020     if (pos<0) pos=0;
2021     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2022     }
2023     glVertex3f(x3,y3,z3);
2024     }
2025     else
2026     {
2027     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2028     {
2029     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
2030     if (pos>11) pos=11;
2031     if (pos<0) pos=0;
2032     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2033     }
2034     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
2035     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2036     {
2037     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
2038     if (pos>11) pos=11;
2039     if (pos<0) pos=0;
2040     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2041     }
2042     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
2043     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2044     {
2045     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
2046     if (pos>11) pos=11;
2047     if (pos<0) pos=0;
2048     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2049     }
2050     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
2051     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2052     {
2053     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
2054     if (pos>11) pos=11;
2055     if (pos<0) pos=0;
2056     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2057     }
2058     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
2059     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2060     {
2061     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
2062     if (pos>11) pos=11;
2063     if (pos<0) pos=0;
2064     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2065     }
2066     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
2067     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2068     {
2069     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
2070     if (pos>11) pos=11;
2071     if (pos<0) pos=0;
2072     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2073     }
2074     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
2075     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2076     {
2077     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
2078     if (pos>11) pos=11;
2079     if (pos<0) pos=0;
2080     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2081     }
2082     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
2083     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2084     {
2085     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
2086     if (pos>11) pos=11;
2087     if (pos<0) pos=0;
2088     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2089     }
2090     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
2091     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2092     {
2093     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
2094     if (pos>11) pos=11;
2095     if (pos<0) pos=0;
2096     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2097     }
2098     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
2099     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2100     {
2101     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
2102     if (pos>11) pos=11;
2103     if (pos<0) pos=0;
2104     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2105     }
2106     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
2107     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2108     {
2109     int pos=(int) ((noeud4->get_solution()-lmin)*12./(lmax-lmin));
2110     if (pos>11) pos=11;
2111     if (pos<0) pos=0;
2112     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2113     }
2114     glVertex3f(xyz4[0],xyz4[1],xyz4[2]);
2115     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
2116     {
2117     int pos=(int) ((noeud3->get_solution()-lmin)*12./(lmax-lmin));
2118     if (pos>11) pos=11;
2119     if (pos<0) pos=0;
2120     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
2121     }
2122     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
2123     }
2124     }
2125     glEnd();
2126     if (affmaille)
2127     {
2128     for (int i=0;i<nb;i++)
2129     {
2130     MG_TETRA* mgtri=lst_tetra[i];
2131 francois 56 if (N12->Checked)
2132     if (!estdansfiltre(mgtri->get_id())) continue;
2133 francois 62 if (CheckListBox1->Checked[(mgtri->get_origine()-1000)/10]==false) continue;
2134 5 BOITE_3D boitmp=mgtri->get_boite_3D();
2135     if (!(boitmp*boite2)) continue;
2136     MG_NOEUD* noeud1=mgtri->get_noeud1();
2137     MG_NOEUD* noeud2=mgtri->get_noeud2();
2138     MG_NOEUD* noeud3=mgtri->get_noeud3();
2139     MG_NOEUD* noeud4=mgtri->get_noeud4();
2140     double *xyz1=noeud1->get_coord();
2141     double *xyz2=noeud2->get_coord();
2142     double *xyz3=noeud3->get_coord();
2143     double *xyz4=noeud4->get_coord();
2144     unsigned long id=mgtri->get_id();
2145     char mess[30];
2146     sprintf(mess,"%lu",id);
2147     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
2148     {
2149     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
2150     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
2151     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
2152     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
2153     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
2154     }
2155 francois 56 if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
2156     {
2157 francois 62 int pos=(int) ((mgtri->get_origine()-1000)/10);
2158     glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
2159 francois 56 }
2160 5 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.);
2161     glListBase (1000);
2162     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
2163     }
2164     }
2165     if (render==2)
2166     {
2167     glDisable(GL_LIGHTING);
2168     glDisable(GL_LIGHT0);
2169     glDisable(GL_LIGHT1);
2170     }
2171     }
2172     }
2173     //---------------------------------------------------------------------------
2174     void __fastcall TVisuWinform::dessineaxe(void)
2175     {
2176     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2177     d=max(d,boite.get_zmax()-boite.get_zmin());
2178     d=d*MainForm->valeurconfig[10];
2179     glLineWidth(MainForm->valeurconfig[9]);
2180     glBegin(GL_LINES);
2181     glColor3f(MainForm->valeurconfig[0],MainForm->valeurconfig[1],MainForm->valeurconfig[2]);
2182     glVertex3f(0.0,0.0,0.0);
2183     glVertex3f(d,0.0,0.0);
2184     glColor3f(MainForm->valeurconfig[3],MainForm->valeurconfig[4],MainForm->valeurconfig[5]);
2185     glVertex3f(0.0,0.0,0.0);
2186     glVertex3f(0.0,d,0.0);
2187     glColor3f(MainForm->valeurconfig[6],MainForm->valeurconfig[7],MainForm->valeurconfig[8]);
2188     glVertex3f(0.0,0.0,0.0);
2189     glVertex3f(0.0,0.0,d);
2190     glEnd();
2191    
2192     }
2193     //---------------------------------------------------------------------------
2194    
2195     void __fastcall TVisuWinform::FormKeyDown(TObject *Sender, WORD &Key,
2196     TShiftState Shift)
2197     {
2198     transformation(Sender,Key,Shift);
2199     }
2200     //---------------------------------------------------------------------------
2201     void __fastcall TVisuWinform::redess(void)
2202     {
2203     wglMakeCurrent(hdc,hrc);
2204     glClearColor(MainForm->valeurconfig[11],MainForm->valeurconfig[12],MainForm->valeurconfig[13], 0.0f);
2205     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
2206     if (TreeView1->Enabled==false) dessinegeo(); else {dessinemai();dessinemaifem();}
2207     if (axe==1) dessineaxe();
2208     glFlush();
2209     SwapBuffers(hdc);
2210     }
2211    
2212     //---------------------------------------------------------------------------
2213     void __fastcall TVisuWinform::recadre(double dx,double dy,int etat)
2214     {
2215     wglMakeCurrent(hdc,hrc);
2216     GLfloat w = ClientWidth-PageControl1->Width;
2217     GLfloat h = ClientHeight;
2218     char mess[255];
2219     if (etat==0) glViewport(0, 0, w, h);
2220     glMatrixMode(GL_PROJECTION);
2221     glLoadIdentity();
2222     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2223     d=max(d,boite.get_zmax()-boite.get_zmin());
2224     d=d*1.5/2.;
2225     double aspect=w/h;
2226     double xmin,ymin,xmax,ymax;
2227     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
2228     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
2229     double zmin=boite.get_zcentre()-100*d;
2230     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
2231     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
2232     double zmax=zmin+200.*d;
2233     glOrtho(xmin,xmax,ymin,ymax,zmin,zmax);
2234     }
2235     //---------------------------------------------------------------------------
2236    
2237     void __fastcall TVisuWinform::initvue(void)
2238     {
2239     wglMakeCurrent(hdc,hrc);
2240     glMatrixMode(GL_MODELVIEW);
2241     glLoadIdentity();
2242     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2243     /*glRotatef(-90., 0.0, 1.0, 0.0);
2244     glRotatef(-90., 1.0, 0.0, 0.0);
2245     glRotatef(45., 0.0, 1.0, 0.0);
2246     glRotatef(-45., 0.0, 0.0, 1.0);*/
2247     glRotatef(35.26, 1.0, 0.0, 0.0);
2248     glRotatef(45., 0.0, 1.0, 0.0);
2249     glRotatef(-90., 1.0, 0.0, 0.0);
2250     glRotatef(180., 0.0, 0.0, 1.0);
2251    
2252    
2253     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2254     }
2255    
2256    
2257     void __fastcall TVisuWinform::FormMouseWheelDown(TObject *Sender,
2258     TShiftState Shift, TPoint &MousePos, bool &Handled)
2259     {
2260     wglMakeCurrent(hdc,hrc);
2261     glMatrixMode(GL_MODELVIEW);
2262     zoom++;
2263     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2264     glScalef(1.1,1.1,1.1);
2265     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2266     redess();
2267     }
2268     //---------------------------------------------------------------------------
2269    
2270    
2271     void __fastcall TVisuWinform::FormMouseWheelUp(TObject *Sender,
2272     TShiftState Shift, TPoint &MousePos, bool &Handled)
2273     {
2274     wglMakeCurrent(hdc,hrc);
2275     glMatrixMode(GL_MODELVIEW);
2276     zoom--;
2277     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2278     glScalef(1./1.1,1./1.1,1./1.1);
2279     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2280     redess();
2281     }
2282     //---------------------------------------------------------------------------
2283    
2284     void __fastcall TVisuWinform::Fermer1Click(TObject *Sender)
2285     {
2286     Close();
2287     }
2288     //---------------------------------------------------------------------------
2289    
2290    
2291     void __fastcall TVisuWinform::FormMouseDown(TObject *Sender,
2292     TMouseButton Button, TShiftState Shift, int X, int Y)
2293     {
2294     if (Button==mbRight)
2295     {
2296     if (Shift.Contains(ssCtrl))
2297     {
2298     TPoint pt(X,Y);
2299     TPoint pt2=ClientToScreen(pt);
2300     PopupMenu2->Popup(pt2.x,pt2.y);
2301     }
2302     else if (debut_trans==false)
2303     {
2304     debut_trans=true;
2305     xdepart=X;
2306     ydepart=Y;
2307     }
2308     }
2309     if (Button==mbMiddle)
2310     if (debut_rot==false)
2311     {
2312     debut_rot=true;
2313     xrot=X;
2314     yrot=Y;
2315     }
2316    
2317     }
2318     //---------------------------------------------------------------------------
2319    
2320     void __fastcall TVisuWinform::FormMouseUp(TObject *Sender,
2321     TMouseButton Button, TShiftState Shift, int X, int Y)
2322     {
2323     if (Button==mbRight)
2324     if (debut_trans==true)
2325     {
2326     GLfloat w = ClientWidth-PageControl1->Width;
2327     GLfloat h = ClientHeight;
2328     double aspect=w/h;
2329     debut_trans=false;
2330     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2331     d=max(d,boite.get_zmax()-boite.get_zmin());
2332     d=d*1.5;
2333     double xmin,ymin,xmax,ymax;
2334     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
2335     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
2336     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
2337     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
2338     dx=dx+(xdepart-X)/2./w*(xmax-xmin);
2339     dy=dy-(ydepart-Y)/2./h*(ymax-ymin);
2340     recadre(dx,dy,1);
2341     redess();
2342     xdepart=X;
2343     ydepart=Y;
2344     }
2345    
2346     if (Button==mbMiddle) debut_rot=false;
2347     }
2348     //---------------------------------------------------------------------------
2349    
2350     void __fastcall TVisuWinform::FormMouseMove(TObject *Sender,
2351     TShiftState Shift, int X, int Y)
2352     {
2353     if (debut_trans==true)
2354     {
2355     GLfloat w = ClientWidth-PageControl1->Width;
2356     GLfloat h = ClientHeight;
2357     double aspect=w/h;
2358     double d=max(boite.get_xmax()-boite.get_xmin(),boite.get_ymax()-boite.get_ymin());
2359     d=max(d,boite.get_zmax()-boite.get_zmin());
2360     d=d*1.5;
2361     double xmin,ymin,xmax,ymax;
2362     if (w<h) xmin=boite.get_xcentre()-d+dx; else xmin=boite.get_xcentre()-d*aspect+dx;
2363     if (w<h) ymin=boite.get_ycentre()-d/aspect+dy; else ymin=boite.get_ycentre()-d+dy;
2364     if (w<h) xmax=xmin+2.*d; else xmax=xmin+2.*d*aspect;
2365     if (w<h) ymax=ymin+2.*d/aspect; else ymax=ymin+2.*d;
2366     dx=dx+(xdepart-X)/2./w*(xmax-xmin);
2367     dy=dy-(ydepart-Y)/2./h*(ymax-ymin);
2368     recadre(dx,dy,1);
2369     redess();
2370     xdepart=X;
2371     ydepart=Y;
2372     }
2373     if (debut_rot==true)
2374     {
2375     GLfloat w = ClientWidth-PageControl1->Width;
2376     GLfloat h = ClientHeight;
2377     double deltax=X-xrot;
2378     double deltay=Y-yrot;
2379     double norme=deltax*deltax+deltay*deltay;
2380     norme=sqrt(norme);
2381     if (norme>=1.)
2382     {
2383     glMatrixMode(GL_MODELVIEW);
2384     deltax=deltax*1.0/norme;
2385     deltay=deltay*1.0/norme;
2386     GLdouble matriceproj[16],matricevue[16];
2387     GLint matriceport[4];
2388     glGetIntegerv(GL_VIEWPORT,matriceport);
2389     glGetDoublev(GL_MODELVIEW_MATRIX,matricevue);
2390     glGetDoublev(GL_PROJECTION_MATRIX,matriceproj);
2391     double orx,ory,orz;
2392     double rx,ry,rz;
2393     gluUnProject((GLdouble)xrot,(GLdouble)yrot,0.,matricevue,matriceproj,matriceport,&orx,&ory,&orz);
2394     gluUnProject(xrot+deltay,yrot+deltax,0.,matricevue,matriceproj,matriceport,&rx,&ry,&rz);
2395     rx=rx-orx;
2396     ry=ry-ory;
2397     rz=rz-orz;
2398     double norme2=sqrt(rx*rx+ry*ry+rz*rz);
2399     rx=rx/norme2;
2400     ry=ry/norme2;
2401     rz=rz/norme2;
2402     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2403     glRotatef(norme/sqrt(w*h)*360, rx, ry, rz);
2404     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2405     redess();
2406     }
2407     xrot=X;
2408     yrot=Y;
2409     }
2410    
2411     }
2412     //---------------------------------------------------------------------------
2413    
2414    
2415    
2416    
2417    
2418     void __fastcall TVisuWinform::TreeView1KeyDown(TObject *Sender, WORD &Key,
2419     TShiftState Shift)
2420     {
2421     transformation(Sender,Key,Shift);
2422     }
2423     //---------------------------------------------------------------------------
2424     void __fastcall TVisuWinform::transformation(TObject *Sender, WORD &Key,TShiftState Shift)
2425     {
2426     wglMakeCurrent(hdc,hrc);
2427     GLfloat w = ClientWidth-PageControl1->Width;
2428     GLfloat h = ClientHeight;
2429     glMatrixMode(GL_MODELVIEW);
2430     double un=0.005*min(w,h);
2431     if (Key==VK_LEFT)
2432     {
2433     dx=dx+un;
2434     recadre(dx,dy,1);
2435     }
2436     if (Key==VK_RIGHT)
2437     {
2438     dx=dx-un;
2439     recadre(dx,dy,1);
2440     }
2441     if (Key==VK_UP)
2442     {
2443     dy=dy-un;
2444     recadre(dx,dy,1);
2445     }
2446     if (Key==VK_DOWN)
2447     {
2448     dy=dy+un;
2449     recadre(dx,dy,1);
2450     }
2451     if(Key == VK_F1)
2452     {
2453     zoom++;
2454     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2455     glScalef(1.1,1.1,1.1);
2456     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2457     }
2458     if(Key == VK_F2)
2459     {
2460     zoom--;
2461     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2462     glScalef(1./1.1,1./1.1,1./1.1);
2463     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2464     }
2465     if(Key == VK_F3)
2466     {
2467     dx=0.;
2468     dy=0.;
2469     zoom=0;
2470     recadre(dx,dy,1);
2471     initvue();
2472     }
2473     if(Key == VK_F4)
2474     {
2475     if (zoom>0)
2476     glScalef(1./pow(1.1,zoom),1./pow(1.1,zoom),1./pow(1.1,zoom));
2477     if (zoom<0)
2478     glScalef(pow(1.1,-zoom),pow(1.1,-zoom),pow(1.1,-zoom));
2479     zoom=0;
2480     dx=0;
2481     dy=0;
2482     recadre(dx,dy,1);
2483     }
2484     if(Key == VK_HOME)
2485     {
2486     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2487     glRotatef(-5, 0.0, 1.0, 0.0);
2488     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2489     }
2490     if(Key == VK_END)
2491     {
2492     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2493     glRotatef(5, 0.0, 1.0, 0.0);
2494     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2495     }
2496     if(Key == VK_INSERT)
2497     {
2498     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2499     glRotatef(-5, 1.0, 0.0, 0.0);
2500     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2501     }
2502     if(Key == VK_DELETE)
2503     {
2504     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2505     glRotatef(5, 1.0, 0.0, 0.0);
2506     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2507     }
2508     if(Key == VK_PRIOR)
2509     {
2510     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2511     glRotatef(-5, 0.0, 0.0, 1.0);
2512     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2513     }
2514     if(Key == VK_NEXT)
2515     {
2516     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2517     glRotatef(5, 0.0, 0.0, 1.0);
2518     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2519     }
2520     if (Key==VK_ADD)
2521     {
2522     facteur_shrink=facteur_shrink+0.05;
2523     if (facteur_shrink>1.) facteur_shrink=1;
2524     }
2525     if (Key==VK_SUBTRACT)
2526     {
2527     facteur_shrink=facteur_shrink-0.05;
2528     if (facteur_shrink<0.) facteur_shrink=0.;
2529     }
2530    
2531     redess();
2532     }
2533     //---------------------------------------------------------------------------
2534    
2535    
2536    
2537     void __fastcall TVisuWinform::shrinkonExecute(TObject *Sender)
2538     {
2539     shrink=1;
2540     redess();
2541     }
2542     //---------------------------------------------------------------------------
2543    
2544     void __fastcall TVisuWinform::shrinkoffExecute(TObject *Sender)
2545     {
2546     shrink=0;
2547     redess();
2548     }
2549     //---------------------------------------------------------------------------
2550    
2551     void __fastcall TVisuWinform::renderfilExecute(TObject *Sender)
2552     {
2553     render=0;
2554     redess();
2555     }
2556     //---------------------------------------------------------------------------
2557    
2558     void __fastcall TVisuWinform::rendershadeExecute(TObject *Sender)
2559     {
2560     render=1;
2561     redess();
2562     }
2563     //---------------------------------------------------------------------------
2564    
2565     void __fastcall TVisuWinform::axeonExecute(TObject *Sender)
2566     {
2567     axe=1;
2568     redess();
2569     }
2570     //---------------------------------------------------------------------------
2571    
2572     void __fastcall TVisuWinform::axeoffExecute(TObject *Sender)
2573     {
2574     axe=0;
2575     redess();
2576     }
2577     //---------------------------------------------------------------------------
2578    
2579     void __fastcall TVisuWinform::qualiteonExecute(TObject *Sender)
2580     {
2581     qualite=1;
2582     redess();
2583     }
2584     //---------------------------------------------------------------------------
2585    
2586     void __fastcall TVisuWinform::qualiteoffExecute(TObject *Sender)
2587     {
2588     qualite=0;
2589     redess();
2590     }
2591     //---------------------------------------------------------------------------
2592    
2593     void __fastcall TVisuWinform::renderlightExecute(TObject *Sender)
2594     {
2595     render=2;
2596     redess();
2597     }
2598     //---------------------------------------------------------------------------
2599    
2600     void __fastcall TVisuWinform::noeudonExecute(TObject *Sender)
2601     {
2602     noeud=1;
2603     redess();
2604     }
2605     //---------------------------------------------------------------------------
2606    
2607     void __fastcall TVisuWinform::noeudoffExecute(TObject *Sender)
2608     {
2609     noeud=0;
2610     redess();
2611     }
2612     //---------------------------------------------------------------------------
2613    
2614     void __fastcall TVisuWinform::configExecute(TObject *Sender)
2615     {
2616     configwin->ShowModal();
2617     }
2618     //---------------------------------------------------------------------------
2619    
2620     void __fastcall TVisuWinform::FileExitItemClick(TObject *Sender)
2621     {
2622     TerminateProcess(GetCurrentProcess(),0);
2623     }
2624     //---------------------------------------------------------------------------
2625    
2626     void __fastcall TVisuWinform::f3Execute(TObject *Sender)
2627     {
2628     dx=0.;
2629     dy=0.;
2630     zoom=0;
2631     recadre(dx,dy,1);
2632     initvue();
2633     redess();
2634     }
2635     //---------------------------------------------------------------------------
2636    
2637     void __fastcall TVisuWinform::f4Execute(TObject *Sender)
2638     {
2639     glMatrixMode(GL_MODELVIEW);
2640     if (zoom>0)
2641     glScalef(1./pow(1.1,zoom),1./pow(1.1,zoom),1./pow(1.1,zoom));
2642     if (zoom<0)
2643     glScalef(pow(1.1,-zoom),pow(1.1,-zoom),pow(1.1,-zoom));
2644     zoom=0;
2645     dx=0;
2646     dy=0;
2647     recadre(dx,dy,1);
2648     redess();
2649     }
2650     //---------------------------------------------------------------------------
2651    
2652     void __fastcall TVisuWinform::xmExecute(TObject *Sender)
2653     {
2654     glMatrixMode(GL_MODELVIEW);
2655     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2656     glRotatef(-5, 1.0, 0.0, 0.0);
2657     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2658     redess();
2659     }
2660     //---------------------------------------------------------------------------
2661    
2662     void __fastcall TVisuWinform::xpExecute(TObject *Sender)
2663     {
2664     glMatrixMode(GL_MODELVIEW);
2665     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2666     glRotatef(5, 1.0, 0.0, 0.0);
2667     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2668     redess();
2669     }
2670     //---------------------------------------------------------------------------
2671    
2672     void __fastcall TVisuWinform::ymExecute(TObject *Sender)
2673     {
2674     glMatrixMode(GL_MODELVIEW);
2675     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2676     glRotatef(-5, 0.0, 1.0, 0.0);
2677     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2678     redess();
2679     }
2680     //---------------------------------------------------------------------------
2681    
2682     void __fastcall TVisuWinform::ypExecute(TObject *Sender)
2683     {
2684     glMatrixMode(GL_MODELVIEW);
2685     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2686     glRotatef(5, 0.0, 1.0, 0.0);
2687     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2688     redess();
2689     }
2690     //---------------------------------------------------------------------------
2691    
2692     void __fastcall TVisuWinform::zmExecute(TObject *Sender)
2693     {
2694     glMatrixMode(GL_MODELVIEW);
2695     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2696     glRotatef(-5, 0.0, 0.0, 1.0);
2697     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2698     redess();
2699     }
2700     //---------------------------------------------------------------------------
2701    
2702     void __fastcall TVisuWinform::zpExecute(TObject *Sender)
2703     {
2704     glMatrixMode(GL_MODELVIEW);
2705     glTranslated(boite.get_xcentre(),boite.get_ycentre(),boite.get_zcentre());
2706     glRotatef(5, 0.0, 0.0, 1.0);
2707     glTranslated(-boite.get_xcentre(),-boite.get_ycentre(),-boite.get_zcentre());
2708     redess();
2709     }
2710     //---------------------------------------------------------------------------
2711    
2712     void __fastcall TVisuWinform::afnoeudonExecute(TObject *Sender)
2713     {
2714     affnoeud=1;
2715     redess();
2716     }
2717     //---------------------------------------------------------------------------
2718    
2719     void __fastcall TVisuWinform::afnoeudoffExecute(TObject *Sender)
2720     {
2721     affnoeud=0;
2722     redess();
2723     }
2724     //---------------------------------------------------------------------------
2725    
2726     void __fastcall TVisuWinform::afmailleonExecute(TObject *Sender)
2727     {
2728     affmaille=1;
2729     redess();
2730     }
2731     //---------------------------------------------------------------------------
2732    
2733     void __fastcall TVisuWinform::afmailleoffExecute(TObject *Sender)
2734     {
2735     affmaille=0;
2736     redess();
2737     }
2738     //---------------------------------------------------------------------------
2739     void __fastcall TVisuWinform::InitShading(void)
2740     {
2741     /*GLfloat infinite[] = { 1000.0, 1000.0, 1000.0, 1.0 };
2742     GLfloat infinite2[] = { 0.0, 0.0, -0.7, 0.0 };
2743     GLfloat ambient[] = { 0.5, 0.5, 0.5, 0.5 };
2744     GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
2745     GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
2746     GLfloat mat_spec[]= {1.0,1.0,1.0,1.0};
2747     GLfloat mat_shi[]= {50.};
2748     diffuse[0]=MainForm->valeurconfig[34];
2749     diffuse[1]=MainForm->valeurconfig[35];
2750     diffuse[2]=MainForm->valeurconfig[36];
2751    
2752    
2753    
2754     glShadeModel(GL_SMOOTH);
2755    
2756     // glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
2757     glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
2758     //glLightfv(GL_LIGHT0, GL_SPECULAR, diffuse);;
2759     glLightfv(GL_LIGHT0, GL_POSITION, infinite);
2760     glMaterialfv(GL_FRONT,GL_SPECULAR,mat_spec);
2761     glMaterialfv(GL_FRONT,GL_SHININESS,mat_shi);
2762     glEnable(GL_LIGHTING);
2763     glEnable(GL_LIGHT0);
2764     //glEnable(GL_LIGHT1);
2765     glDepthFunc(GL_LESS);
2766     glEnable(GL_DEPTH_TEST);
2767     glEnable(GL_NORMALIZE);
2768     //glColorMaterial(GL_FRONT, GL_DIFFUSE);
2769     //glEnable(GL_COLOR_MATERIAL);*/
2770     }
2771     //---------------------------------------------------------------------------
2772    
2773    
2774     void __fastcall TVisuWinform::ComboBox1Change(TObject *Sender)
2775     {
2776     MG_SOLUTION* sol=NULL;
2777     FEM_SOLUTION* sol2=NULL;
2778     if ((unsigned int)ComboBox1->ItemIndex<gest->get_nb_mg_solution()) sol=gest->get_mg_solution(ComboBox1->ItemIndex);
2779     else sol2=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
2780     if (sol!=NULL)
2781     {
2782     ListBox1->Clear();
2783     int nb=sol->get_nb_champ();
2784     for (int i=0;i<nb;i++)
2785     ListBox1->Items->Add(sol->get_legende(i).c_str());
2786     if (ListBox1->ItemIndex==-1) CheckBox1->Checked=false;
2787     unsigned long idmai=sol->get_maillage()->get_id();
2788     char mess[30];
2789     sprintf(mess,"du maillage %lu",idmai) ;
2790     Label3->Caption=mess;
2791     if (CheckBox1->Checked==false)
2792     TabSheet3->TabVisible=false;
2793     }
2794     if (sol2!=NULL)
2795     {
2796     ListBox1->Clear();
2797     int nb=sol2->get_nb_champ();
2798     for (int i=0;i<nb;i++)
2799     ListBox1->Items->Add(sol2->get_legende(i).c_str());
2800     if (ListBox1->ItemIndex==-1) CheckBox1->Checked=false;
2801     unsigned long idmai=sol2->get_maillage()->get_id();
2802     char mess[30];
2803     sprintf(mess,"du maillage fem %lu",idmai) ;
2804     Label3->Caption=mess;
2805     if (CheckBox1->Checked==false)
2806     TabSheet3->TabVisible=false;
2807     }
2808     }
2809     //---------------------------------------------------------------------------
2810    
2811     void __fastcall TVisuWinform::CheckBox1Click(TObject *Sender)
2812     {
2813     if (ListBox1->ItemIndex==-1)
2814     {
2815     CheckBox1->Checked=false;
2816     TabSheet3->TabVisible=false;
2817     }
2818     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
2819     {
2820     MG_SOLUTION* sol=NULL;
2821     FEM_SOLUTION* sol2=NULL;
2822     if ((unsigned int)ComboBox1->ItemIndex<gest->get_nb_mg_solution()) sol=gest->get_mg_solution(ComboBox1->ItemIndex);
2823     else sol2=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
2824     if (sol!=NULL)
2825     {
2826     sol->active_solution(ListBox1->ItemIndex);
2827     lmin=sol->get_legende_min();
2828     lmax=sol->get_legende_max();
2829     TabSheet3->TabVisible=true;
2830     dessine_legende();
2831     }
2832     if (sol2!=NULL)
2833     {
2834     sol2->active_solution(ListBox1->ItemIndex);
2835     lmin=sol2->get_legende_min();
2836     lmax=sol2->get_legende_max();
2837     TabSheet3->TabVisible=true;
2838     dessine_legende();
2839     }
2840    
2841     }
2842     if (CheckBox1->Checked==false)
2843     TabSheet3->TabVisible=false;
2844     if (CheckBox1->Checked==false) Button3->Visible=false; else Button3->Visible=true;
2845     initliste();
2846     redess();
2847     }
2848     //---------------------------------------------------------------------------
2849     void __fastcall TVisuWinform::ListBox1Click(TObject *Sender)
2850     {
2851     if ((ListBox1->ItemIndex!=-1) && (CheckBox1->Checked==true) )
2852     {
2853     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
2854     FEM_SOLUTION* sol2=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
2855     if (sol!=NULL)
2856     {
2857     sol->active_solution(ListBox1->ItemIndex);
2858     lmin=sol->get_legende_min();
2859     lmax=sol->get_legende_max();
2860     TabSheet3->TabVisible=true;
2861     dessine_legende();
2862     redess();
2863     }
2864     if (sol2!=NULL)
2865     {
2866     sol2->active_solution(ListBox1->ItemIndex);
2867     lmin=sol2->get_legende_min();
2868     lmax=sol2->get_legende_max();
2869     TabSheet3->TabVisible=true;
2870     dessine_legende();
2871     redess();
2872     }
2873     }
2874    
2875     }
2876     //---------------------------------------------------------------------------
2877     void __fastcall TVisuWinform::dessine_legende(void)
2878     {
2879     Label4->Color=(TColor)(RGB_r[11]+(RGB_g[11]<<8)+(RGB_b[11]<<16));
2880     Label5->Color=(TColor)(RGB_r[10]+(RGB_g[10]<<8)+(RGB_b[10]<<16));
2881     Label6->Color=(TColor)(RGB_r[9]+(RGB_g[9]<<8)+(RGB_b[9]<<16));
2882     Label7->Color=(TColor)(RGB_r[8]+(RGB_g[8]<<8)+(RGB_b[8]<<16));
2883     Label8->Color=(TColor)(RGB_r[7]+(RGB_g[7]<<8)+(RGB_b[7]<<16));
2884     Label9->Color=(TColor)(RGB_r[6]+(RGB_g[6]<<8)+(RGB_b[6]<<16));
2885     Label10->Color=(TColor)(RGB_r[5]+(RGB_g[5]<<8)+(RGB_b[5]<<16));
2886     Label11->Color=(TColor)(RGB_r[4]+(RGB_g[4]<<8)+(RGB_b[4]<<16));
2887     Label12->Color=(TColor)(RGB_r[3]+(RGB_g[3]<<8)+(RGB_b[3]<<16));
2888     Label13->Color=(TColor)(RGB_r[2]+(RGB_g[2]<<8)+(RGB_b[2]<<16));
2889     Label14->Color=(TColor)(RGB_r[1]+(RGB_g[1]<<8)+(RGB_b[1]<<16));
2890     Label15->Color=(TColor)(RGB_r[0]+(RGB_g[0]<<8)+(RGB_b[0]<<16));
2891    
2892     Label4->Width=18;
2893     Label4->Height=18;
2894     Label5->Width=18;
2895     Label5->Height=18;
2896     Label5->Top=Label4->Top+Label4->Height;
2897     Label5->Left=Label4->Left;
2898     Label6->Width=18;
2899     Label6->Height=18;
2900     Label6->Top=Label5->Top+Label4->Height;
2901     Label6->Left=Label4->Left;
2902     Label7->Width=18;
2903     Label7->Height=18;
2904     Label7->Top=Label6->Top+Label4->Height;
2905     Label7->Left=Label4->Left;
2906     Label8->Width=18;
2907     Label8->Height=18;
2908     Label8->Top=Label7->Top+Label4->Height;
2909     Label8->Left=Label4->Left;
2910     Label9->Width=18;
2911     Label9->Height=18;
2912     Label9->Top=Label8->Top+Label4->Height;
2913     Label9->Left=Label4->Left;
2914     Label10->Width=18;
2915     Label10->Height=18;
2916     Label10->Top=Label9->Top+Label4->Height;
2917     Label10->Left=Label4->Left;
2918     Label11->Width=18;
2919     Label11->Height=18;
2920     Label11->Top=Label10->Top+Label4->Height;
2921     Label11->Left=Label4->Left;
2922     Label12->Width=18;
2923     Label12->Height=18;
2924     Label12->Top=Label11->Top+Label4->Height;
2925     Label12->Left=Label4->Left;
2926     Label13->Width=18;
2927     Label13->Height=18;
2928     Label13->Top=Label12->Top+Label4->Height;
2929     Label13->Left=Label4->Left;
2930     Label14->Width=18;
2931     Label14->Height=18;
2932     Label14->Top=Label13->Top+Label4->Height;
2933     Label14->Left=Label4->Left;
2934     Label15->Width=18;
2935     Label15->Height=18;
2936     Label15->Top=Label14->Top+Label4->Height;
2937     Label15->Left=Label4->Left;
2938    
2939     Label16->Left=Label4->Left+2*Label4->Width;
2940     Label16->Top=Label4->Top-9;
2941     Label17->Left=Label4->Left+2*Label4->Width;
2942     Label17->Top=Label5->Top-9;
2943     Label18->Left=Label4->Left+2*Label4->Width;
2944     Label18->Top=Label6->Top-9;
2945     Label19->Left=Label4->Left+2*Label4->Width;
2946     Label19->Top=Label7->Top-9;
2947     Label20->Left=Label4->Left+2*Label4->Width;
2948     Label20->Top=Label8->Top-9;
2949     Label21->Left=Label4->Left+2*Label4->Width;
2950     Label21->Top=Label9->Top-9;
2951     Label22->Left=Label4->Left+2*Label4->Width;
2952     Label22->Top=Label10->Top-9;
2953     Label23->Left=Label4->Left+2*Label4->Width;
2954     Label23->Top=Label11->Top-9;
2955     Label24->Left=Label4->Left+2*Label4->Width;
2956     Label24->Top=Label12->Top-9;
2957     Label25->Left=Label4->Left+2*Label4->Width;
2958     Label25->Top=Label13->Top-9;
2959     Label26->Left=Label4->Left+2*Label4->Width;
2960     Label26->Top=Label14->Top-9;
2961     Label27->Left=Label4->Left+2*Label4->Width;
2962     Label27->Top=Label15->Top-9;
2963     Label28->Left=Label4->Left+2*Label4->Width;
2964     Label28->Top=Label15->Top+Label15->Height-9;
2965     char mess[30];
2966     sprintf(mess,"%le",lmin+12.*(lmax-lmin)/12.);
2967     Label16->Caption=mess;
2968     sprintf(mess,"%le",lmin+11.*(lmax-lmin)/12.);
2969     Label17->Caption=mess;
2970     sprintf(mess,"%le",lmin+10.*(lmax-lmin)/12.);
2971     Label18->Caption=mess;
2972     sprintf(mess,"%le",lmin+9.*(lmax-lmin)/12.);
2973     Label19->Caption=mess;
2974     sprintf(mess,"%le",lmin+8.*(lmax-lmin)/12.);
2975     Label20->Caption=mess;
2976     sprintf(mess,"%le",lmin+7.*(lmax-lmin)/12.);
2977     Label21->Caption=mess;
2978     sprintf(mess,"%le",lmin+6.*(lmax-lmin)/12.);
2979     Label22->Caption=mess;
2980     sprintf(mess,"%le",lmin+5.*(lmax-lmin)/12.);
2981     Label23->Caption=mess;
2982     sprintf(mess,"%le",lmin+4.*(lmax-lmin)/12.);
2983     Label24->Caption=mess;
2984     sprintf(mess,"%le",lmin+3.*(lmax-lmin)/12.);
2985     Label25->Caption=mess;
2986     sprintf(mess,"%le",lmin+2.*(lmax-lmin)/12.);
2987     Label26->Caption=mess;
2988     sprintf(mess,"%le",lmin+1.*(lmax-lmin)/12.);
2989     Label27->Caption=mess;
2990     sprintf(mess,"%le",lmin+0.*(lmax-lmin)/12.);
2991     Label28->Caption=mess;
2992     Label29->Caption=ListBox1->Items->Strings[ListBox1->ItemIndex];
2993    
2994     }
2995     //---------------------------------------------------------------------------
2996    
2997     void __fastcall TVisuWinform::CheckBox2Click(TObject *Sender)
2998     {
2999     CheckBox3->Checked=CheckBox2->Checked;
3000     redess();
3001     }
3002     //---------------------------------------------------------------------------
3003    
3004    
3005     void __fastcall TVisuWinform::CheckBox2KeyDown(TObject *Sender, WORD &Key,
3006     TShiftState Shift)
3007     {
3008     transformation(Sender,Key,Shift);
3009     }
3010     //---------------------------------------------------------------------------
3011    
3012     void __fastcall TVisuWinform::ComboBox1KeyDown(TObject *Sender, WORD &Key,
3013     TShiftState Shift)
3014     {
3015     transformation(Sender,Key,Shift);
3016     }
3017     //---------------------------------------------------------------------------
3018    
3019     void __fastcall TVisuWinform::CheckBox1KeyDown(TObject *Sender, WORD &Key,
3020     TShiftState Shift)
3021     {
3022     transformation(Sender,Key,Shift);
3023     }
3024     //---------------------------------------------------------------------------
3025    
3026     void __fastcall TVisuWinform::ListBox1KeyDown(TObject *Sender, WORD &Key,
3027     TShiftState Shift)
3028     {
3029     transformation(Sender,Key,Shift);
3030     }
3031     //---------------------------------------------------------------------------
3032    
3033     void __fastcall TVisuWinform::CheckBox3Click(TObject *Sender)
3034     {
3035     CheckBox2->Checked=CheckBox3->Checked;
3036     redess();
3037     }
3038     //---------------------------------------------------------------------------
3039    
3040    
3041    
3042     void __fastcall TVisuWinform::Temprature2Click(TObject *Sender)
3043     {
3044     ajouterccf("Saisie d'une température","Tp",true,true,true,true,true) ;
3045     }
3046     //---------------------------------------------------------------------------
3047    
3048     void __fastcall TVisuWinform::Montrerlaslection1Click(TObject *Sender)
3049     {
3050 francois 98 if (ColorDialog1->Execute())
3051 5 {
3052 francois 98 TTreeNode* node=TreeView1->Selected;
3053     unsigned long id = atol(node->Text.c_str());
3054     if (id==0) return;
3055     TColor couleur=ColorDialog1->Color;
3056     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
3057     std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.find(id);
3058     if (j!=tabcouleur.end())
3059     tabcouleur.erase(j);
3060     if (j2!=tabnode.end())
3061     tabnode.erase(j2);
3062     tabcouleur[id]=couleur;
3063     tabnode[id]=node;
3064     TreeView1Click(Sender);
3065     Affecterladernirecouleur1->Visible=true;
3066     redess();
3067     ActiveControl=NULL;
3068 5 }
3069    
3070     }
3071     //---------------------------------------------------------------------------
3072    
3073    
3074    
3075 francois 98
3076    
3077 5 void __fastcall TVisuWinform::Mesh9820001Click(TObject *Sender)
3078     {
3079     int nb=gest->get_nb_mg_maillage();
3080     char chaine[500];
3081     for (int i=0;i<nb;i++)
3082     {
3083     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
3084     if (i==0) sprintf(chaine,"Maillage %lu|*.*", mai->get_id());
3085     else
3086     {
3087     char chaine2[200];
3088     sprintf(chaine2,"|Maillage %lu|*.*", mai->get_id());
3089     strcat(chaine,chaine2);
3090     }
3091     }
3092     SaveDialog1->Filter=chaine;
3093     if (SaveDialog1->Execute())
3094     {
3095     MG_MAILLAGE* mai=gest->get_mg_maillage(SaveDialog1->FilterIndex-1);
3096     string namefic=SaveDialog1->FileName.c_str();
3097     mai->exporter_mesh(namefic);
3098    
3099     }
3100     }
3101     //---------------------------------------------------------------------------
3102    
3103     void __fastcall TVisuWinform::Giref1Click(TObject *Sender)
3104     {
3105     int nb=gest->get_nb_mg_maillage();
3106     if (nb==0)
3107     {
3108     MessageBox(Handle,"Pas de maillage","Erreur",MB_OK);
3109     return ;
3110     }
3111     char chaine[500];
3112     for (int i=0;i<nb;i++)
3113     {
3114     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
3115     if (i==0) sprintf(chaine,"Maillage %lu|*.*", mai->get_id());
3116     else
3117     {
3118     char chaine2[200];
3119     sprintf(chaine2,"|Maillage %lu|*.*", mai->get_id());
3120     strcat(chaine,chaine2);
3121     }
3122     }
3123     SaveDialog1->Filter=chaine;
3124     if (SaveDialog1->Execute())
3125     {
3126     MG_MAILLAGE* mai=gest->get_mg_maillage(SaveDialog1->FilterIndex-1);
3127     string namefic=SaveDialog1->FileName.c_str();
3128     mai->exporter_giref(namefic);
3129     }
3130    
3131     }
3132     //---------------------------------------------------------------------------
3133    
3134    
3135    
3136    
3137    
3138     void __fastcall TVisuWinform::ajouterccf(char* cap,char *type,int val,int sommet,int arete,int face,int volume)
3139     {
3140     ccfwinform->Caption=cap;
3141     int nb_geo=gest->get_nb_mg_geometrie();
3142     ccfwinform->ComboBox5->Clear();
3143     ccfwinform->ComboBox1->Clear();
3144     ccfwinform->ComboBox2->Clear();
3145     ccfwinform->ComboBox3->Clear();
3146     ccfwinform->ComboBox4->Clear();
3147     if (sommet)
3148     {
3149     ccfwinform->RadioButton1->Visible=true;
3150     ccfwinform->ComboBox1->Visible=true;
3151     }
3152     else
3153     {
3154     ccfwinform->RadioButton1->Visible=false;
3155     ccfwinform->ComboBox1->Visible=false;
3156     }
3157     if (arete)
3158     {
3159     ccfwinform->RadioButton2->Visible=true;
3160     ccfwinform->ComboBox2->Visible=true;
3161     }
3162     else
3163     {
3164     ccfwinform->RadioButton2->Visible=false;
3165     ccfwinform->ComboBox2->Visible=false;
3166     }
3167     if (face)
3168     {
3169     ccfwinform->RadioButton3->Visible=true;
3170     ccfwinform->ComboBox3->Visible=true;
3171     }
3172     else
3173     {
3174     ccfwinform->RadioButton3->Visible=false;
3175     ccfwinform->ComboBox3->Visible=false;
3176     }
3177     if (volume)
3178     {
3179     ccfwinform->RadioButton4->Visible=true;
3180     ccfwinform->ComboBox4->Visible=true;
3181     }
3182     else
3183     {
3184     ccfwinform->RadioButton4->Visible=false;
3185     ccfwinform->ComboBox4->Visible=false;
3186     }
3187     ccfwinform->CheckBox1->Visible=ccfwinform->ComboBox2->Visible;
3188     ccfwinform->CheckBox2->Visible=ccfwinform->ComboBox3->Visible;
3189     ccfwinform->CheckBox3->Visible=ccfwinform->ComboBox4->Visible;
3190    
3191     for (int i=0;i<nb_geo;i++)
3192     {
3193     MG_GEOMETRIE* mggeo=gest->get_mg_geometrie(i);
3194     char mess[30];
3195     sprintf(mess,"%lu",mggeo->get_id());
3196     ccfwinform->ComboBox5->Items->Add(mess);
3197     }
3198     ccfwinform->active(gest,type);
3199     ccfwinform->Label4->Caption=Caption;
3200     ccfwinform->Edit1->ReadOnly=false;
3201     ccfwinform->Edit1->Text="";
3202     if (val==false)
3203     {
3204     ccfwinform->Edit1->Text="0";
3205     ccfwinform->Edit1->ReadOnly=true;
3206     }
3207     ccfwinform->ShowModal();
3208     }
3209     void __fastcall TVisuWinform::X1Click(TObject *Sender)
3210     {
3211     ajouterccf("Saisie d'un blocage selon l'axe x","Dx",false,true,true,true,true) ;
3212     }
3213     //---------------------------------------------------------------------------
3214    
3215     void __fastcall TVisuWinform::Y1Click(TObject *Sender)
3216     {
3217     ajouterccf("Saisie d'un blocage selon l'axe y","Dy",false,true,true,true,true) ;
3218    
3219     }
3220     //---------------------------------------------------------------------------
3221    
3222     void __fastcall TVisuWinform::Z1Click(TObject *Sender)
3223     {
3224     ajouterccf("Saisie d'un blocage selon l'axe z","Dz",false,true,true,true,true) ;
3225    
3226     }
3227     //---------------------------------------------------------------------------
3228    
3229     void __fastcall TVisuWinform::Tous1Click(TObject *Sender)
3230     {
3231     ajouterccf("Saisie d'un blocage dans toutes les directions","Da",false,true,true,true,true) ;
3232    
3233     }
3234     //---------------------------------------------------------------------------
3235    
3236     void __fastcall TVisuWinform::X2Click(TObject *Sender)
3237     {
3238     ajouterccf("Saisie d'une force selon l'axe x","Fx",true,true,false,false,false) ;
3239    
3240     }
3241     //---------------------------------------------------------------------------
3242    
3243     void __fastcall TVisuWinform::Y2Click(TObject *Sender)
3244     {
3245     ajouterccf("Saisie d'une force selon l'axe y","Fy",true,true,false,false,false) ;
3246    
3247     }
3248     //---------------------------------------------------------------------------
3249    
3250     void __fastcall TVisuWinform::Z2Click(TObject *Sender)
3251     {
3252     ajouterccf("Saisie d'une force selon l'axe z","Fz",true,true,false,false,false) ;
3253    
3254     }
3255     //---------------------------------------------------------------------------
3256    
3257     void __fastcall TVisuWinform::Matriaux1Click(TObject *Sender)
3258     {
3259     Tmatwinform *Child;
3260     Child = new Tmatwinform(Application);
3261     Child->Caption=Caption;
3262     Child->gest=gest;
3263     Child->Label6->Caption=Caption;
3264     Child->ShowModal();
3265     }
3266     //---------------------------------------------------------------------------
3267    
3268    
3269     void __fastcall TVisuWinform::mailleonExecute(TObject *Sender)
3270     {
3271     maille=1;
3272     redess();
3273     }
3274     //---------------------------------------------------------------------------
3275    
3276     void __fastcall TVisuWinform::mailleoffExecute(TObject *Sender)
3277     {
3278     maille=0;
3279     redess();
3280     }
3281     //---------------------------------------------------------------------------
3282    
3283     void __fastcall TVisuWinform::N1D1Click(TObject *Sender)
3284     {
3285     N1D1->Checked=!N1D1->Checked;
3286     noeud=0;
3287     if (N0D1->Checked) noeud=noeud+1;
3288     if (N1D1->Checked) noeud=noeud+2;
3289     if (N2D1->Checked) noeud=noeud+4;
3290     if (N3D1->Checked) noeud=noeud+8;
3291     redess();
3292     }
3293     //---------------------------------------------------------------------------
3294    
3295     void __fastcall TVisuWinform::N2D1Click(TObject *Sender)
3296     {
3297     N2D1->Checked=!N2D1->Checked;
3298     noeud=0;
3299     if (N0D1->Checked) noeud=noeud+1;
3300     if (N1D1->Checked) noeud=noeud+2;
3301     if (N2D1->Checked) noeud=noeud+4;
3302     if (N3D1->Checked) noeud=noeud+8;
3303     redess();
3304     }
3305     //---------------------------------------------------------------------------
3306    
3307     void __fastcall TVisuWinform::N3D1Click(TObject *Sender)
3308     {
3309     N3D1->Checked=!N3D1->Checked;
3310     noeud=0;
3311     if (N0D1->Checked) noeud=noeud+1;
3312     if (N1D1->Checked) noeud=noeud+2;
3313     if (N2D1->Checked) noeud=noeud+4;
3314     if (N3D1->Checked) noeud=noeud+8;
3315     redess();
3316     }
3317     //---------------------------------------------------------------------------
3318    
3319    
3320    
3321     void __fastcall TVisuWinform::Tous2Click(TObject *Sender)
3322     {
3323     N1D1->Checked=true;
3324     N2D1->Checked=true;
3325     N3D1->Checked=true;
3326     noeud=15;
3327     redess();
3328     }
3329     //---------------------------------------------------------------------------
3330    
3331    
3332     void __fastcall TVisuWinform::N1D2Click(TObject *Sender)
3333     {
3334     N1D2->Checked=!N1D2->Checked;
3335     maille=0;
3336     if (N1D2->Checked) maille=maille+1;
3337     if (N2D2->Checked) maille=maille+2;
3338     if (N3D2->Checked) maille=maille+4;
3339     redess();
3340     }
3341     //---------------------------------------------------------------------------
3342    
3343     void __fastcall TVisuWinform::N2D2Click(TObject *Sender)
3344     {
3345     N2D2->Checked=!N2D2->Checked;
3346     maille=0;
3347     if (N1D2->Checked) maille=maille+1;
3348     if (N2D2->Checked) maille=maille+2;
3349     if (N3D2->Checked) maille=maille+4;
3350     redess();
3351     }
3352     //---------------------------------------------------------------------------
3353    
3354     void __fastcall TVisuWinform::N3D2Click(TObject *Sender)
3355     {
3356     N3D2->Checked=!N3D2->Checked;
3357     maille=0;
3358     if (N1D2->Checked) maille=maille+1;
3359     if (N2D2->Checked) maille=maille+2;
3360     if (N3D2->Checked) maille=maille+4;
3361     redess();
3362     }
3363     //---------------------------------------------------------------------------
3364    
3365     void __fastcall TVisuWinform::Tous3Click(TObject *Sender)
3366     {
3367     N1D2->Checked=true;
3368     N2D2->Checked=true;
3369     N3D2->Checked=true;
3370     maille=7;
3371     redess();
3372     }
3373     //---------------------------------------------------------------------------
3374    
3375     void __fastcall TVisuWinform::Aucun1Click(TObject *Sender)
3376     {
3377     N0D1->Checked=false;
3378     N1D1->Checked=false;
3379     N2D1->Checked=false;
3380     N3D1->Checked=false;
3381     noeud=0;
3382     redess();
3383     }
3384     //---------------------------------------------------------------------------
3385    
3386     void __fastcall TVisuWinform::Aucun2Click(TObject *Sender)
3387     {
3388     N1D2->Checked=false;
3389     N2D2->Checked=false;
3390     N3D2->Checked=false;
3391     maille=0;
3392     redess();
3393     }
3394    
3395     //---------------------------------------------------------------------------
3396    
3397     void __fastcall TVisuWinform::X3Click(TObject *Sender)
3398     {
3399     ajouterccf("Saisie d'une pression selon l'axe x","Px",true,false,true,true,false) ;
3400    
3401     }
3402     //---------------------------------------------------------------------------
3403    
3404     void __fastcall TVisuWinform::Y3Click(TObject *Sender)
3405     {
3406     ajouterccf("Saisie d'une pression selon l'axe y","Py",true,false,true,true,false) ;
3407    
3408     }
3409     //---------------------------------------------------------------------------
3410    
3411     void __fastcall TVisuWinform::Z3Click(TObject *Sender)
3412     {
3413     ajouterccf("Saisie d'une pression selon l'axe z","Pz",true,false,true,true,false) ;
3414    
3415     }
3416     //---------------------------------------------------------------------------
3417    
3418     void __fastcall TVisuWinform::Normal1Click(TObject *Sender)
3419     {
3420     ajouterccf("Saisie d'une pression normale","Pn",true,false,false,true,false) ;
3421    
3422     }
3423     //---------------------------------------------------------------------------
3424    
3425    
3426     void __fastcall TVisuWinform::ResultatCosmosM1Click(TObject *Sender)
3427     {
3428     int nb=gest->get_nb_fem_maillage();
3429     if (nb==0)
3430     {
3431     MessageBox(Handle,"Pas de maillage FEM","Erreur",MB_OK);
3432     return ;
3433     }
3434     TCosmosWin *fen=new TCosmosWin(Owner);
3435    
3436     fen->ComboBox1->Clear();
3437     for (int i=0;i<nb;i++)
3438     {
3439     char chaine[500];
3440     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
3441     sprintf(chaine,"%lu", mai->get_id());
3442     fen->ComboBox1->Items->Add(chaine);
3443     }
3444     fen->Label2->Caption=Caption;
3445     fen->changegestionnaire(gest);
3446     fen->Show();
3447     }
3448     //---------------------------------------------------------------------------
3449    
3450    
3451     void __fastcall TVisuWinform::lancerg3dExecute(TObject *Sender)
3452     {
3453     Twincarte *Child;
3454     Child = new Twincarte(Application,*gest);
3455     Child->Caption=Caption;
3456     }
3457     //---------------------------------------------------------------------------
3458    
3459    
3460    
3461     void __fastcall TVisuWinform::TrackBar2Change(TObject *Sender)
3462     {
3463     if (TrackBar2->Position<TrackBar1->Position) TrackBar1->Position=TrackBar2->Position;
3464     ActiveControl=NULL;
3465     redess();
3466     }
3467     //---------------------------------------------------------------------------
3468    
3469     void __fastcall TVisuWinform::TrackBar1Change(TObject *Sender)
3470     {
3471     if (TrackBar2->Position<TrackBar1->Position) TrackBar2->Position=TrackBar1->Position;
3472     ActiveControl=NULL;
3473     redess();
3474     }
3475     //---------------------------------------------------------------------------
3476    
3477     void __fastcall TVisuWinform::TrackBar3Change(TObject *Sender)
3478     {
3479     if (TrackBar4->Position<TrackBar3->Position) TrackBar4->Position=TrackBar3->Position;
3480     ActiveControl=NULL;
3481     redess();
3482     }
3483     //---------------------------------------------------------------------------
3484    
3485     void __fastcall TVisuWinform::TrackBar4Change(TObject *Sender)
3486     {
3487     if (TrackBar4->Position<TrackBar3->Position) TrackBar3->Position=TrackBar4->Position;
3488     ActiveControl=NULL;
3489     redess();
3490    
3491     }
3492     //---------------------------------------------------------------------------
3493    
3494     void __fastcall TVisuWinform::TrackBar5Change(TObject *Sender)
3495     {
3496     if (TrackBar6->Position<TrackBar5->Position) TrackBar6->Position=TrackBar5->Position;
3497     ActiveControl=NULL;
3498     redess();
3499    
3500     }
3501     //---------------------------------------------------------------------------
3502    
3503     void __fastcall TVisuWinform::TrackBar6Change(TObject *Sender)
3504     {
3505     if (TrackBar6->Position<TrackBar5->Position) TrackBar5->Position=TrackBar6->Position;
3506     ActiveControl=NULL;
3507     redess();
3508     }
3509     //---------------------------------------------------------------------------
3510    
3511     void __fastcall TVisuWinform::Button1Click(TObject *Sender)
3512     {
3513     AnsiString InputString = InputBox("Information","Entrez la valeur maximale de la legende ?", "");
3514     double val=atof(InputString.c_str());
3515     if (val>lmin) lmax=val;
3516     dessine_legende();
3517     redess();
3518     }
3519     //---------------------------------------------------------------------------
3520     void __fastcall TVisuWinform::Button2Click(TObject *Sender)
3521     {
3522     AnsiString InputString = InputBox("Information","Entrez la valeur minimale de la legende ?", "");
3523     double val=atof(InputString.c_str());
3524     if (val<lmax) lmin=val;
3525     dessine_legende();
3526     redess();
3527     }
3528     //---------------------------------------------------------------------------
3529    
3530     void __fastcall TVisuWinform::Button3Click(TObject *Sender)
3531     {
3532     PageControl1->Enabled=false;
3533     PageControl2->Visible=true;
3534     TabSheet5->TabVisible=true;
3535     ComboBox2->Clear();
3536     ListBox2->Clear();
3537     Label35->Caption="Champs";
3538     Edit1->Visible=false;
3539     ListBox2->Visible=true;
3540     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
3541     MG_MAILLAGE* mai=NULL;
3542     if (sol!=NULL) mai=sol->get_maillage();
3543     int nb=gest->get_nb_mg_solution();
3544     for (int i=0;i<nb;i++)
3545     {
3546     MG_SOLUTION* sol=gest->get_mg_solution(i);
3547     MG_MAILLAGE* maitmp=sol->get_maillage();
3548     if (maitmp!=mai)
3549     {
3550     ComboBox2->Items->Add("Solution incompatible");
3551     continue;
3552     }
3553     char chaine[1000];
3554     sprintf(chaine,"%s",sol->get_nom().c_str());
3555     ComboBox2->Items->Add(chaine);
3556     }
3557     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
3558     FEM_MAILLAGE* femmai=NULL;
3559     if (femsol!=NULL) femmai=femsol->get_maillage();
3560     nb=gest->get_nb_fem_solution();
3561     for (int i=0;i<nb;i++)
3562     {
3563     FEM_SOLUTION* sol=gest->get_fem_solution(i);
3564     FEM_MAILLAGE* maitmp=sol->get_maillage();
3565     if (maitmp!=femmai)
3566     {
3567     ComboBox2->Items->Add("Solution incompatible");
3568     continue;
3569     }
3570     char chaine[1000];
3571     sprintf(chaine,"%s",sol->get_nom().c_str());
3572     ComboBox2->Items->Add(chaine);
3573     }
3574    
3575     ComboBox2->Items->Add("Constante");
3576     ComboBox2->Items->Add("Fonction");
3577     ListBox3->Clear();
3578     char chaine[100];
3579     sprintf(chaine,"%s@%s",ListBox1->Items->Strings[ListBox1->ItemIndex].c_str(),ComboBox1->Text.c_str());
3580     ListBox3->Items->Add(chaine);
3581     }
3582     //---------------------------------------------------------------------------
3583    
3584     void __fastcall TVisuWinform::Button4Click(TObject *Sender)
3585     {
3586     PageControl2->Visible=false;
3587     TabSheet5->TabVisible=false;
3588     PageControl1->Enabled=true;
3589     }
3590     //---------------------------------------------------------------------------
3591    
3592     void __fastcall TVisuWinform::Button5Click(TObject *Sender)
3593     {
3594     PageControl2->Visible=false;
3595     TabSheet5->TabVisible=false;
3596     PageControl1->Enabled=true;
3597     TabSheet6->TabVisible=true;
3598     TabSheet2->TabVisible=false;
3599     PageControl1->ActivePage=TabSheet6;
3600     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox2->ItemIndex);
3601     if (((ListBox2->ItemIndex!=-1) || (ComboBox2->Text=="Constante") || (ComboBox2->Text=="Fonction") )&& (ComboBox3->Text!=""))
3602     {
3603     if (gest->get_mg_solution(ComboBox1->ItemIndex)!=NULL)
3604     {
3605     MG_MAILLAGE* mai=gest->get_mg_solution(ComboBox1->ItemIndex)->get_maillage();
3606     int nb=mai->get_nb_mg_noeud();
3607     lmin=1e308;
3608     lmax=-1e308;
3609     for (int i=0;i<nb;i++)
3610     {
3611     MG_NOEUD* noeud=mai->get_mg_noeud(i);
3612     double val=noeud->get_solution();
3613     double val2;
3614     if (ComboBox2->Text=="Constante") val2=atof(Edit1->Text.c_str()); else if (ComboBox2->Text!="Fonction") val2=sol->lire(i,ListBox2->ItemIndex);
3615     if (ComboBox3->Text=="+") val=val+val2;
3616     if (ComboBox3->Text=="-") val=val-val2;
3617     if (ComboBox3->Text=="*") val=val*val2;
3618     if (ComboBox3->Text=="/")
3619     if (fabs(val2)>1e-10) val=val/val2; else val=val/fabs(val)*1e308;
3620     if (ComboBox3->Text=="|x|") val=fabs(val);
3621     if (val<lmin) lmin=val;
3622     if (val>lmax) lmax=val;
3623     noeud->change_solution(val);
3624     }
3625     if (!(lmax>lmin)) lmax=lmin+1e-6;
3626     char chaine[100];
3627     if (ComboBox3->Text=="|x|") strcpy(chaine,"|x|");
3628     else if (ComboBox2->Text=="Constante") sprintf(chaine,"%s %s",ComboBox3->Text.c_str(),Edit1->Text.c_str());
3629     else sprintf(chaine,"%s %s@%s",ComboBox3->Text.c_str(),ListBox2->Items->Strings[ListBox2->ItemIndex].c_str(),ComboBox2->Text.c_str());
3630     ListBox3->Items->Add(chaine);
3631     dessine_legende();
3632     redess();
3633     }
3634     }
3635     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox2->ItemIndex-gest->get_nb_mg_solution());
3636     if (((ListBox2->ItemIndex!=-1) || (ComboBox2->Text=="Constante") || (ComboBox2->Text=="Fonction") )&& (ComboBox3->Text!="") )
3637     {
3638     if (gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution())!=NULL)
3639     {
3640     FEM_MAILLAGE* mai=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution())->get_maillage();
3641     int nb=mai->get_nb_fem_noeud();
3642     lmin=1e308;
3643     lmax=-1e308;
3644     for (int i=0;i<nb;i++)
3645     {
3646     FEM_NOEUD* noeud=mai->get_fem_noeud(i);
3647     double val=noeud->get_solution();
3648     double val2;
3649     if (ComboBox2->Text=="Constante") val2=atof(Edit1->Text.c_str()); else if (ComboBox2->Text!="Fonction") val2=femsol->lire(i,ListBox2->ItemIndex);
3650     if (ComboBox3->Text=="+") val=val+val2;
3651     if (ComboBox3->Text=="-") val=val-val2;
3652     if (ComboBox3->Text=="*") val=val*val2;
3653     if (ComboBox3->Text=="/")
3654     if (fabs(val2)>1e-10) val=val/val2; else val=val/fabs(val)*1e308;
3655     if (ComboBox3->Text=="|x|") val=fabs(val);
3656     if (val<lmin) lmin=val;
3657     if (val>lmax) lmax=val;
3658     noeud->change_solution(val);
3659     }
3660     if (!(lmax>lmin)) lmax=lmin+1e-6;
3661     char chaine[100];
3662     if (ComboBox3->Text=="|x|") strcpy(chaine,"|x|");
3663     else if (ComboBox2->Text=="Constante") sprintf(chaine,"%s %s",ComboBox3->Text.c_str(),Edit1->Text.c_str());
3664     else sprintf(chaine,"%s %s@%s",ComboBox3->Text.c_str(),ListBox2->Items->Strings[ListBox2->ItemIndex].c_str(),ComboBox2->Text.c_str());
3665     ListBox3->Items->Add(chaine);
3666     dessine_legende();
3667     redess();
3668     }
3669     }
3670    
3671     }
3672     //---------------------------------------------------------------------------
3673    
3674     void __fastcall TVisuWinform::ComboBox2Change(TObject *Sender)
3675     {
3676     ComboBox3->Clear();
3677     ComboBox3->Items->Add("+");
3678     ComboBox3->Items->Add("-");
3679     ComboBox3->Items->Add("*");
3680     ComboBox3->Items->Add("/");
3681     if (ComboBox2->Text=="Solution incompatible")
3682     {
3683     ComboBox2->ItemIndex=-1;
3684     return;
3685     }
3686     if (ComboBox2->Text=="Fonction")
3687     {
3688     ComboBox3->Clear();
3689     ComboBox3->Items->Add("|x|");
3690     return;
3691     }
3692     if (ComboBox2->Text=="Constante")
3693     {
3694     ListBox2->Visible=false;
3695     Label35->Caption="Valeur";
3696     Edit1->Visible=true;
3697     return;
3698     }
3699     Label35->Caption="Champs";
3700     Edit1->Visible=false;
3701     ListBox2->Visible=true;
3702     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox2->ItemIndex);
3703     if (sol!=NULL)
3704     {
3705     ListBox2->Clear();
3706     int nb=sol->get_nb_champ();
3707     for (int i=0;i<nb;i++)
3708     ListBox2->Items->Add(sol->get_legende(i).c_str());
3709     }
3710     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox2->ItemIndex-gest->get_nb_mg_solution());
3711     if (femsol!=NULL)
3712     {
3713     ListBox2->Clear();
3714     int nb=femsol->get_nb_champ();
3715     for (int i=0;i<nb;i++)
3716     ListBox2->Items->Add(femsol->get_legende(i).c_str());
3717     }
3718    
3719     }
3720     //---------------------------------------------------------------------------
3721    
3722     void __fastcall TVisuWinform::Button6Click(TObject *Sender)
3723     {
3724     PageControl1->Enabled=false;
3725     PageControl2->Visible=true;
3726     TabSheet5->TabVisible=true;
3727     ComboBox2->Clear();
3728     ListBox2->Clear();
3729     Label35->Caption="Champs";
3730     Edit1->Visible=false;
3731     ListBox2->Visible=true;
3732     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
3733     MG_MAILLAGE* mai=NULL;
3734     if (sol!=NULL) mai=sol->get_maillage();
3735     int nb=gest->get_nb_mg_solution();
3736     for (int i=0;i<nb;i++)
3737     {
3738     MG_SOLUTION* sol=gest->get_mg_solution(i);
3739     MG_MAILLAGE* maitmp=sol->get_maillage();
3740     if (maitmp!=mai)
3741     {
3742     ComboBox2->Items->Add("Solution incompatible");
3743     continue;
3744     }
3745     char chaine[1000];
3746     sprintf(chaine,"%s",sol->get_nom().c_str());
3747     ComboBox2->Items->Add(chaine);
3748     }
3749     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
3750     FEM_MAILLAGE* femmai=NULL;
3751     if (femsol!=NULL) femmai=femsol->get_maillage();
3752     nb=gest->get_nb_fem_solution();
3753     for (int i=0;i<nb;i++)
3754     {
3755     FEM_SOLUTION* femsol=gest->get_fem_solution(i);
3756     FEM_MAILLAGE* maitmp=femsol->get_maillage();
3757     if (maitmp!=femmai)
3758     {
3759     ComboBox2->Items->Add("Solution incompatible");
3760     continue;
3761     }
3762     char chaine[1000];
3763     sprintf(chaine,"%s",femsol->get_nom().c_str());
3764     ComboBox2->Items->Add(chaine);
3765     }
3766     ComboBox2->Items->Add("Constante");
3767     ComboBox2->Items->Add("Fonction");
3768     }
3769     //---------------------------------------------------------------------------
3770    
3771     void __fastcall TVisuWinform::Button7Click(TObject *Sender)
3772     {
3773     TabSheet2->TabVisible=true;
3774     MG_SOLUTION* sol=gest->get_mg_solution(ComboBox1->ItemIndex);
3775     if (sol!=NULL)
3776     {
3777     sol->active_solution(ListBox1->ItemIndex);
3778     lmin=sol->get_legende_min();
3779     lmax=sol->get_legende_max();
3780     }
3781     FEM_SOLUTION* femsol=gest->get_fem_solution(ComboBox1->ItemIndex-gest->get_nb_mg_solution());
3782     if (femsol!=NULL)
3783     {
3784     femsol->active_solution(ListBox1->ItemIndex);
3785     lmin=femsol->get_legende_min();
3786     lmax=femsol->get_legende_max();
3787     }
3788     TabSheet6->TabVisible=false;
3789     PageControl1->ActivePage=TabSheet2;
3790     dessine_legende();
3791     redess();
3792     }
3793     //---------------------------------------------------------------------------
3794    
3795    
3796     void __fastcall TVisuWinform::Vu1Click(TObject *Sender)
3797     {
3798     Tvisupara *Child;
3799     Child = new Tvisupara(Application);
3800     Child->gest=gest;
3801     int nbmai=gest->get_nb_mg_maillage();
3802     for (int i=0;i<nbmai;i++)
3803     {
3804     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
3805     long id=mai->get_id();
3806     Child->ListBox1->Items->Add(id);
3807     }
3808     int nbgeo=gest->get_nb_mg_geometrie();
3809     for (int i=0;i<nbgeo;i++)
3810     {
3811     MG_GEOMETRIE* geo=gest->get_mg_geometrie(i);
3812     long id=geo->get_id();
3813     Child->ListBox3->Items->Add(id);
3814     }
3815     Child->Caption=Caption;
3816     }
3817     //---------------------------------------------------------------------------
3818    
3819     void __fastcall TVisuWinform::X4Click(TObject *Sender)
3820     {
3821     ajouterccf("Saisie d'un déplacement imposé selon l'axe x","Dx",true,true,true,true,false) ;
3822     }
3823     //---------------------------------------------------------------------------
3824    
3825     void __fastcall TVisuWinform::Y4Click(TObject *Sender)
3826     {
3827     ajouterccf("Saisie d'un déplacement imposé selon l'axe y","Dy",true,true,true,true,false) ;
3828     }
3829     //---------------------------------------------------------------------------
3830    
3831     void __fastcall TVisuWinform::Z4Click(TObject *Sender)
3832     {
3833     ajouterccf("Saisie d'un déplacement imposé selon l'axe z","Dz",true,true,true,true,false) ;
3834     }
3835     //---------------------------------------------------------------------------
3836    
3837    
3838    
3839     void __fastcall TVisuWinform::Resolution1Click(TObject *Sender)
3840     {
3841     Tfsolve *fsolve=new Tfsolve(Application,gest);
3842     fsolve->Caption=Caption;
3843     fsolve->ComboBox1->Clear();
3844     int nbmai=gest->get_nb_mg_maillage();
3845     for (int i=0;i<nbmai;i++)
3846     {
3847     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
3848     fsolve->ComboBox1->Items->Add(mai->get_id());
3849     }
3850     fsolve->Show();
3851     }
3852     //---------------------------------------------------------------------------
3853    
3854     //---------------------------------------------------------------------------
3855     void __fastcall TVisuWinform::dessinemaifem(void)
3856     {
3857     glLineWidth(1.);
3858     double x1=boite.get_xmin()+TrackBar1->Position*(boite.get_xmax()-boite.get_xmin())/100.;
3859     double y1=boite.get_ymin()+TrackBar3->Position*(boite.get_ymax()-boite.get_ymin())/100.;
3860     double z1=boite.get_zmin()+TrackBar5->Position*(boite.get_zmax()-boite.get_zmin())/100.;
3861     double x2=boite.get_xmin()+TrackBar2->Position*(boite.get_xmax()-boite.get_xmin())/100.;
3862     double y2=boite.get_ymin()+TrackBar4->Position*(boite.get_ymax()-boite.get_ymin())/100.;
3863     double z2=boite.get_zmin()+TrackBar6->Position*(boite.get_zmax()-boite.get_zmin())/100.;
3864     double dx=(x2-x1)*1.01;
3865     double dy=(y2-y1)*1.01;
3866     double dz=(z2-z1)*1.01;
3867     double xm=(x1+x2)/2.;
3868     x1=xm-dx/2.;x2=xm+dx/2.;
3869     double ym=(y1+y2)/2.;
3870     y1=ym-dy/2.;y2=ym+dy/2.;
3871     double zm=(z1+z2)/2.;
3872     z1=zm-dz/2.;z2=zm+dz/2.;
3873     BOITE_3D boite2(x1,y1,z1,x2+1e-8,y2+1e-8,z2+1e-8);
3874    
3875     if (noeud)
3876     {
3877     glColor3f(MainForm->valeurconfig[30],MainForm->valeurconfig[31],MainForm->valeurconfig[32]);
3878     glPointSize(MainForm->valeurconfig[33]);
3879     glBegin(GL_POINTS);
3880     int nb=lst_noeud_fem.size();
3881     for (int i=0;i<nb;i++)
3882     {
3883     FEM_NOEUD* noeud1=lst_noeud_fem[i];
3884 francois 56 if (N12->Checked)
3885     if (!estdansfiltre(noeud1->get_id())) continue;
3886 francois 62 if (CheckListBox1->Checked[(noeud1->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
3887 5 BOITE_3D boitmp=noeud1->get_boite_3D();
3888     if (!(boitmp*boite2)) continue;
3889     int dim;
3890     if (noeud1->get_lien_topologie()==NULL) dim=-1;
3891     else dim=noeud1->get_lien_topologie()->get_dimension();
3892     /*if (dim==0) dim=1;
3893     dim--;*/
3894     if (dim>-1)
3895     {
3896     int binoeud[4];
3897     binoeud[0]=noeud%2;
3898     binoeud[1]=(noeud/2)%2;
3899     binoeud[2]=(noeud/4)%2;
3900     binoeud[3]=(noeud/8)%2;
3901     if (binoeud[dim])
3902     {
3903     double *xyz1=noeud1->get_coord();
3904     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
3905     }
3906     }
3907     else
3908     {
3909     double *xyz1=noeud1->get_coord();
3910     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
3911     }
3912     }
3913     glEnd();
3914     if (affnoeud)
3915     {
3916     for (int i=0;i<nb;i++)
3917     {
3918     FEM_NOEUD* noeud1=lst_noeud_fem[i];
3919 francois 56 if (N12->Checked)
3920     if (!estdansfiltre(noeud1->get_id())) continue;
3921 francois 62 if (CheckListBox1->Checked[(noeud1->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
3922 5 BOITE_3D boitmp=noeud1->get_boite_3D();
3923     if (!(boitmp*boite2)) continue;
3924     int dim;
3925     if (noeud1->get_lien_topologie()==NULL) dim=-1;
3926     else dim=noeud1->get_lien_topologie()->get_dimension();
3927     /*if (dim==0) dim=1;
3928     dim--;*/
3929     int binoeud[4];
3930     binoeud[0]=noeud%2;
3931     binoeud[1]=(noeud/2)%2;
3932     binoeud[2]=(noeud/4)%2;
3933     binoeud[3]=(noeud/8)%2;
3934     if (dim>-1)
3935     {
3936     if (binoeud[dim])
3937     {
3938     char mess[30];
3939     if (Id1->Checked)
3940     {
3941     unsigned long id=noeud1->get_id();
3942     sprintf(mess,"%lu",id);
3943     }
3944     if (Numero1->Checked)
3945     {
3946     int num=noeud1->get_numero();
3947     sprintf(mess,"%d",num);
3948     }
3949     if (NumeroOptimise1->Checked)
3950     {
3951     int num=noeud1->get_numero_opt();
3952     sprintf(mess,"%d",num);
3953     }
3954     double *xyz=noeud1->get_coord();
3955     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
3956     glListBase (1000);
3957     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
3958     }
3959    
3960     }
3961     else
3962     {
3963     double *xyz=noeud1->get_coord();
3964     char mess[30];
3965     if (Id1->Checked)
3966     {
3967     unsigned long id=noeud1->get_id();
3968     sprintf(mess,"%lu",id);
3969     }
3970     if (Numero1->Checked)
3971     {
3972     int num=noeud1->get_numero();
3973     sprintf(mess,"%d",num);
3974     }
3975     if (NumeroOptimise1->Checked)
3976     {
3977     int num=noeud1->get_numero_opt();
3978     sprintf(mess,"%d",num);
3979     }
3980     glRasterPos3f(xyz[0],xyz[1],xyz[2]);
3981     glListBase (1000);
3982     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
3983     }
3984     }
3985    
3986     }
3987     }
3988     int bmaille[3];
3989     bmaille[0]=maille%2;
3990     bmaille[1]=(maille/2)%2;
3991     bmaille[2]=(maille/4)%2;
3992     if (bmaille[0])
3993     {
3994     glLineWidth(MainForm->valeurconfig[17]);
3995     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
3996     glBegin(GL_LINES);
3997     int nb=lst_segment_fem.size();
3998     for (int i=0;i<nb;i++)
3999     {
4000     glColor3f(MainForm->valeurconfig[14],MainForm->valeurconfig[15],MainForm->valeurconfig[16]);
4001     FEM_SEGMENT* femsegment=lst_segment_fem[i];
4002 francois 56 if (N12->Checked)
4003     if (!estdansfiltre(femsegment->get_id())) continue;
4004 francois 62 if (CheckListBox1->Checked[(femsegment->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4005 5 BOITE_3D boitmp=femsegment->get_boite_3D();
4006     if (!(boitmp*boite2)) continue;
4007     int nbnoeud=femsegment->get_nb_fem_noeud();
4008     FEM_NOEUD* noeud1=femsegment->get_fem_noeud(0);
4009     FEM_NOEUD* noeud2=femsegment->get_fem_noeud(1);
4010     double *xyz1=noeud1->get_coord();
4011     double *xyz2=noeud2->get_coord();
4012 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
4013     TColor coul;
4014     if (femsegment->get_lien_topologie()!=NULL)
4015     {
4016     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(femsegment->get_lien_topologie()->get_id());
4017     if (j!=tabcouleur.end())
4018     {
4019     toposel=femsegment->get_lien_topologie();
4020     coul=tabcouleur[femsegment->get_lien_topologie()->get_id()];
4021     }
4022     }
4023 5 if ((femsegment->get_lien_topologie()==toposel) && (femsegment->get_lien_topologie()!=NULL) )
4024 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
4025 francois 56 if (qualite==2)
4026     {
4027     int pos=(int) ((femsegment->get_mg_element_maillage()->get_origine()-1000)/10);
4028 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4029    
4030 francois 56 }
4031 5 if (CheckBox1->Checked==true)
4032     {
4033     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
4034     if (pos>11) pos=11;
4035     if (pos<0) pos=0;
4036     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4037     }
4038     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4039     if (CheckBox1->Checked==true)
4040     {
4041     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
4042     if (pos>11) pos=11;
4043     if (pos<0) pos=0;
4044     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4045     }
4046     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4047     if (nbnoeud==3)
4048     {
4049     FEM_NOEUD* noeud1=femsegment->get_fem_noeud(1);
4050     FEM_NOEUD* noeud2=femsegment->get_fem_noeud(2);
4051     double *xyz1=noeud1->get_coord();
4052     double *xyz2=noeud2->get_coord();
4053     if ((femsegment->get_lien_topologie()==toposel) && (femsegment->get_lien_topologie()!=NULL) )
4054 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
4055 5 if (CheckBox1->Checked==true)
4056     {
4057     int pos=(int) ((noeud1->get_solution()-lmin)*12./(lmax-lmin));
4058     if (pos>11) pos=11;
4059     if (pos<0) pos=0;
4060     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4061     }
4062     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4063     if (CheckBox1->Checked==true)
4064     {
4065     int pos=(int) ((noeud2->get_solution()-lmin)*12./(lmax-lmin));
4066     if (pos>11) pos=11;
4067     if (pos<0) pos=0;
4068     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4069     }
4070     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4071     }
4072     }
4073     glEnd();
4074    
4075     if (affmaille)
4076     {
4077     for (int i=0;i<nb;i++)
4078     {
4079     FEM_SEGMENT* femsegment=lst_segment_fem[i];
4080 francois 56 if (N12->Checked)
4081     if (!estdansfiltre(femsegment->get_id())) continue;
4082 francois 62 if (CheckListBox1->Checked[(femsegment->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4083 5 BOITE_3D boitmp=femsegment->get_boite_3D();
4084     if (!(boitmp*boite2)) continue;
4085 francois 56 if (qualite==2)
4086 francois 62 {
4087     int pos=(int) ((femsegment->get_mg_element_maillage()->get_origine()-1000)/10);
4088     glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4089    
4090 francois 56 }
4091 5 FEM_NOEUD* noeud1=femsegment->get_fem_noeud(0);
4092     FEM_NOEUD* noeud2=femsegment->get_fem_noeud(femsegment->get_nb_fem_noeud()-1);
4093     unsigned long id=femsegment->get_id();
4094     double *xyz1=noeud1->get_coord();
4095     double *xyz2=noeud2->get_coord();
4096     char mess[30];
4097     sprintf(mess,"%lu",id);
4098     glRasterPos3f(0.5*(xyz1[0]+xyz2[0]),0.5*(xyz1[1]+xyz2[1]),0.5*(xyz1[2]+xyz2[2]));
4099     glListBase (1000);
4100     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
4101     }
4102     }
4103     }
4104    
4105     //triangle
4106     if (bmaille[1])
4107     {
4108     if (render>0)
4109     {
4110     if (render>1) InitShading();
4111     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
4112     glEnable(GL_DEPTH_TEST);
4113     glEnable(GL_POLYGON_OFFSET_FILL);
4114     glPolygonOffset(1.0,1.0);
4115     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
4116     glBegin(GL_TRIANGLES);
4117     glEdgeFlag(GL_TRUE);
4118     int nb=lst_triangle_fem.size();
4119     for (int i=0;i<nb;i++)
4120     {
4121     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
4122     FEM_TRIANGLE* femtri=lst_triangle_fem[i];
4123 francois 56 if (N12->Checked)
4124     if (!estdansfiltre(femtri->get_id())) continue;
4125 francois 62 if (CheckListBox1->Checked[(femtri->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4126 5 BOITE_3D boitmp=femtri->get_boite_3D();
4127     if (!(boitmp*boite2)) continue;
4128     int nbfemnoeud=femtri->get_nb_fem_noeud();
4129     if (nbfemnoeud==3) dessinetrifem(femtri,femtri->get_fem_noeud(0),femtri->get_fem_noeud(1),femtri->get_fem_noeud(2));
4130     if (nbfemnoeud==6)
4131     {
4132     dessinetrifem(femtri,femtri->get_fem_noeud(0),femtri->get_fem_noeud(1),femtri->get_fem_noeud(5));
4133     dessinetrifem(femtri,femtri->get_fem_noeud(1),femtri->get_fem_noeud(2),femtri->get_fem_noeud(3));
4134     dessinetrifem(femtri,femtri->get_fem_noeud(1),femtri->get_fem_noeud(3),femtri->get_fem_noeud(5));
4135     dessinetrifem(femtri,femtri->get_fem_noeud(5),femtri->get_fem_noeud(3),femtri->get_fem_noeud(4));
4136     }
4137     }
4138     glEnd();
4139     }
4140    
4141     glFlush();
4142     if (render>0)
4143     {
4144     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
4145     glLineWidth(MainForm->valeurconfig[40]);
4146     if (render>1) InitShading();
4147     }
4148     else
4149     {
4150     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
4151     glLineWidth(MainForm->valeurconfig[21]);
4152     }
4153     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
4154     glBegin(GL_LINES);
4155     glEdgeFlag(GL_TRUE);
4156     int nb=lst_triangle_fem.size();
4157     for (int i=0;i<nb;i++)
4158     {
4159     if (render>0)
4160     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
4161     else
4162     glColor3f(MainForm->valeurconfig[18],MainForm->valeurconfig[19],MainForm->valeurconfig[20]);
4163     FEM_TRIANGLE* femtri=lst_triangle_fem[i];
4164 francois 56 if (N12->Checked)
4165     if (!estdansfiltre(femtri->get_id())) continue;
4166 francois 62 if (CheckListBox1->Checked[(femtri->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4167 5 BOITE_3D boitmp=femtri->get_boite_3D();
4168     if (!(boitmp*boite2)) continue;
4169     int nb_fem_noeud=femtri->get_nb_fem_noeud();
4170     double xg=0.;
4171     double yg=0.;
4172     double zg=0.;
4173     for (int j=0;j<nb_fem_noeud;j++)
4174     {
4175     FEM_NOEUD* no=femtri->get_fem_noeud(j);
4176     xg=xg+no->get_x();
4177     yg=yg+no->get_y();
4178     zg=zg+no->get_z();
4179     }
4180     xg=xg/nb_fem_noeud;
4181     yg=yg/nb_fem_noeud;
4182     zg=zg/nb_fem_noeud;
4183     for (int j=0;j<nb_fem_noeud;j++)
4184     {
4185     FEM_NOEUD* no1=femtri->get_fem_noeud(j);
4186     FEM_NOEUD* no2;
4187     if (j+1!=nb_fem_noeud) no2=femtri->get_fem_noeud(j+1); else no2=femtri->get_fem_noeud(0);
4188     double *xyz1=no1->get_coord();
4189     double *xyz2=no2->get_coord();
4190 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
4191     TColor coul;
4192     if (femtri->get_lien_topologie()!=NULL)
4193     {
4194     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(femtri->get_lien_topologie()->get_id());
4195     if (j!=tabcouleur.end())
4196     {
4197     toposel=femtri->get_lien_topologie();
4198     coul=tabcouleur[femtri->get_lien_topologie()->get_id()];
4199     }
4200     }
4201 5 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.)))
4202 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
4203 francois 56 if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4204     {
4205     double qual;
4206     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());
4207     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());
4208     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4209     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4210     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4211     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4212     }
4213     if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4214     {
4215     int pos=(int) ((femtri->get_mg_element_maillage()->get_origine()-1000)/10);
4216 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4217 francois 56 }
4218 5 if (shrink)
4219     {
4220     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4221     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4222     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4223     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4224     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4225     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4226     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4227     {
4228     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4229     if (pos>11) pos=11;
4230     if (pos<0) pos=0;
4231     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4232     }
4233     glVertex3f(x1,y1,z1);
4234     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4235     {
4236     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4237     if (pos>11) pos=11;
4238     if (pos<0) pos=0;
4239     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4240     }
4241     glVertex3f(x2,y2,z2);
4242    
4243     }
4244     else
4245     {
4246     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4247     {
4248     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4249     if (pos>11) pos=11;
4250     if (pos<0) pos=0;
4251     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4252     }
4253     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4254     if ((CheckBox1->Checked==true) && ( (CheckBox2->Checked==false) || ( (CheckBox2->Checked==true) && (render==0) )) )
4255     {
4256     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4257     if (pos>11) pos=11;
4258     if (pos<0) pos=0;
4259     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4260     }
4261     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4262     }
4263     }
4264     }
4265     glEnd();
4266     if (affmaille)
4267     {
4268     for (int i=0;i<nb;i++)
4269     {
4270     FEM_TRIANGLE* femtri=lst_triangle_fem[i];
4271 francois 56 if (N12->Checked)
4272     if (!estdansfiltre(femtri->get_id())) continue;
4273 francois 62 if (CheckListBox1->Checked[(femtri->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4274 5 BOITE_3D boitmp=femtri->get_boite_3D();
4275     if (!(boitmp*boite2)) continue;
4276     int n1,n2,n3;
4277     int nb=femtri->get_nb_fem_noeud();
4278     if (nb==3) {n1=0;n2=1;n3=2;}
4279     if (nb==6) {n1=0;n2=2;n3=4;}
4280     FEM_NOEUD* noeud1=femtri->get_fem_noeud(n1);
4281     FEM_NOEUD* noeud2=femtri->get_fem_noeud(n2);
4282     FEM_NOEUD* noeud3=femtri->get_fem_noeud(n3);
4283     double *xyz1=noeud1->get_coord();
4284     double *xyz2=noeud2->get_coord();
4285     double *xyz3=noeud3->get_coord();
4286     unsigned long id=femtri->get_id();
4287     char mess[30];
4288     sprintf(mess,"%lu",id);
4289     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4290     {
4291     double qual=OPERATEUR::qualite_triangle(xyz1,xyz2,xyz3);
4292     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4293     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4294     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4295     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4296     }
4297 francois 56 if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4298     {
4299     int pos=(int) ((femtri->get_mg_element_maillage()->get_origine()-1000)/10);
4300 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4301 francois 56 }
4302     glRasterPos3f((xyz1[0]+xyz2[0]+xyz3[0])/3.,(xyz1[1]+xyz2[1]+xyz3[1])/3.,(xyz1[2]+xyz2[2]+xyz3[2])/3.);
4303 5 glListBase (1000);
4304     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
4305     }
4306     }
4307     if (render==2)
4308     {
4309     glDisable(GL_LIGHTING);
4310     glDisable(GL_LIGHT0);
4311     glDisable(GL_LIGHT1);
4312     }
4313     }
4314     //tetra
4315     if (bmaille[2])
4316     {
4317     if (render==1)
4318     {
4319     glColor3f(MainForm->valeurconfig[34],MainForm->valeurconfig[35],MainForm->valeurconfig[36]);
4320     glEnable(GL_DEPTH_TEST);
4321     glEnable(GL_POLYGON_OFFSET_FILL);
4322     glPolygonOffset(1.0,1.0);
4323     glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
4324     glBegin(GL_TRIANGLES);
4325     glEdgeFlag(GL_TRUE);
4326     int nb=lst_tetra_fem.size();
4327     for (int i=0;i<nb;i++)
4328     {
4329     FEM_TETRA* femtet=lst_tetra_fem[i];
4330 francois 56 if (N12->Checked)
4331     if (!estdansfiltre(femtet->get_id())) continue;
4332 francois 62 if (CheckListBox1->Checked[(femtet->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4333 5 BOITE_3D boitmp=femtet->get_boite_3D();
4334     if (!(boitmp*boite2)) continue;
4335     int nb_noeud=femtet->get_nb_fem_noeud();
4336     if (nb_noeud==4)
4337     {
4338     dessinetritetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1),femtet->get_fem_noeud(2));
4339     dessinetritetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1),femtet->get_fem_noeud(3));
4340     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4341     dessinetritetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(0),femtet->get_fem_noeud(3));
4342     }
4343     if (nb_noeud==10)
4344     {
4345     dessinetritetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1),femtet->get_fem_noeud(5));
4346     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4347     dessinetritetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(4),femtet->get_fem_noeud(5));
4348     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(3),femtet->get_fem_noeud(5));
4349     dessinetritetfem(femtet,femtet->get_fem_noeud(9),femtet->get_fem_noeud(7),femtet->get_fem_noeud(6));
4350     dessinetritetfem(femtet,femtet->get_fem_noeud(7),femtet->get_fem_noeud(2),femtet->get_fem_noeud(1));
4351     dessinetritetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(0),femtet->get_fem_noeud(6));
4352     dessinetritetfem(femtet,femtet->get_fem_noeud(7),femtet->get_fem_noeud(1),femtet->get_fem_noeud(6));
4353     dessinetritetfem(femtet,femtet->get_fem_noeud(9),femtet->get_fem_noeud(8),femtet->get_fem_noeud(7));
4354     dessinetritetfem(femtet,femtet->get_fem_noeud(8),femtet->get_fem_noeud(4),femtet->get_fem_noeud(3));
4355     dessinetritetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(2),femtet->get_fem_noeud(7));
4356     dessinetritetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(7),femtet->get_fem_noeud(8));
4357     dessinetritetfem(femtet,femtet->get_fem_noeud(9),femtet->get_fem_noeud(6),femtet->get_fem_noeud(8));
4358     dessinetritetfem(femtet,femtet->get_fem_noeud(6),femtet->get_fem_noeud(0),femtet->get_fem_noeud(5));
4359     dessinetritetfem(femtet,femtet->get_fem_noeud(5),femtet->get_fem_noeud(4),femtet->get_fem_noeud(8));
4360     dessinetritetfem(femtet,femtet->get_fem_noeud(5),femtet->get_fem_noeud(8),femtet->get_fem_noeud(6));
4361     }
4362     }
4363     glEnd();
4364     }
4365    
4366     glFlush();
4367     if (render==1)
4368     {
4369     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
4370     glLineWidth(MainForm->valeurconfig[40]);
4371     }
4372     else
4373     {
4374     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
4375     glLineWidth(MainForm->valeurconfig[25]);
4376     }
4377     glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
4378     glBegin(GL_LINES);
4379     glEdgeFlag(GL_TRUE);
4380     int nb=lst_tetra_fem.size();
4381     for (int i=0;i<nb;i++)
4382     {
4383     if (render==1)
4384     glColor3f(MainForm->valeurconfig[37],MainForm->valeurconfig[38],MainForm->valeurconfig[39]);
4385     else
4386     glColor3f(MainForm->valeurconfig[22],MainForm->valeurconfig[23],MainForm->valeurconfig[24]);
4387     FEM_TETRA* femtet=lst_tetra_fem[i];
4388     BOITE_3D boitmp=femtet->get_boite_3D();
4389 francois 56 if (N12->Checked)
4390     if (!estdansfiltre(femtet->get_id())) continue;
4391 francois 62 if (CheckListBox1->Checked[(femtet->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4392 5 if (!(boitmp*boite2)) continue;
4393     int nb_noeud=femtet->get_nb_fem_noeud();
4394     if (nb_noeud==4)
4395     {
4396     dessinesegtetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1));
4397     dessinesegtetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2));
4398     dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4399     dessinesegtetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(0));
4400 francois 56 dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(0));
4401     dessinesegtetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(1));
4402 5 }
4403     if (nb_noeud==10)
4404     {
4405     dessinesegtetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(1));
4406     dessinesegtetfem(femtet,femtet->get_fem_noeud(1),femtet->get_fem_noeud(2));
4407     dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(3));
4408     dessinesegtetfem(femtet,femtet->get_fem_noeud(3),femtet->get_fem_noeud(4));
4409     dessinesegtetfem(femtet,femtet->get_fem_noeud(4),femtet->get_fem_noeud(5));
4410     dessinesegtetfem(femtet,femtet->get_fem_noeud(5),femtet->get_fem_noeud(0));
4411     dessinesegtetfem(femtet,femtet->get_fem_noeud(0),femtet->get_fem_noeud(6));
4412     dessinesegtetfem(femtet,femtet->get_fem_noeud(6),femtet->get_fem_noeud(9));
4413     dessinesegtetfem(femtet,femtet->get_fem_noeud(2),femtet->get_fem_noeud(7));
4414     dessinesegtetfem(femtet,femtet->get_fem_noeud(7),femtet->get_fem_noeud(9));
4415     dessinesegtetfem(femtet,femtet->get_fem_noeud(4),femtet->get_fem_noeud(8));
4416     dessinesegtetfem(femtet,femtet->get_fem_noeud(8),femtet->get_fem_noeud(9));
4417     }
4418     }
4419     glEnd();
4420     if (affmaille)
4421     {
4422     for (int i=0;i<nb;i++)
4423     {
4424     FEM_TETRA* femtet=lst_tetra_fem[i];
4425 francois 56 if (N12->Checked)
4426     if (!estdansfiltre(femtet->get_id())) continue;
4427 5 BOITE_3D boitmp=femtet->get_boite_3D();
4428 francois 62 if (CheckListBox1->Checked[(femtet->get_mg_element_maillage()->get_origine()-1000)/10]==false) continue;
4429 5 if (!(boitmp*boite2)) continue;
4430     FEM_NOEUD *noeud1,*noeud2,*noeud3,*noeud4;
4431     int nb_noeud=femtet->get_nb_fem_noeud();
4432     if (nb_noeud==4)
4433     {
4434     noeud1=femtet->get_fem_noeud(0);
4435     noeud2=femtet->get_fem_noeud(1);
4436     noeud3=femtet->get_fem_noeud(2);
4437     noeud4=femtet->get_fem_noeud(3);
4438     }
4439     if (nb_noeud==10)
4440     {
4441     noeud1=femtet->get_fem_noeud(0);
4442     noeud2=femtet->get_fem_noeud(2);
4443     noeud3=femtet->get_fem_noeud(4);
4444     noeud4=femtet->get_fem_noeud(9);
4445     }
4446     double *xyz1=noeud1->get_coord();
4447     double *xyz2=noeud2->get_coord();
4448     double *xyz3=noeud3->get_coord();
4449     double *xyz4=noeud4->get_coord();
4450     unsigned long id=femtet->get_id();
4451     char mess[30];
4452     sprintf(mess,"%lu",id);
4453     if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4454     {
4455     double qual=OPERATEUR::qualite_tetra(xyz1,xyz2,xyz3,xyz4);
4456     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4457     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4458     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4459     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4460     }
4461     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.);
4462     glListBase (1000);
4463     glCallLists (strlen(mess), GL_UNSIGNED_BYTE, mess);
4464     }
4465     }
4466     if (render==2)
4467     {
4468     glDisable(GL_LIGHTING);
4469     glDisable(GL_LIGHT0);
4470     glDisable(GL_LIGHT1);
4471     }
4472     }
4473     }
4474    
4475    
4476    
4477     void __fastcall TVisuWinform::dessinetrifem(FEM_TRIANGLE* femtri,FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_NOEUD* no3)
4478     {
4479     double *xyz1=no1->get_coord();
4480     double *xyz2=no2->get_coord();
4481     double *xyz3=no3->get_coord();
4482 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
4483     TColor coul;
4484     if (femtri->get_lien_topologie()!=NULL)
4485     {
4486     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(femtri->get_lien_topologie()->get_id());
4487     if (j!=tabcouleur.end())
4488     {
4489     toposel=femtri->get_lien_topologie();
4490     coul=tabcouleur[femtri->get_lien_topologie()->get_id()];
4491     }
4492     }
4493 5 if ((femtri->get_lien_topologie()==toposel) && (femtri->get_lien_topologie()!=NULL) )
4494 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
4495 5 if (qualite==1)
4496     {
4497     double qual;
4498     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());
4499     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());
4500     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4501     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4502     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4503     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4504     }
4505 francois 56 if (qualite==2)
4506     {
4507     int pos=(int) ((femtri->get_mg_element_maillage()->get_origine()-1000)/10);
4508 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4509    
4510 francois 56 }
4511 5 if (shrink)
4512     {
4513     int nb=femtri->get_nb_fem_noeud();
4514     double xg=0.;
4515     double yg=0.;
4516     double zg=0.;
4517     for (int i=0;i<nb;i++)
4518     {
4519     FEM_NOEUD* no=femtri->get_fem_noeud(i);
4520     xg=xg+no->get_x();
4521     yg=yg+no->get_y();
4522     zg=zg+no->get_z();
4523     }
4524     xg=xg/nb;
4525     yg=yg/nb;
4526     zg=zg/nb;
4527     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4528     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4529     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4530     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4531     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4532     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4533     double x3=xg+facteur_shrink*(xyz3[0]-xg);
4534     double y3=yg+facteur_shrink*(xyz3[1]-yg);
4535     double z3=zg+facteur_shrink*(xyz3[2]-zg);
4536     if (CheckBox1->Checked==true)
4537     {
4538     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4539     if (pos>11) pos=11;
4540     if (pos<0) pos=0;
4541     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4542     }
4543     glVertex3f(x1,y1,z1);
4544     if (CheckBox1->Checked==true)
4545     {
4546     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4547     if (pos>11) pos=11;
4548     if (pos<0) pos=0;
4549     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4550     }
4551     glVertex3f(x3,y3,z3);
4552     if (CheckBox1->Checked==true)
4553     {
4554     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4555     if (pos>11) pos=11;
4556     if (pos<0) pos=0;
4557     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4558     }
4559     glVertex3f(x2,y2,z2);
4560     }
4561     else
4562     {
4563     if (CheckBox1->Checked==true)
4564     {
4565     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4566     if (pos>11) pos=11;
4567     if (pos<0) pos=0;
4568     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4569     }
4570     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4571     if (CheckBox1->Checked==true)
4572     {
4573     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4574     if (pos>11) pos=11;
4575     if (pos<0) pos=0;
4576     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4577     }
4578     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
4579     if (CheckBox1->Checked==true)
4580     {
4581     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4582     if (pos>11) pos=11;
4583     if (pos<0) pos=0;
4584     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4585     }
4586     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4587     }
4588     }
4589    
4590     void __fastcall TVisuWinform::dessinetritetfem(FEM_TETRA* femtet,FEM_NOEUD* no1,FEM_NOEUD* no2,FEM_NOEUD* no3)
4591     {
4592     double *xyz1=no1->get_coord();
4593     double *xyz2=no2->get_coord();
4594     double *xyz3=no3->get_coord();
4595 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
4596     TColor coul;
4597     if (femtet->get_lien_topologie()!=NULL)
4598     {
4599     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(femtet->get_lien_topologie()->get_id());
4600     if (j!=tabcouleur.end())
4601     {
4602     toposel=femtet->get_lien_topologie();
4603     coul=tabcouleur[femtet->get_lien_topologie()->get_id()];
4604     }
4605     }
4606    
4607 5 if ((femtet->get_lien_topologie()==toposel) && (femtet->get_lien_topologie()!=NULL) )
4608 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
4609 5 if (qualite==1)
4610     {
4611     double qual;
4612     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());
4613     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());
4614     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4615     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4616     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4617     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4618     }
4619 francois 56 if (qualite==2)
4620     {
4621     int pos=(int) ((femtet->get_mg_element_maillage()->get_origine()-1000)/10);
4622 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4623    
4624 francois 56 }
4625    
4626 5 if (shrink)
4627     {
4628     int nb=femtet->get_nb_fem_noeud();
4629     double xg=0.;
4630     double yg=0.;
4631     double zg=0.;
4632     for (int i=0;i<nb;i++)
4633     {
4634     FEM_NOEUD* no=femtet->get_fem_noeud(i);
4635     xg=xg+no->get_x();
4636     yg=yg+no->get_y();
4637     zg=zg+no->get_z();
4638     }
4639     xg=xg/nb;
4640     yg=yg/nb;
4641     zg=zg/nb;
4642     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4643     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4644     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4645     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4646     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4647     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4648     double x3=xg+facteur_shrink*(xyz3[0]-xg);
4649     double y3=yg+facteur_shrink*(xyz3[1]-yg);
4650     double z3=zg+facteur_shrink*(xyz3[2]-zg);
4651     if (CheckBox1->Checked==true)
4652     {
4653     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4654     if (pos>11) pos=11;
4655     if (pos<0) pos=0;
4656     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4657     }
4658     glVertex3f(x1,y1,z1);
4659     if (CheckBox1->Checked==true)
4660     {
4661     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4662     if (pos>11) pos=11;
4663     if (pos<0) pos=0;
4664     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4665     }
4666     glVertex3f(x3,y3,z3);
4667     if (CheckBox1->Checked==true)
4668     {
4669     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4670     if (pos>11) pos=11;
4671     if (pos<0) pos=0;
4672     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4673     }
4674     glVertex3f(x2,y2,z2);
4675     }
4676     else
4677     {
4678     if (CheckBox1->Checked==true)
4679     {
4680     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4681     if (pos>11) pos=11;
4682     if (pos<0) pos=0;
4683     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4684     }
4685     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4686     if (CheckBox1->Checked==true)
4687     {
4688     int pos=(int) ((no3->get_solution()-lmin)*12./(lmax-lmin));
4689     if (pos>11) pos=11;
4690     if (pos<0) pos=0;
4691     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4692     }
4693     glVertex3f(xyz3[0],xyz3[1],xyz3[2]);
4694     if (CheckBox1->Checked==true)
4695     {
4696     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4697     if (pos>11) pos=11;
4698     if (pos<0) pos=0;
4699     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4700     }
4701     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4702     }
4703     }
4704     void __fastcall TVisuWinform::dessinesegtetfem(FEM_TETRA* femtet,FEM_NOEUD* no1,FEM_NOEUD* no2)
4705     {
4706     double *xyz1=no1->get_coord();
4707     double *xyz2=no2->get_coord();
4708 francois 98 MG_ELEMENT_TOPOLOGIQUE* toposel=NULL;
4709     TColor coul;
4710     if (femtet->get_lien_topologie()!=NULL)
4711     {
4712     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(femtet->get_lien_topologie()->get_id());
4713     if (j!=tabcouleur.end())
4714     {
4715     toposel=femtet->get_lien_topologie();
4716     coul=tabcouleur[femtet->get_lien_topologie()->get_id()];
4717     }
4718     }
4719 5 if ((femtet->get_lien_topologie()==toposel) && (femtet->get_lien_topologie()!=NULL) )
4720 francois 98 glColor3f((coul & 0x000000FF)/255.,((coul & 0x0000FF00)>>8)/255.,((coul & 0x00FF0000)>>16)/255.);
4721 francois 56 if ( ((qualite==1)&&(render==0)) || ((qualite==1)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4722     {
4723     double qual;
4724     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());
4725     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());
4726     if (qual>MainForm->valeurconfig[53]) glColor3f(MainForm->valeurconfig[41],MainForm->valeurconfig[42],MainForm->valeurconfig[43]);
4727     else if (qual>MainForm->valeurconfig[54]) glColor3f(MainForm->valeurconfig[44],MainForm->valeurconfig[45],MainForm->valeurconfig[46]);
4728     else if (qual>MainForm->valeurconfig[55]) glColor3f(MainForm->valeurconfig[47],MainForm->valeurconfig[48],MainForm->valeurconfig[49]);
4729     else glColor3f(MainForm->valeurconfig[50],MainForm->valeurconfig[51],MainForm->valeurconfig[52]);
4730     }
4731     if ( ((qualite==2)&&(render==0)) || ((qualite==2)&&(render==1) && (MainForm->valeurconfig[56]==0.)))
4732     {
4733     int pos=(int) ((femtet->get_mg_element_maillage()->get_origine()-1000)/10);
4734 francois 62 glColor3f(MainForm->valeurconfig[108+3*pos],MainForm->valeurconfig[109+3*pos],MainForm->valeurconfig[110+3*pos]);
4735    
4736 francois 56 }
4737 5 if (shrink)
4738     {
4739     int nb=femtet->get_nb_fem_noeud();
4740     double xg=0.;
4741     double yg=0.;
4742     double zg=0.;
4743     for (int i=0;i<nb;i++)
4744     {
4745     FEM_NOEUD* no=femtet->get_fem_noeud(i);
4746     xg=xg+no->get_x();
4747     yg=yg+no->get_y();
4748     zg=zg+no->get_z();
4749     }
4750     xg=xg/nb;
4751     yg=yg/nb;
4752     zg=zg/nb;
4753     double x1=xg+facteur_shrink*(xyz1[0]-xg);
4754     double y1=yg+facteur_shrink*(xyz1[1]-yg);
4755     double z1=zg+facteur_shrink*(xyz1[2]-zg);
4756     double x2=xg+facteur_shrink*(xyz2[0]-xg);
4757     double y2=yg+facteur_shrink*(xyz2[1]-yg);
4758     double z2=zg+facteur_shrink*(xyz2[2]-zg);
4759     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4760     {
4761     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4762     if (pos>11) pos=11;
4763     if (pos<0) pos=0;
4764     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4765     }
4766     glVertex3f(x1,y1,z1);
4767     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4768     {
4769     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4770     if (pos>11) pos=11;
4771     if (pos<0) pos=0;
4772     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4773     }
4774     glVertex3f(x2,y2,z2);
4775     }
4776     else
4777     {
4778     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4779     {
4780     int pos=(int) ((no1->get_solution()-lmin)*12./(lmax-lmin));
4781     if (pos>11) pos=11;
4782     if (pos<0) pos=0;
4783     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4784     }
4785     glVertex3f(xyz1[0],xyz1[1],xyz1[2]);
4786     if ((CheckBox1->Checked==true) && (CheckBox2->Checked==false))
4787     {
4788     int pos=(int) ((no2->get_solution()-lmin)*12./(lmax-lmin));
4789     if (pos>11) pos=11;
4790     if (pos<0) pos=0;
4791     glColor3f(RGB_r[pos]/255.,RGB_g[pos]/255.,RGB_b[pos]/255.);
4792     }
4793     glVertex3f(xyz2[0],xyz2[1],xyz2[2]);
4794     }
4795     }
4796     void __fastcall TVisuWinform::Id1Click(TObject *Sender)
4797     {
4798     Id1->Checked=true;
4799     Numero1->Checked=false;
4800     NumeroOptimise1->Checked=false;
4801     }
4802     //---------------------------------------------------------------------------
4803    
4804     void __fastcall TVisuWinform::Numero1Click(TObject *Sender)
4805     {
4806     Id1->Checked=false;
4807     Numero1->Checked=true;
4808     NumeroOptimise1->Checked=false;
4809     }
4810     //---------------------------------------------------------------------------
4811    
4812     void __fastcall TVisuWinform::NumeroOptimise1Click(TObject *Sender)
4813     {
4814     Id1->Checked=false;
4815     Numero1->Checked=false;
4816     NumeroOptimise1->Checked=true;
4817     }
4818     //---------------------------------------------------------------------------
4819    
4820    
4821     void __fastcall TVisuWinform::Cartedetaille3Click(TObject *Sender)
4822     {
4823     Tfimcarte *fimcarte=new Tfimcarte(Application,gest);
4824     fimcarte->Caption=Caption;
4825     fimcarte->ComboBox1->Clear();
4826     fimcarte->ComboBox2->Clear();
4827     int nbmai=gest->get_nb_mg_maillage();
4828     for (int i=0;i<nbmai;i++)
4829     {
4830     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
4831     fimcarte->ComboBox1->Items->Add(mai->get_id());
4832     }
4833     int nbmaifem=gest->get_nb_fem_maillage();
4834     for (int i=0;i<nbmaifem;i++)
4835     {
4836     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
4837     fimcarte->ComboBox2->Items->Add(mai->get_id());
4838     }
4839     fimcarte->Show();
4840     }
4841     //---------------------------------------------------------------------------
4842    
4843    
4844    
4845    
4846    
4847     void __fastcall TVisuWinform::voirarbreExecute(TObject *Sender)
4848     {
4849     Tfvisuarbre *Child;
4850     Child = new Tfvisuarbre(Application,gest);
4851     Child->Caption=Caption;
4852     }
4853     //---------------------------------------------------------------------------
4854    
4855     void __fastcall TVisuWinform::Reconstruction1Click(TObject *Sender)
4856     {
4857     Tfrecons *frecons=new Tfrecons(Application,gest);
4858     frecons->Caption=Caption;
4859     frecons->ListBox1->Clear();
4860     int nbmai=gest->get_nb_fem_maillage();
4861     for (int i=0;i<nbmai;i++)
4862     {
4863     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
4864     frecons->ListBox1->Items->Add(mai->get_id());
4865     }
4866     frecons->Show();
4867     }
4868     //---------------------------------------------------------------------------
4869    
4870     void __fastcall TVisuWinform::N0D1Click(TObject *Sender)
4871     {
4872     N0D1->Checked=!N0D1->Checked;
4873     noeud=0;
4874     if (N0D1->Checked) noeud=noeud+1;
4875     if (N1D1->Checked) noeud=noeud+2;
4876     if (N2D1->Checked) noeud=noeud+4;
4877     if (N3D1->Checked) noeud=noeud+8;
4878     redess();
4879    
4880     }
4881     //---------------------------------------------------------------------------
4882    
4883 francois 56
4884     void __fastcall TVisuWinform::maillagegeometrique1Click(TObject *Sender)
4885     {
4886     int nb=gest->get_nb_mg_maillage();
4887     if (nb==0)
4888     {
4889     MessageBox(Handle,"Pas de maillage","Erreur",MB_OK);
4890     return ;
4891     }
4892     char chaine[500];
4893     for (int i=0;i<nb;i++)
4894     {
4895     MG_MAILLAGE* mai=gest->get_mg_maillage(i);
4896     if (i==0) sprintf(chaine,"Maillage %lu|*.*", mai->get_id());
4897     else
4898     {
4899     char chaine2[200];
4900     sprintf(chaine2,"|Maillage %lu|*.*", mai->get_id());
4901     strcat(chaine,chaine2);
4902     }
4903     }
4904     SaveDialog1->Filter=chaine;
4905     if (SaveDialog1->Execute())
4906     {
4907     MG_MAILLAGE* mai=gest->get_mg_maillage(SaveDialog1->FilterIndex-1);
4908     string namefic=SaveDialog1->FileName.c_str();
4909     MG_EXPORT exp;
4910     exp.gmsh(mai,namefic) ;
4911     }
4912     }
4913     //---------------------------------------------------------------------------
4914    
4915     void __fastcall TVisuWinform::MaillageEF1Click(TObject *Sender)
4916     {
4917     int nb=gest->get_nb_fem_maillage();
4918     if (nb==0)
4919     {
4920     MessageBox(Handle,"Pas de maillage","Erreur",MB_OK);
4921     return ;
4922     }
4923     char chaine[500];
4924     for (int i=0;i<nb;i++)
4925     {
4926     FEM_MAILLAGE* mai=gest->get_fem_maillage(i);
4927     if (i==0) sprintf(chaine,"Maillage %lu|*.*", mai->get_id());
4928     else
4929     {
4930     char chaine2[200];
4931     sprintf(chaine2,"|Maillage %lu|*.*", mai->get_id());
4932     strcat(chaine,chaine2);
4933     }
4934     }
4935     SaveDialog1->Filter=chaine;
4936     if (SaveDialog1->Execute())
4937     {
4938     FEM_MAILLAGE* mai=gest->get_fem_maillage(SaveDialog1->FilterIndex-1);
4939     string namefic=SaveDialog1->FileName.c_str();
4940     MG_EXPORT exp;
4941     exp.gmsh(mai,namefic) ;
4942     }
4943     }
4944     //---------------------------------------------------------------------------
4945    
4946     void __fastcall TVisuWinform::N12Click(TObject *Sender)
4947     {
4948     N12->Checked=!N12->Checked;
4949     TabSheet7->TabVisible=N12->Checked;
4950     redess();
4951     }
4952     //---------------------------------------------------------------------------
4953    
4954     void __fastcall TVisuWinform::Button10Click(TObject *Sender)
4955     {
4956     ListBox4->Clear();
4957     filtreid.clear();
4958     redess();
4959     }
4960     //---------------------------------------------------------------------------
4961    
4962     void __fastcall TVisuWinform::Button9Click(TObject *Sender)
4963     {
4964     if (ListBox4->ItemIndex==-1) return;
4965     ListBox4->Items->Delete(ListBox4->ItemIndex);
4966     vector<unsigned long>::iterator it=filtreid.begin();
4967     for (int i=0;i<ListBox4->ItemIndex;i++) it++;
4968     filtreid.erase(it);
4969     redess();
4970     }
4971     //---------------------------------------------------------------------------
4972    
4973     void __fastcall TVisuWinform::Button8Click(TObject *Sender)
4974     {
4975     static AnsiString InputString = "";
4976     AnsiString InputString2=InputBox("Filtre ID", "ID de l'élément à afficher ?", InputString);
4977     if (InputString2!=InputString)
4978     {
4979     InputString=InputString2;
4980     ListBox4->Items->Add(InputString);
4981     unsigned long id;
4982     sscanf(InputString.c_str(),"%lu",&id);
4983     filtreid.insert(filtreid.end(),id);
4984     redess();
4985     }
4986     }
4987     //---------------------------------------------------------------------------
4988     int __fastcall TVisuWinform::estdansfiltre(unsigned long id)
4989     {
4990     for (vector<unsigned long>::iterator it=filtreid.begin();it!=filtreid.end();it++)
4991     if (*it==id) return 1;
4992     return 0;
4993     }
4994    
4995     void __fastcall TVisuWinform::qualiteorigineExecute(TObject *Sender)
4996     {
4997     qualite=2;
4998     redess();
4999     }
5000     //---------------------------------------------------------------------------
5001    
5002 francois 62
5003    
5004     void __fastcall TVisuWinform::CheckListBox1Click(TObject *Sender)
5005     {
5006 francois 98 //initliste();
5007 francois 62 redess();
5008     }
5009     //---------------------------------------------------------------------------
5010    
5011 francois 98 void __fastcall TVisuWinform::Supprimerlacouleur1Click(TObject *Sender)
5012     {
5013     TTreeNode* node=TreeView1->Selected;
5014     unsigned long id = atol(node->Text.c_str());
5015     if (id==0) return;
5016     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5017     std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.find(id);
5018     if (j==tabcouleur.end()) return;
5019     if (j2==tabnode.end()) return;
5020     TreeView1->Canvas->Brush->Color=clWindow;
5021     TRect rec=tabnode[id]->DisplayRect(false);
5022     rec.Right=rec.Left+0.2*rec.Width();
5023     TreeView1->Canvas->FillRect(rec);
5024     tabcouleur.erase(j);
5025     tabnode.erase(j2);
5026     redess();
5027     TreeView1Click(Sender);
5028     ActiveControl=NULL;
5029     }
5030     //---------------------------------------------------------------------------
5031    
5032     void __fastcall TVisuWinform::Affecterladernirecouleur1Click(
5033     TObject *Sender)
5034     {
5035     TTreeNode* node=TreeView1->Selected;
5036     unsigned long id = atol(node->Text.c_str());
5037     if (id==0) return;
5038     TColor couleur=ColorDialog1->Color;
5039     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5040     std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.find(id);
5041     if (j!=tabcouleur.end())
5042     tabcouleur.erase(j);
5043     if (j2!=tabnode.end())
5044     tabnode.erase(j2);
5045     tabcouleur[id]=couleur;
5046     tabnode[id]=node;
5047     Affecterladernirecouleur1->Visible=true;
5048     TreeView1Click(Sender);
5049     redess();
5050     ActiveControl=NULL;
5051     }
5052     //---------------------------------------------------------------------------
5053    
5054    
5055    
5056    
5057     void __fastcall TVisuWinform::TreeView1Click(TObject *Sender)
5058     {
5059     for (std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.begin();j2!=tabnode.end();j2++)
5060     {
5061     long id=(*j2).first;
5062     TreeView1->Canvas->Brush->Color=tabcouleur[id];
5063     TRect rec=(*j2).second->DisplayRect(false);
5064     rec.Right=rec.Left+0.1*rec.Width();
5065     TreeView1->Canvas->FillRect(rec);
5066     }
5067     ActiveControl=NULL;
5068    
5069     }
5070     //---------------------------------------------------------------------------
5071    
5072     void __fastcall TVisuWinform::PageControl1Change(TObject *Sender)
5073     {
5074     TreeView1Click(Sender);
5075     }
5076     //---------------------------------------------------------------------------
5077    
5078     void __fastcall TVisuWinform::ActiverlescouleurspourlesentitesCc1Click(
5079     TObject *Sender)
5080     {
5081    
5082     int nbgeo=gest->get_nb_mg_geometrie();
5083     for (int i=0;i<nbgeo;i++)
5084     {
5085     MG_GEOMETRIE* geo=gest->get_mg_geometrie(i);
5086     int nbvolume=geo->get_nb_mg_volume();
5087     for (int j=0;j<nbvolume;j++)
5088     {
5089     MG_VOLUME* vol=geo->get_mg_volume(j);
5090     int nbccf=vol->get_nb_ccf();
5091     for (int k=0;k<nbccf;k++)
5092     {
5093     char typeccf[10];
5094     vol->get_type_ccf(k,typeccf);
5095     if (typeccf[0]=='C')
5096     if (typeccf[0]=='c')
5097     {
5098     TColor couleur=0;
5099     double val=vol->get_valeur_ccf(k);
5100     unsigned char *p=(char*)&val;
5101     couleur=couleur+(*p);p++;
5102     couleur=couleur+((*p)<<8);p++;
5103     couleur=couleur+((*p)<<16);
5104     long id=vol->get_id();
5105     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5106     if (j!=tabcouleur.end()) tabcouleur.erase(j);
5107     tabcouleur[id]=couleur;
5108     }
5109     }
5110     }
5111     int nbface=geo->get_nb_mg_face();
5112     for (int j=0;j<nbface;j++)
5113     {
5114     MG_FACE* face=geo->get_mg_face(j);
5115     int nbccf=face->get_nb_ccf();
5116     for (int k=0;k<nbccf;k++)
5117     {
5118     char typeccf[10];
5119     face->get_type_ccf(k,typeccf);
5120     if (typeccf[0]=='C')
5121     if (typeccf[1]=='c')
5122     {
5123     TColor couleur=0;
5124     double val=face->get_valeur_ccf(k);
5125     unsigned char *p=(unsigned char*)&val;
5126     couleur=couleur+(*p);p++;
5127     couleur=couleur+((*p)<<8);p++;
5128     couleur=couleur+((*p)<<16);
5129     long id=face->get_id();
5130     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5131     if (j!=tabcouleur.end()) tabcouleur.erase(j);
5132     tabcouleur[id]=couleur;
5133     }
5134     }
5135     }
5136     int nbarete=geo->get_nb_mg_arete();
5137     for (int j=0;j<nbarete;j++)
5138     {
5139     MG_ARETE* arete=geo->get_mg_arete(j);
5140     int nbccf=arete->get_nb_ccf();
5141     for (int k=0;k<nbccf;k++)
5142     {
5143     char typeccf[10];
5144     arete->get_type_ccf(k,typeccf);
5145     if (typeccf[0]=='C')
5146     if (typeccf[1]=='c')
5147     {
5148     TColor couleur=0;
5149     double val=arete->get_valeur_ccf(k);
5150     unsigned char *p=(unsigned char*)&val;
5151     couleur=couleur+(*p);p++;
5152     couleur=couleur+((*p)<<8);p++;
5153     couleur=couleur+((*p)<<16);
5154     long id=arete->get_id();
5155     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5156     if (j!=tabcouleur.end()) tabcouleur.erase(j);
5157     tabcouleur[id]=couleur;
5158     }
5159     }
5160     }
5161     }
5162    
5163     redess();
5164     TreeView1Click(Sender);
5165     ActiveControl=NULL;
5166    
5167     }
5168     //---------------------------------------------------------------------------
5169    
5170     void __fastcall TVisuWinform::SupprimerlescouleurspourlesentitesCc1Click(
5171     TObject *Sender)
5172     {
5173     int nbgeo=gest->get_nb_mg_geometrie();
5174     for (int i=0;i<nbgeo;i++)
5175     {
5176     MG_GEOMETRIE* geo=gest->get_mg_geometrie(i);
5177     int nbvolume=geo->get_nb_mg_volume();
5178     for (int j=0;j<nbvolume;j++)
5179     {
5180     MG_VOLUME* vol=geo->get_mg_volume(j);
5181     int nbccf=vol->get_nb_ccf();
5182     for (int k=0;k<nbccf;k++)
5183     {
5184     char typeccf[10];
5185     vol->get_type_ccf(k,typeccf);
5186     if (typeccf[0]=='C')
5187     if (typeccf[0]=='c')
5188     {
5189     long id=vol->get_id();
5190     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5191     if (j!=tabcouleur.end()) tabcouleur.erase(j);
5192     std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.find(id);
5193     if (j2!=tabnode.end())
5194     {
5195     TreeView1->Canvas->Brush->Color=clWindow;
5196     TRect rec=tabnode[id]->DisplayRect(false);
5197     rec.Right=rec.Left+0.2*rec.Width();
5198     TreeView1->Canvas->FillRect(rec);
5199     tabnode.erase(j2);
5200     }
5201     }
5202     }
5203     }
5204     int nbface=geo->get_nb_mg_face();
5205     for (int j=0;j<nbface;j++)
5206     {
5207     MG_FACE* face=geo->get_mg_face(j);
5208     int nbccf=face->get_nb_ccf();
5209     for (int k=0;k<nbccf;k++)
5210     {
5211     char typeccf[10];
5212     face->get_type_ccf(k,typeccf);
5213     if (typeccf[0]=='C')
5214     if (typeccf[1]=='c')
5215     {
5216     long id=face->get_id();
5217     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5218     if (j!=tabcouleur.end()) tabcouleur.erase(j);
5219     std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.find(id);
5220     if (j2!=tabnode.end())
5221     {
5222     TreeView1->Canvas->Brush->Color=clWindow;
5223     TRect rec=tabnode[id]->DisplayRect(false);
5224     rec.Right=rec.Left+0.2*rec.Width();
5225     TreeView1->Canvas->FillRect(rec);
5226     tabnode.erase(j2);
5227     }
5228     }
5229     }
5230     }
5231     int nbarete=geo->get_nb_mg_arete();
5232     for (int j=0;j<nbarete;j++)
5233     {
5234     MG_ARETE* arete=geo->get_mg_arete(j);
5235     int nbccf=arete->get_nb_ccf();
5236     for (int k=0;k<nbccf;k++)
5237     {
5238     char typeccf[10];
5239     arete->get_type_ccf(k,typeccf);
5240     if (typeccf[0]=='C')
5241     if (typeccf[1]=='c')
5242     {
5243     long id=arete->get_id();
5244     std::map<unsigned long,TColor,std::less<unsigned long> >::iterator j=tabcouleur.find(id);
5245     if (j!=tabcouleur.end()) tabcouleur.erase(j);
5246     std::map<unsigned long,TTreeNode*,std::less<unsigned long> >::iterator j2=tabnode.find(id);
5247     if (j2!=tabnode.end())
5248     {
5249     TreeView1->Canvas->Brush->Color=clWindow;
5250     TRect rec=tabnode[id]->DisplayRect(false);
5251     rec.Right=rec.Left+0.2*rec.Width();
5252     TreeView1->Canvas->FillRect(rec);
5253     tabnode.erase(j2);
5254     }
5255     }
5256     }
5257     }
5258     }
5259    
5260     redess();
5261     TreeView1Click(Sender);
5262     ActiveControl=NULL;
5263     }
5264     //---------------------------------------------------------------------------
5265    
5266    
5267    
5268     void __fastcall TVisuWinform::Point1Click(TObject *Sender)
5269     {
5270     TTreeNode* node=TreeView1->Selected;
5271     unsigned long id = atol(node->Text.c_str());
5272     if (id==0) return;
5273    
5274     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5275    
5276     int nb_geometrie=gest->get_nb_mg_geometrie();
5277     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5278     {
5279     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5280     if (mgtopo==NULL) mgtopo=geotmp->get_mg_faceid(id);
5281     if (mgtopo==NULL) mgtopo=geotmp->get_mg_areteid(id);
5282     if (mgtopo==NULL) mgtopo=geotmp->get_mg_sommetid(id);
5283     }
5284     if (mgtopo==NULL) return;
5285     int nb_point=mgtopo->get_vectorisation().get_nb_points();
5286     Taffmat *child=new Taffmat(Application);
5287     char mess[300];
5288     sprintf(mess,"Vectorisation de l'entité %lu. Les %d points",id,nb_point);
5289     child->Caption=mess;
5290     child->StringGrid1->ColCount=nb_point;
5291     child->StringGrid1->RowCount=5;
5292     child->StringGrid1->FixedRows=1;
5293    
5294    
5295     vector<OT_VECTEUR_4DD>& liste=mgtopo->get_vectorisation().get_points_controle();
5296     for (int i=0;i<nb_point;i++)
5297     {
5298     sprintf(mess,"Point %d",i+1);
5299     child->StringGrid1->Cells[i][0]=mess;
5300     child->StringGrid1->Cells[i][1]=liste[i].get_x().get_x();
5301     child->StringGrid1->Cells[i][2]=liste[i].get_y().get_x();
5302     child->StringGrid1->Cells[i][3]=liste[i].get_z().get_x();
5303     child->StringGrid1->Cells[i][4]=liste[i].get_w().get_x();
5304     }
5305    
5306    
5307    
5308     }
5309     //---------------------------------------------------------------------------
5310    
5311     void __fastcall TVisuWinform::Vecteur1Click(TObject *Sender)
5312     {
5313     TTreeNode* node=TreeView1->Selected;
5314     unsigned long id = atol(node->Text.c_str());
5315     if (id==0) return;
5316    
5317     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5318    
5319     int nb_geometrie=gest->get_nb_mg_geometrie();
5320     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5321     {
5322     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5323     if (mgtopo==NULL) mgtopo=geotmp->get_mg_faceid(id);
5324     if (mgtopo==NULL) mgtopo=geotmp->get_mg_areteid(id);
5325     if (mgtopo==NULL) mgtopo=geotmp->get_mg_sommetid(id);
5326     }
5327     if (mgtopo==NULL) return;
5328     std::vector< OT_VECTEUR_4DD > vec=mgtopo->get_vectorisation().get_vecteurs();
5329     Taffmat *child=new Taffmat(Application);
5330     char mess[300];
5331     sprintf(mess,"Vectorisation de l'entité %lu. Les %d vecteurs",id,vec.size());
5332     child->Caption=mess;
5333     child->StringGrid1->ColCount=vec.size();
5334     child->StringGrid1->RowCount=5;
5335     child->StringGrid1->FixedRows=1;
5336    
5337    
5338     for (int i=0;i<vec.size();i++)
5339     {
5340     sprintf(mess,"Vecteur %d",i+1);
5341     child->StringGrid1->Cells[i][0]=mess;
5342     child->StringGrid1->Cells[i][1]=vec[i].get_x().get_x();
5343     child->StringGrid1->Cells[i][2]=vec[i].get_y().get_x();
5344     child->StringGrid1->Cells[i][3]=vec[i].get_z().get_x();
5345     child->StringGrid1->Cells[i][4]=vec[i].get_w().get_x();
5346     }
5347     }
5348     //---------------------------------------------------------------------------
5349    
5350     void __fastcall TVisuWinform::Barycentre1Click(TObject *Sender)
5351     {
5352     TTreeNode* node=TreeView1->Selected;
5353     unsigned long id = atol(node->Text.c_str());
5354     if (id==0) return;
5355    
5356     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5357    
5358     int nb_geometrie=gest->get_nb_mg_geometrie();
5359     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5360     {
5361     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5362     if (mgtopo==NULL) mgtopo=geotmp->get_mg_faceid(id);
5363     if (mgtopo==NULL) mgtopo=geotmp->get_mg_areteid(id);
5364     if (mgtopo==NULL) mgtopo=geotmp->get_mg_sommetid(id);
5365     }
5366     if (mgtopo==NULL) return;
5367     OT_VECTEUR_4DD vec=mgtopo->get_vectorisation().calcule_barycentre() ;
5368     Taffmat *child=new Taffmat(Application);
5369     char mess[300];
5370     sprintf(mess,"Vectorisation de l'entité %lu. Le barycentre",id);
5371     child->Caption=mess;
5372     child->StringGrid1->ColCount=1;
5373     child->StringGrid1->RowCount=5;
5374     child->StringGrid1->FixedRows=1;
5375    
5376    
5377     sprintf(mess,"Barycentre");
5378     child->StringGrid1->Cells[0][0]=mess;
5379     child->StringGrid1->Cells[0][1]=vec.get_x().get_x();
5380     child->StringGrid1->Cells[0][2]=vec.get_y().get_x();
5381     child->StringGrid1->Cells[0][3]=vec.get_z().get_x();
5382     child->StringGrid1->Cells[0][4]=vec.get_w().get_x();
5383     }
5384     //---------------------------------------------------------------------------
5385    
5386     void __fastcall TVisuWinform::Tenseurmtrique1Click(TObject *Sender)
5387     {
5388     TTreeNode* node=TreeView1->Selected;
5389     unsigned long id = atol(node->Text.c_str());
5390     if (id==0) return;
5391    
5392     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5393    
5394     int nb_geometrie=gest->get_nb_mg_geometrie();
5395     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5396     {
5397     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5398     if (mgtopo==NULL) mgtopo=geotmp->get_mg_faceid(id);
5399     if (mgtopo==NULL) mgtopo=geotmp->get_mg_areteid(id);
5400     if (mgtopo==NULL) mgtopo=geotmp->get_mg_sommetid(id);
5401     }
5402     if (mgtopo==NULL) return;
5403     OT_TENSEUR tens=mgtopo->get_vectorisation().calcule_tenseur_metrique();
5404     Taffmat *child=new Taffmat(Application);
5405     char mess[300];
5406     sprintf(mess,"Vectorisation de l'entité %lu. Le tenseur métrique",id);
5407     child->Caption=mess;
5408     child->StringGrid1->ColCount=tens.Get_NbCols()+1;
5409     child->StringGrid1->RowCount=tens.Get_NbRows()+1 ;
5410     child->StringGrid1->FixedRows=1;
5411     child->StringGrid1->FixedCols=1;
5412     for (int i=0;i<tens.Get_NbCols() ;i++)
5413     {
5414     char mess[255];
5415     sprintf(mess,"%c%c",i/26+65,i%26+65);
5416     child->StringGrid1->Cells[i+1][0]=mess;
5417     }
5418     for (int i=0;i<tens.Get_NbRows() ;i++)
5419     {
5420     char mess[255];
5421     sprintf(mess,"%c%c",i/26+65,i%26+65);
5422     child->StringGrid1->Cells[0][i+1]=mess;
5423     }
5424    
5425     for (int i=0;i<tens.Get_NbCols() ;i++)
5426     for (int j=0;j<tens.Get_NbRows() ;j++)
5427     {
5428     child->StringGrid1->Cells[i+1][j+1]=tens(j,i).get_x();
5429     }
5430     }
5431     //---------------------------------------------------------------------------
5432    
5433     void __fastcall TVisuWinform::Tenseurdinertie1Click(TObject *Sender)
5434     {
5435     TTreeNode* node=TreeView1->Selected;
5436     unsigned long id = atol(node->Text.c_str());
5437     if (id==0) return;
5438    
5439     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5440    
5441     int nb_geometrie=gest->get_nb_mg_geometrie();
5442     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5443     {
5444     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5445     if (mgtopo==NULL) mgtopo=geotmp->get_mg_faceid(id);
5446     if (mgtopo==NULL) mgtopo=geotmp->get_mg_areteid(id);
5447     if (mgtopo==NULL) mgtopo=geotmp->get_mg_sommetid(id);
5448     }
5449     if (mgtopo==NULL) return;
5450     OT_TENSEUR tens=mgtopo->get_vectorisation().calcule_tenseur_inertie_au_barycentre();
5451     Taffmat *child=new Taffmat(Application);
5452     char mess[300];
5453     sprintf(mess,"Vectorisation de l'entité %lu. Le tenseur d'inertie dans la base globale",id);
5454     child->Caption=mess;
5455     child->StringGrid1->ColCount=tens.Get_NbCols()+1;
5456     child->StringGrid1->RowCount=tens.Get_NbRows()+1 ;
5457     child->StringGrid1->FixedRows=1;
5458     child->StringGrid1->FixedCols=1;
5459     for (int i=0;i<tens.Get_NbCols() ;i++)
5460     {
5461     char mess[255];
5462     sprintf(mess,"%c%c",i/26+65,i%26+65);
5463     child->StringGrid1->Cells[i+1][0]=mess;
5464     }
5465     for (int i=0;i<tens.Get_NbRows() ;i++)
5466     {
5467     char mess[255];
5468     sprintf(mess,"%c%c",i/26+65,i%26+65);
5469     child->StringGrid1->Cells[0][i+1]=mess;
5470     }
5471    
5472     for (int i=0;i<tens.Get_NbCols() ;i++)
5473     for (int j=0;j<tens.Get_NbRows() ;j++)
5474     {
5475     child->StringGrid1->Cells[i+1][j+1]=tens(j,i).get_x();
5476     }
5477    
5478     }
5479     //---------------------------------------------------------------------------
5480    
5481     void __fastcall TVisuWinform::Tenseurdinertiebaseprincipale1Click(
5482     TObject *Sender)
5483     {
5484     TTreeNode* node=TreeView1->Selected;
5485     unsigned long id = atol(node->Text.c_str());
5486     if (id==0) return;
5487    
5488     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5489    
5490     int nb_geometrie=gest->get_nb_mg_geometrie();
5491     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5492     {
5493     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5494     if (mgtopo==NULL) mgtopo=geotmp->get_mg_faceid(id);
5495     if (mgtopo==NULL) mgtopo=geotmp->get_mg_areteid(id);
5496     if (mgtopo==NULL) mgtopo=geotmp->get_mg_sommetid(id);
5497     }
5498     if (mgtopo==NULL) return;
5499     OT_TENSEUR tens=mgtopo->get_vectorisation().calcule_tenseur_inertie_base_locale();
5500     Taffmat *child=new Taffmat(Application);
5501     char mess[300];
5502     sprintf(mess,"Vectorisation de l'entité %lu. Le tenseur d'inertie dans la base globale",id);
5503     child->Caption=mess;
5504     child->StringGrid1->ColCount=tens.Get_NbCols()+1;
5505     child->StringGrid1->RowCount=tens.Get_NbRows()+1 ;
5506     child->StringGrid1->FixedRows=1;
5507     child->StringGrid1->FixedCols=1;
5508     for (int i=0;i<tens.Get_NbCols() ;i++)
5509     {
5510     char mess[255];
5511     sprintf(mess,"%c%c",i/26+65,i%26+65);
5512     child->StringGrid1->Cells[i+1][0]=mess;
5513     }
5514     for (int i=0;i<tens.Get_NbRows() ;i++)
5515     {
5516     char mess[255];
5517     sprintf(mess,"%c%c",i/26+65,i%26+65);
5518     child->StringGrid1->Cells[0][i+1]=mess;
5519     }
5520    
5521     for (int i=0;i<tens.Get_NbCols() ;i++)
5522     for (int j=0;j<tens.Get_NbRows() ;j++)
5523     {
5524     child->StringGrid1->Cells[i+1][j+1]=tens(j,i).get_x();
5525     }
5526     }
5527     //---------------------------------------------------------------------------
5528    
5529     void __fastcall TVisuWinform::Point2Click(TObject *Sender)
5530     {
5531     TTreeNode* node=TreeView1->Selected;
5532     unsigned long id = atol(node->Text.c_str());
5533     if (id==0) return;
5534    
5535     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5536     MG_ELEMENT_GEOMETRIQUE* mggeo=NULL;
5537    
5538     int nb_geometrie=gest->get_nb_mg_geometrie();
5539     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5540     {
5541     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5542     if (mgtopo==NULL)
5543     {
5544     mgtopo=geotmp->get_mg_faceid(id);
5545     if (mgtopo!=NULL) mggeo=geotmp->get_mg_faceid(id)->get_surface();
5546     }
5547     if (mgtopo==NULL)
5548     {
5549     mgtopo=geotmp->get_mg_areteid(id);
5550     if (mgtopo!=NULL) mggeo=geotmp->get_mg_areteid(id)->get_courbe();
5551     }
5552     if (mgtopo==NULL)
5553     {
5554     mgtopo=geotmp->get_mg_sommetid(id);
5555     if (mgtopo!=NULL) mggeo=geotmp->get_mg_sommetid(id)->get_point();
5556     }
5557     }
5558     if (mgtopo==NULL) return;
5559     int nb_point=mggeo->get_vectorisation().get_nb_points();
5560     Taffmat *child=new Taffmat(Application);
5561     char mess[300];
5562     sprintf(mess,"Vectorisation de l'entité geométrique %lu support de %lu. Les %d points",mggeo->get_id(),id,nb_point);
5563     child->Caption=mess;
5564     child->StringGrid1->ColCount=nb_point;
5565     child->StringGrid1->RowCount=5;
5566     child->StringGrid1->FixedRows=1;
5567    
5568    
5569     vector<OT_VECTEUR_4DD>& liste=mggeo->get_vectorisation().get_points_controle();
5570     for (int i=0;i<nb_point;i++)
5571     {
5572     sprintf(mess,"Point %d",i+1);
5573     child->StringGrid1->Cells[i][0]=mess;
5574     child->StringGrid1->Cells[i][1]=liste[i].get_x().get_x();
5575     child->StringGrid1->Cells[i][2]=liste[i].get_y().get_x();
5576     child->StringGrid1->Cells[i][3]=liste[i].get_z().get_x();
5577     child->StringGrid1->Cells[i][4]=liste[i].get_w().get_x();
5578     }
5579    
5580     }
5581     //---------------------------------------------------------------------------
5582    
5583     void __fastcall TVisuWinform::Vecteur2Click(TObject *Sender)
5584     {
5585     TTreeNode* node=TreeView1->Selected;
5586     unsigned long id = atol(node->Text.c_str());
5587     if (id==0) return;
5588    
5589     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5590     MG_ELEMENT_GEOMETRIQUE* mggeo=NULL;
5591    
5592     int nb_geometrie=gest->get_nb_mg_geometrie();
5593     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5594     {
5595     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5596     if (mgtopo==NULL)
5597     {
5598     mgtopo=geotmp->get_mg_faceid(id);
5599     if (mgtopo!=NULL) mggeo=geotmp->get_mg_faceid(id)->get_surface();
5600     }
5601     if (mgtopo==NULL)
5602     {
5603     mgtopo=geotmp->get_mg_areteid(id);
5604     if (mgtopo!=NULL) mggeo=geotmp->get_mg_areteid(id)->get_courbe();
5605     }
5606     if (mgtopo==NULL)
5607     {
5608     mgtopo=geotmp->get_mg_sommetid(id);
5609     if (mgtopo!=NULL) mggeo=geotmp->get_mg_sommetid(id)->get_point();
5610     }
5611     }
5612     if (mgtopo==NULL) return;
5613     std::vector< OT_VECTEUR_4DD > vec=mggeo->get_vectorisation().get_vecteurs();
5614     Taffmat *child=new Taffmat(Application);
5615     char mess[300];
5616     sprintf(mess,"Vectorisation de l'entité géométrique %lu support de %lu. Les %d vecteurs",mggeo->get_id(),id,vec.size());
5617     child->Caption=mess;
5618     child->StringGrid1->ColCount=vec.size();
5619     child->StringGrid1->RowCount=5;
5620     child->StringGrid1->FixedRows=1;
5621    
5622    
5623     for (int i=0;i<vec.size();i++)
5624     {
5625     sprintf(mess,"Vecteur %d",i+1);
5626     child->StringGrid1->Cells[i][0]=mess;
5627     child->StringGrid1->Cells[i][1]=vec[i].get_x().get_x();
5628     child->StringGrid1->Cells[i][2]=vec[i].get_y().get_x();
5629     child->StringGrid1->Cells[i][3]=vec[i].get_z().get_x();
5630     child->StringGrid1->Cells[i][4]=vec[i].get_w().get_x();
5631     }
5632     }
5633     //---------------------------------------------------------------------------
5634    
5635     void __fastcall TVisuWinform::Barycentre2Click(TObject *Sender)
5636     {
5637     TTreeNode* node=TreeView1->Selected;
5638     unsigned long id = atol(node->Text.c_str());
5639     if (id==0) return;
5640    
5641     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5642     MG_ELEMENT_GEOMETRIQUE* mggeo=NULL;
5643    
5644     int nb_geometrie=gest->get_nb_mg_geometrie();
5645     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5646     {
5647     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5648     if (mgtopo==NULL)
5649     {
5650     mgtopo=geotmp->get_mg_faceid(id);
5651     if (mgtopo!=NULL) mggeo=geotmp->get_mg_faceid(id)->get_surface();
5652     }
5653     if (mgtopo==NULL)
5654     {
5655     mgtopo=geotmp->get_mg_areteid(id);
5656     if (mgtopo!=NULL) mggeo=geotmp->get_mg_areteid(id)->get_courbe();
5657     }
5658     if (mgtopo==NULL)
5659     {
5660     mgtopo=geotmp->get_mg_sommetid(id);
5661     if (mgtopo!=NULL) mggeo=geotmp->get_mg_sommetid(id)->get_point();
5662     }
5663     }
5664     if (mgtopo==NULL) return;
5665     OT_VECTEUR_4DD vec=mggeo->get_vectorisation().calcule_barycentre() ;
5666     Taffmat *child=new Taffmat(Application);
5667     char mess[300];
5668     sprintf(mess,"Vectorisation de l'entité geometrique %lu support de %lu. Le barycentre",mggeo->get_id(),id);
5669     child->Caption=mess;
5670     child->StringGrid1->ColCount=1;
5671     child->StringGrid1->RowCount=5;
5672     child->StringGrid1->FixedRows=1;
5673    
5674    
5675     sprintf(mess,"Barycentre");
5676     child->StringGrid1->Cells[0][0]=mess;
5677     child->StringGrid1->Cells[0][1]=vec.get_x().get_x();
5678     child->StringGrid1->Cells[0][2]=vec.get_y().get_x();
5679     child->StringGrid1->Cells[0][3]=vec.get_z().get_x();
5680     child->StringGrid1->Cells[0][4]=vec.get_w().get_x();
5681     }
5682     //---------------------------------------------------------------------------
5683    
5684     void __fastcall TVisuWinform::Tenseurmetrique1Click(TObject *Sender)
5685     {
5686     TTreeNode* node=TreeView1->Selected;
5687     unsigned long id = atol(node->Text.c_str());
5688     if (id==0) return;
5689    
5690     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5691     MG_ELEMENT_GEOMETRIQUE* mggeo=NULL;
5692    
5693     int nb_geometrie=gest->get_nb_mg_geometrie();
5694     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5695     {
5696     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5697     if (mgtopo==NULL)
5698     {
5699     mgtopo=geotmp->get_mg_faceid(id);
5700     if (mgtopo!=NULL) mggeo=geotmp->get_mg_faceid(id)->get_surface();
5701     }
5702     if (mgtopo==NULL)
5703     {
5704     mgtopo=geotmp->get_mg_areteid(id);
5705     if (mgtopo!=NULL) mggeo=geotmp->get_mg_areteid(id)->get_courbe();
5706     }
5707     if (mgtopo==NULL)
5708     {
5709     mgtopo=geotmp->get_mg_sommetid(id);
5710     if (mgtopo!=NULL) mggeo=geotmp->get_mg_sommetid(id)->get_point();
5711     }
5712     }
5713     if (mgtopo==NULL) return;
5714     OT_TENSEUR tens=mggeo->get_vectorisation().calcule_tenseur_metrique();
5715     Taffmat *child=new Taffmat(Application);
5716     char mess[300];
5717     sprintf(mess,"Vectorisation de l'entité geometrique %lu support de %lu. Le tenseur métrique",mggeo->get_id(),id);
5718     child->Caption=mess;
5719     child->StringGrid1->ColCount=tens.Get_NbCols()+1;
5720     child->StringGrid1->RowCount=tens.Get_NbRows()+1 ;
5721     child->StringGrid1->FixedRows=1;
5722     child->StringGrid1->FixedCols=1;
5723     for (int i=0;i<tens.Get_NbCols() ;i++)
5724     {
5725     char mess[255];
5726     sprintf(mess,"%c%c",i/26+65,i%26+65);
5727     child->StringGrid1->Cells[i+1][0]=mess;
5728     }
5729     for (int i=0;i<tens.Get_NbRows() ;i++)
5730     {
5731     char mess[255];
5732     sprintf(mess,"%c%c",i/26+65,i%26+65);
5733     child->StringGrid1->Cells[0][i+1]=mess;
5734     }
5735    
5736     for (int i=0;i<tens.Get_NbCols() ;i++)
5737     for (int j=0;j<tens.Get_NbRows() ;j++)
5738     {
5739     child->StringGrid1->Cells[i+1][j+1]=tens(j,i).get_x();
5740     }
5741     }
5742     //---------------------------------------------------------------------------
5743    
5744     void __fastcall TVisuWinform::Tenseurinertieldanslabaseglobale1Click(
5745     TObject *Sender)
5746     {
5747     TTreeNode* node=TreeView1->Selected;
5748     unsigned long id = atol(node->Text.c_str());
5749     if (id==0) return;
5750    
5751     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5752     MG_ELEMENT_GEOMETRIQUE* mggeo=NULL;
5753    
5754     int nb_geometrie=gest->get_nb_mg_geometrie();
5755     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5756     {
5757     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5758     if (mgtopo==NULL)
5759     {
5760     mgtopo=geotmp->get_mg_faceid(id);
5761     if (mgtopo!=NULL) mggeo=geotmp->get_mg_faceid(id)->get_surface();
5762     }
5763     if (mgtopo==NULL)
5764     {
5765     mgtopo=geotmp->get_mg_areteid(id);
5766     if (mgtopo!=NULL) mggeo=geotmp->get_mg_areteid(id)->get_courbe();
5767     }
5768     if (mgtopo==NULL)
5769     {
5770     mgtopo=geotmp->get_mg_sommetid(id);
5771     if (mgtopo!=NULL) mggeo=geotmp->get_mg_sommetid(id)->get_point();
5772     }
5773     }
5774     if (mgtopo==NULL) return;
5775     OT_TENSEUR tens=mggeo->get_vectorisation().calcule_tenseur_inertie_au_barycentre();
5776     Taffmat *child=new Taffmat(Application);
5777     char mess[300];
5778     sprintf(mess,"Vectorisation de l'entité geometrique %lu support de %lu. Le tenseur d'inertie dans la base globale",mggeo->get_id(),id);
5779     child->Caption=mess;
5780     child->StringGrid1->ColCount=tens.Get_NbCols()+1;
5781     child->StringGrid1->RowCount=tens.Get_NbRows()+1 ;
5782     child->StringGrid1->FixedRows=1;
5783     child->StringGrid1->FixedCols=1;
5784     for (int i=0;i<tens.Get_NbCols() ;i++)
5785     {
5786     char mess[255];
5787     sprintf(mess,"%c%c",i/26+65,i%26+65);
5788     child->StringGrid1->Cells[i+1][0]=mess;
5789     }
5790     for (int i=0;i<tens.Get_NbRows() ;i++)
5791     {
5792     char mess[255];
5793     sprintf(mess,"%c%c",i/26+65,i%26+65);
5794     child->StringGrid1->Cells[0][i+1]=mess;
5795     }
5796    
5797     for (int i=0;i<tens.Get_NbCols() ;i++)
5798     for (int j=0;j<tens.Get_NbRows() ;j++)
5799     {
5800     child->StringGrid1->Cells[i+1][j+1]=tens(j,i).get_x();
5801     }
5802     }
5803     //---------------------------------------------------------------------------
5804    
5805     void __fastcall TVisuWinform::Tenseurinertieldanslabaseprincipale1Click(
5806     TObject *Sender)
5807     {
5808     TTreeNode* node=TreeView1->Selected;
5809     unsigned long id = atol(node->Text.c_str());
5810     if (id==0) return;
5811    
5812     MG_ELEMENT_TOPOLOGIQUE* mgtopo=NULL;
5813     MG_ELEMENT_GEOMETRIQUE* mggeo=NULL;
5814    
5815     int nb_geometrie=gest->get_nb_mg_geometrie();
5816     for (int i=0;i<nb_geometrie && mgtopo==NULL;i++)
5817     {
5818     MG_GEOMETRIE* geotmp=gest->get_mg_geometrie(i);
5819     if (mgtopo==NULL)
5820     {
5821     mgtopo=geotmp->get_mg_faceid(id);
5822     if (mgtopo!=NULL) mggeo=geotmp->get_mg_faceid(id)->get_surface();
5823     }
5824     if (mgtopo==NULL)
5825     {
5826     mgtopo=geotmp->get_mg_areteid(id);
5827     if (mgtopo!=NULL) mggeo=geotmp->get_mg_areteid(id)->get_courbe();
5828     }
5829     if (mgtopo==NULL)
5830     {
5831     mgtopo=geotmp->get_mg_sommetid(id);
5832     if (mgtopo!=NULL) mggeo=geotmp->get_mg_sommetid(id)->get_point();
5833     }
5834     }
5835     if (mgtopo==NULL) return;
5836     OT_TENSEUR tens=mggeo->get_vectorisation().calcule_tenseur_inertie_base_locale();
5837     Taffmat *child=new Taffmat(Application);
5838     char mess[300];
5839     sprintf(mess,"Vectorisation de l'entité %lu support de %lu. Le tenseur d'inertie dans la base globale",mggeo->get_id(),id);
5840     child->Caption=mess;
5841     child->StringGrid1->ColCount=tens.Get_NbCols()+1;
5842     child->StringGrid1->RowCount=tens.Get_NbRows()+1 ;
5843     child->StringGrid1->FixedRows=1;
5844     child->StringGrid1->FixedCols=1;
5845     for (int i=0;i<tens.Get_NbCols() ;i++)
5846     {
5847     char mess[255];
5848     sprintf(mess,"%c%c",i/26+65,i%26+65);
5849     child->StringGrid1->Cells[i+1][0]=mess;
5850     }
5851     for (int i=0;i<tens.Get_NbRows() ;i++)
5852     {
5853     char mess[255];
5854     sprintf(mess,"%c%c",i/26+65,i%26+65);
5855     child->StringGrid1->Cells[0][i+1]=mess;
5856     }
5857    
5858     for (int i=0;i<tens.Get_NbCols() ;i++)
5859     for (int j=0;j<tens.Get_NbRows() ;j++)
5860     {
5861     child->StringGrid1->Cells[i+1][j+1]=tens(j,i).get_x();
5862     }
5863     }
5864     //---------------------------------------------------------------------------
5865