1 |
francois |
283 |
//------------------------------------------------------------ |
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 |
francois |
432 |
#include "magic_application.h" |
31 |
francois |
283 |
#include <string.h> |
32 |
|
|
#include "mg_file.h" |
33 |
|
|
#include "fct_taille.h" |
34 |
|
|
#include "mailleur0d.h" |
35 |
|
|
#include "mailleur1d.h" |
36 |
|
|
#include "mailleur2d.h" |
37 |
|
|
#include "mailleur3d.h" |
38 |
francois |
558 |
#include "mailleur3d_maillage_partiel.h" |
39 |
francois |
283 |
#include "mailleur_adaptatif.h" |
40 |
francois |
481 |
#include "fct_generateur_3d.h" |
41 |
francois |
467 |
#include "fct_taille_fem_solution.h" |
42 |
francois |
283 |
#include "mg_export.h" |
43 |
|
|
#include "step_import.h" |
44 |
|
|
#include "acis_import.h" |
45 |
|
|
|
46 |
|
|
//--------------------------------------------------------------------------- |
47 |
|
|
|
48 |
francois |
432 |
int main(int argc,char **argv) |
49 |
francois |
283 |
{ |
50 |
francois |
432 |
std::vector<MAGIC_PARAMETRE_APPLICATION> lst; |
51 |
|
|
MAGIC_PARAMETRE_APPLICATION p1(3,(char*)"-carte",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier de carte de taille"); |
52 |
francois |
447 |
MAGIC_PARAMETRE_APPLICATION p2(4,(char*)"-niveauopt3d",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Limite supérieure des mailles à optimiser - Défaut 2"); |
53 |
francois |
432 |
MAGIC_PARAMETRE_APPLICATION p3(5,(char*)"-niveau",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Dimension limite des entités à mailler - Défaut 3"); |
54 |
|
|
MAGIC_PARAMETRE_APPLICATION p5(6,(char*)"-front",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage d'une géométrie par la méthode frontale - Defaut"); |
55 |
|
|
MAGIC_PARAMETRE_APPLICATION p6(7,(char*)"-adapt",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage adaptatif d'une géométrie maillée"); |
56 |
|
|
MAGIC_PARAMETRE_APPLICATION p4(8,(char*)"-prioritemetrique",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Valeur de la prise en compte de la métrique versus la qualité - Défaut 0.65"); |
57 |
|
|
MAGIC_PARAMETRE_APPLICATION p7(9,(char*)"-numgeo",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de géometrie à mailler - Défaut la première"); |
58 |
|
|
MAGIC_PARAMETRE_APPLICATION p8(10,(char*)"-groupe",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Groupe topologique à mailler - Défaut pas de groupe"); |
59 |
|
|
MAGIC_PARAMETRE_APPLICATION p9(11,(char*)"-analyse",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Analyse de la qualité du maillage après le maillage"); |
60 |
|
|
MAGIC_PARAMETRE_APPLICATION p10(12,(char*)"-visufront",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Activation de la visalisation dynamique du front"); |
61 |
|
|
MAGIC_PARAMETRE_APPLICATION p11(13,(char*)"-nummai",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro du maillage à adapter - Défaut le premier"); |
62 |
|
|
MAGIC_PARAMETRE_APPLICATION p12(14,(char*)"-limitadapt",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Limite inférieure en %d'erreur pour conserver les mailles"); |
63 |
francois |
447 |
MAGIC_PARAMETRE_APPLICATION p13(15,(char*)"-niveauopt2d",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Limite supérieure des mailles à optimiser - Défaut 5"); |
64 |
francois |
467 |
MAGIC_PARAMETRE_APPLICATION p14(16,(char*)"-front2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage d'une géométrie par la méthode frontale avec une carte de taille sous forme de fichier magic"); |
65 |
|
|
MAGIC_PARAMETRE_APPLICATION p15(17,(char*)"-adapt2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage adaptatif d'une géométrie maillée avec une carte de taille sous forme de fichier magic"); |
66 |
francois |
494 |
MAGIC_PARAMETRE_APPLICATION p16(18,(char*)"-enregistrer",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Enregistrement de la dernière étape (pour debbugage) - Defaut false"); |
67 |
francois |
532 |
MAGIC_PARAMETRE_APPLICATION p17(19,(char*)"-pas",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Valeur du pas d'integration - Defaut 32"); |
68 |
francois |
558 |
MAGIC_PARAMETRE_APPLICATION p18(20,(char*)"-refront",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Réparation d'un maillage 3D échoué d'une géométrie par la méthode frontale"); |
69 |
|
|
MAGIC_PARAMETRE_APPLICATION p19(21,(char*)"-refront2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Réparation d'un maillage 3D échoué d'une géométrie par la méthode frontale avec une carte de taille sous forme de fichier magic"); |
70 |
|
|
MAGIC_PARAMETRE_APPLICATION p20(22,(char*)"-numvol",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de volume à terminer de mailler - Défaut le premier"); |
71 |
francois |
283 |
|
72 |
|
|
|
73 |
|
|
|
74 |
francois |
432 |
//MAGIC_PARAMETRE_APPLICATION p7(8,(char*)"-tailleoctree",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Taille des octants par rapport à la taille souhaitée - Défaut 2."); |
75 |
|
|
//MAGIC_PARAMETRE_APPLICATION p8(9,(char*)"-fem",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Création du maillage fem"); |
76 |
|
|
//MAGIC_PARAMETRE_APPLICATION p9(10,(char*)"-degre",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Degre du maillage fem - Défaut 1"); |
77 |
francois |
532 |
p5.ajouter_dependance(1);p5.ajouter_dependance(2);p5.ajouter_dependance(3);p5.ajouter_dependance(4);p5.ajouter_dependance(5);p5.ajouter_dependance(8);p5.ajouter_dependance(9);p5.ajouter_dependance(10);p5.ajouter_dependance(11);p5.ajouter_dependance(12);p5.ajouter_dependance(15);p5.ajouter_dependance(18);p5.ajouter_dependance(19); |
78 |
|
|
p6.ajouter_dependance(1);p6.ajouter_dependance(2);p6.ajouter_dependance(3);p6.ajouter_dependance(11);p6.ajouter_dependance(12);p6.ajouter_dependance(13);p6.ajouter_dependance(14);p6.ajouter_dependance(18); |
79 |
|
|
p14.ajouter_dependance(1);p14.ajouter_dependance(2);p14.ajouter_dependance(3);p14.ajouter_dependance(4);p14.ajouter_dependance(5);p14.ajouter_dependance(8);p14.ajouter_dependance(9);p14.ajouter_dependance(10);p14.ajouter_dependance(11);p14.ajouter_dependance(12);p14.ajouter_dependance(15);p14.ajouter_dependance(18);p14.ajouter_dependance(18); |
80 |
|
|
p15.ajouter_dependance(1);p15.ajouter_dependance(2);p15.ajouter_dependance(3);p15.ajouter_dependance(11);p15.ajouter_dependance(12);p15.ajouter_dependance(13);p15.ajouter_dependance(14);p15.ajouter_dependance(18); |
81 |
francois |
558 |
p18.ajouter_dependance(1);p18.ajouter_dependance(2);p18.ajouter_dependance(3);p18.ajouter_dependance(22);p18.ajouter_dependance(13);p18.ajouter_dependance(4);p18.ajouter_dependance(8);p18.ajouter_dependance(18);p18.ajouter_dependance(19); |
82 |
|
|
p19.ajouter_dependance(1);p19.ajouter_dependance(2);p19.ajouter_dependance(3);p19.ajouter_dependance(22);p19.ajouter_dependance(13);p19.ajouter_dependance(4);p19.ajouter_dependance(8);p19.ajouter_dependance(18);p19.ajouter_dependance(19); |
83 |
francois |
432 |
lst.push_back(p1); |
84 |
|
|
lst.push_back(p2); |
85 |
|
|
lst.push_back(p3); |
86 |
|
|
lst.push_back(p5); |
87 |
|
|
lst.push_back(p6); |
88 |
|
|
lst.push_back(p4); |
89 |
|
|
lst.push_back(p7); |
90 |
|
|
lst.push_back(p8); |
91 |
|
|
lst.push_back(p9); |
92 |
|
|
lst.push_back(p10); |
93 |
|
|
lst.push_back(p11); |
94 |
|
|
lst.push_back(p12); |
95 |
francois |
447 |
lst.push_back(p13); |
96 |
francois |
467 |
lst.push_back(p14); |
97 |
|
|
lst.push_back(p15); |
98 |
francois |
494 |
lst.push_back(p16); |
99 |
francois |
532 |
lst.push_back(p17); |
100 |
francois |
558 |
lst.push_back(p18); |
101 |
|
|
lst.push_back(p19); |
102 |
|
|
lst.push_back(p20); |
103 |
francois |
432 |
|
104 |
|
|
MAGIC_APPLICATION app((char*)"Mailleur d'une géometrie par la méthode frontale",argc,argv,lst,true,true); |
105 |
|
|
if (app.get_erreur()==true) return 0; |
106 |
|
|
|
107 |
|
|
if (app.get_action()==-1) app.change_action(6); |
108 |
|
|
|
109 |
francois |
467 |
if ((app.get_action()==6) || (app.get_action()==16)) |
110 |
francois |
432 |
{ |
111 |
|
|
char fichier[500]; |
112 |
|
|
char fichiersortie[500]; |
113 |
francois |
494 |
char fichiersortie2[500]; |
114 |
francois |
432 |
char fichiercarte[500]; |
115 |
|
|
int numgeometrie; |
116 |
|
|
double prioritemetrique; |
117 |
|
|
int numgroupe; |
118 |
|
|
int niveau; |
119 |
|
|
bool analyse; |
120 |
|
|
bool visufront; |
121 |
francois |
447 |
int niveauopt3d; |
122 |
|
|
int niveauopt2d; |
123 |
francois |
467 |
int numsol,numchamp; |
124 |
francois |
494 |
bool save; |
125 |
francois |
532 |
int pas; |
126 |
francois |
432 |
app.recupere_parametre_string(1,fichier,(char*)"Fichier d'entrée manquant"); |
127 |
|
|
app.recupere_parametre_string_avec_defaut(2,fichiersortie,fichier); |
128 |
|
|
app.recupere_parametre_string(3,fichiercarte,(char*)"Fichier carte manquant"); |
129 |
|
|
app.recupere_parametre_double_avec_defaut(8,prioritemetrique,0.65); |
130 |
|
|
app.recupere_parametre_int_avec_defaut(9,numgeometrie,0); |
131 |
|
|
app.recupere_parametre_int_avec_defaut(10,numgroupe,0); |
132 |
|
|
app.recupere_parametre_int_avec_defaut(5,niveau,3); |
133 |
|
|
app.recupere_parametre_bool_avec_defaut(11,analyse,false); |
134 |
|
|
app.recupere_parametre_bool_avec_defaut(12,visufront,false); |
135 |
francois |
447 |
app.recupere_parametre_int_avec_defaut(4,niveauopt3d,2); |
136 |
|
|
app.recupere_parametre_int_avec_defaut(15,niveauopt2d,5); |
137 |
francois |
526 |
app.recupere_parametre_bool_avec_defaut(18,save,false); |
138 |
francois |
532 |
app.recupere_parametre_int_avec_defaut(19,pas,32); |
139 |
francois |
432 |
if (app.get_erreur()==true) return 0; |
140 |
|
|
char message[500]; |
141 |
francois |
494 |
strcpy(fichiersortie2,fichiersortie); |
142 |
|
|
strcat(fichiersortie2,"dbg"); |
143 |
francois |
432 |
app.affiche((char*)"Parametre d'etude du mailleur"); |
144 |
|
|
sprintf(message," Fichier magic : %s",fichier); |
145 |
|
|
app.affiche(message); |
146 |
|
|
sprintf(message," Numero de geometrie : %d",numgeometrie); |
147 |
|
|
sprintf(message," Fichier carte : %s",fichiercarte); |
148 |
|
|
app.affiche(message); |
149 |
|
|
sprintf(message," Parametre de metrique : %2.2f",prioritemetrique*100); |
150 |
|
|
app.affiche(message); |
151 |
|
|
app.affiche((char*)"Lecture du fichier M.A.G.i.C"); |
152 |
|
|
MG_FILE gest(fichier); |
153 |
|
|
MG_GEOMETRIE* mggeo; |
154 |
|
|
if (numgeometrie==0) mggeo=gest.get_mg_geometrie(numgeometrie); else mggeo=gest.get_mg_geometrieid(numgeometrie); |
155 |
|
|
MG_MAILLAGE* mgmai=new MG_MAILLAGE(mggeo); |
156 |
|
|
gest.ajouter_mg_maillage(mgmai); |
157 |
francois |
467 |
app.affiche((char*)"Lecture carte de taille"); |
158 |
francois |
432 |
FCT_TAILLE* metrique; |
159 |
francois |
467 |
if (app.get_action()==6) |
160 |
|
|
{ |
161 |
|
|
FCT_GENERATEUR_3D<4> *carte=new FCT_GENERATEUR_3D<4>; |
162 |
|
|
carte->lire(fichiercarte); |
163 |
|
|
metrique=carte; |
164 |
|
|
} |
165 |
|
|
MG_FILE *gestcarte; |
166 |
|
|
if (app.get_action()==16) |
167 |
|
|
{ |
168 |
|
|
FCT_TAILLE_FEM_SOLUTION *carte=new FCT_TAILLE_FEM_SOLUTION(fichiercarte); |
169 |
|
|
metrique=carte; |
170 |
|
|
} |
171 |
francois |
432 |
MG_GROUPE_TOPOLOGIQUE* mggt=NULL; |
172 |
|
|
if (numgroupe!=0) |
173 |
|
|
mggt=mggeo->get_mg_groupe_topologiqueid(numgroupe); |
174 |
|
|
if (niveau>-1) |
175 |
francois |
283 |
{ |
176 |
francois |
432 |
app.affiche((char*)"MAILLAGE 0D"); |
177 |
|
|
MAILLEUR0D m0d(mgmai,mggeo); |
178 |
|
|
m0d.maille(mggt); |
179 |
francois |
494 |
if (save==true) gest.enregistrer(fichiersortie2); |
180 |
francois |
283 |
} |
181 |
francois |
432 |
TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst; |
182 |
|
|
if (mggt!=NULL) |
183 |
|
|
{ |
184 |
|
|
int nb=mggt->get_nb(); |
185 |
|
|
for (int i=0;i<nb;i++) |
186 |
|
|
{ |
187 |
|
|
lst.ajouter(mggt->get(i)); |
188 |
|
|
mggt->get(i)->get_topologie_sousjacente(&lst); |
189 |
|
|
} |
190 |
|
|
} |
191 |
|
|
if (niveau>0) |
192 |
|
|
{ |
193 |
|
|
app.affiche((char*)"MAILLAGE 1D"); |
194 |
|
|
int nb=mggeo->get_nb_mg_arete(); |
195 |
|
|
for (int i=0;i<nb;i++) |
196 |
|
|
{ |
197 |
|
|
MG_ARETE* arete=mggeo->get_mg_arete(i); |
198 |
|
|
if (mggt!=NULL) |
199 |
|
|
if (lst.existe(arete)==0) continue; |
200 |
|
|
char mess[100]; |
201 |
francois |
670 |
sprintf(mess," arete %d d'identificateur %lu",i,arete->get_id()); |
202 |
francois |
432 |
app.affiche(mess); |
203 |
francois |
446 |
MAILLEUR1D m1d(mgmai,mggeo,metrique,arete); |
204 |
francois |
532 |
m1d.change_pas_integration(pas); |
205 |
francois |
432 |
m1d.maille(mggt); |
206 |
francois |
494 |
if (save==true) gest.enregistrer(fichiersortie2); |
207 |
francois |
432 |
} |
208 |
|
|
} |
209 |
|
|
if (niveau>1) |
210 |
|
|
{ |
211 |
|
|
app.affiche((char*)"MAILLAGE 2D"); |
212 |
|
|
int nb=mggeo->get_nb_mg_face(); |
213 |
|
|
for (int i=0;i<nb;i++) |
214 |
|
|
{ |
215 |
|
|
MG_FACE* mgface=mggeo->get_mg_face(i); |
216 |
|
|
if (mggt!=NULL) |
217 |
|
|
if (lst.existe(mgface)==0) continue; |
218 |
|
|
char mess[100]; |
219 |
francois |
670 |
sprintf(mess," face %d d'identificateur %lu",i,mgface->get_id()); |
220 |
francois |
432 |
app.affiche(mess); |
221 |
francois |
446 |
MAILLEUR2D m2d(mgmai,mggeo,metrique,mgface); |
222 |
francois |
532 |
m2d.change_pas_integration(pas); |
223 |
francois |
447 |
m2d.change_niveau_optimisation(niveauopt2d); |
224 |
francois |
558 |
m2d.change_priorite_metrique(prioritemetrique); |
225 |
francois |
696 |
m2d.active_affichage(app.affiche); |
226 |
|
|
m2d.maille(mggt); |
227 |
francois |
494 |
if (save==true) gest.enregistrer(fichiersortie2); |
228 |
francois |
432 |
} |
229 |
|
|
} |
230 |
|
|
if (niveau==3) |
231 |
|
|
{ |
232 |
|
|
app.affiche((char*)"MAILLAGE 3D"); |
233 |
|
|
int nb=mggeo->get_nb_mg_volume(); |
234 |
|
|
for (int i=0;i<nb;i++) |
235 |
|
|
{ |
236 |
|
|
MG_VOLUME* mgvol=mggeo->get_mg_volume(i); |
237 |
|
|
if (mggt!=NULL) |
238 |
|
|
if (lst.existe(mgvol)==0) continue; |
239 |
francois |
532 |
MAILLEUR3D m3d(mgmai,mggeo,metrique,save,mgvol); |
240 |
francois |
432 |
m3d.active_affichage(app.affiche); |
241 |
francois |
447 |
m3d.change_niveau_optimisation(niveauopt3d); |
242 |
francois |
558 |
m3d.change_priorite_metrique(prioritemetrique); |
243 |
francois |
432 |
if (visufront) m3d.active_log(fichiersortie); |
244 |
francois |
494 |
if (save==true) m3d.change_nom_fichierdbg(fichiersortie2); |
245 |
francois |
532 |
m3d.change_pas_integration(pas); |
246 |
francois |
494 |
m3d.maille(mgvol); |
247 |
|
|
if (save==true) gest.enregistrer(fichiersortie2); |
248 |
francois |
432 |
if (analyse) |
249 |
|
|
{ |
250 |
|
|
app.affiche((char*)"Analyse maillage"); |
251 |
|
|
double vol;int tab[4]; |
252 |
|
|
m3d.analyse_maillage_obtenu(vol,tab); |
253 |
|
|
char mess[100]; |
254 |
|
|
sprintf(mess," 1) Respect de la carte de taille"); |
255 |
|
|
app.affiche(mess); |
256 |
|
|
sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,mgmai->get_nb_mg_tetra()); |
257 |
|
|
app.affiche(mess); |
258 |
|
|
sprintf(mess," erreur : %.2f%%",(mgmai->get_nb_mg_tetra()-vol)*100./vol); |
259 |
|
|
app.affiche(mess); |
260 |
|
|
sprintf(mess," 2) Qualite du maillage"); |
261 |
|
|
app.affiche(mess); |
262 |
|
|
sprintf(mess," nombre de tetra bon (qualite>0.5) : %d (%.2f%%)",tab[3],tab[3]*100./mgmai->get_nb_mg_tetra()); |
263 |
|
|
app.affiche(mess); |
264 |
|
|
sprintf(mess," nombre de tetra acceptable (qualite>0.2) : %d (%.2f%%) ",tab[2],tab[2]*100./mgmai->get_nb_mg_tetra()); |
265 |
|
|
app.affiche(mess); |
266 |
|
|
sprintf(mess," nombre de tetra moyen (qualite>0.1) : %d (%.2f%%) ",tab[1],tab[1]*100./mgmai->get_nb_mg_tetra()); |
267 |
|
|
app.affiche(mess); |
268 |
|
|
sprintf(mess," nombre de tetra mauvais (qualite>0.) : %d (%.2f%%) ",tab[0],tab[0]*100./mgmai->get_nb_mg_tetra()); |
269 |
|
|
app.affiche(mess); |
270 |
|
|
} |
271 |
|
|
} |
272 |
|
|
} |
273 |
|
|
app.affiche((char*)"Enregistrement"); |
274 |
francois |
449 |
gest.enregistrer(fichiersortie); |
275 |
francois |
467 |
if (app.get_action()==6) |
276 |
|
|
delete metrique; |
277 |
|
|
if (app.get_action()==16) |
278 |
|
|
{ |
279 |
|
|
delete metrique; |
280 |
|
|
delete gestcarte; |
281 |
|
|
} |
282 |
francois |
603 |
//app.affiche((char*)"Fin"); |
283 |
francois |
432 |
|
284 |
|
|
} |
285 |
|
|
|
286 |
francois |
467 |
if ((app.get_action()==7)||(app.get_action()==17)) |
287 |
francois |
432 |
{ |
288 |
|
|
char fichier[500]; |
289 |
|
|
char fichiersortie[500]; |
290 |
|
|
char fichiercarte[500]; |
291 |
|
|
int nummaillage; |
292 |
|
|
double prioritemetrique; |
293 |
|
|
bool analyse; |
294 |
|
|
bool visufront; |
295 |
|
|
double limiteadapt; |
296 |
francois |
467 |
int numsol,numchamp; |
297 |
francois |
532 |
int pas; |
298 |
francois |
432 |
app.recupere_parametre_string(1,fichier,(char*)"Fichier d'entrée manquant"); |
299 |
|
|
app.recupere_parametre_string_avec_defaut(2,fichiersortie,fichier); |
300 |
|
|
app.recupere_parametre_string(3,fichiercarte,(char*)"Fichier carte manquant"); |
301 |
|
|
app.recupere_parametre_double_avec_defaut(8,prioritemetrique,0.65); |
302 |
|
|
app.recupere_parametre_int_avec_defaut(13,nummaillage,0); |
303 |
|
|
app.recupere_parametre_bool_avec_defaut(11,analyse,false); |
304 |
|
|
app.recupere_parametre_bool_avec_defaut(12,visufront,false); |
305 |
francois |
532 |
app.recupere_parametre_double(14,limiteadapt,(char*)"Valeur limite d'adaptation manquante"); |
306 |
|
|
app.recupere_parametre_int_avec_defaut(19,pas,32); |
307 |
francois |
467 |
if (app.get_action()==17) |
308 |
|
|
{ |
309 |
|
|
app.recupere_parametre_int_avec_defaut(18,numsol,0); |
310 |
|
|
app.recupere_parametre_int_avec_defaut(19,numchamp,0); |
311 |
|
|
} |
312 |
francois |
432 |
if (app.get_erreur()==true) return 0; |
313 |
|
|
char message[500]; |
314 |
|
|
app.affiche((char*)"Adaptation de maillage"); |
315 |
|
|
sprintf(message," Fichier magic : %s",fichier); |
316 |
|
|
app.affiche(message); |
317 |
|
|
printf(message," Numero de maillage : %d",nummaillage); |
318 |
|
|
app.affiche(message); |
319 |
|
|
sprintf(message," Carte : %s",fichiercarte); |
320 |
|
|
app.affiche(message); |
321 |
|
|
MG_FILE gest(fichier); |
322 |
|
|
MG_MAILLAGE* mai; |
323 |
|
|
if (nummaillage==0) mai=gest.get_mg_maillage(nummaillage); else mai=gest.get_mg_maillageid(nummaillage); |
324 |
|
|
FCT_TAILLE* metrique; |
325 |
francois |
467 |
if (app.get_action()==7) |
326 |
|
|
{ |
327 |
|
|
FCT_GENERATEUR_3D<4> *carte=new FCT_GENERATEUR_3D<4>; |
328 |
|
|
carte->lire(fichiercarte); |
329 |
|
|
metrique=carte; |
330 |
|
|
} |
331 |
|
|
MG_FILE *gestcarte; |
332 |
|
|
if (app.get_action()==17) |
333 |
|
|
{ |
334 |
|
|
FCT_TAILLE_FEM_SOLUTION *carte=new FCT_TAILLE_FEM_SOLUTION(fichiercarte); |
335 |
|
|
metrique=carte; |
336 |
|
|
} |
337 |
francois |
432 |
MG_MAILLAGE* nvmai=new MG_MAILLAGE(mai->get_mg_geometrie()); |
338 |
|
|
gest.ajouter_mg_maillage(nvmai); |
339 |
|
|
MAILLEUR_ADAPTATIF mesh(mai,nvmai,metrique,limiteadapt); |
340 |
francois |
532 |
mesh.change_pas_integration(pas); |
341 |
francois |
432 |
mesh.active_affichage(app.affiche); |
342 |
|
|
if (visufront) mesh.active_log(fichier); |
343 |
|
|
mesh.maille(); |
344 |
|
|
if (analyse) |
345 |
|
|
{ |
346 |
francois |
494 |
MAILLEUR3D m3d(nvmai,nvmai->get_mg_geometrie(),metrique,false); |
347 |
francois |
432 |
app.affiche((char*)"Analyse maillage"); |
348 |
|
|
double vol;int tab[4]; |
349 |
|
|
m3d.analyse_maillage_obtenu(vol,tab); |
350 |
|
|
char mess[100]; |
351 |
|
|
sprintf(mess," 1) Respect de la carte de taille"); |
352 |
|
|
app.affiche(mess); |
353 |
|
|
sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,nvmai->get_nb_mg_tetra()); |
354 |
|
|
app.affiche(mess); |
355 |
|
|
sprintf(mess," erreur : %.2f%%",(nvmai->get_nb_mg_tetra()-vol)*100./vol); |
356 |
|
|
app.affiche(mess); |
357 |
|
|
sprintf(mess," 2) Qualite du maillage"); |
358 |
|
|
app.affiche(mess); |
359 |
|
|
sprintf(mess," nombre de tetra bon (qualite>0.5) : %d (%.2f%%)",tab[3],tab[3]*100./nvmai->get_nb_mg_tetra()); |
360 |
|
|
app.affiche(mess); |
361 |
|
|
sprintf(mess," nombre de tetra acceptable (qualite>0.2) : %d (%.2f%%) ",tab[2],tab[2]*100./nvmai->get_nb_mg_tetra()); |
362 |
|
|
app.affiche(mess); |
363 |
|
|
sprintf(mess," nombre de tetra moyen (qualite>0.1) : %d (%.2f%%) ",tab[1],tab[1]*100./nvmai->get_nb_mg_tetra()); |
364 |
|
|
app.affiche(mess); |
365 |
|
|
sprintf(mess," nombre de tetra mauvais (qualite>0.) : %d (%.2f%%) ",tab[0],tab[0]*100./nvmai->get_nb_mg_tetra()); |
366 |
|
|
app.affiche(mess); |
367 |
|
|
} |
368 |
|
|
app.affiche((char*)"Enregistrement"); |
369 |
|
|
gest.enregistrer(fichiersortie); |
370 |
francois |
467 |
if (app.get_action()==7) |
371 |
|
|
delete metrique; |
372 |
|
|
if (app.get_action()==17) |
373 |
|
|
{ |
374 |
|
|
delete metrique; |
375 |
|
|
delete gestcarte; |
376 |
|
|
} |
377 |
francois |
603 |
//app.affiche((char*)"Fin"); |
378 |
francois |
432 |
} |
379 |
|
|
|
380 |
francois |
558 |
if ((app.get_action()==20) || (app.get_action()==21)) |
381 |
|
|
{ |
382 |
|
|
app.affiche((char*)"\nRecuperation d'un maillage non terminé\n\n"); |
383 |
|
|
char fichier[500]; |
384 |
|
|
char fichiersortie[500]; |
385 |
|
|
char fichiersortie2[500]; |
386 |
|
|
char fichiercarte[500]; |
387 |
|
|
int numvol; |
388 |
|
|
double prioritemetrique; |
389 |
|
|
int niveauopt3d; |
390 |
|
|
bool save; |
391 |
|
|
int pas; |
392 |
|
|
int nummai; |
393 |
|
|
app.recupere_parametre_string(1,fichier,(char*)"Fichier d'entrée manquant"); |
394 |
|
|
app.recupere_parametre_string_avec_defaut(2,fichiersortie,fichier); |
395 |
|
|
app.recupere_parametre_string(3,fichiercarte,(char*)"Fichier carte manquant"); |
396 |
|
|
app.recupere_parametre_double_avec_defaut(8,prioritemetrique,0.65); |
397 |
|
|
app.recupere_parametre_int_avec_defaut(22,numvol,0); |
398 |
|
|
app.recupere_parametre_int_avec_defaut(13,nummai,0); |
399 |
|
|
app.recupere_parametre_int_avec_defaut(4,niveauopt3d,2); |
400 |
|
|
app.recupere_parametre_bool_avec_defaut(18,save,false); |
401 |
|
|
app.recupere_parametre_int_avec_defaut(19,pas,32); |
402 |
|
|
if (app.get_erreur()==true) return 0; |
403 |
|
|
strcpy(fichiersortie2,fichiersortie); |
404 |
|
|
strcat(fichiersortie2,"dbg"); |
405 |
|
|
char message[500]; |
406 |
|
|
if (app.get_action()==20) |
407 |
|
|
{ |
408 |
|
|
MAILLEUR3D_MAILLAGE_PARTIEL m3d(fichier,fichiersortie,fichiercarte,MAGIC::VERSION_CARTE_TAILLE::ANCIENNE,nummai,numvol,save); |
409 |
|
|
m3d.active_affichage(app.affiche); |
410 |
|
|
m3d.change_niveau_optimisation(niveauopt3d); |
411 |
|
|
m3d.change_pas_integration(pas); |
412 |
|
|
m3d.change_priorite_metrique(prioritemetrique); |
413 |
|
|
if (save==true) m3d.change_nom_fichierdbg(fichiersortie2); |
414 |
|
|
m3d.maille(); |
415 |
|
|
} |
416 |
|
|
if (app.get_action()==21) |
417 |
|
|
{ |
418 |
|
|
MAILLEUR3D_MAILLAGE_PARTIEL m3d(fichier,fichiersortie,fichiercarte,MAGIC::VERSION_CARTE_TAILLE::NOUVELLE,nummai,numvol,save); |
419 |
|
|
m3d.active_affichage(app.affiche); |
420 |
|
|
m3d.change_niveau_optimisation(niveauopt3d); |
421 |
|
|
m3d.change_pas_integration(pas); |
422 |
|
|
m3d.change_priorite_metrique(prioritemetrique); |
423 |
|
|
if (save==true) m3d.change_nom_fichierdbg(fichiersortie2); |
424 |
|
|
m3d.maille(); |
425 |
|
|
} |
426 |
|
|
} |
427 |
|
|
app.affiche((char*)"Fin"); |
428 |
francois |
283 |
return 0; |
429 |
|
|
} |
430 |
|
|
|
431 |
|
|
|
432 |
|
|
|
433 |
|
|
#pragma package(smart_init) |