ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 226
Committed: Thu Dec 3 21:26:23 2009 UTC (15 years, 6 months ago) by francois
Original Path: magic/app/mgoperation/mgoperation/src/main.cpp
File size: 17235 byte(s)
Log Message:
transfert s'appelle maintenant mgoperation. Le nom est plus logique vu l'utilisation du programme. Les scripts seront mis a jour apres. Pour les projets hors magic a vous de verifier vos scripts 

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