ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 295
Committed: Tue Nov 8 21:46:30 2011 UTC (13 years, 7 months ago) by francois
File size: 24435 byte(s)
Log Message:
Mise a jour des CMakeListe pour rendre les choix possible

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 francois 292 char ccf[500];
111 francois 283 INIAIDE;
112     if (argc==2) strcpy(nomfichier,argv[1]);
113     else if (argc>2)
114     {
115     for (int i=0;i<argc;i++)
116     {
117     if (strcmp(argv[i],"-file")==0) strcpy(nomfichier,argv[i+1]);
118     if (strcmp(argv[i],"-fileout")==0) strcpy(fichierout,argv[i+1]);
119     if (strcmp(argv[i],"-mesh")==0) nummai=atol(argv[i+1]);
120     if (strcmp(argv[i],"-numsol1")==0) numsol1=atol(argv[i+1]);
121     if (strcmp(argv[i],"-numsol2")==0) numsol2=atol(argv[i+1]);
122     if (strcmp(argv[i],"-numsol3")==0) numsol3=atol(argv[i+1]);
123     if (strcmp(argv[i],"-numchamp1")==0) numchamp1=atol(argv[i+1]);
124     if (strcmp(argv[i],"-numchamp2")==0) numchamp2=atol(argv[i+1]);
125     if (strcmp(argv[i],"-numchamp3")==0) numchamp3=atol(argv[i+1]);
126     if (strcmp(argv[i],"-geo")==0) numgeo=atol(argv[i+1]);
127     if (strcmp(argv[i],"-groupe")==0) numgt=atol(argv[i+1]);
128     if (strcmp(argv[i],"-entite")==0) numentite=atol(argv[i+1]);
129     if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
130     if (strcmp(argv[i],"-unite")==0) unite=atof(argv[i+1]);
131     if (strcmp(argv[i],"-seuil")==0) seuil=atof(argv[i+1]);
132     if (strcmp(argv[i],"-niveau")==0) niveau=atof(argv[i+1]);
133     if (strcmp(argv[i],"-aster")==0) strcpy(fichieraster,argv[i+1]);
134     if (strcmp(argv[i],"-densite")==0) strcpy(fichierdensite,argv[i+1]);
135     if (strcmp(argv[i],"-optis")==0) strcpy(fichieroptis,argv[i+1]);
136     if (strcmp(argv[i],"-ficflottant")==0) strcpy(fichierflottant,argv[i+1]);
137     if (strcmp(argv[i],"-coderesu")==0) strcpy(coderesu,argv[i+1]);
138     if (strcmp(argv[i],"-flottant")==0) flottant = 1;
139     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
140     if (strcmp(argv[i],"-iter")==0) iter_max=atol(argv[i+1]);
141     if (strcmp(argv[i],"-sigma")==0) sigma=atof(argv[i+1]);
142     if (strcmp(argv[i],"-gamma")==0) gamma=atof(argv[i+1]);
143     if (strcmp(argv[i],"-sigmaf")==0) sigmaf=atof(argv[i+1]);
144     if (strcmp(argv[i],"-sigmag")==0) sigmag=atof(argv[i+1]);
145     if (strcmp(argv[i],"-fem")==0) action=1;
146     if (strcmp(argv[i],"-femdef")==0) action=15;
147     if (strcmp(argv[i],"-expand")==0) expand=1;
148     if (strcmp(argv[i],"-stepocc")==0) action=2;
149     if (strcmp(argv[i],"-magicgmsh")==0) action=3;
150     if (strcmp(argv[i],"-magicaster")==0) action=4;
151     if (strcmp(argv[i],"-stepmagic")==0) action=5;
152     if (strcmp(argv[i],"-satmagic")==0) action=6;
153     if (strcmp(argv[i],"-cttgmsh")==0) action=7;
154     if (strcmp(argv[i],"-occmagic")==0) action=8;
155     if (strcmp(argv[i],"-astermagic")==0) action=9;
156     if (strcmp(argv[i],"-magicoptis")==0) action=10;
157     if (strcmp(argv[i],"-optismagic")==0) action=11;
158     if (strcmp(argv[i],"-selectionne")==0) action=12;
159     if (strcmp(argv[i],"-deselectionne")==0) action=13;
160     if (strcmp(argv[i],"-examine")==0) action=14;
161     if (strcmp(argv[i],"-fusiongeo")==0) action=17;
162     if (strcmp(argv[i],"-importdensite")==0) action=18;
163     if (strcmp(argv[i],"-lissage")==0) action=16;
164     if (strcmp(argv[i],"-liss1")==0) lissage = 1;
165     if (strcmp(argv[i],"-liss2")==0) lissage = 2;
166     if (strcmp(argv[i],"-liss3")==0) lissage = 3;
167     if (strcmp(argv[i],"-bruitage")==0) bruitage = 1;
168     if (strcmp(argv[i],"-reactivation")==0) reactivation = 1;
169     if (strcmp(argv[i],"-cons_optimise")==0) consopti = 1;
170     if (strcmp(argv[i],"-cons_impose")==0) consimpose = 1;
171     if (strcmp(argv[i],"-cons_mailleurauto")==0) consmailleurauto = 1;
172     if (strcmp(argv[i],"-importtriangulation")==0) importtri=1;
173     if (strcmp(argv[i],"-importstl")==0) importtri=2;
174     if (strcmp(argv[i],"-deflexion")==0) eps2=atof(argv[i+1]);
175 francois 293 if (strcmp(argv[i],"-ccf_id")==0) {action=19;strcpy(ccf,argv[i+1]);};
176     if (strcmp(argv[i],"-ccft_id")==0) {action=20;strcpy(ccf,argv[i+1]);};
177     if (strcmp(argv[i],"-ccf_num")==0) {action=21;strcpy(ccf,argv[i+1]);};
178     if (strcmp(argv[i],"-ccft_num")==0) {action=22;strcpy(ccf,argv[i+1]);};
179 francois 292
180    
181 francois 283 }
182     }
183     else {
184     AFFAIDE;
185     return 0;
186     }
187    
188    
189    
190    
191     char mess[3000];
192     sprintf(mess," Fichier : %s",nomfichier);
193     affiche(mess);
194     char *p=strrchr(nomfichier,'.');
195     char extension[50];
196     strcpy(extension,p);
197     minuscule(extension);
198     char chaine[3000];
199     for (int i=0;i<3000;i++) chaine[i]=0;
200     if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
201     {
202     sprintf(mess," Conversion MAGiC vers GMSH");
203     affiche(mess);
204     MG_FILE gest(nomfichier);
205     int nb=gest.get_nb_mg_maillage();
206     char chaine[3000];
207     for (int i=0;i<nb;i++)
208     {
209     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
210     unsigned long id=mai->get_id();
211     strncpy(chaine,nomfichier,p-nomfichier);
212     char chaine2[3000];
213     sprintf(chaine2,"%s%lu",chaine,id);
214     std::string namefic=chaine2;
215     MG_EXPORT exp;
216     exp.gmsh(mai,namefic);
217     }
218     nb=gest.get_nb_fem_maillage();
219     for (int i=0;i<nb;i++)
220     {
221     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
222     unsigned long id=mai->get_id();
223     strncpy(chaine,nomfichier,p-nomfichier);
224     char chaine2[3000];
225     sprintf(chaine2,"%s%lu",chaine,id);
226     std::string namefic=chaine2;
227     MG_EXPORT exp;
228     double coef=eps;
229     if (coef<0.)
230     {
231     coef=mai->calcul_coef();
232     sprintf(mess," Coefficient de deforme pour le maillage %lu est de %le",mai->get_id(),coef);
233     affiche(mess);
234     }
235     exp.gmsh(mai,namefic,coef);
236     }
237     }
238     if (action==4)
239     {
240     sprintf(mess," Conversion MAGiC vers code ASTER");
241     affiche(mess);
242     MG_FILE gest(nomfichier);
243     int nb=gest.get_nb_fem_maillage();
244     char chaine[1000];
245     for (int i=0;i<nb;i++)
246     {
247     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
248     unsigned long id=mai->get_id();
249     strncpy(chaine,nomfichier,p-nomfichier);
250     char chaine2[3000];
251     sprintf(chaine2,"%s%lu",chaine,id);
252     std::string namefic=chaine2;
253     MG_EXPORT exp;
254     exp.aster(mai,namefic,0,coderesu);
255     }
256     }
257     if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
258     {
259     sprintf(mess," Conversion carte de taille vers GMSH");
260     affiche(mess);
261     FCT_GENERATEUR_3D<4> carte;
262     carte.lire(nomfichier);
263     strncpy(chaine,nomfichier,p-nomfichier);
264     std::string namefic=chaine;
265     MG_EXPORT exp;
266     exp.gmsh(&carte,namefic);
267     }
268 francois 295 #ifdef BREP_STEP
269 francois 283 if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
270     {
271     sprintf(mess," Conversion STEP vers MAGiC");
272     affiche(mess);
273     STEP_IMPORT stepimport;
274     MG_GESTIONNAIRE gest;
275     stepimport.importer(gest,nomfichier) ;
276     strncpy(chaine,nomfichier,p-nomfichier);
277     std::string namefic=chaine;
278     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     }
284 francois 295 #endif
285     #ifdef BREP_SAT
286 francois 283 if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
287     {
288     sprintf(mess," Conversion SAT vers MAGiC");
289     affiche(mess);
290     MG_GESTIONNAIRE gest;
291     ACIS_IMPORT acisimport;
292     acisimport.importer(gest,nomfichier) ;
293     strncpy(chaine,nomfichier,p-nomfichier);
294     std::string namefic=chaine;
295     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     }
301 francois 295 #endif
302 francois 283 if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
303     {
304     #ifdef BREP_OCC
305     sprintf(mess," Conversion OpenCascade vers MAGiC");
306     affiche(mess);
307     MG_GESTIONNAIRE gest;
308     OCC_IMPORT occimport;
309     MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
310     if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
311     strncpy(chaine,nomfichier,p-nomfichier);
312     std::string namefic=chaine;
313     namefic=namefic + ".magic";
314     int nb=gest.get_nb_mg_geometrie();
315     for (int i=0;i<nb;i++)
316     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
317     gest.enregistrer(namefic.c_str());
318     #endif
319     }
320     if (action==2)
321     {
322     #ifdef BREP_OCC
323     sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
324     affiche(mess);
325     MG_GESTIONNAIRE gest;
326     OCC_IMPORT occimport;
327     MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,unite,eps) ;
328     if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
329     strncpy(chaine,nomfichier,p-nomfichier);
330     std::string namefic=chaine;
331     namefic=namefic + ".magic";
332     int nb=gest.get_nb_mg_geometrie();
333     for (int i=0;i<nb;i++)
334     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
335     gest.enregistrer(namefic.c_str());
336     #endif
337     }
338     if (action==1)
339     {
340     sprintf(mess," Creation d'un maillage FEM");
341     affiche(mess);
342     MG_FILE gest(nomfichier);
343     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
344     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
345     gest.ajouter_fem_maillage(fem);
346     fem->construire(0);
347     gest.enregistrer(nomfichier);
348     }
349     if (action==9)
350     {
351     sprintf(mess," Importation des résultats ASTER vers MAGIC");
352     affiche(mess);
353     MG_FILE gest(nomfichier);
354     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
355     MG_IMPORT imp;
356     imp.aster(mai,fichieraster,nomfichier);
357     gest.enregistrer(nomfichier);
358     }
359     if (action==10)
360     {
361     sprintf(mess," Conversion MAGiC vers OPTIS");
362     affiche(mess);
363     MG_FILE gest(nomfichier);
364     int nb=gest.get_nb_fem_maillage();
365     char chaine[1000];
366     for (int i=0;i<nb;i++)
367     {
368     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
369     unsigned long id=mai->get_id();
370     strncpy(chaine,nomfichier,p-nomfichier);
371     char chaine2[3000];
372     sprintf(chaine2,"%s%lu",chaine,id);
373     std::string namefic=chaine2;
374     MG_EXPORT exp;
375     exp.aster(mai,namefic,1,coderesu);
376     }
377     }
378     if (action==11)
379     {
380     sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
381     affiche(mess);
382     MG_FILE gest(nomfichier);
383     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
384     MG_IMPORT imp;
385     imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
386     gest.enregistrer(nomfichier);
387     }
388     if (action==12)
389     {
390     sprintf(mess," Selection dans MAGIC");
391     affiche(mess);
392     MG_FILE gest(nomfichier);
393     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
394     MG_GROUPE_TOPOLOGIQUE* mggt;
395     if (numgt==0)
396     {
397     mggt=new MG_GROUPE_TOPOLOGIQUE;
398     mggeo->ajouter_mg_groupe_topologique(mggt);
399     }
400     else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
401     MG_ELEMENT_TOPOLOGIQUE* ele;
402     ele=mggeo->get_mg_sommetid(numentite);
403     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
404     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
405     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
406     if (ele!=NULL)
407     {
408     mggt->ajouter(ele);
409     if (expand)
410     {
411     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
412     ele->get_topologie_sousjacente(&lst);
413     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
414     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
415     mggt->ajouter(ele2);
416     }
417     }
418     gest.enregistrer(nomfichier);
419     }
420     if (action==13)
421     {
422     sprintf(mess," Deselection dans MAGIC");
423     affiche(mess);
424     MG_FILE gest(nomfichier);
425     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
426     MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
427     MG_ELEMENT_TOPOLOGIQUE* ele;
428     ele=mggeo->get_mg_sommetid(numentite);
429     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
430     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
431     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
432     if (ele!=NULL)
433     {
434     mggt->supprimer(ele);
435     if (expand)
436     {
437     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
438     ele->get_topologie_sousjacente(&lst);
439     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
440     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
441     mggt->supprimer(ele2);
442     }
443     }
444     gest.enregistrer(nomfichier);
445     }
446     if (action==16)
447     {
448     sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
449     affiche(mess);
450     MG_FILE gest(nomfichier);
451     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
452     MG_GESTIONNAIRE gest2;
453     MG_LISSAGE liss;
454     liss.active_affichage(affiche);
455     liss.lisse(mai,gest2,eps,sigma,sigmaf,sigmag,gamma,iter_max,reactivation,bruitage,lissage,consopti,consimpose,consmailleurauto);
456     gest2.enregistrer(fichierout);
457     }
458     sprintf(mess,"Conversion reussie");
459    
460     if (action==14)
461     {
462     sprintf(mess," Analyse MAGIC");
463     affiche(mess);
464     MG_FILE gest(nomfichier);
465     char message [5000];
466     int nbgeo=gest.get_nb_mg_geometrie();
467     sprintf(message," %d geometrie :",nbgeo);
468     for (int i=0;i<nbgeo;i++)
469     {
470     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
471     sprintf(message,"%s %lu ",message,geo->get_id());
472     }
473     affiche(message);
474     for (int i=0;i<nbgeo;i++)
475     {
476     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
477     sprintf(message," geometrie %lu",geo->get_id());
478     affiche(message);
479     int nbmg=geo->get_nb_mg_groupe_topologique();
480     sprintf(message," %d groupe topologique",nbmg);
481     for (int j=0;j<nbmg;j++)
482     {
483     MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
484     sprintf(message,"%s %lu ",message,mggp->get_id());
485     }
486     affiche(message);
487 francois 290 sprintf(message," %d volumes",geo->get_nb_mg_volume());
488     affiche(message);
489     sprintf(message," %d coques",geo->get_nb_mg_coque());
490     affiche(message);
491     sprintf(message," %d poutres",geo->get_nb_mg_poutre());
492     affiche(message);
493     sprintf(message," %d coquilles",geo->get_nb_mg_coquille());
494     affiche(message);
495 francois 283 sprintf(message," %d faces",geo->get_nb_mg_face());
496     affiche(message);
497     sprintf(message," %d aretes",geo->get_nb_mg_arete());
498     affiche(message);
499     sprintf(message," %d sommets",geo->get_nb_mg_sommet());
500     affiche(message);
501    
502     }
503     int nbmai=gest.get_nb_mg_maillage();
504     sprintf(message," %d maillage geometrique :",nbmai);
505     affiche(message);
506     for (int i=0;i<nbmai;i++)
507     {
508     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
509     sprintf(message," maillage geometrique %lu ",mai->get_id());
510     affiche(message);
511     sprintf(message," %d noeuds",mai->get_nb_mg_noeud());
512     affiche(message);
513     sprintf(message," %d segments",mai->get_nb_mg_segment());
514     affiche(message);
515     sprintf(message," %d triangles",mai->get_nb_mg_triangle());
516     affiche(message);
517     sprintf(message," %d tetras",mai->get_nb_mg_tetra());
518     affiche(message);
519     }
520     int nbmaif=gest.get_nb_fem_maillage();
521     sprintf(message," %d maillage FEM :",nbmaif);
522     affiche(message);
523     for (int i=0;i<nbmaif;i++)
524     {
525     FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
526     sprintf(message," maillage FEM %lu ",maif->get_id());
527     affiche(message);
528     sprintf(message," %d noeuds",maif->get_nb_fem_noeud());
529     affiche(message);
530     sprintf(message," %d segments",maif->get_nb_fem_segment());
531     affiche(message);
532     sprintf(message," %d triangles",maif->get_nb_fem_triangle());
533     affiche(message);
534     sprintf(message," %d tetras",maif->get_nb_fem_tetra());
535     affiche(message);
536     }
537     int nbsol=gest.get_nb_mg_solution();
538     sprintf(message," %d solution maillage geometrique :",nbsol);
539     for (int i=0;i<nbsol;i++)
540     {
541     MG_SOLUTION* sol=gest.get_mg_solution(i);
542     sprintf(message,"%s %lu ",message,sol->get_id());
543     }
544     affiche(message);
545     int nbsolf=gest.get_nb_fem_solution();
546     sprintf(message," %d solution maillage FEM :",nbsolf);
547     for (int i=0;i<nbsolf;i++)
548     {
549     FEM_SOLUTION* sol=gest.get_fem_solution(i);
550     sprintf(message,"%s %lu ",message,sol->get_id());
551     }
552     affiche(message);
553     }
554     if (action==15)
555     {
556     sprintf(mess," Calcul de deforme");
557     affiche(mess);
558     MG_FILE gest(nomfichier);
559     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
560     FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
561     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
562     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
563     affiche(mess);
564     mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
565     gest.enregistrer(nomfichier);
566     }
567     if (action==17)
568     {
569     sprintf(mess," Fusion de géométrie");
570     affiche(mess);
571     MG_FILE gest(nomfichier);
572     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
573     VCT_MULTI_MODELE fusion(mggeo);
574     fusion.recherche_identite();
575     gest.enregistrer(nomfichier);
576     }
577     if (action==18)
578     {
579 francois 292 sprintf(mess," Création d'une pseudo-solution de la répartition de densite");
580 francois 283 affiche(mess);
581     MG_FILE gest(nomfichier);
582     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
583     MG_IMPORT imp;
584     imp.import_densite(mai,fichierdensite,nomfichier);
585     gest.enregistrer(nomfichier);
586     }
587 francois 293 if ((action==19) || (action==20))
588 francois 292 {
589     sprintf(mess," Ajout d'une condition aux limites");
590     affiche(mess);
591     MG_FILE gest(nomfichier);
592     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
593     unsigned long identity;
594     char typeccf[3];
595     double valccf=0.5;
596     sscanf(ccf,"%lu:%c%c:%le\n",&identity,&typeccf[0],&typeccf[1],&valccf);
597     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
598 francois 293 MG_FACE* ele;
599     ele=geo->get_mg_faceid(identity);
600 francois 292 if (ele!=NULL) liste.ajouter(ele);
601     else
602     {
603 francois 293 MG_ARETE* ele;
604     ele=geo->get_mg_areteid(identity);
605 francois 292 if (ele!=NULL) liste.ajouter(ele);
606     else
607     {
608 francois 293 MG_SOMMET* ele;
609     ele=geo->get_mg_sommetid(identity);
610 francois 292 if (ele!=NULL) liste.ajouter(ele);
611     }
612     }
613     if (action==20)
614     {
615     int nb=liste.get_nb();
616     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
617     }
618     int nb=liste.get_nb();
619     for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
620     gest.enregistrer(nomfichier);
621     }
622 francois 293 if ((action==21)|| (action==22))
623     {
624     sprintf(mess," Ajout d'une condition aux limites");
625     affiche(mess);
626     MG_FILE gest(nomfichier);
627     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
628     unsigned long identity;
629     char typeccf[3];
630     double valccf=0.5;
631     char c;
632     sscanf(ccf,"%c:%lu:%c%c:%le\n",&c,&identity,&typeccf[0],&typeccf[1],&valccf);
633     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
634     MG_FACE* ele=NULL;
635     if (c=='F') ele=geo->get_mg_face(identity);
636     if (ele!=NULL) liste.ajouter(ele);
637     else
638     {
639     MG_ARETE* ele=NULL;
640     if (c=='A') ele=geo->get_mg_arete(identity);
641     if (ele!=NULL) liste.ajouter(ele);
642     else
643     {
644     MG_SOMMET* ele=NULL;
645     if (c=='S') ele=geo->get_mg_sommet(identity);
646     if (ele!=NULL) liste.ajouter(ele);
647     }
648     }
649     if (action==22)
650     {
651     int nb=liste.get_nb();
652     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
653     }
654     int nb=liste.get_nb();
655     for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
656     gest.enregistrer(nomfichier);
657     }
658    
659    
660    
661     sprintf(mess,"Fin");
662 francois 283 affiche(mess);
663    
664     return 0;
665     }
666    
667    
668    
669     #pragma package(smart_init)