ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 9 months ago) by francois
File size: 21528 byte(s)
Log Message:
structure de l'écriture

File Contents

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