ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 793
Committed: Tue Mar 29 21:01:55 2016 UTC (9 years, 1 month ago) by francois
File size: 21298 byte(s)
Log Message:
Creation d'une geometrie virtuelle pour la creation d'une peau après une optimisation topologique.
Les triangles deja sur la surface originale sont attachées a une surface virtuelle dans la peau.

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_gestionnaire.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27    
28     #include "mg_gestionnaire.h"
29    
30    
31    
32    
33 couturad 740
34    
35 francois 283 #include <fstream>
36     //#include "affiche.h"
37     //#include "message.h"
38    
39    
40     //using namespace std;
41    
42 francois 763 MG_GESTIONNAIRE::MG_GESTIONNAIRE():entiteidmax(0),ouvertsld(0),version_fichier(VERSIONFICHIER)
43 francois 283 {
44    
45    
46     }
47    
48     MG_GESTIONNAIRE::~MG_GESTIONNAIRE()
49     {
50 francois 674 supprimer_tout_fem_solution();
51 francois 283 supprimer_tout_mg_solution();
52     supprimer_tout_mg_maillage();
53     supprimer_tout_mg_geometrie();
54 francois 686 supprimer_tout_mg_arbre();
55 francois 793 }
56 francois 283
57 francois 793 void MG_GESTIONNAIRE::vide(void)
58     {
59     supprimer_tout_fem_solution();
60     supprimer_tout_mg_solution();
61     supprimer_tout_mg_maillage();
62     supprimer_tout_mg_geometrie();
63     supprimer_tout_mg_arbre();
64     entiteidmax=1;
65 francois 283 }
66    
67     void MG_GESTIONNAIRE::recherche_bonid(MG_IDENTIFICATEUR &ident)
68     {
69     if (ident.get_id()==0)
70     {
71     entiteidmax++;
72     ident.change_id(entiteidmax);
73     }
74     else
75     {
76     if (ident.get_id()>entiteidmax) entiteidmax=ident.get_id();
77     }
78     }
79    
80     void MG_GESTIONNAIRE::recherche_bonidvisuel(MG_IDENTIFICATEUR &ident)
81     {
82     if (ident.get_id()==0)
83     {
84     entitevisuelidmax++;
85     ident.change_id(entitevisuelidmax);
86     }
87     else
88     {
89     if (ident.get_id()>entitevisuelidmax) entitevisuelidmax=ident.get_id();
90     }
91     }
92    
93 francois 686 // ENTITE MG_ARBRE
94     int MG_GESTIONNAIRE::ajouter_mg_arbre(MG_ARBRE *mgarbre)
95     {
96     recherche_bonid(*mgarbre);
97     MG_IDENTIFICATEUR *id=mgarbre;
98     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
99     if (!p.second) return FAIL;
100     std::pair<const unsigned long,MG_ARBRE*> tmp(mgarbre->get_id(),mgarbre);
101     lst_mg_arbre.insert(tmp);
102     mgarbre->change_gestionnaire(this);
103     return OK;
104     }
105 francois 283
106    
107 francois 686 MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbreid(unsigned long num)
108     {
109     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.find(num);
110     if (i==lst_mg_arbre.end())
111     {
112     // afficheur << INEXISTE << enderr;
113     return NULL;
114     }
115     return ((*i).second);
116     }
117    
118    
119    
120     MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbre(unsigned int num)
121     {
122     if (!(num<lst_mg_arbre.size()))
123     {
124     // afficheur << INEXISTE << enderr;
125     return NULL;
126     }
127     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.begin();
128     for (unsigned long j=0;j<num;j++) i++;
129     return ((*i).second);
130     }
131    
132     MG_ARBRE* MG_GESTIONNAIRE::get_premier_arbre(LISTE_MG_ARBRE::iterator &it)
133     {
134     it = lst_mg_arbre.begin();
135     if (it == lst_mg_arbre.end())
136     return NULL;
137     return it->second ;
138     }
139    
140     MG_ARBRE* MG_GESTIONNAIRE::get_suivant_arbre(LISTE_MG_ARBRE::iterator &it)
141     {
142     it++;
143     if (it==lst_mg_arbre.end())
144     return NULL;
145     return it->second;
146     }
147    
148     unsigned int MG_GESTIONNAIRE::get_nb_mg_arbre(void)
149     {
150     return lst_mg_arbre.size();
151     }
152    
153    
154     int MG_GESTIONNAIRE::supprimer_mg_arbreid(unsigned long num)
155     {
156     MG_ARBRE* mgarbre=get_mg_arbreid(num);
157     if (mgarbre==NULL)
158     {
159     // afficheur << INEXISTE2 << enderr;
160     return FAIL;
161     }
162     MG_IDENTIFICATEUR* id=mgarbre;
163     LISTE_ENTITE::iterator i=lst_entite.find(id);
164     lst_entite.erase(i);
165     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(num);
166     lst_mg_arbre.erase(j);
167     delete mgarbre;
168     return OK;
169     }
170    
171    
172     int MG_GESTIONNAIRE::supprimer_mg_arbre(unsigned int num)
173     {
174     MG_ARBRE* mgarbre=get_mg_arbre(num);
175     if (mgarbre==NULL)
176     {
177     // afficheur << INEXISTE2 << enderr;
178     return FAIL;
179     }
180     MG_IDENTIFICATEUR* id=mgarbre;
181     LISTE_ENTITE::iterator i=lst_entite.find(id);
182     lst_entite.erase(i);
183     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(id->get_id());
184     lst_mg_arbre.erase(j);
185     delete mgarbre;
186     return OK;
187     }
188    
189    
190     void MG_GESTIONNAIRE::supprimer_tout_mg_arbre(void)
191     {
192     while (get_nb_mg_arbre()!=0)
193     {
194     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.begin();
195     MG_ARBRE* mgarbre=(*j).second;
196     MG_IDENTIFICATEUR* id=mgarbre;
197     LISTE_ENTITE::iterator i=lst_entite.find(id);
198     lst_entite.erase(i);
199     lst_mg_arbre.erase(j);
200     delete mgarbre;
201     }
202     }
203     // ENTITE MG_GEOMETRIE
204 francois 283 int MG_GESTIONNAIRE::ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
205     {
206     recherche_bonid(*mggeo);
207     MG_IDENTIFICATEUR *id=mggeo;
208     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
209     if (!p.second) return FAIL;
210     std::pair<const unsigned long,MG_GEOMETRIE*> tmp(mggeo->get_id(),mggeo);
211     lst_mg_geometrie.insert(tmp);
212     mggeo->change_gestionnaire(this);
213     return OK;
214     }
215    
216    
217     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrieid(unsigned long num)
218     {
219     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.find(num);
220     if (i==lst_mg_geometrie.end())
221     {
222     // afficheur << INEXISTE << enderr;
223     return NULL;
224     }
225     return ((*i).second);
226     }
227    
228    
229    
230     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrie(unsigned int num)
231     {
232     if (!(num<lst_mg_geometrie.size()))
233     {
234     // afficheur << INEXISTE << enderr;
235     return NULL;
236     }
237     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.begin();
238     for (unsigned long j=0;j<num;j++) i++;
239     return ((*i).second);
240     }
241    
242     MG_GEOMETRIE* MG_GESTIONNAIRE::get_premier_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
243     {
244     it = lst_mg_geometrie.begin();
245     if (it == lst_mg_geometrie.end())
246     return NULL;
247     return it->second ;
248     }
249    
250     MG_GEOMETRIE* MG_GESTIONNAIRE::get_suivant_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
251     {
252     it++;
253     if (it==lst_mg_geometrie.end())
254     return NULL;
255     return it->second;
256     }
257    
258     unsigned int MG_GESTIONNAIRE::get_nb_mg_geometrie(void)
259     {
260     return lst_mg_geometrie.size();
261     }
262    
263    
264     int MG_GESTIONNAIRE::supprimer_mg_geometrieid(unsigned long num)
265     {
266     MG_GEOMETRIE* mggeo=get_mg_geometrieid(num);
267     if (mggeo==NULL)
268     {
269     // afficheur << INEXISTE2 << enderr;
270     return FAIL;
271     }
272     MG_IDENTIFICATEUR* id=mggeo;
273     LISTE_ENTITE::iterator i=lst_entite.find(id);
274     lst_entite.erase(i);
275     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(num);
276     lst_mg_geometrie.erase(j);
277     delete mggeo;
278     return OK;
279     }
280    
281    
282     int MG_GESTIONNAIRE::supprimer_mg_geometrie(unsigned int num)
283     {
284     MG_GEOMETRIE* mggeo=get_mg_geometrie(num);
285     if (mggeo==NULL)
286     {
287     // afficheur << INEXISTE2 << enderr;
288     return FAIL;
289     }
290     MG_IDENTIFICATEUR* id=mggeo;
291     LISTE_ENTITE::iterator i=lst_entite.find(id);
292     lst_entite.erase(i);
293     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(id->get_id());
294     lst_mg_geometrie.erase(j);
295     delete mggeo;
296     return OK;
297     }
298    
299    
300     void MG_GESTIONNAIRE::supprimer_tout_mg_geometrie(void)
301     {
302     while (get_nb_mg_geometrie()!=0)
303     {
304     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.begin();
305     MG_GEOMETRIE* mggeo=(*j).second;
306     MG_IDENTIFICATEUR* id=mggeo;
307     LISTE_ENTITE::iterator i=lst_entite.find(id);
308     lst_entite.erase(i);
309     lst_mg_geometrie.erase(j);
310     delete mggeo;
311     }
312     }
313    
314     // ENTITE MG_MAILLAGE
315    
316    
317     int MG_GESTIONNAIRE::ajouter_mg_maillage(MG_MAILLAGE *mgmai)
318     {
319     recherche_bonid(*mgmai);
320     MG_IDENTIFICATEUR *id=mgmai;
321     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
322     if (!p.second)
323     {
324     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
325     return FAIL;
326     }
327    
328     std::pair<const unsigned long,MG_MAILLAGE*> tmp(mgmai->get_id(),mgmai);
329     lst_mg_maillage.insert(tmp);
330     mgmai->change_gestionnaire(this);
331     return OK;
332     }
333    
334    
335     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillageid(unsigned long num)
336     {
337     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.find(num);
338     if (i==lst_mg_maillage.end())
339     {
340     // afficheur << INEXISTE << enderr;
341     return NULL;
342     }
343     return ((*i).second);
344     }
345    
346    
347    
348     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillage(unsigned int num)
349     {
350     if (!(num<lst_mg_maillage.size()))
351     {
352     // afficheur << INEXISTE << enderr;
353     return NULL;
354     }
355     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.begin();
356     for (unsigned long j=0;j<num;j++) i++;
357     return ((*i).second);
358     }
359    
360    
361     MG_MAILLAGE* MG_GESTIONNAIRE::get_premier_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
362     {
363     it = lst_mg_maillage.begin();
364     if (it == lst_mg_maillage.end())
365     return NULL;
366     return it->second ;
367     }
368    
369     MG_MAILLAGE* MG_GESTIONNAIRE::get_suivant_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
370     {
371     it++;
372     if (it==lst_mg_maillage.end())
373     return NULL;
374     return it->second;
375     }
376    
377    
378     unsigned int MG_GESTIONNAIRE::get_nb_mg_maillage(void)
379     {
380     return lst_mg_maillage.size();
381     }
382    
383    
384     int MG_GESTIONNAIRE::supprimer_mg_maillageid(unsigned long num)
385     {
386     MG_MAILLAGE* mgmai=get_mg_maillageid(num);
387     if (mgmai==NULL)
388     {
389     // afficheur << INEXISTE2 << enderr;
390     return FAIL;
391     }
392     MG_IDENTIFICATEUR* id=mgmai;
393     LISTE_ENTITE::iterator i=lst_entite.find(id);
394     lst_entite.erase(i);
395     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(num);
396     lst_mg_maillage.erase(j);
397     delete mgmai;
398     return OK;
399     }
400    
401    
402     int MG_GESTIONNAIRE::supprimer_mg_maillage(unsigned int num)
403     {
404     MG_MAILLAGE* mgmai=get_mg_maillage(num);
405     if (mgmai==NULL)
406     {
407     // afficheur << INEXISTE2 << enderr;
408     return FAIL;
409     }
410     MG_IDENTIFICATEUR* id=mgmai;
411     LISTE_ENTITE::iterator i=lst_entite.find(id);
412     lst_entite.erase(i);
413     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(id->get_id());
414     lst_mg_maillage.erase(j);
415     delete mgmai;
416     return OK;
417     }
418    
419    
420     void MG_GESTIONNAIRE::supprimer_tout_mg_maillage(void)
421     {
422     while (get_nb_mg_maillage()!=0)
423     {
424     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.begin();
425     MG_MAILLAGE* mgmai=(*j).second;
426     MG_IDENTIFICATEUR* id=mgmai;
427     LISTE_ENTITE::iterator i=lst_entite.find(id);
428     lst_entite.erase(i);
429     lst_mg_maillage.erase(j);
430     delete mgmai;
431     }
432    
433     }
434    
435    
436    
437    
438     // ENTITE FEM_MAILLAGE
439    
440    
441    
442    
443     int MG_GESTIONNAIRE::ajouter_fem_maillage(FEM_MAILLAGE *femmai)
444     {
445     recherche_bonid(*femmai);
446     MG_IDENTIFICATEUR *id=femmai;
447     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
448     if (!p.second)
449     {
450     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
451     return FAIL;
452     }
453    
454     std::pair<const unsigned long,FEM_MAILLAGE*> tmp(femmai->get_id(),femmai);
455     lst_fem_maillage.insert(tmp);
456     femmai->change_gestionnaire(this);
457     return OK;
458     }
459    
460    
461     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillageid(unsigned long num)
462     {
463     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.find(num);
464     if (i==lst_fem_maillage.end())
465     {
466     // afficheur << INEXISTE << enderr;
467     return NULL;
468     }
469     return ((*i).second);
470     }
471    
472    
473    
474     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillage(unsigned int num)
475     {
476     if (!(num<lst_fem_maillage.size()))
477     {
478     // afficheur << INEXISTE << enderr;
479     return NULL;
480     }
481     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.begin();
482     for (unsigned long j=0;j<num;j++) i++;
483     return ((*i).second);
484     }
485    
486    
487    
488     unsigned int MG_GESTIONNAIRE::get_nb_fem_maillage(void)
489     {
490     return lst_fem_maillage.size();
491     }
492    
493    
494     int MG_GESTIONNAIRE::supprimer_fem_maillageid(unsigned long num)
495     {
496     FEM_MAILLAGE* femmai=get_fem_maillageid(num);
497     if (femmai==NULL)
498     {
499     // afficheur << INEXISTE2 << enderr;
500     return FAIL;
501     }
502     MG_IDENTIFICATEUR* id=femmai;
503     LISTE_ENTITE::iterator i=lst_entite.find(id);
504     lst_entite.erase(i);
505     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(num);
506     lst_fem_maillage.erase(j);
507     delete femmai;
508     return OK;
509     }
510    
511    
512     int MG_GESTIONNAIRE::supprimer_fem_maillage(unsigned int num)
513     {
514     FEM_MAILLAGE* femmai=get_fem_maillage(num);
515     if (femmai==NULL)
516     {
517     // afficheur << INEXISTE2 << enderr;
518     return FAIL;
519     }
520     MG_IDENTIFICATEUR* id=femmai;
521     LISTE_ENTITE::iterator i=lst_entite.find(id);
522     lst_entite.erase(i);
523     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(id->get_id());
524     lst_fem_maillage.erase(j);
525     delete femmai;
526     return OK;
527     }
528    
529    
530     void MG_GESTIONNAIRE::supprimer_tout_fem_maillage(void)
531     {
532     while (get_nb_fem_maillage()!=0)
533     {
534     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.begin();
535     FEM_MAILLAGE* femmai=(*j).second;
536     MG_IDENTIFICATEUR* id=femmai;
537     LISTE_ENTITE::iterator i=lst_entite.find(id);
538     lst_entite.erase(i);
539     lst_fem_maillage.erase(j);
540     delete femmai;
541     }
542    
543     }
544    
545     FEM_MAILLAGE* MG_GESTIONNAIRE::get_premier_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
546     {
547     it = lst_fem_maillage.begin();
548     if (it == lst_fem_maillage.end())
549     return NULL;
550     return it->second ;
551     }
552    
553     FEM_MAILLAGE* MG_GESTIONNAIRE::get_suivant_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
554     {
555     it++;
556     if (it==lst_fem_maillage.end())
557     return NULL;
558     return it->second;
559     }
560    
561    
562    
563    
564    
565     // ENTITE MG_SOLUTION
566    
567    
568    
569    
570    
571    
572     int MG_GESTIONNAIRE::ajouter_mg_solution(MG_SOLUTION *mgsol)
573     {
574     recherche_bonid(*mgsol);
575     MG_IDENTIFICATEUR *id=mgsol;
576     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
577     if (!p.second)
578     {
579     return FAIL;
580     }
581    
582     std::pair<const unsigned long,MG_SOLUTION*> tmp(mgsol->get_id(),mgsol);
583     lst_mg_solution.insert(tmp);
584     return OK;
585     }
586    
587    
588     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solutionid(unsigned long num)
589     {
590     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.find(num);
591     if (i==lst_mg_solution.end())
592     {
593     return NULL;
594     }
595     return ((*i).second);
596     }
597    
598    
599    
600     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(unsigned int num)
601     {
602     if (!(num<lst_mg_solution.size()))
603     {
604     return NULL;
605     }
606     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.begin();
607     for (unsigned long j=0;j<num;j++) i++;
608     return ((*i).second);
609     }
610    
611 francois 326 MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(MG_MAILLAGE* mg,int nb_champs,char *nomfichier,char *nomsolution)
612     {
613     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
614     while (j!=lst_mg_solution.end())
615     {
616    
617     MG_SOLUTION* mgsol=(*j).second;
618     if (mgsol->get_maillage()==mg)
619     if (mgsol->get_nb_champ()==nb_champs)
620     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
621     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
622     return mgsol;
623     j++;
624     }
625     return NULL;
626     }
627 francois 283
628     MG_SOLUTION* MG_GESTIONNAIRE::get_premier_mg_solution(LISTE_MG_SOLUTION::iterator &it)
629     {
630     it = lst_mg_solution.begin();
631     if (it == lst_mg_solution.end())
632     return NULL;
633     return it->second ;
634     }
635    
636     MG_SOLUTION* MG_GESTIONNAIRE::get_suivant_mg_solution(LISTE_MG_SOLUTION::iterator &it)
637     {
638     it++;
639     if (it==lst_mg_solution.end())
640     return NULL;
641     return it->second;
642     }
643    
644    
645     unsigned int MG_GESTIONNAIRE::get_nb_mg_solution(void)
646     {
647     return lst_mg_solution.size();
648     }
649    
650    
651     int MG_GESTIONNAIRE::supprimer_mg_solutionid(unsigned long num)
652     {
653     MG_SOLUTION* mgsol=get_mg_solutionid(num);
654     if (mgsol==NULL)
655     {
656     return FAIL;
657     }
658     MG_IDENTIFICATEUR* id=mgsol;
659     LISTE_ENTITE::iterator i=lst_entite.find(id);
660     lst_entite.erase(i);
661     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(num);
662     lst_mg_solution.erase(j);
663     mgsol->efface();
664     delete mgsol;
665     return OK;
666     }
667    
668    
669     int MG_GESTIONNAIRE::supprimer_mg_solution(unsigned int num)
670     {
671     MG_SOLUTION* mgsol=get_mg_solution(num);
672     if (mgsol==NULL)
673     {
674     return FAIL;
675     }
676     MG_IDENTIFICATEUR* id=mgsol;
677     LISTE_ENTITE::iterator i=lst_entite.find(id);
678     lst_entite.erase(i);
679     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(id->get_id());
680     lst_mg_solution.erase(j);
681     mgsol->efface();
682     delete mgsol;
683     return OK;
684     }
685    
686    
687     void MG_GESTIONNAIRE::supprimer_tout_mg_solution(void)
688     {
689     while (get_nb_mg_solution()!=0)
690     {
691     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
692     MG_SOLUTION* mgsol=(*j).second;
693     MG_IDENTIFICATEUR* id=mgsol;
694     LISTE_ENTITE::iterator i=lst_entite.find(id);
695     lst_entite.erase(i);
696     lst_mg_solution.erase(j);
697     delete mgsol;
698     }
699    
700     }
701    
702    
703    
704    
705     // ENTITE FEM_SOLUTION
706    
707    
708    
709    
710    
711     int MG_GESTIONNAIRE::ajouter_fem_solution(FEM_SOLUTION *mgsol)
712     {
713     recherche_bonid(*mgsol);
714     MG_IDENTIFICATEUR *id=mgsol;
715     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
716     if (!p.second)
717     {
718     return FAIL;
719     }
720    
721     std::pair<const unsigned long,FEM_SOLUTION*> tmp(mgsol->get_id(),mgsol);
722     lst_fem_solution.insert(tmp);
723     return OK;
724     }
725    
726    
727     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solutionid(unsigned long num)
728     {
729     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.find(num);
730     if (i==lst_fem_solution.end())
731     {
732     return NULL;
733     }
734     return ((*i).second);
735     }
736    
737    
738    
739     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(unsigned int num)
740     {
741     if (!(num<lst_fem_solution.size()))
742     {
743     return NULL;
744     }
745     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.begin();
746     for (unsigned long j=0;j<num;j++) i++;
747     return ((*i).second);
748     }
749    
750    
751 francois 326 FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(FEM_MAILLAGE* fem,int nb_champs,char *nomfichier,char *nomsolution)
752     {
753     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
754     while (j!=lst_fem_solution.end())
755     {
756    
757     FEM_SOLUTION* mgsol=(*j).second;
758     if (mgsol->get_maillage()==fem)
759     if (mgsol->get_nb_champ()==nb_champs)
760     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
761     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
762     return mgsol;
763     j++;
764     }
765     return NULL;
766     }
767 francois 283
768 francois 326
769 francois 283 unsigned int MG_GESTIONNAIRE::get_nb_fem_solution(void)
770     {
771     return lst_fem_solution.size();
772     }
773    
774    
775     int MG_GESTIONNAIRE::supprimer_fem_solutionid(unsigned long num)
776     {
777     FEM_SOLUTION* mgsol=get_fem_solutionid(num);
778     if (mgsol==NULL)
779     {
780     return FAIL;
781     }
782     MG_IDENTIFICATEUR* id=mgsol;
783     LISTE_ENTITE::iterator i=lst_entite.find(id);
784     lst_entite.erase(i);
785     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(num);
786     lst_fem_solution.erase(j);
787     mgsol->efface();
788     delete mgsol;
789     return OK;
790     }
791    
792    
793     int MG_GESTIONNAIRE::supprimer_fem_solution(unsigned int num)
794     {
795     FEM_SOLUTION* mgsol=get_fem_solution(num);
796     if (mgsol==NULL)
797     {
798     return FAIL;
799     }
800     MG_IDENTIFICATEUR* id=mgsol;
801     LISTE_ENTITE::iterator i=lst_entite.find(id);
802     lst_entite.erase(i);
803     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
804     lst_fem_solution.erase(j);
805     mgsol->efface();
806     delete mgsol;
807     return OK;
808     }
809    
810     int MG_GESTIONNAIRE::supprimer_fem_solution_du_gestionnaire(unsigned int num)
811     {
812     FEM_SOLUTION* mgsol=get_fem_solution(num);
813     if (mgsol==NULL)
814     {
815     return FAIL;
816     }
817     MG_IDENTIFICATEUR* id=mgsol;
818     LISTE_ENTITE::iterator i=lst_entite.find(id);
819     lst_entite.erase(i);
820     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
821     lst_fem_solution.erase(j);
822     return OK;
823     }
824    
825    
826     void MG_GESTIONNAIRE::supprimer_tout_fem_solution(void)
827     {
828     while (get_nb_fem_solution()!=0)
829     {
830     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
831     FEM_SOLUTION* mgsol=(*j).second;
832     MG_IDENTIFICATEUR* id=mgsol;
833     LISTE_ENTITE::iterator i=lst_entite.find(id);
834     lst_entite.erase(i);
835     lst_fem_solution.erase(j);
836     delete mgsol;
837     }
838    
839     }
840    
841    
842     FEM_SOLUTION* MG_GESTIONNAIRE::get_premier_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
843     {
844     it = lst_fem_solution.begin();
845     if (it == lst_fem_solution.end())
846     return NULL;
847     return it->second ;
848     }
849    
850     FEM_SOLUTION* MG_GESTIONNAIRE::get_suivant_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
851     {
852     it++;
853     if (it==lst_fem_solution.end())
854     return NULL;
855     return it->second;
856     }
857    
858    
859    
860     // FIN DE GESTION DES ENTITES
861    
862    
863    
864     void MG_GESTIONNAIRE::enregistrer(char* chemin)
865     {
866     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
867     o.precision(16);
868     o.setf(std::ios::showpoint);
869     o <<(*this) << std::endl;
870     }
871    
872     void MG_GESTIONNAIRE::enregistrer(const char* chemin)
873     {
874     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
875     o.precision(16);
876     o.setf(std::ios::showpoint);
877     o << (*this) << std::endl;
878     }
879    
880 francois 763 void MG_GESTIONNAIRE::enregistrer(std::ostream& o,double version)
881 francois 283 {
882 francois 763 version_fichier=version;
883 francois 283 LISTE_ENTITE::const_iterator i;
884     o << "// Fichier MAGIC - UQTR;" << std::endl;
885     o << "//*i:" << entiteidmax << ";" << std::endl;
886 francois 763 o << "//*v:" << version_fichier << ";" << std::endl;
887 francois 283 for (i=lst_entite.begin();i!=lst_entite.end();i++)
888 francois 763 (*i)->enregistrer(o,version_fichier);
889 francois 283 o << "FIN;" << std::endl;
890     }
891    
892 francois 763 double MG_GESTIONNAIRE::get_version_fichier(void)
893     {
894     return version_fichier;
895     }
896 francois 283
897    
898     std::ostream& operator << (std::ostream& o,MG_GESTIONNAIRE& gest)
899     {
900 francois 763 gest.enregistrer(o,VERSIONFICHIER);
901 francois 283 return o;
902     }
903