ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 426
Committed: Wed Sep 25 20:32:34 2013 UTC (11 years, 8 months ago) by francois
File size: 30119 byte(s)
Log Message:
parametrage de l'angle limite pour l'analyse des triangles retournés

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 francois 296 #include "mc_gestionnaire.h"
42 francois 283 #include "vct_multi_modele.h"
43 francois 326 #include "mgaster.h"
44 francois 283 #include <ctype.h>
45     #include <math.h>
46 francois 425 #include "mailleur_analyse.h"
47 francois 283
48     //---------------------------------------------------------------------------
49    
50     void affiche(char* message)
51     {
52     #ifdef WINDOWS_VERSION
53     Form1->Memo1->Lines->Add(message);
54     #else
55     std::cout << message << std::endl;
56     #endif
57     }
58    
59     void minuscule(char * mess)
60     {
61     int nb=strlen(mess);
62     for (int i=0;i<nb;i++)
63     mess[i]=tolower(mess[i]);
64     }
65    
66     #ifdef WINDOWS_VERSION
67     int amain(int argc,char **argv)
68     #else
69     int main(int argc,char **argv)
70     #endif
71     {
72 francois 375 affiche((char*)"Operation dans l'environnement MAGiC");
73 francois 283 char nomfichier[3000];
74     char fichierout[3000];
75     char fichieraster[3000];
76     char fichieroptis[3000];
77     char fichierflottant[3000];
78     char fichierdensite[3000];
79 francois 425 char fichierlog[5000];
80 francois 343 fichierdensite[0]=0;
81 francois 283 char coderesu[10];
82 francois 326 int nummai=-1;
83 francois 283 int degre;
84     int action=0;
85     int numgeo=0;
86 gervaislavoie 328 int numcoque=0;
87 francois 283 int numgt=0;
88     int numentite=0;
89     int expand=0;
90     int numsol1=0;
91     int numsol2=0;
92     int numsol3=0;
93     int numchamp1=0;
94     int numchamp2=0;
95     int numchamp3=0;
96     int flottant=0;
97 gervaislavoie 304 int desactivedeforme=0;
98 francois 283 int consimpose=0;
99     int consmailleurauto=0;
100     int consopti=0;
101     double unite=1;
102     double seuil=0.8;
103     double eps=1e-6;
104     double eps2=1.;
105 francois 426 double angle=0.03;
106 francois 283 double niveau=150.;
107     int iter_max = 10;
108     double sigma;
109     double gamma=1.; //par d�faut 1.0
110     double sigmaf=1.; //par d�faut 1.0
111     double sigmag=1.; //par d�faut 1.0
112 francois 343 double limit=0.8;
113 francois 283 int reactivation = 0;
114     int bruitage = 0;
115     int lissage = 0;
116     int importtri=0;
117     sigma = 0.038/sqrt(10.); //valeur par d�faut
118 francois 292 char ccf[500];
119 francois 283 INIAIDE;
120 francois 326 strcpy(coderesu,"11111111");
121 gervaislavoie 328 fichierout[0]=0;
122 francois 425 fichierlog[0]=0;
123 francois 283 if (argc==2) strcpy(nomfichier,argv[1]);
124     else if (argc>2)
125     {
126     for (int i=0;i<argc;i++)
127     {
128     if (strcmp(argv[i],"-file")==0) strcpy(nomfichier,argv[i+1]);
129 francois 425 if (strcmp(argv[i],"-log")==0) strcpy(fichierlog,argv[i+1]);
130 francois 283 if (strcmp(argv[i],"-fileout")==0) strcpy(fichierout,argv[i+1]);
131     if (strcmp(argv[i],"-mesh")==0) nummai=atol(argv[i+1]);
132     if (strcmp(argv[i],"-numsol1")==0) numsol1=atol(argv[i+1]);
133     if (strcmp(argv[i],"-numsol2")==0) numsol2=atol(argv[i+1]);
134     if (strcmp(argv[i],"-numsol3")==0) numsol3=atol(argv[i+1]);
135     if (strcmp(argv[i],"-numchamp1")==0) numchamp1=atol(argv[i+1]);
136     if (strcmp(argv[i],"-numchamp2")==0) numchamp2=atol(argv[i+1]);
137     if (strcmp(argv[i],"-numchamp3")==0) numchamp3=atol(argv[i+1]);
138     if (strcmp(argv[i],"-geo")==0) numgeo=atol(argv[i+1]);
139     if (strcmp(argv[i],"-groupe")==0) numgt=atol(argv[i+1]);
140     if (strcmp(argv[i],"-entite")==0) numentite=atol(argv[i+1]);
141     if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
142     if (strcmp(argv[i],"-unite")==0) unite=atof(argv[i+1]);
143     if (strcmp(argv[i],"-seuil")==0) seuil=atof(argv[i+1]);
144     if (strcmp(argv[i],"-niveau")==0) niveau=atof(argv[i+1]);
145     if (strcmp(argv[i],"-aster")==0) strcpy(fichieraster,argv[i+1]);
146     if (strcmp(argv[i],"-densite")==0) strcpy(fichierdensite,argv[i+1]);
147 francois 426 if (strcmp(argv[i],"-angle")==0) angle=atof(argv[i+1]);
148 francois 283 if (strcmp(argv[i],"-optis")==0) strcpy(fichieroptis,argv[i+1]);
149     if (strcmp(argv[i],"-ficflottant")==0) strcpy(fichierflottant,argv[i+1]);
150     if (strcmp(argv[i],"-coderesu")==0) strcpy(coderesu,argv[i+1]);
151     if (strcmp(argv[i],"-flottant")==0) flottant = 1;
152     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
153     if (strcmp(argv[i],"-iter")==0) iter_max=atol(argv[i+1]);
154     if (strcmp(argv[i],"-sigma")==0) sigma=atof(argv[i+1]);
155     if (strcmp(argv[i],"-gamma")==0) gamma=atof(argv[i+1]);
156     if (strcmp(argv[i],"-sigmaf")==0) sigmaf=atof(argv[i+1]);
157     if (strcmp(argv[i],"-sigmag")==0) sigmag=atof(argv[i+1]);
158 francois 343 if (strcmp(argv[i],"-seuil")==0) limit=atof(argv[i+1]);
159 francois 331 if (strcmp(argv[i],"-test")==0) action=-10;
160 francois 283 if (strcmp(argv[i],"-fem")==0) action=1;
161     if (strcmp(argv[i],"-femdef")==0) action=15;
162     if (strcmp(argv[i],"-expand")==0) expand=1;
163     if (strcmp(argv[i],"-stepocc")==0) action=2;
164     if (strcmp(argv[i],"-magicgmsh")==0) action=3;
165     if (strcmp(argv[i],"-magicaster")==0) action=4;
166     if (strcmp(argv[i],"-stepmagic")==0) action=5;
167     if (strcmp(argv[i],"-satmagic")==0) action=6;
168     if (strcmp(argv[i],"-cttgmsh")==0) action=7;
169     if (strcmp(argv[i],"-occmagic")==0) action=8;
170     if (strcmp(argv[i],"-astermagic")==0) action=9;
171     if (strcmp(argv[i],"-magicoptis")==0) action=10;
172     if (strcmp(argv[i],"-optismagic")==0) action=11;
173     if (strcmp(argv[i],"-selectionne")==0) action=12;
174     if (strcmp(argv[i],"-deselectionne")==0) action=13;
175     if (strcmp(argv[i],"-examine")==0) action=14;
176     if (strcmp(argv[i],"-fusiongeo")==0) action=17;
177     if (strcmp(argv[i],"-importdensite")==0) action=18;
178     if (strcmp(argv[i],"-lissage")==0) action=16;
179 francois 343 if (strcmp(argv[i],"-lissageiso")==0) action=160;
180 francois 283 if (strcmp(argv[i],"-liss1")==0) lissage = 1;
181     if (strcmp(argv[i],"-liss2")==0) lissage = 2;
182     if (strcmp(argv[i],"-liss3")==0) lissage = 3;
183     if (strcmp(argv[i],"-bruitage")==0) bruitage = 1;
184     if (strcmp(argv[i],"-reactivation")==0) reactivation = 1;
185     if (strcmp(argv[i],"-cons_optimise")==0) consopti = 1;
186     if (strcmp(argv[i],"-cons_impose")==0) consimpose = 1;
187     if (strcmp(argv[i],"-cons_mailleurauto")==0) consmailleurauto = 1;
188     if (strcmp(argv[i],"-importtriangulation")==0) importtri=1;
189     if (strcmp(argv[i],"-importstl")==0) importtri=2;
190     if (strcmp(argv[i],"-deflexion")==0) eps2=atof(argv[i+1]);
191 francois 293 if (strcmp(argv[i],"-ccf_id")==0) {action=19;strcpy(ccf,argv[i+1]);};
192     if (strcmp(argv[i],"-ccft_id")==0) {action=20;strcpy(ccf,argv[i+1]);};
193     if (strcmp(argv[i],"-ccf_num")==0) {action=21;strcpy(ccf,argv[i+1]);};
194     if (strcmp(argv[i],"-ccft_num")==0) {action=22;strcpy(ccf,argv[i+1]);};
195 francois 296 if (strcmp(argv[i],"-ccfhelp")==0) action=23;
196 gervaislavoie 304 if (strcmp(argv[i],"-nodeforme")==0) desactivedeforme=1;
197 francois 326 if (strcmp(argv[i],"-calculaster")==0) action=24;
198 gervaislavoie 328 if (strcmp(argv[i],"-orienter")==0) {action=25;numcoque=atol(argv[i+1]);};
199     }
200 francois 283 }
201     else {
202 francois 375 GESTIONVERSION v;
203     char version[500];
204     v.print(version);
205     affiche(version);
206 francois 283 AFFAIDE;
207     return 0;
208     }
209 francois 296 char mess[3000];
210     char *p;
211     char extension[50];
212     char chaine[3000];
213    
214     if (strcmp(nomfichier,"-ccfhelp")==0) action=23;
215     else
216     {
217 francois 283
218     sprintf(mess," Fichier : %s",nomfichier);
219     affiche(mess);
220 francois 296 p=strrchr(nomfichier,'.');
221 francois 283 strcpy(extension,p);
222     minuscule(extension);
223     for (int i=0;i<3000;i++) chaine[i]=0;
224 francois 296 }
225 francois 283 if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
226     {
227     sprintf(mess," Conversion MAGiC vers GMSH");
228     affiche(mess);
229     MG_FILE gest(nomfichier);
230     int nb=gest.get_nb_mg_maillage();
231     char chaine[3000];
232     for (int i=0;i<nb;i++)
233     {
234     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
235     unsigned long id=mai->get_id();
236     strncpy(chaine,nomfichier,p-nomfichier);
237     char chaine2[3000];
238     sprintf(chaine2,"%s%lu",chaine,id);
239     std::string namefic=chaine2;
240     MG_EXPORT exp;
241 francois 339 sprintf(mess," Maillage geometrique : creation de %s.msh",namefic.c_str());
242 francois 331 affiche(mess);
243     exp.gmsh(mai,namefic);
244 francois 283 }
245     nb=gest.get_nb_fem_maillage();
246     for (int i=0;i<nb;i++)
247     {
248     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
249 gervaislavoie 304 if (desactivedeforme==1) mai->desactive_deforme();
250     unsigned long id=mai->get_id();
251 francois 283 strncpy(chaine,nomfichier,p-nomfichier);
252     char chaine2[3000];
253     sprintf(chaine2,"%s%lu",chaine,id);
254     std::string namefic=chaine2;
255     MG_EXPORT exp;
256 francois 331 sprintf(mess," Maillage EF : Creation de %s.msh",namefic.c_str());
257     affiche(mess);
258     exp.gmsh(mai,namefic);
259 francois 283 }
260     }
261 francois 331 if (action==-10)
262     {
263     MG_FILE gest(nomfichier);
264     gest.enregistrer(fichierout);
265     }
266 francois 283 if (action==4)
267     {
268     sprintf(mess," Conversion MAGiC vers code ASTER");
269     affiche(mess);
270     MG_FILE gest(nomfichier);
271     int nb=gest.get_nb_fem_maillage();
272     char chaine[1000];
273     for (int i=0;i<nb;i++)
274     {
275     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
276 francois 319 MG_VOLUME* vol=mai->get_mg_geometrie()->get_mg_volume(0);
277     MG_COQUE* coq=mai->get_mg_geometrie()->get_mg_coque(0);
278 francois 283 unsigned long id=mai->get_id();
279     strncpy(chaine,nomfichier,p-nomfichier);
280     char chaine2[3000];
281     sprintf(chaine2,"%s%lu",chaine,id);
282     std::string namefic=chaine2;
283     MG_EXPORT exp;
284 francois 319 if (vol!=NULL) exp.aster(vol,mai,namefic,0,coderesu);
285     if (coq!=NULL) exp.aster(coq,mai,namefic,0,coderesu);
286 francois 283 }
287     }
288     if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
289     {
290     sprintf(mess," Conversion carte de taille vers GMSH");
291     affiche(mess);
292     FCT_GENERATEUR_3D<4> carte;
293     carte.lire(nomfichier);
294     strncpy(chaine,nomfichier,p-nomfichier);
295     std::string namefic=chaine;
296     MG_EXPORT exp;
297     exp.gmsh(&carte,namefic);
298     }
299 francois 295 #ifdef BREP_STEP
300 francois 283 if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
301     {
302     sprintf(mess," Conversion STEP vers MAGiC");
303     affiche(mess);
304     STEP_IMPORT stepimport;
305     MG_GESTIONNAIRE gest;
306     stepimport.importer(gest,nomfichier) ;
307     strncpy(chaine,nomfichier,p-nomfichier);
308     std::string namefic=chaine;
309     namefic=namefic + ".magic";
310     int nb=gest.get_nb_mg_geometrie();
311     for (int i=0;i<nb;i++)
312     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
313     gest.enregistrer(namefic.c_str());
314     }
315 francois 295 #endif
316     #ifdef BREP_SAT
317 francois 283 if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
318     {
319     sprintf(mess," Conversion SAT vers MAGiC");
320     affiche(mess);
321     MG_GESTIONNAIRE gest;
322     ACIS_IMPORT acisimport;
323     acisimport.importer(gest,nomfichier) ;
324     strncpy(chaine,nomfichier,p-nomfichier);
325     std::string namefic=chaine;
326     namefic=namefic + ".magic";
327     int nb=gest.get_nb_mg_geometrie();
328     for (int i=0;i<nb;i++)
329     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
330     gest.enregistrer(namefic.c_str());
331     }
332 francois 295 #endif
333 francois 283 if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
334     {
335     #ifdef BREP_OCC
336     sprintf(mess," Conversion OpenCascade vers MAGiC");
337     affiche(mess);
338     MG_GESTIONNAIRE gest;
339     OCC_IMPORT occimport;
340     MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
341     if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
342     strncpy(chaine,nomfichier,p-nomfichier);
343     std::string namefic=chaine;
344     namefic=namefic + ".magic";
345     int nb=gest.get_nb_mg_geometrie();
346     for (int i=0;i<nb;i++)
347     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
348     gest.enregistrer(namefic.c_str());
349     #endif
350     }
351     if (action==2)
352     {
353     #ifdef BREP_OCC
354     sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
355     affiche(mess);
356     MG_GESTIONNAIRE gest;
357     OCC_IMPORT occimport;
358 francois 408 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,0.001,eps) ;
359 francois 283 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
360     strncpy(chaine,nomfichier,p-nomfichier);
361     std::string namefic=chaine;
362     namefic=namefic + ".magic";
363     int nb=gest.get_nb_mg_geometrie();
364     for (int i=0;i<nb;i++)
365     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
366     gest.enregistrer(namefic.c_str());
367     #endif
368     }
369     if (action==1)
370     {
371     sprintf(mess," Creation d'un maillage FEM");
372     affiche(mess);
373     MG_FILE gest(nomfichier);
374     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
375     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
376     gest.ajouter_fem_maillage(fem);
377     fem->construire(0);
378     gest.enregistrer(nomfichier);
379     }
380     if (action==9)
381     {
382     sprintf(mess," Importation des résultats ASTER vers MAGIC");
383     affiche(mess);
384     MG_FILE gest(nomfichier);
385     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
386     MG_IMPORT imp;
387 francois 322 imp.aster(mai,fichieraster,nomfichier);
388 francois 283 gest.enregistrer(nomfichier);
389     }
390     if (action==10)
391     {
392     sprintf(mess," Conversion MAGiC vers OPTIS");
393     affiche(mess);
394     MG_FILE gest(nomfichier);
395     int nb=gest.get_nb_fem_maillage();
396     char chaine[1000];
397     for (int i=0;i<nb;i++)
398     {
399     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
400     unsigned long id=mai->get_id();
401     strncpy(chaine,nomfichier,p-nomfichier);
402     char chaine2[3000];
403     sprintf(chaine2,"%s%lu",chaine,id);
404     std::string namefic=chaine2;
405     MG_EXPORT exp;
406 francois 319 MG_VOLUME* vol=mai->get_mg_geometrie()->get_mg_volume(0);
407     MG_COQUE* coq=mai->get_mg_geometrie()->get_mg_coque(0);
408     if (vol!=NULL) exp.aster(vol,mai,namefic,1,coderesu);
409     if (coq!=NULL) exp.aster(coq,mai,namefic,1,coderesu);
410 francois 283 }
411     }
412     if (action==11)
413     {
414     sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
415     affiche(mess);
416     MG_FILE gest(nomfichier);
417     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
418     MG_IMPORT imp;
419     imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
420     gest.enregistrer(nomfichier);
421     }
422     if (action==12)
423     {
424     sprintf(mess," Selection dans MAGIC");
425     affiche(mess);
426     MG_FILE gest(nomfichier);
427     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
428     MG_GROUPE_TOPOLOGIQUE* mggt;
429     if (numgt==0)
430     {
431     mggt=new MG_GROUPE_TOPOLOGIQUE;
432     mggeo->ajouter_mg_groupe_topologique(mggt);
433     }
434     else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
435     MG_ELEMENT_TOPOLOGIQUE* ele;
436     ele=mggeo->get_mg_sommetid(numentite);
437     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
438     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
439     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
440     if (ele!=NULL)
441     {
442     mggt->ajouter(ele);
443     if (expand)
444     {
445     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
446     ele->get_topologie_sousjacente(&lst);
447     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
448     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
449     mggt->ajouter(ele2);
450     }
451     }
452     gest.enregistrer(nomfichier);
453     }
454     if (action==13)
455     {
456     sprintf(mess," Deselection dans MAGIC");
457     affiche(mess);
458     MG_FILE gest(nomfichier);
459     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
460     MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
461     MG_ELEMENT_TOPOLOGIQUE* ele;
462     ele=mggeo->get_mg_sommetid(numentite);
463     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
464     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
465     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
466     if (ele!=NULL)
467     {
468     mggt->supprimer(ele);
469     if (expand)
470     {
471     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
472     ele->get_topologie_sousjacente(&lst);
473     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
474     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
475     mggt->supprimer(ele2);
476     }
477     }
478     gest.enregistrer(nomfichier);
479     }
480 francois 343 if ((action==16) || (action==160))
481 francois 283 {
482     sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
483     affiche(mess);
484 francois 343 affiche ("");
485     affiche ("");
486     affiche ("Lecture fichier");
487     MG_FILE gest(nomfichier);
488 francois 283 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
489     MG_GESTIONNAIRE gest2;
490     MG_LISSAGE liss;
491     liss.active_affichage(affiche);
492 francois 343 if (action==16) liss.lisse(mai,gest2,eps,sigma,sigmaf,sigmag,gamma,iter_max,reactivation,bruitage,lissage,consopti,consimpose,consmailleurauto);
493     if (action==160)
494     {
495     FEM_SOLUTION* sol=gest.get_fem_solutionid(numsol1);
496     liss.extract_skin_par_decoupage(sol,limit,gest2,lissage,eps,sigma,gamma,iter_max,sigmaf,sigmag,fichierdensite);
497     }
498 francois 283 gest2.enregistrer(fichierout);
499     }
500     sprintf(mess,"Conversion reussie");
501    
502     if (action==14)
503     {
504     sprintf(mess," Analyse MAGIC");
505     affiche(mess);
506     MG_FILE gest(nomfichier);
507 francois 425 if (nummai!=-1)
508     {
509     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
510     MAILLEUR_ANALYSE m3d(mai);
511     m3d.active_affichage(affiche);
512 francois 426 m3d.change_eps_angle_retourne(angle);
513 francois 425 if (fichierlog[0]==0)
514     m3d.analyse();
515     else
516     m3d.analyse(fichierlog);
517     }
518     else
519     {
520     char message [5000];
521 francois 283 int nbgeo=gest.get_nb_mg_geometrie();
522     sprintf(message," %d geometrie :",nbgeo);
523     for (int i=0;i<nbgeo;i++)
524     {
525     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
526     sprintf(message,"%s %lu ",message,geo->get_id());
527     }
528     affiche(message);
529     for (int i=0;i<nbgeo;i++)
530     {
531     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
532     sprintf(message," geometrie %lu",geo->get_id());
533     affiche(message);
534     int nbmg=geo->get_nb_mg_groupe_topologique();
535     sprintf(message," %d groupe topologique",nbmg);
536     for (int j=0;j<nbmg;j++)
537     {
538     MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
539     sprintf(message,"%s %lu ",message,mggp->get_id());
540     }
541     affiche(message);
542 francois 299 int nbvolume=geo->get_nb_mg_volume();
543     if (nbvolume==0) sprintf(message," %d volumes",geo->get_nb_mg_volume());
544     else sprintf(message," %d volumes : ",geo->get_nb_mg_volume());
545     for (int i=0;i<nbvolume;i++) sprintf(message,"%s %lu",message,geo->get_mg_volume(i)->get_id());
546 francois 290 affiche(message);
547 francois 299 int nbcoque=geo->get_nb_mg_coque();
548     if (nbcoque==0) sprintf(message," %d coques",geo->get_nb_mg_coque());
549     else sprintf(message," %d coques : ",geo->get_nb_mg_coque());
550     for (int i=0;i<nbcoque;i++) sprintf(message,"%s %lu",message,geo->get_mg_coque(i)->get_id());
551 francois 290 affiche(message);
552 francois 299 int nbpoutre=geo->get_nb_mg_poutre();
553     if (nbpoutre==0) sprintf(message," %d poutres",geo->get_nb_mg_poutre());
554     else sprintf(message," %d poutres : ",geo->get_nb_mg_poutre());
555     for (int i=0;i<nbpoutre;i++) sprintf(message,"%s %lu",message,geo->get_mg_poutre(i)->get_id());
556     affiche(message);
557 francois 290 sprintf(message," %d coquilles",geo->get_nb_mg_coquille());
558     affiche(message);
559 francois 283 sprintf(message," %d faces",geo->get_nb_mg_face());
560     affiche(message);
561     sprintf(message," %d aretes",geo->get_nb_mg_arete());
562     affiche(message);
563     sprintf(message," %d sommets",geo->get_nb_mg_sommet());
564     affiche(message);
565 francois 425
566 francois 283
567     }
568     int nbmai=gest.get_nb_mg_maillage();
569     sprintf(message," %d maillage geometrique :",nbmai);
570     affiche(message);
571     for (int i=0;i<nbmai;i++)
572     {
573     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
574     sprintf(message," maillage geometrique %lu ",mai->get_id());
575     affiche(message);
576     sprintf(message," %d noeuds",mai->get_nb_mg_noeud());
577     affiche(message);
578     sprintf(message," %d segments",mai->get_nb_mg_segment());
579     affiche(message);
580     sprintf(message," %d triangles",mai->get_nb_mg_triangle());
581     affiche(message);
582     sprintf(message," %d tetras",mai->get_nb_mg_tetra());
583     affiche(message);
584     }
585     int nbmaif=gest.get_nb_fem_maillage();
586     sprintf(message," %d maillage FEM :",nbmaif);
587     affiche(message);
588     for (int i=0;i<nbmaif;i++)
589     {
590     FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
591     sprintf(message," maillage FEM %lu ",maif->get_id());
592     affiche(message);
593     sprintf(message," %d noeuds",maif->get_nb_fem_noeud());
594     affiche(message);
595 francois 309 sprintf(message," %d elements 1D",maif->get_nb_fem_element1());
596 francois 283 affiche(message);
597 francois 309 sprintf(message," %d elements 2D",maif->get_nb_fem_element2());
598 francois 283 affiche(message);
599 francois 309 sprintf(message," %d elements 3D",maif->get_nb_fem_element3());
600 francois 283 affiche(message);
601 francois 325 double rx,ry,rz;
602     maif->calcul_somme_reaction(rx,ry,rz);
603     sprintf(message," Reactions : \n Rx=%lf\n Ry=%lf\n Rz=%lf",rx,ry,rz);
604     affiche(message);
605    
606 francois 283 }
607     int nbsol=gest.get_nb_mg_solution();
608     sprintf(message," %d solution maillage geometrique :",nbsol);
609     for (int i=0;i<nbsol;i++)
610     {
611     MG_SOLUTION* sol=gest.get_mg_solution(i);
612     sprintf(message,"%s %lu ",message,sol->get_id());
613     }
614     affiche(message);
615     int nbsolf=gest.get_nb_fem_solution();
616     sprintf(message," %d solution maillage FEM :",nbsolf);
617     for (int i=0;i<nbsolf;i++)
618     {
619     FEM_SOLUTION* sol=gest.get_fem_solution(i);
620     sprintf(message,"%s %lu ",message,sol->get_id());
621     }
622     affiche(message);
623 francois 425 }
624 francois 283 }
625     if (action==15)
626     {
627     sprintf(mess," Calcul de deforme");
628     affiche(mess);
629     MG_FILE gest(nomfichier);
630     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
631     FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
632     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
633     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
634     mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
635     gest.enregistrer(nomfichier);
636     }
637     if (action==17)
638     {
639     sprintf(mess," Fusion de géométrie");
640     affiche(mess);
641     MG_FILE gest(nomfichier);
642     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
643     VCT_MULTI_MODELE fusion(mggeo);
644     fusion.recherche_identite();
645     gest.enregistrer(nomfichier);
646     }
647     if (action==18)
648     {
649 francois 292 sprintf(mess," Création d'une pseudo-solution de la répartition de densite");
650 francois 283 affiche(mess);
651     MG_FILE gest(nomfichier);
652     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
653     MG_IMPORT imp;
654 gervaislavoie 302 imp.import_densite(mai,fichierdensite,nomfichier,3);
655 francois 283 gest.enregistrer(nomfichier);
656     }
657 francois 293 if ((action==19) || (action==20))
658 francois 292 {
659 francois 296 unsigned long identity;
660     char typeccf[3];
661 gervaislavoie 318 typeccf[2]=0;
662 gervaislavoie 302 double valccf=0.5; // Valeur par défaut
663 francois 296 sscanf(ccf,"%lu:%c%c:%le\n",&identity,&typeccf[0],&typeccf[1],&valccf);
664     MC_GESTIONNAIRE mcgest;
665     int res=mcgest.existe(typeccf);
666     if (res==0)
667     {
668     sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
669     affiche(mess);
670     return 0;
671     }
672     sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
673 francois 292 affiche(mess);
674     MG_FILE gest(nomfichier);
675     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
676     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
677 francois 296 MG_VOLUME* ele;
678     ele=geo->get_mg_volumeid(identity);
679 francois 292 if (ele!=NULL) liste.ajouter(ele);
680 francois 296 else
681     {
682     MG_COQUE* ele;
683     ele=geo->get_mg_coqueid(identity);
684     if (ele!=NULL) liste.ajouter(ele);
685     else
686 francois 292 {
687 francois 296 MG_POUTRE* ele;
688     ele=geo->get_mg_poutreid(identity);
689 francois 292 if (ele!=NULL) liste.ajouter(ele);
690     else
691 francois 296 {
692     MG_FACE* ele;
693     ele=geo->get_mg_faceid(identity);
694     if (ele!=NULL) liste.ajouter(ele);
695     else
696     {
697     MG_ARETE* ele;
698     ele=geo->get_mg_areteid(identity);
699     if (ele!=NULL) liste.ajouter(ele);
700     else
701     {
702     MG_SOMMET* ele;
703     ele=geo->get_mg_sommetid(identity);
704     if (ele!=NULL) liste.ajouter(ele);
705     }
706     }
707     }
708 francois 292 }
709 francois 296 }
710 francois 292 if (action==20)
711     {
712     int nb=liste.get_nb();
713     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
714     }
715     int nb=liste.get_nb();
716     for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
717     gest.enregistrer(nomfichier);
718     }
719 francois 293 if ((action==21)|| (action==22))
720     {
721 francois 296 MC_GESTIONNAIRE mcgest;
722     unsigned long identity;
723 francois 293 char typeccf[3];
724     double valccf=0.5;
725     char c;
726     sscanf(ccf,"%c:%lu:%c%c:%le\n",&c,&identity,&typeccf[0],&typeccf[1],&valccf);
727 francois 296 int res=mcgest.existe(typeccf);
728     if (res==0)
729     {
730     sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
731     affiche(mess);
732     return 0;
733     }
734     sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
735     affiche(mess);
736     MG_FILE gest(nomfichier);
737     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
738     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
739 francois 293 MG_FACE* ele=NULL;
740     if (c=='F') ele=geo->get_mg_face(identity);
741     if (ele!=NULL) liste.ajouter(ele);
742     else
743     {
744     MG_ARETE* ele=NULL;
745     if (c=='A') ele=geo->get_mg_arete(identity);
746     if (ele!=NULL) liste.ajouter(ele);
747     else
748     {
749     MG_SOMMET* ele=NULL;
750     if (c=='S') ele=geo->get_mg_sommet(identity);
751     if (ele!=NULL) liste.ajouter(ele);
752 francois 296 else
753     {
754     MG_VOLUME* ele=NULL;
755     if (c=='V') ele=geo->get_mg_volume(identity);
756     if (ele!=NULL) liste.ajouter(ele);
757     else
758     {
759     MG_COQUE* ele=NULL;
760     if (c=='C') ele=geo->get_mg_coque(identity);
761     if (ele!=NULL) liste.ajouter(ele);
762     else
763     {
764     MG_POUTRE* ele=NULL;
765     if (c=='P') ele=geo->get_mg_poutre(identity);
766     if (ele!=NULL) liste.ajouter(ele);
767    
768     }
769     }
770     }
771 francois 293 }
772     }
773     if (action==22)
774     {
775     int nb=liste.get_nb();
776     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
777     }
778     int nb=liste.get_nb();
779     for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
780     gest.enregistrer(nomfichier);
781     }
782 francois 296 if (action==23)
783     {
784     sprintf(mess," Liste des conditions aux limites disponibles");
785     affiche(mess);
786     MC_GESTIONNAIRE mcgest;
787     int ok=0;
788     do
789     {
790     std::string code;
791     std::string description;
792     int res=mcgest.get_description(code,description);
793     if (res)
794     {
795     sprintf(mess," %s : %s",code.c_str(),description.c_str());
796     affiche(mess);
797     }
798     else ok=1;
799     }
800     while (ok==0);
801     }
802 francois 326 if (action==24)
803     {
804     char nometude[1000];
805     char *p=strchr(nomfichier,'.');
806     strncpy(nometude,nomfichier,p-nomfichier);
807     nometude[p-nomfichier]=0;
808     MG_FILE gest(nomfichier);
809     FEM_MAILLAGE* mai;
810     if (nummai!=-1) mai=gest.get_fem_maillageid(nummai); else mai=gest.get_fem_maillage(0);
811     MGASTER mgaster;
812     mgaster.active_affichage(affiche);
813 francois 327 mgaster.calcule(mai,nometude,coderesu);
814 francois 326 }
815 gervaislavoie 328 if (action==25)
816     {
817     sprintf(mess," Orientation d'une coque");
818     affiche(mess);
819     MG_FILE gest(nomfichier);
820     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
821     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
822     MG_COQUE* coque=mai->get_mg_geometrie()->get_mg_coqueid(numcoque);
823     coque->orienter(mai);
824     if (fichierout[0]==0) strcpy(fichierout,nomfichier);
825     gest.enregistrer(fichierout);
826     }
827 francois 296 sprintf(mess,"Fin");
828 francois 283 affiche(mess);
829    
830     return 0;
831 francois 326
832 francois 283 }
833    
834    
835    
836     #pragma package(smart_init)