ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 275
Committed: Fri Mar 25 21:45:37 2011 UTC (14 years, 2 months ago) by francois
File size: 20400 byte(s)
Log Message:
Ajout de l'importation de la triangulation STL dans les fichiers opencascade et creation d'un executable de comparaison

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