ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 231
Committed: Fri Jan 15 17:20:10 2010 UTC (15 years, 5 months ago) by picher
Original Path: magic/app/mgoperation/mgoperation/src/main.cpp
File size: 17522 byte(s)
Log Message:
Modification de la hierarchisation de la classe mg_lissage pour l'ajout d'une methode menu

File Contents

# User Rev Content
1 francois 226
2     //------------------------------------------------------------
3     //------------------------------------------------------------
4     // MAGiC
5     // Jean Christophe Cuilli�e et Vincent FRANCOIS
6     // D�artement de G�ie M�anique - UQTR
7     //------------------------------------------------------------
8     // Le projet MAGIC est un projet de recherche du d�artement
9     // de g�ie m�anique de l'Universit�du Qu�ec �
10     // Trois Rivi�es
11     // Les librairies ne peuvent �re utilis�s sans l'accord
12     // des auteurs (contact : francois@uqtr.ca)
13     //------------------------------------------------------------
14     //------------------------------------------------------------
15     //
16     // main.cpp
17     //
18     //------------------------------------------------------------
19     //------------------------------------------------------------
20     // COPYRIGHT 2000
21     // Version du 02/03/2006 �11H25
22     //------------------------------------------------------------
23     //------------------------------------------------------------
24     #include "gestionversion.h"
25     #ifdef WINDOWS_VERSION
26     #include "fenetre.h"
27     #endif
28    
29    
30     #include <string.h>
31     #include "main.h"
32     #include "mg_file.h"
33     #include "mg_export.h"
34     #include "mg_import.h"
35     #include "mg_lissage.h"
36     #include "step_import.h"
37     #include "acis_import.h"
38     #include "step_import.h"
39     #include "occ_import.h"
40     #include "aide.h"
41     #include "vct_multi_modele.h"
42     #include <ctype.h>
43 picher 230 #include <math.h>
44 francois 226
45    
46     //---------------------------------------------------------------------------
47    
48     void affiche(char* message)
49     {
50     #ifdef WINDOWS_VERSION
51     Form1->Memo1->Lines->Add(message);
52     #else
53     std::cout << message << std::endl;
54     #endif
55     }
56    
57     void minuscule(char * mess)
58     {
59     int nb=strlen(mess);
60     for (int i=0;i<nb;i++)
61     mess[i]=tolower(mess[i]);
62     }
63    
64     #ifdef WINDOWS_VERSION
65     int amain(int argc,char **argv)
66     #else
67     int main(int argc,char **argv)
68     #endif
69     {
70     affiche("Opération dans l'environnement MAGiC\n\n");
71     char nomfichier[3000];
72     char fichierout[3000];
73     char fichieraster[3000];
74     char fichieroptis[3000];
75     char fichierflottant[3000];
76     char coderesu[10];
77     int nummai;
78     int degre;
79     int action=0;
80     int numgeo=0;
81     int numgt=0;
82     int numentite=0;
83     int expand=0;
84     int numsol1=0;
85     int numsol2=0;
86     int numsol3=0;
87     int numchamp1=0;
88     int numchamp2=0;
89     int numchamp3=0;
90     int flottant=0;
91     double unite=1;
92     double seuil=0.8;
93     double eps=1e-6;
94 picher 230 double niveau=150.;
95     int iter_max = 10;
96     double sigma;
97 picher 231 int bruitage = 0;
98     int lissage = 0;
99 picher 230 sigma = 0.038/sqrt(10.); //valeur par défaut
100 francois 226 INIAIDE;
101     if (argc==2) strcpy(nomfichier,argv[1]);
102     else if (argc>2)
103     {
104     for (int i=0;i<argc;i++)
105     {
106     if (strcmp(argv[i],"-file")==0) strcpy(nomfichier,argv[i+1]);
107     if (strcmp(argv[i],"-fileout")==0) strcpy(fichierout,argv[i+1]);
108     if (strcmp(argv[i],"-mesh")==0) nummai=atol(argv[i+1]);
109     if (strcmp(argv[i],"-numsol1")==0) numsol1=atol(argv[i+1]);
110     if (strcmp(argv[i],"-numsol2")==0) numsol2=atol(argv[i+1]);
111     if (strcmp(argv[i],"-numsol3")==0) numsol3=atol(argv[i+1]);
112     if (strcmp(argv[i],"-numchamp1")==0) numchamp1=atol(argv[i+1]);
113     if (strcmp(argv[i],"-numchamp2")==0) numchamp2=atol(argv[i+1]);
114     if (strcmp(argv[i],"-numchamp3")==0) numchamp3=atol(argv[i+1]);
115     if (strcmp(argv[i],"-geo")==0) numgeo=atol(argv[i+1]);
116     if (strcmp(argv[i],"-groupe")==0) numgt=atol(argv[i+1]);
117     if (strcmp(argv[i],"-entite")==0) numentite=atol(argv[i+1]);
118     if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
119     if (strcmp(argv[i],"-unite")==0) unite=atof(argv[i+1]);
120     if (strcmp(argv[i],"-seuil")==0) seuil=atof(argv[i+1]);
121     if (strcmp(argv[i],"-niveau")==0) niveau=atof(argv[i+1]);
122     if (strcmp(argv[i],"-aster")==0) strcpy(fichieraster,argv[i+1]);
123     if (strcmp(argv[i],"-optis")==0) strcpy(fichieroptis,argv[i+1]);
124     if (strcmp(argv[i],"-ficflottant")==0) strcpy(fichierflottant,argv[i+1]);
125     if (strcmp(argv[i],"-coderesu")==0) strcpy(coderesu,argv[i+1]);
126     if (strcmp(argv[i],"-flottant")==0) flottant = 1;
127     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
128 picher 230 if (strcmp(argv[i],"-iter")==0) iter_max=atol(argv[i+1]);
129     if (strcmp(argv[i],"-sigma")==0) sigma=atof(argv[i+1]);
130 francois 226 if (strcmp(argv[i],"-fem")==0) action=1;
131     if (strcmp(argv[i],"-femdef")==0) action=15;
132     if (strcmp(argv[i],"-expand")==0) expand=1;
133     if (strcmp(argv[i],"-stepocc")==0) action=2;
134     if (strcmp(argv[i],"-magicgmsh")==0) action=3;
135     if (strcmp(argv[i],"-magicaster")==0) action=4;
136     if (strcmp(argv[i],"-stepmagic")==0) action=5;
137     if (strcmp(argv[i],"-satmagic")==0) action=6;
138     if (strcmp(argv[i],"-cttgmsh")==0) action=7;
139     if (strcmp(argv[i],"-occmagic")==0) action=8;
140     if (strcmp(argv[i],"-astermagic")==0) action=9;
141     if (strcmp(argv[i],"-magicoptis")==0) action=10;
142     if (strcmp(argv[i],"-optismagic")==0) action=11;
143     if (strcmp(argv[i],"-selectionne")==0) action=12;
144     if (strcmp(argv[i],"-deselectionne")==0) action=13;
145     if (strcmp(argv[i],"-examine")==0) action=14;
146     if (strcmp(argv[i],"-fusiongeo")==0) action=17;
147 picher 231 if (strcmp(argv[i],"-lissage")==0) action=16;
148     if (strcmp(argv[i],"-liss")==0) lissage = 1;
149     if (strcmp(argv[i],"-bruitage")==0) bruitage = 1;
150 francois 226
151     }
152     }
153     else {AFFAIDE;return 0;}
154    
155 picher 230
156    
157    
158 francois 226 char mess[3000];
159     sprintf(mess," Fichier : %s",nomfichier);
160     affiche(mess);
161     char *p=strrchr(nomfichier,'.');
162     char extension[50];
163     strcpy(extension,p);
164     minuscule(extension);
165     char chaine[3000];for (int i=0;i<3000;i++) chaine[i]=0;
166     if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
167     {
168     sprintf(mess," Conversion MAGiC vers GMSH");
169     affiche(mess);
170     MG_FILE gest(nomfichier);
171     int nb=gest.get_nb_mg_maillage();
172     char chaine[3000];
173     for (int i=0;i<nb;i++)
174     {
175     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
176     unsigned long id=mai->get_id();
177     strncpy(chaine,nomfichier,p-nomfichier);
178     char chaine2[3000];
179     sprintf(chaine2,"%s%lu",chaine,id);
180     std::string namefic=chaine2;
181     MG_EXPORT exp;
182     exp.gmsh(mai,namefic);
183     }
184     nb=gest.get_nb_fem_maillage();
185     for (int i=0;i<nb;i++)
186     {
187     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
188     unsigned long id=mai->get_id();
189     strncpy(chaine,nomfichier,p-nomfichier);
190     char chaine2[3000];
191     sprintf(chaine2,"%s%lu",chaine,id);
192     std::string namefic=chaine2;
193     MG_EXPORT exp;
194     double coef=eps;
195     if (coef<0.)
196     {
197     coef=mai->calcul_coef();
198     sprintf(mess," Coefficient de deforme pour le maillage %lu est de %le",mai->get_id(),coef);
199     affiche(mess);
200     }
201     exp.gmsh(mai,namefic,coef);
202     }
203     }
204     if (action==4)
205     {
206     sprintf(mess," Conversion MAGiC vers code ASTER");
207     affiche(mess);
208     MG_FILE gest(nomfichier);
209     int nb=gest.get_nb_fem_maillage();
210     char chaine[1000];
211     for (int i=0;i<nb;i++)
212     {
213     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
214     unsigned long id=mai->get_id();
215     strncpy(chaine,nomfichier,p-nomfichier);
216     char chaine2[3000];
217     sprintf(chaine2,"%s%lu",chaine,id);
218     std::string namefic=chaine2;
219     MG_EXPORT exp;
220     exp.aster(mai,namefic,0,coderesu);
221     }
222     }
223     if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
224     {
225     sprintf(mess," Conversion carte de taille vers GMSH");
226     affiche(mess);
227     FCT_GENERATEUR_3D<4> carte;
228     carte.lire(nomfichier);
229     strncpy(chaine,nomfichier,p-nomfichier);
230     std::string namefic=chaine;
231     MG_EXPORT exp;
232     exp.gmsh(&carte,namefic);
233     }
234     if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
235     {
236     sprintf(mess," Conversion STEP vers MAGiC");
237     affiche(mess);
238     STEP_IMPORT stepimport;
239     MG_GESTIONNAIRE gest;
240     stepimport.importer(gest,nomfichier) ;
241     strncpy(chaine,nomfichier,p-nomfichier);
242     std::string namefic=chaine;namefic=namefic + ".magic";
243     int nb=gest.get_nb_mg_geometrie();
244     for (int i=0;i<nb;i++)
245     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
246     gest.enregistrer(namefic.c_str());
247     }
248     if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
249     {
250     sprintf(mess," Conversion SAT vers MAGiC");
251     affiche(mess);
252     MG_GESTIONNAIRE gest;
253     ACIS_IMPORT acisimport;
254     acisimport.importer(gest,nomfichier) ;
255     strncpy(chaine,nomfichier,p-nomfichier);
256     std::string namefic=chaine;namefic=namefic + ".magic";
257     int nb=gest.get_nb_mg_geometrie();
258     for (int i=0;i<nb;i++)
259     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
260     gest.enregistrer(namefic.c_str());
261 picher 230 }
262 francois 226 if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
263     {
264     #ifdef BREP_OCC
265     sprintf(mess," Conversion OpenCascade vers MAGiC");
266     affiche(mess);
267     MG_GESTIONNAIRE gest;
268     OCC_IMPORT occimport;
269     occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
270     strncpy(chaine,nomfichier,p-nomfichier);
271     std::string namefic=chaine;namefic=namefic + ".magic";
272     int nb=gest.get_nb_mg_geometrie();
273     for (int i=0;i<nb;i++)
274     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
275     gest.enregistrer(namefic.c_str());
276     #endif
277     }
278     if (action==2)
279     {
280     #ifdef BREP_OCC
281     sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
282     affiche(mess);
283     MG_GESTIONNAIRE gest;
284     OCC_IMPORT occimport;
285     occimport.importer(gest,nomfichier,FICHIERSTEP,unite,eps) ;
286     strncpy(chaine,nomfichier,p-nomfichier);
287     std::string namefic=chaine;namefic=namefic + ".magic";
288     int nb=gest.get_nb_mg_geometrie();
289     for (int i=0;i<nb;i++)
290     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
291     gest.enregistrer(namefic.c_str());
292     #endif
293     }
294     if (action==1)
295     {
296     sprintf(mess," Creation d'un maillage FEM");
297     affiche(mess);
298     MG_FILE gest(nomfichier);
299     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
300     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
301     gest.ajouter_fem_maillage(fem);
302     fem->construire(0);
303     gest.enregistrer(nomfichier);
304     }
305     if (action==9)
306     {
307     sprintf(mess," Importation des résultats ASTER vers MAGIC");
308     affiche(mess);
309     MG_FILE gest(nomfichier);
310     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
311     MG_IMPORT imp;
312     imp.aster(mai,fichieraster,nomfichier);
313     gest.enregistrer(nomfichier);
314     }
315     if (action==10)
316     {
317     sprintf(mess," Conversion MAGiC vers OPTIS");
318     affiche(mess);
319     MG_FILE gest(nomfichier);
320     int nb=gest.get_nb_fem_maillage();
321     char chaine[1000];
322     for (int i=0;i<nb;i++)
323     {
324     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
325     unsigned long id=mai->get_id();
326     strncpy(chaine,nomfichier,p-nomfichier);
327     char chaine2[3000];
328     sprintf(chaine2,"%s%lu",chaine,id);
329     std::string namefic=chaine2;
330     MG_EXPORT exp;
331     exp.aster(mai,namefic,1,coderesu);
332     }
333     }
334     if (action==11)
335     {
336     sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
337     affiche(mess);
338     MG_FILE gest(nomfichier);
339     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
340     MG_IMPORT imp;
341     imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
342     gest.enregistrer(nomfichier);
343     }
344     if (action==12)
345     {
346     sprintf(mess," Selection dans MAGIC");
347     affiche(mess);
348     MG_FILE gest(nomfichier);
349     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
350     MG_GROUPE_TOPOLOGIQUE* mggt;
351     if (numgt==0)
352     {
353     mggt=new MG_GROUPE_TOPOLOGIQUE;
354     mggeo->ajouter_mg_groupe_topologique(mggt);
355     }
356     else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
357     MG_ELEMENT_TOPOLOGIQUE* ele;
358     ele=mggeo->get_mg_sommetid(numentite);
359     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
360     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
361     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
362     if (ele!=NULL)
363     {
364     mggt->ajouter(ele);
365     if (expand)
366     {
367     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
368     ele->get_topologie_sousjacente(&lst);
369     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
370     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
371     mggt->ajouter(ele2);
372     }
373     }
374     gest.enregistrer(nomfichier);
375     }
376     if (action==13)
377     {
378     sprintf(mess," Deselection dans MAGIC");
379     affiche(mess);
380     MG_FILE gest(nomfichier);
381     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
382     MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
383     MG_ELEMENT_TOPOLOGIQUE* ele;
384     ele=mggeo->get_mg_sommetid(numentite);
385     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
386     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
387     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
388     if (ele!=NULL)
389     {
390     mggt->supprimer(ele);
391     if (expand)
392     {
393     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
394     ele->get_topologie_sousjacente(&lst);
395     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
396     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
397     mggt->supprimer(ele2);
398     }
399     }
400     gest.enregistrer(nomfichier);
401     }
402     if (action==16)
403     {
404 picher 231 sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
405 francois 226 affiche(mess);
406     MG_FILE gest(nomfichier);
407 picher 231 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
408 francois 226 MG_LISSAGE liss;
409     MG_GESTIONNAIRE gest2;
410 picher 231 liss.menu(mai,gest2,eps,sigma,iter_max,bruitage,lissage);
411 francois 226 gest2.enregistrer(fichierout);
412     }
413     sprintf(mess,"Conversion reussie");
414    
415     if (action==14)
416     {
417     sprintf(mess," Analyse MAGIC");
418     affiche(mess);
419     MG_FILE gest(nomfichier);
420     char message [5000];
421     int nbgeo=gest.get_nb_mg_geometrie();
422     sprintf(message," %d geometrie :",nbgeo);
423     for (int i=0;i<nbgeo;i++)
424     {
425     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
426     sprintf(message,"%s %lu ",message,geo->get_id());
427     }
428     affiche(message);
429     for (int i=0;i<nbgeo;i++)
430     {
431     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
432     sprintf(message," geometrie %lu",geo->get_id());
433     affiche(message);
434     int nbmg=geo->get_nb_mg_groupe_topologique();
435     sprintf(message," %d groupe topologique",nbmg);
436     for (int j=0;j<nbmg;j++)
437     {
438     MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
439     sprintf(message,"%s %lu ",message,mggp->get_id());
440     }
441     affiche(message);
442     }
443     int nbmai=gest.get_nb_mg_maillage();
444     sprintf(message," %d maillage geometrique :",nbmai);
445     for (int i=0;i<nbmai;i++)
446     {
447     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
448     sprintf(message,"%s %lu ",message,mai->get_id());
449     }
450     affiche(message);
451     int nbmaif=gest.get_nb_fem_maillage();
452     sprintf(message," %d maillage FEM :",nbmaif);
453     for (int i=0;i<nbmaif;i++)
454     {
455     FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
456     sprintf(message,"%s %lu ",message,maif->get_id());
457     }
458     affiche(message);
459     int nbsol=gest.get_nb_mg_solution();
460     sprintf(message," %d solution maillage geometrique :",nbsol);
461     for (int i=0;i<nbsol;i++)
462     {
463     MG_SOLUTION* sol=gest.get_mg_solution(i);
464     sprintf(message,"%s %lu ",message,sol->get_id());
465     }
466     affiche(message);
467     int nbsolf=gest.get_nb_fem_solution();
468     sprintf(message," %d solution maillage geometrique :",nbsolf);
469     for (int i=0;i<nbsolf;i++)
470     {
471     FEM_SOLUTION* sol=gest.get_fem_solution(i);
472     sprintf(message,"%s %lu ",message,sol->get_id());
473     }
474     affiche(message);
475     }
476     if (action==15)
477     {
478     sprintf(mess," Calcul de deforme");
479     affiche(mess);
480     MG_FILE gest(nomfichier);
481     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
482     FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
483     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
484     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
485     affiche(mess);
486     mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
487     gest.enregistrer(nomfichier);
488     }
489     if (action==17)
490     {
491     sprintf(mess," Fusion de géométrie");
492     affiche(mess);
493     MG_FILE gest(nomfichier);
494     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
495     VCT_MULTI_MODELE fusion(mggeo);
496     fusion.recherche_identite();
497     gest.enregistrer(nomfichier);
498     }
499     sprintf(mess,"Fin");
500     affiche(mess);
501    
502     return 0;
503     }
504    
505    
506    
507     #pragma package(smart_init)