ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mailleur/src/main.cpp
Revision: 106
Committed: Mon Jun 16 08:02:08 2008 UTC (17 years ago) by francois
Original Path: magic/app/mailleur/mailleur/src/main.cpp
File size: 11962 byte(s)
Log Message:
Dans fichier exportation des couleurs de vectorisation dans GMSH
Dans template ajout d.un tag dans la grille plus ajout de keycode pour coder une cellule
dans mailleur possibilite d ajouter un maillage octal dans un fichier magic existant

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�e et Vincent FRANCOIS
5     // D�artement de G�ie M�anique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�artement
8     // de g�ie m�anique de l'Universit�du Qu�ec �
9     // Trois Rivi�es
10     // Les librairies ne peuvent �re utilis�s sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // main.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 �11H25
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23     #include "gestionversion.h"
24     #ifdef WINDOWS_VERSION
25     #include "fenetre.h"
26     #endif
27    
28     #pragma hdrstop
29    
30     #include "main.h"
31     #include "mg_file.h"
32     #include "fct_taille.h"
33     #include "mailleur0d.h"
34     #include "mailleur1d.h"
35     #include "mailleur2d.h"
36     #include "mailleur3d.h"
37 francois 56 #include "mailleur_adaptatif.h"
38 5 #include "mailleur3d_dia.h"
39     #include "fct_generateur_3D.h"
40 francois 56 #include "mg_export.h"
41 francois 62 #include "step_import.h"
42     #include "acis_import.h"
43 5
44     //---------------------------------------------------------------------------
45    
46     void affiche(char* message)
47     {
48     #ifdef WINDOWS_VERSION
49     Form1->Memo1->Lines->Add(message);
50     #else
51     std::cout << message << std::endl;
52     #endif
53     }
54    
55    
56    
57     #ifdef WINDOWS_VERSION
58     int amain(int argc,char **argv)
59     #else
60     int main(int argc,char **argv)
61     #endif
62     {
63 francois 103 if (argc<3)
64     {affiche(" \
65     if (strcmp(argv[i],\"-magic\")==0) strcpy(fichier,argv[i+1]);\n\
66     if (strcmp(argv[i],\"-typecarte\")==0) typecarte=atoi(argv[i+1]);\n\
67     if (strcmp(argv[i],\"-carte\")==0) strcpy(fichiercarte,argv[i+1]);\n\
68     if (strcmp(argv[i],\"-eng\")==0) dg=atof(argv[i+1]);\n\
69     if (strcmp(argv[i],\"-eps\")==0) eps=atof(argv[i+1]);\n\
70     if (strcmp(argv[i],\"-niveau\")==0) niveau=atoi(argv[i+1]);\n\
71     if (strcmp(argv[i],\"-prioritemetrique\")==0) prioritemetrique=atof(argv[i+1]);\n\
72     if (strcmp(argv[i],\"-numgeo\")==0) numgeometrie=atoi(argv[i+1]);\n\
73     if (strcmp(argv[i],\"-adapt\")==0) adapt=1;\n\
74     if (strcmp(argv[i],\"-nummai\")==0) nummaillage=atoi(argv[i+1]);\n\
75     if (strcmp(argv[i],\"-exportgmsh\")==0) exportgmsh=1;\n\
76     if (strcmp(argv[i],\"-visufront\")==0) visufront=1;\n\
77     if (strcmp(argv[i],\"-analyse\")==0) analyse=1;\n\
78     if (strcmp(argv[i],\"-out\")==0) {strcpy(fichier2,argv[i+1]);diff=1;}\n\
79     if (strcmp(argv[i],\"-niveauopt\")==0) {niveauopt=atoi(argv[i+1]);}\n\
80     if (strcmp(argv[i],\"-limitadapt\")==0) {limiteadapt=atof(argv[i+1]);}\n\
81     if (strcmp(argv[i],\"-octal\")==0) octal=1;\n\
82     if (strcmp(argv[i],\"-verif\")==0) verif=1;\n\
83     if (strcmp(argv[i],\"-coef\")==0) coef=atof(argv[i+1]);\n\
84     if (strcmp(argv[i],\"-help\")==0) ");
85    
86     return 1;}
87 francois 56 char fichier[1000],fichier2[1000],fichiercarte[1000];
88     int typecarte,niveau=3,numgeometrie=0,adapt=0,nummaillage=0;
89     int exportgmsh=0;
90 francois 62 int visufront=0;
91     int analyse=0;
92 francois 56 int diff=0;
93 francois 62 int niveauopt=2;
94 francois 98 int octal=0;
95     int verif=0;
96     double coef=2.;
97 5 double eps,dg,prioritemetrique=0.65;
98 francois 62 double limiteadapt=0.25;
99 5 for (int i=0;i<argc;i++)
100     {
101     if (strcmp(argv[i],"-magic")==0) strcpy(fichier,argv[i+1]);
102     if (strcmp(argv[i],"-typecarte")==0) typecarte=atoi(argv[i+1]);
103     if (strcmp(argv[i],"-carte")==0) strcpy(fichiercarte,argv[i+1]);
104     if (strcmp(argv[i],"-eng")==0) dg=atof(argv[i+1]);
105     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
106     if (strcmp(argv[i],"-niveau")==0) niveau=atoi(argv[i+1]);
107     if (strcmp(argv[i],"-prioritemetrique")==0) prioritemetrique=atof(argv[i+1]);
108     if (strcmp(argv[i],"-numgeo")==0) numgeometrie=atoi(argv[i+1]);
109 francois 56 if (strcmp(argv[i],"-adapt")==0) adapt=1;
110     if (strcmp(argv[i],"-nummai")==0) nummaillage=atoi(argv[i+1]);
111 francois 62 if (strcmp(argv[i],"-exportgmsh")==0) exportgmsh=1;
112     if (strcmp(argv[i],"-visufront")==0) visufront=1;
113     if (strcmp(argv[i],"-analyse")==0) analyse=1;
114 francois 56 if (strcmp(argv[i],"-out")==0) {strcpy(fichier2,argv[i+1]);diff=1;}
115 francois 62 if (strcmp(argv[i],"-niveauopt")==0) {niveauopt=atoi(argv[i+1]);}
116     if (strcmp(argv[i],"-limitadapt")==0) {limiteadapt=atof(argv[i+1]);}
117 francois 98 if (strcmp(argv[i],"-octal")==0) octal=1;
118     if (strcmp(argv[i],"-verif")==0) verif=1;
119 francois 103 if (strcmp(argv[i],"-coef")==0) coef=atof(argv[i+1]);
120    
121 5 }
122     char message[500];
123     char nomtypecarte[9][9]={"Standard","Fichier"};
124 francois 56 if (adapt)
125     {
126     affiche("Adaptation de maillage");
127     sprintf(message," Fichier magic : %s",fichier);affiche(message);
128     sprintf(message," Numero de maillage : %d",nummaillage);affiche(message);
129     sprintf(message," Carte : %s",fichiercarte);affiche(message);
130     MG_FILE gest(fichier);
131     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummaillage);
132     FCT_GENERATEUR_3D<4> carte;
133     FCT_TAILLE* metrique;
134     carte.lire(fichiercarte);
135     metrique=&carte;
136 francois 62 if (diff) strcpy(fichier,fichier2);
137 francois 56 MG_MAILLAGE* nvmai=new MG_MAILLAGE(mai->get_mg_geometrie());
138     gest.ajouter_mg_maillage(nvmai);
139 francois 62 MAILLEUR_ADAPTATIF mesh(mai,nvmai,metrique,limiteadapt);
140 francois 56 mesh.active_affichage(affiche);
141 francois 62 if (visufront) mesh.active_log(fichier);
142 francois 56 mesh.maille();
143 francois 62 if (analyse)
144     {
145     MAILLEUR3D m3d(nvmai,nvmai->get_mg_geometrie(),NULL,metrique);
146     affiche("Analyse maillage");
147     double vol;
148     m3d.analyse_maillage_obtenu(vol);
149     char mess[100];
150     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,nvmai->get_nb_mg_tetra());
151     affiche(mess);
152     sprintf(mess," erreur %f%",(nvmai->get_nb_mg_tetra()-vol)*100./vol);
153     affiche(mess);
154     }
155 francois 56 affiche("Enregistrement");
156 francois 62 //strcat(fichier,".magic");
157 francois 56 gest.enregistrer(fichier);
158     if (exportgmsh)
159     {
160     affiche("Exportation GMSH");
161     MG_EXPORT exp;
162     exp.gmsh(mai,fichier);
163     }
164     affiche("Fin");
165     return 1;
166     }
167 francois 98 if (octal)
168     {
169     sprintf(message," Fichier magic : %s",fichier);affiche(message);
170     sprintf(message," Type de carte : %s",nomtypecarte[1]);affiche(message);
171     sprintf(message," Fichier carte : %s",fichiercarte);affiche(message);
172     affiche("Lecture carte de taille");
173     FCT_GENERATEUR_3D<4> carte;
174     carte.lire(fichiercarte);
175     affiche("Maillage");
176 francois 106 MG_GESTIONNAIRE* gest;
177     MG_FILE* file=new MG_FILE(fichier);
178     if (file->get_code_de_lecture()==0)
179     {
180     delete file;
181     MG_GESTIONNAIRE* gest2=new MG_GESTIONNAIRE;
182     gest=gest2;
183     }
184     else gest=file;
185 francois 98 MG_MAILLAGE* mgmai=new MG_MAILLAGE(NULL);
186 francois 106 gest->ajouter_mg_maillage(mgmai);
187 francois 98 MAILLEUR3D mailleur(&carte,mgmai);
188     mailleur.change_coef(coef);
189     mailleur.maille();
190     if (verif)
191     {
192     affiche("Verification");
193     MG_MAILLAGE* mgmai2=new MG_MAILLAGE(NULL);
194 francois 106 gest->ajouter_mg_maillage(mgmai2);
195 francois 98 mailleur.verifie_conformite_octale(mgmai,mgmai2);
196     }
197     affiche("Enregistrement");
198 francois 106 gest->enregistrer(fichier);
199 francois 98 if (exportgmsh)
200     {
201     affiche("Exportation GMSH");
202     MG_EXPORT exp;
203     exp.gmsh(mgmai,fichier);
204     }
205 francois 106 delete gest;
206     affiche("Fin");
207 francois 98 return 1;
208     }
209 francois 56 affiche("Paramétre d'étude");
210 5 sprintf(message," Fichier magic : %s",fichier);affiche(message);
211 francois 56 sprintf(message," Numero de géométrie : %d",numgeometrie);affiche(message);
212 5 sprintf(message," Type de carte : %s",nomtypecarte[typecarte-1]);affiche(message);
213     if (typecarte==1)
214     {
215     sprintf(message," Eng : %f",dg);affiche(message);
216     sprintf(message," eps : %f",eps);affiche(message);
217     }
218     if (typecarte==2)
219     {
220     sprintf(message," Fichier carte : %s",fichiercarte);affiche(message);
221     }
222     sprintf(message," Parametre de metrique : %2.2f%",prioritemetrique*100);affiche(message);
223     affiche("Lecture du fichier M.A.G.i.C");
224     MG_FILE gest(fichier);
225     MG_GEOMETRIE* mggeo=gest.get_mg_geometrie(numgeometrie);
226     MG_MAILLAGE* mgmai=new MG_MAILLAGE(mggeo);
227     gest.ajouter_mg_maillage(mgmai);
228     FCT_GENERATEUR_3D<4> carte;
229     FCT_TAILLE* metrique;
230     MAILLEUR2D::priorite_metrique=prioritemetrique;
231     if (typecarte==1)
232     {
233     metrique=NULL;
234     MAILLEUR::epsilon=eps;
235     MAILLEUR::distance_maximale=dg;
236     }
237     if (typecarte==2)
238     {
239     affiche("Lecture carte de taille");
240     carte.lire(fichiercarte);
241     metrique=&carte;
242     }
243     if (niveau>-1)
244     {
245     affiche("MAILLAGE 0D");
246     MAILLEUR0D m0d(mgmai,mggeo);
247     m0d.maille();
248     }
249     if (niveau>0)
250     {
251     affiche("MAILLAGE 1D");
252     int nb=mggeo->get_nb_mg_arete();
253 francois 103 for (int i=0;i<nb;i++)
254 5 {
255     MG_ARETE* arete=mggeo->get_mg_arete(i);
256     MAILLEUR1D m1d(mgmai,mggeo,arete,metrique);
257     m1d.maille();
258     }
259     }
260     if (niveau>1)
261     {
262     affiche("MAILLAGE 2D");
263     int nb=mggeo->get_nb_mg_face();
264     for (int i=0;i<nb;i++)
265     {
266     char mess[100];
267     sprintf(mess," face %d",i);
268     affiche(mess);
269     MG_FACE* mgface=mggeo->get_mg_face(i);
270     MAILLEUR2D m2d(mgmai,mggeo,mgface,metrique);
271     m2d.maille();
272     }
273     }
274 francois 62 if (diff) strcpy(fichier,fichier2);
275 5 if (niveau==3)
276     {
277     affiche("MAILLAGE 3D");
278 francois 56 int nb=mggeo->get_nb_mg_volume();
279     for (int i=0;i<nb;i++)
280     {
281     MG_VOLUME* mgvol=mggeo->get_mg_volume(i);
282     MAILLEUR3D m3d(mgmai,mggeo,mgvol,metrique);
283     m3d.active_affichage(affiche);
284 francois 62 m3d.change_niveau_optimisation(niveauopt);
285     if (visufront) m3d.active_log(fichier);
286 francois 56 m3d.maille(mgvol);
287 francois 62 if (analyse)
288     {
289     affiche("Analyse maillage");
290     double vol;
291     m3d.analyse_maillage_obtenu(vol);
292     char mess[100];
293     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,mgmai->get_nb_mg_tetra());
294     affiche(mess);
295     sprintf(mess," erreur %f%",(mgmai->get_nb_mg_tetra()-vol)*100./vol);
296     affiche(mess);
297     }
298 francois 56 }
299 5 }
300     affiche("Enregistrement");
301     gest.enregistrer(fichier);
302 francois 56 if (exportgmsh)
303     {
304     affiche("Exportation GMSH");
305     MG_EXPORT exp;
306     exp.gmsh(mgmai,fichier);
307     }
308 5 affiche("Fin");
309     return 0;
310     }
311    
312    
313    
314     #pragma package(smart_init)