ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mailleur/src/main.cpp
Revision: 62
Committed: Fri Nov 16 16:46:00 2007 UTC (17 years, 7 months ago) by francois
Original Path: magic/app/mailleur/mailleur/src/main.cpp
File size: 8790 byte(s)
Log Message:
Nouvelle version de VMM avec couleur configurable et affichage de l 'origine des mailles
Nouveau prog de transfert
Nouvelle version de mailleur avec toutes les options disponibles

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     if (argc<3) return 1;
64 francois 56 char fichier[1000],fichier2[1000],fichiercarte[1000];
65     int typecarte,niveau=3,numgeometrie=0,adapt=0,nummaillage=0;
66     int exportgmsh=0;
67 francois 62 int visufront=0;
68     int analyse=0;
69 francois 56 int diff=0;
70 francois 62 int niveauopt=2;
71 5 double eps,dg,prioritemetrique=0.65;
72 francois 62 double limiteadapt=0.25;
73 5 for (int i=0;i<argc;i++)
74     {
75     if (strcmp(argv[i],"-magic")==0) strcpy(fichier,argv[i+1]);
76     if (strcmp(argv[i],"-typecarte")==0) typecarte=atoi(argv[i+1]);
77     if (strcmp(argv[i],"-carte")==0) strcpy(fichiercarte,argv[i+1]);
78     if (strcmp(argv[i],"-eng")==0) dg=atof(argv[i+1]);
79     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
80     if (strcmp(argv[i],"-niveau")==0) niveau=atoi(argv[i+1]);
81     if (strcmp(argv[i],"-prioritemetrique")==0) prioritemetrique=atof(argv[i+1]);
82     if (strcmp(argv[i],"-numgeo")==0) numgeometrie=atoi(argv[i+1]);
83 francois 56 if (strcmp(argv[i],"-adapt")==0) adapt=1;
84     if (strcmp(argv[i],"-nummai")==0) nummaillage=atoi(argv[i+1]);
85 francois 62 if (strcmp(argv[i],"-exportgmsh")==0) exportgmsh=1;
86     if (strcmp(argv[i],"-visufront")==0) visufront=1;
87     if (strcmp(argv[i],"-analyse")==0) analyse=1;
88 francois 56 if (strcmp(argv[i],"-out")==0) {strcpy(fichier2,argv[i+1]);diff=1;}
89 francois 62 if (strcmp(argv[i],"-niveauopt")==0) {niveauopt=atoi(argv[i+1]);}
90     if (strcmp(argv[i],"-limitadapt")==0) {limiteadapt=atof(argv[i+1]);}
91 5 }
92     char message[500];
93     char nomtypecarte[9][9]={"Standard","Fichier"};
94 francois 56 if (adapt)
95     {
96     affiche("Adaptation de maillage");
97     sprintf(message," Fichier magic : %s",fichier);affiche(message);
98     sprintf(message," Numero de maillage : %d",nummaillage);affiche(message);
99     sprintf(message," Carte : %s",fichiercarte);affiche(message);
100     MG_FILE gest(fichier);
101     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummaillage);
102     FCT_GENERATEUR_3D<4> carte;
103     FCT_TAILLE* metrique;
104     carte.lire(fichiercarte);
105     metrique=&carte;
106 francois 62 if (diff) strcpy(fichier,fichier2);
107 francois 56 MG_MAILLAGE* nvmai=new MG_MAILLAGE(mai->get_mg_geometrie());
108     gest.ajouter_mg_maillage(nvmai);
109 francois 62 MAILLEUR_ADAPTATIF mesh(mai,nvmai,metrique,limiteadapt);
110 francois 56 mesh.active_affichage(affiche);
111 francois 62 if (visufront) mesh.active_log(fichier);
112 francois 56 mesh.maille();
113 francois 62 if (analyse)
114     {
115     MAILLEUR3D m3d(nvmai,nvmai->get_mg_geometrie(),NULL,metrique);
116     affiche("Analyse maillage");
117     double vol;
118     m3d.analyse_maillage_obtenu(vol);
119     char mess[100];
120     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,nvmai->get_nb_mg_tetra());
121     affiche(mess);
122     sprintf(mess," erreur %f%",(nvmai->get_nb_mg_tetra()-vol)*100./vol);
123     affiche(mess);
124     }
125 francois 56 affiche("Enregistrement");
126 francois 62 //strcat(fichier,".magic");
127 francois 56 gest.enregistrer(fichier);
128     if (exportgmsh)
129     {
130     affiche("Exportation GMSH");
131     MG_EXPORT exp;
132     exp.gmsh(mai,fichier);
133     }
134     affiche("Fin");
135     return 1;
136     }
137     affiche("Paramétre d'étude");
138 5 sprintf(message," Fichier magic : %s",fichier);affiche(message);
139 francois 56 sprintf(message," Numero de géométrie : %d",numgeometrie);affiche(message);
140 5 sprintf(message," Type de carte : %s",nomtypecarte[typecarte-1]);affiche(message);
141     if (typecarte==1)
142     {
143     sprintf(message," Eng : %f",dg);affiche(message);
144     sprintf(message," eps : %f",eps);affiche(message);
145     }
146     if (typecarte==2)
147     {
148     sprintf(message," Fichier carte : %s",fichiercarte);affiche(message);
149     }
150     sprintf(message," Parametre de metrique : %2.2f%",prioritemetrique*100);affiche(message);
151     affiche("Lecture du fichier M.A.G.i.C");
152     MG_FILE gest(fichier);
153     MG_GEOMETRIE* mggeo=gest.get_mg_geometrie(numgeometrie);
154     MG_MAILLAGE* mgmai=new MG_MAILLAGE(mggeo);
155     gest.ajouter_mg_maillage(mgmai);
156     FCT_GENERATEUR_3D<4> carte;
157     FCT_TAILLE* metrique;
158     MAILLEUR2D::priorite_metrique=prioritemetrique;
159     if (typecarte==1)
160     {
161     metrique=NULL;
162     MAILLEUR::epsilon=eps;
163     MAILLEUR::distance_maximale=dg;
164     }
165     if (typecarte==2)
166     {
167     affiche("Lecture carte de taille");
168     carte.lire(fichiercarte);
169     metrique=&carte;
170     }
171     if (niveau>-1)
172     {
173     affiche("MAILLAGE 0D");
174     MAILLEUR0D m0d(mgmai,mggeo);
175     m0d.maille();
176     }
177     if (niveau>0)
178     {
179     affiche("MAILLAGE 1D");
180     int nb=mggeo->get_nb_mg_arete();
181     for (int i=0;i<nb;i++)
182     {
183     MG_ARETE* arete=mggeo->get_mg_arete(i);
184     MAILLEUR1D m1d(mgmai,mggeo,arete,metrique);
185     m1d.maille();
186     }
187     }
188     if (niveau>1)
189     {
190     affiche("MAILLAGE 2D");
191     int nb=mggeo->get_nb_mg_face();
192     for (int i=0;i<nb;i++)
193     {
194     char mess[100];
195     sprintf(mess," face %d",i);
196     affiche(mess);
197     MG_FACE* mgface=mggeo->get_mg_face(i);
198     MAILLEUR2D m2d(mgmai,mggeo,mgface,metrique);
199     m2d.maille();
200     }
201     }
202 francois 62 if (diff) strcpy(fichier,fichier2);
203 5 if (niveau==3)
204     {
205     affiche("MAILLAGE 3D");
206 francois 56 int nb=mggeo->get_nb_mg_volume();
207     for (int i=0;i<nb;i++)
208     {
209     MG_VOLUME* mgvol=mggeo->get_mg_volume(i);
210     MAILLEUR3D m3d(mgmai,mggeo,mgvol,metrique);
211     m3d.active_affichage(affiche);
212 francois 62 m3d.change_niveau_optimisation(niveauopt);
213     if (visufront) m3d.active_log(fichier);
214 francois 56 m3d.maille(mgvol);
215 francois 62 if (analyse)
216     {
217     affiche("Analyse maillage");
218     double vol;
219     m3d.analyse_maillage_obtenu(vol);
220     char mess[100];
221     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,mgmai->get_nb_mg_tetra());
222     affiche(mess);
223     sprintf(mess," erreur %f%",(mgmai->get_nb_mg_tetra()-vol)*100./vol);
224     affiche(mess);
225     }
226 francois 56 }
227 5 }
228     affiche("Enregistrement");
229     gest.enregistrer(fichier);
230 francois 56 if (exportgmsh)
231     {
232     affiche("Exportation GMSH");
233     MG_EXPORT exp;
234     exp.gmsh(mgmai,fichier);
235     }
236 5 affiche("Fin");
237     return 0;
238     }
239    
240    
241    
242     #pragma package(smart_init)