ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 686
Committed: Tue Jul 7 14:45:11 2015 UTC (9 years, 10 months ago) by francois
File size: 21496 byte(s)
Log Message:
ajout d'un arbre caracteristique dans MAGiC - Phase 1 - Uniquement la structure vide pour le moment.

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