ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 576
Committed: Wed Oct 22 18:13:01 2014 UTC (10 years, 6 months ago) by francois
File size: 52505 byte(s)
Log Message:
ajout d'une geometrie virtuelle dans le maillage structure pour pouvoir saisir des conditions aux limites. ajout de conditions aux limites pour le thermique

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�e et Vincent FRANCOIS
5     // D�artement de G�ie M�anique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�artement
8     // de g�ie m�anique de l'Universit�du Qu�ec �
9     // Trois Rivi�es
10     // Les librairies ne peuvent �re utilis�s sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_geometrie.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 �11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include <iostream>
27     #include <string.h>
28    
29    
30     #include "mg_geometrie.h"
31     #include "mg_gestionnaire.h"
32 francois 526 #include "mg_sommet_noeud.h"
33 francois 283 //#include "affiche.h"
34     //#include "message.h"
35    
36    
37     //using namespace std;
38    
39     MG_GEOMETRIE::MG_GEOMETRIE(char *type,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(),gest_materiau(""),valeur_unite(unite),precision(eps)
40     {
41     nom_du_fichier=new char[strlen(nom)+1];
42     strcpy(nom_du_fichier,nom);
43     strcpy(type_geo,type);
44     }
45    
46    
47    
48     MG_GEOMETRIE::MG_GEOMETRIE(char *type,unsigned long num,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(num),valeur_unite(unite),precision(eps)
49     {
50     nom_du_fichier=new char[strlen(nom)+1];
51     strcpy(nom_du_fichier,nom);
52     strcpy(type_geo,type);
53     }
54    
55    
56    
57     MG_GEOMETRIE::~MG_GEOMETRIE()
58     {
59     supprimer_tout_mg_volume();
60     supprimer_tout_mg_coquille();
61     supprimer_tout_mg_face();
62     supprimer_tout_mg_boucle();
63     supprimer_tout_mg_arete();
64     supprimer_tout_mg_sommet();
65     supprimer_tout_mg_point();
66     supprimer_tout_mg_courbe();
67     supprimer_tout_mg_surface();
68     supprimer_tout_mg_visu_courbe();
69     supprimer_tout_mg_poutre();
70     supprimer_tout_mg_coque();
71     supprimer_tout_mg_groupe_topologique();
72    
73     if (nom_du_fichier!=NULL) delete [] nom_du_fichier;
74    
75     }
76    
77    
78     void MG_GEOMETRIE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
79     {
80     gest=mggest;
81     }
82    
83    
84    
85     // ENTITE MG_POINT
86    
87     int MG_GEOMETRIE::ajouter_mg_point(MG_POINT *mgpt)
88     {
89     gest->recherche_bonid(*mgpt);
90     MG_IDENTIFICATEUR *id=mgpt;
91     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
92     if (!p.second)
93     {
94     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
95     return FAIL;
96     }
97    
98     std::pair<const unsigned long,MG_POINT*> tmp(mgpt->get_id(),mgpt);
99     lst_mg_point.insert(tmp);
100     return OK;
101     }
102    
103    
104     MG_POINT* MG_GEOMETRIE::get_mg_pointid(unsigned long num)
105     {
106     LISTE_MG_POINT::iterator i=lst_mg_point.find(num);
107     if (i==lst_mg_point.end())
108     {
109     // afficheur << INEXISTE << enderr;
110     return NULL;
111     }
112     return ((*i).second);
113     }
114    
115    
116    
117     MG_POINT* MG_GEOMETRIE::get_mg_point(unsigned int num)
118     {
119     if (!(num<lst_mg_point.size()))
120     {
121     // afficheur << INEXISTE << enderr;
122     return NULL;
123     }
124     LISTE_MG_POINT::iterator i=lst_mg_point.begin();
125     for (unsigned long j=0;j<num;j++) i++;
126     return ((*i).second);
127     }
128    
129    
130    
131     unsigned int MG_GEOMETRIE::get_nb_mg_point(void)
132     {
133     return lst_mg_point.size();
134     }
135    
136    
137     int MG_GEOMETRIE::supprimer_mg_pointid(unsigned long num)
138     {
139     MG_POINT* mgpt=get_mg_pointid(num);
140     if (mgpt==NULL)
141     {
142     // afficheur << INEXISTE2 << enderr;
143     return FAIL;
144     }
145     MG_IDENTIFICATEUR* id=mgpt;
146     LISTE_ENTITE::iterator i=lst_entite.find(id);
147     lst_entite.erase(i);
148     LISTE_MG_POINT::iterator j=lst_mg_point.find(num);
149     lst_mg_point.erase(j);
150     delete mgpt;
151     return OK;
152     }
153    
154    
155     int MG_GEOMETRIE::supprimer_mg_point(unsigned int num)
156     {
157     MG_POINT* mgpt=get_mg_point(num);
158     if (mgpt==NULL)
159     {
160     // afficheur << INEXISTE2 << enderr;
161     return FAIL;
162     }
163     MG_IDENTIFICATEUR* id=mgpt;
164     LISTE_ENTITE::iterator i=lst_entite.find(id);
165     lst_entite.erase(i);
166     LISTE_MG_POINT::iterator j=lst_mg_point.begin();
167     for (unsigned int k=0;k<num;k++) j++;
168     lst_mg_point.erase(j);
169     delete mgpt;
170     return OK;
171     }
172    
173    
174     void MG_GEOMETRIE::supprimer_tout_mg_point(void)
175     {
176     while (get_nb_mg_point()!=0)
177     {
178     LISTE_MG_POINT::iterator j=lst_mg_point.begin();
179     MG_POINT* mgpt=(*j).second;
180     MG_IDENTIFICATEUR* id=mgpt;
181     LISTE_ENTITE::iterator i=lst_entite.find(id);
182     lst_entite.erase(i);
183     lst_mg_point.erase(j);
184     delete mgpt;
185     }
186     }
187    
188     MG_POINT* MG_GEOMETRIE::get_premier_point(LISTE_MG_POINT::iterator &it)
189     {
190     it = lst_mg_point.begin();
191     if (it == lst_mg_point.end())
192     return NULL;
193     return it->second ;
194     }
195    
196     MG_POINT* MG_GEOMETRIE::get_suivant_point(LISTE_MG_POINT::iterator &it)
197     {
198     it++;
199     if (it==lst_mg_point.end())
200     return NULL;
201     return it->second;
202     }
203    
204    
205     // ENTITE MG_COURBE
206    
207     int MG_GEOMETRIE::ajouter_mg_courbe(MG_COURBE *mgcrb)
208     {
209     gest->recherche_bonid(*mgcrb);
210     MG_IDENTIFICATEUR *id=mgcrb;
211     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
212     if (!p.second)
213     {
214     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
215     return FAIL;
216     }
217     std::pair<const unsigned long,MG_COURBE*> tmp(mgcrb->get_id(),mgcrb);
218     lst_mg_courbe.insert(tmp);
219     return OK;
220     }
221    
222    
223     MG_COURBE* MG_GEOMETRIE::get_mg_courbeid(unsigned long num)
224     {
225     LISTE_MG_COURBE::iterator i=lst_mg_courbe.find(num);
226     if (i==lst_mg_courbe.end())
227     {
228     // afficheur << INEXISTE << enderr;
229     return NULL;
230     }
231     return ((*i).second);
232     }
233    
234    
235    
236     MG_COURBE* MG_GEOMETRIE::get_mg_courbe(unsigned int num)
237     {
238     if (!(num<lst_mg_courbe.size()))
239     {
240     // afficheur << INEXISTE << enderr;
241     return NULL;
242     }
243     LISTE_MG_COURBE::iterator i=lst_mg_courbe.begin();
244    
245     for (unsigned long j=0;j<num;j++) i++;
246     return ((*i).second);
247     }
248    
249    
250    
251     unsigned int MG_GEOMETRIE::get_nb_mg_courbe(void)
252     {
253     return lst_mg_courbe.size();
254     }
255    
256    
257     int MG_GEOMETRIE::supprimer_mg_courbeid(unsigned long num)
258     {
259     MG_COURBE* mgcrb=get_mg_courbeid(num);
260     if (mgcrb==NULL)
261     {
262     // afficheur << INEXISTE2 << enderr;
263     return FAIL;
264     }
265     MG_IDENTIFICATEUR* id=mgcrb;
266     LISTE_ENTITE::iterator i=lst_entite.find(id);
267     lst_entite.erase(i);
268     LISTE_MG_COURBE::iterator j=lst_mg_courbe.find(num);
269     lst_mg_courbe.erase(j);
270     delete mgcrb;
271     return OK;
272     }
273    
274    
275     int MG_GEOMETRIE::supprimer_mg_courbe(unsigned int num)
276     {
277     MG_COURBE* mgcrb=get_mg_courbe(num);
278     if (mgcrb==NULL)
279     {
280     // afficheur << INEXISTE2 << enderr;
281     return FAIL;
282     }
283     MG_IDENTIFICATEUR* id=mgcrb;
284     LISTE_ENTITE::iterator i=lst_entite.find(id);
285     lst_entite.erase(i);
286     LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
287     for (unsigned int k=0;k<num;k++) j++;
288     lst_mg_courbe.erase(j);
289     delete mgcrb;
290     return OK;
291     }
292    
293     void MG_GEOMETRIE::supprimer_tout_mg_courbe(void)
294     {
295     while (get_nb_mg_courbe()!=0)
296     {
297     LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
298     MG_COURBE* mgcrb=(*j).second;
299     MG_IDENTIFICATEUR* id=mgcrb;
300     LISTE_ENTITE::iterator i=lst_entite.find(id);
301     lst_entite.erase(i);
302     lst_mg_courbe.erase(j);
303     delete mgcrb;
304     }
305     }
306    
307     MG_COURBE* MG_GEOMETRIE::get_premier_courbe(LISTE_MG_COURBE::iterator &it)
308     {
309     it = lst_mg_courbe.begin();
310     if (it == lst_mg_courbe.end())
311     return NULL;
312     return it->second ;
313     }
314    
315     MG_COURBE* MG_GEOMETRIE::get_suivant_courbe(LISTE_MG_COURBE::iterator &it)
316     {
317     it++;
318     if (it==lst_mg_courbe.end())
319     return NULL;
320     return it->second;
321     }
322    
323    
324    
325    
326     // ENTITE MG_SURFACE
327    
328     int MG_GEOMETRIE::ajouter_mg_surface(MG_SURFACE *mgsrf)
329     {
330     gest->recherche_bonid(*mgsrf);
331     MG_IDENTIFICATEUR *id=mgsrf;
332     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
333     if (!p.second)
334     {
335     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
336     return FAIL;
337     }
338    
339     std::pair<const unsigned long,MG_SURFACE*> tmp(mgsrf->get_id(),mgsrf);
340     lst_mg_surface.insert(tmp);
341     return OK;
342     }
343    
344    
345     MG_SURFACE* MG_GEOMETRIE::get_mg_surfaceid(unsigned long num)
346     {
347     LISTE_MG_SURFACE::iterator i=lst_mg_surface.find(num);
348     if (i==lst_mg_surface.end())
349     {
350     // afficheur << INEXISTE << enderr;
351     return NULL;
352     }
353     return ((*i).second);
354     }
355    
356    
357    
358     MG_SURFACE* MG_GEOMETRIE::get_mg_surface(unsigned int num)
359     {
360     if (!(num<lst_mg_surface.size()))
361     {
362     // afficheur << INEXISTE << enderr;
363     return NULL;
364     }
365     LISTE_MG_SURFACE::iterator i=lst_mg_surface.begin();
366     for (unsigned long j=0;j<num;j++) i++;
367     return ((*i).second);
368     }
369    
370    
371    
372     unsigned int MG_GEOMETRIE::get_nb_mg_surface(void)
373     {
374     return lst_mg_surface.size();
375     }
376    
377    
378     int MG_GEOMETRIE::supprimer_mg_surfaceid(unsigned long num)
379     {
380     MG_SURFACE* mgsrf=get_mg_surfaceid(num);
381     if (mgsrf==NULL)
382     {
383     // afficheur << INEXISTE2 << enderr;
384     return FAIL;
385     }
386     MG_IDENTIFICATEUR* id=mgsrf;
387     LISTE_ENTITE::iterator i=lst_entite.find(id);
388     lst_entite.erase(i);
389     LISTE_MG_SURFACE::iterator j=lst_mg_surface.find(num);
390     lst_mg_surface.erase(j);
391     delete mgsrf;
392     return OK;
393     }
394    
395    
396     int MG_GEOMETRIE::supprimer_mg_surface(unsigned int num)
397     {
398     MG_SURFACE* mgsrf=get_mg_surface(num);
399     if (mgsrf==NULL)
400     {
401     // afficheur << INEXISTE2 << enderr;
402     return FAIL;
403     }
404     MG_IDENTIFICATEUR* id=mgsrf;
405     LISTE_ENTITE::iterator i=lst_entite.find(id);
406     lst_entite.erase(i);
407     LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
408     for (unsigned int k=0;k<num;k++) j++;
409     lst_mg_surface.erase(j);
410     delete mgsrf;
411     return OK;
412     }
413    
414    
415     void MG_GEOMETRIE::supprimer_tout_mg_surface(void)
416     {
417     while (get_nb_mg_surface()!=0)
418     {
419     LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
420     MG_SURFACE* mgsrf=(*j).second;
421     MG_IDENTIFICATEUR* id=mgsrf;
422     LISTE_ENTITE::iterator i=lst_entite.find(id);
423     lst_entite.erase(i);
424     lst_mg_surface.erase(j);
425     delete mgsrf;
426     }
427     }
428    
429     MG_SURFACE* MG_GEOMETRIE::get_premier_surface(LISTE_MG_SURFACE::iterator &it)
430     {
431     it = lst_mg_surface.begin();
432     if (it == lst_mg_surface.end())
433     return NULL;
434     return it->second ;
435     }
436    
437     MG_SURFACE* MG_GEOMETRIE::get_suivant_surface(LISTE_MG_SURFACE::iterator &it)
438     {
439     it++;
440     if (it==lst_mg_surface.end())
441     return NULL;
442     return it->second;
443     }
444    
445    
446    
447    
448     // ENTITE MG_SOMMET
449 francois 526 MG_SOMMET_NOEUD* MG_GEOMETRIE::ajouter_mg_sommet_noeud(MG_NOEUD *noeud)
450     {
451     MG_SOMMET_NOEUD* somno=new MG_SOMMET_NOEUD(noeud);
452     gest->recherche_bonid(*somno);
453     MG_IDENTIFICATEUR *id=somno;
454     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
455     if (!p.second)
456     {
457     delete somno;
458     return NULL;
459     }
460     std::pair<const unsigned long,MG_SOMMET*> tmp(somno->get_id(),somno);
461     lst_mg_sommet.insert(tmp);
462     return somno;
463     }
464    
465 francois 283 int MG_GEOMETRIE::ajouter_mg_sommet(MG_SOMMET *mgsom)
466     {
467     gest->recherche_bonid(*mgsom);
468     MG_IDENTIFICATEUR *id=mgsom;
469     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
470     if (!p.second)
471     {
472     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
473     return FAIL;
474     }
475    
476     std::pair<const unsigned long,MG_SOMMET*> tmp(mgsom->get_id(),mgsom);
477     lst_mg_sommet.insert(tmp);
478     return OK;
479     }
480    
481    
482     MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(unsigned long num)
483     {
484     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.find(num);
485     if (i==lst_mg_sommet.end())
486     {
487     // afficheur << INEXISTE << enderr;
488     return NULL;
489     }
490     return ((*i).second);
491     }
492    
493     MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(std::string id)
494     {
495     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
496     int nb=lst_mg_sommet.size();
497     for (int j=0;j<nb;j++)
498     {
499     MG_SOMMET* sommet=(*i).second;
500     std::string idori=sommet->get_idoriginal();
501     if (idori==id) return sommet;
502     i++;
503     }
504     return NULL;
505     }
506    
507    
508    
509     MG_SOMMET* MG_GEOMETRIE::get_mg_sommet(unsigned int num)
510     {
511     if (!(num<lst_mg_sommet.size()))
512     {
513     // afficheur << INEXISTE << enderr;
514     return NULL;
515     }
516     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
517     for (unsigned long j=0;j<num;j++) i++;
518     return ((*i).second);
519     }
520    
521    
522    
523     unsigned int MG_GEOMETRIE::get_nb_mg_sommet(void)
524     {
525     return lst_mg_sommet.size();
526     }
527    
528    
529     int MG_GEOMETRIE::supprimer_mg_sommetid(unsigned long num)
530     {
531     MG_SOMMET* mgsom=get_mg_sommetid(num);
532     if (mgsom==NULL)
533     {
534     // afficheur << INEXISTE2 << enderr;
535     return FAIL;
536     }
537     if (mgsom->get_nb_mg_cosommet()!=0)
538     {
539     // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
540     return FAIL;
541     }
542     MG_IDENTIFICATEUR* id=mgsom;
543     LISTE_ENTITE::iterator i=lst_entite.find(id);
544     lst_entite.erase(i);
545     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.find(num);
546     lst_mg_sommet.erase(j);
547     delete mgsom;
548     return OK;
549     }
550    
551    
552     int MG_GEOMETRIE::supprimer_mg_sommet(unsigned int num)
553     {
554     MG_SOMMET* mgsom=get_mg_sommet(num);
555     if (mgsom==NULL)
556     {
557     // afficheur << INEXISTE2 << enderr;
558     return FAIL;
559     }
560     if (mgsom->get_nb_mg_cosommet()!=0)
561     {
562     // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
563     return FAIL;
564     }
565     MG_IDENTIFICATEUR* id=mgsom;
566     LISTE_ENTITE::iterator i=lst_entite.find(id);
567     lst_entite.erase(i);
568     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
569     for (unsigned int k=0;k<num;k++) j++;
570     lst_mg_sommet.erase(j);
571     delete mgsom;
572     return OK;
573     }
574    
575    
576     void MG_GEOMETRIE::supprimer_tout_mg_sommet(void)
577     {
578     while (get_nb_mg_sommet()!=0)
579     {
580     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
581     MG_SOMMET* mgsom=(*j).second;
582     MG_IDENTIFICATEUR* id=mgsom;
583     LISTE_ENTITE::iterator i=lst_entite.find(id);
584     lst_entite.erase(i);
585     lst_mg_sommet.erase(j);
586     delete mgsom;
587     }
588     }
589    
590     MG_SOMMET* MG_GEOMETRIE::get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
591     {
592     it = lst_mg_sommet.begin();
593     if (it == lst_mg_sommet.end())
594     return NULL;
595     return it->second ;
596     }
597    
598     MG_SOMMET* MG_GEOMETRIE::get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
599     {
600     it++;
601     if (it==lst_mg_sommet.end())
602     return NULL;
603     return it->second;
604     }
605    
606    
607     // ENTITE MG_COSOMMET
608    
609    
610     MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(MG_ARETE *mgarete,MG_SOMMET *mgsom)
611     {
612     MG_COSOMMET* mgcosom=new MG_COSOMMET(mgsom,mgarete,precision);
613     gest->recherche_bonid(*mgcosom);
614     MG_IDENTIFICATEUR *id=mgcosom;
615     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
616     if (!p.second)
617     {
618     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
619     delete mgcosom;
620     return NULL;
621     }
622    
623     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
624     lst_mg_cosommet.insert(tmp);
625     mgsom->ajouter_mg_cosommet(mgcosom);
626     return mgcosom;
627     }
628    
629     MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(unsigned long num,MG_ARETE *mgarete,MG_SOMMET *mgsom)
630     {
631     MG_COSOMMET* mgcosom=new MG_COSOMMET(num,mgsom,mgarete,precision);
632     MG_IDENTIFICATEUR *id=mgcosom;
633     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
634     if (!p.second)
635     {
636     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
637     delete mgcosom;
638     return NULL;
639     }
640    
641     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
642     lst_mg_cosommet.insert(tmp);
643     mgsom->ajouter_mg_cosommet(mgcosom);
644     return mgcosom;
645     }
646    
647     int MG_GEOMETRIE::supprimer_mg_cosommet(MG_COSOMMET* mgcosom)
648     {
649     if (mgcosom==NULL)
650     {
651     // afficheur << INEXISTE2 << enderr;
652     return FAIL;
653     }
654     MG_IDENTIFICATEUR* id=mgcosom;
655     LISTE_ENTITE::iterator i=lst_entite.find(id);
656     lst_entite.erase(i);
657     LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(mgcosom->get_id());
658     lst_mg_cosommet.erase(j);
659     mgcosom->get_sommet()->supprimer_mg_cosommet(mgcosom);
660     delete mgcosom;
661     return OK;
662     }
663    
664     // ENTITE MG_ARETE
665    
666     int MG_GEOMETRIE::ajouter_mg_arete(MG_ARETE *mgarete)
667     {
668     gest->recherche_bonid(*mgarete);
669     MG_IDENTIFICATEUR *id=mgarete;
670     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
671     if (!p.second)
672     {
673     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
674     return FAIL;
675     }
676    
677     std::pair<const unsigned long,MG_ARETE*> tmp(mgarete->get_id(),mgarete);
678     lst_mg_arete.insert(tmp);
679     return OK;
680     }
681    
682    
683     MG_ARETE* MG_GEOMETRIE::get_mg_areteid(unsigned long num)
684     {
685     LISTE_MG_ARETE::iterator i=lst_mg_arete.find(num);
686     if (i==lst_mg_arete.end())
687     {
688     // afficheur << INEXISTE << enderr;
689     return NULL;
690     }
691     return ((*i).second);
692     }
693    
694     MG_ARETE* MG_GEOMETRIE::get_mg_areteid(std::string id)
695     {
696     LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
697     int nb=lst_mg_arete.size();
698     for (int j=0;j<nb;j++)
699     {
700     MG_ARETE* arete=(*i).second;
701     std::string idori=arete->get_idoriginal();
702     if (idori==id) return arete;
703     i++;
704     }
705     return NULL;
706     }
707    
708    
709     MG_ARETE* MG_GEOMETRIE::get_mg_arete(unsigned int num)
710     {
711     if (!(num<lst_mg_arete.size()))
712     {
713     // afficheur << INEXISTE << enderr;
714     return NULL;
715     }
716     LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
717     for (unsigned long j=0;j<num;j++) i++;
718     return ((*i).second);
719     }
720    
721    
722    
723     unsigned int MG_GEOMETRIE::get_nb_mg_arete(void)
724     {
725     return lst_mg_arete.size();
726     }
727    
728    
729     int MG_GEOMETRIE::supprimer_mg_areteid(unsigned long num)
730     {
731     MG_ARETE* mgarete=get_mg_areteid(num);
732     if (mgarete==NULL)
733     {
734     // afficheur << INEXISTE2 << enderr;
735     return FAIL;
736     }
737     if (mgarete->get_nb_mg_coarete()!=0)
738     {
739     // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
740     return FAIL;
741     }
742     MG_IDENTIFICATEUR* id=mgarete;
743     LISTE_ENTITE::iterator i=lst_entite.find(id);
744     lst_entite.erase(i);
745     LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
746     lst_mg_arete.erase(j);
747     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
748     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
749     supprimer_mg_cosommet(cosom1);
750     supprimer_mg_cosommet(cosom2);
751     delete mgarete;
752     return OK;
753     }
754    
755    
756     int MG_GEOMETRIE::supprimer_mg_arete(unsigned int num)
757     {
758     MG_ARETE* mgarete=get_mg_arete(num);
759     if (mgarete==NULL)
760     {
761     // afficheur << INEXISTE2 << enderr;
762     return FAIL;
763     }
764     if (mgarete->get_nb_mg_coarete()!=0)
765     {
766     // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
767     return FAIL;
768     }
769     MG_IDENTIFICATEUR* id=mgarete;
770     LISTE_ENTITE::iterator i=lst_entite.find(id);
771     lst_entite.erase(i);
772     LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
773     lst_mg_arete.erase(j);
774     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
775     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
776     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
777     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
778     supprimer_mg_cosommet(cosom1);
779     supprimer_mg_cosommet(cosom2);
780     delete mgarete;
781     return OK;
782     }
783    
784    
785     void MG_GEOMETRIE::supprimer_tout_mg_arete(void)
786     {
787     while (get_nb_mg_arete()!=0)
788     {
789     LISTE_MG_ARETE::iterator j=lst_mg_arete.begin();
790     MG_ARETE* mgarete=(*j).second;
791     MG_IDENTIFICATEUR* id=mgarete;
792     LISTE_ENTITE::iterator i=lst_entite.find(id);
793     lst_entite.erase(i);
794     lst_mg_arete.erase(j);
795 francois 576 if (!mgarete->est_une_arete_element())
796     {
797     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
798     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
799     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
800     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
801     supprimer_mg_cosommet(cosom1);
802     supprimer_mg_cosommet(cosom2);
803     delete mgarete;
804     }
805 francois 283 }
806     }
807    
808     MG_ARETE* MG_GEOMETRIE::get_premier_arete(LISTE_MG_ARETE::iterator &it)
809     {
810     it = lst_mg_arete.begin();
811     if (it == lst_mg_arete.end())
812     return NULL;
813     return it->second ;
814     }
815    
816     MG_ARETE* MG_GEOMETRIE::get_suivant_arete(LISTE_MG_ARETE::iterator &it)
817     {
818     it++;
819     if (it==lst_mg_arete.end())
820     return NULL;
821     return it->second;
822     }
823    
824    
825     // ENTITE MG_COARETE
826    
827     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
828     {
829     MG_COARETE* mgcoarete=new MG_COARETE(mgarete,mgboucle,sens);
830     gest->recherche_bonid(*mgcoarete);
831     MG_IDENTIFICATEUR *id=mgcoarete;
832     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
833     if (!p.second)
834     {
835     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
836     delete mgcoarete;
837     return NULL;
838     }
839    
840     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
841     lst_mg_coarete.insert(tmp);
842     mgarete->ajouter_mg_coarete(mgcoarete);
843     return mgcoarete;
844     }
845    
846    
847     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(unsigned long num,MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
848     {
849     MG_COARETE* mgcoarete=new MG_COARETE(num,mgarete,mgboucle,sens);
850     MG_IDENTIFICATEUR *id=mgcoarete;
851     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
852     if (!p.second)
853     {
854     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
855     delete mgcoarete;
856     return NULL;
857     }
858    
859     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
860     lst_mg_coarete.insert(tmp);
861     mgarete->ajouter_mg_coarete(mgcoarete);
862     return mgcoarete;
863     }
864    
865     int MG_GEOMETRIE::supprimer_mg_coarete(MG_COARETE* mgcoarete)
866     {
867     if (mgcoarete==NULL)
868     {
869     // afficheur << INEXISTE2 << enderr;
870     return FAIL;
871     }
872     MG_IDENTIFICATEUR* id=mgcoarete;
873     LISTE_ENTITE::iterator i=lst_entite.find(id);
874     lst_entite.erase(i);
875     LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(mgcoarete->get_id());
876     lst_mg_coarete.erase(j);
877     mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
878     delete mgcoarete;
879     return OK;
880     }
881    
882     // ENTITE MG_BOUCLE
883    
884     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_POUTRE* mgpoutre)
885     {
886     gest->recherche_bonid(*mgboucle);
887     MG_IDENTIFICATEUR *id=mgboucle;
888     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
889     if (!p.second)
890     {
891     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
892     return FAIL;
893     }
894    
895     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
896     lst_mg_boucle.insert(tmp);
897     mgpoutre->ajouter_mg_boucle(mgboucle);
898     return OK;
899     }
900    
901    
902     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_FACE* mgface)
903     {
904     gest->recherche_bonid(*mgboucle);
905     MG_IDENTIFICATEUR *id=mgboucle;
906     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
907     if (!p.second)
908     {
909     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
910     return FAIL;
911     }
912    
913     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
914     lst_mg_boucle.insert(tmp);
915     mgface->ajouter_mg_boucle(mgboucle);
916     return OK;
917     }
918    
919    
920     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucleid(unsigned long num)
921     {
922     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.find(num);
923     if (i==lst_mg_boucle.end())
924     {
925     // afficheur << INEXISTE << enderr;
926     return NULL;
927     }
928     return ((*i).second);
929     }
930    
931    
932    
933     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucle(unsigned int num)
934     {
935     if (!(num<lst_mg_boucle.size()))
936     {
937     // afficheur << INEXISTE << enderr;
938     return NULL;
939     }
940     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.begin();
941     for (unsigned long j=0;j<num;j++) i++;
942     return ((*i).second);
943     }
944    
945    
946    
947     unsigned int MG_GEOMETRIE::get_nb_mg_boucle(void)
948     {
949     return lst_mg_boucle.size();
950     }
951    
952    
953     int MG_GEOMETRIE::supprimer_mg_boucleid(unsigned long num)
954     {
955     MG_BOUCLE* mgboucle=get_mg_boucleid(num);
956     if (mgboucle==NULL)
957     {
958     // afficheur << INEXISTE2 << enderr;
959     return FAIL;
960     }
961     MG_IDENTIFICATEUR* id=mgboucle;
962     LISTE_ENTITE::iterator i=lst_entite.find(id);
963     lst_entite.erase(i);
964     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.find(num);
965     lst_mg_boucle.erase(j);
966     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
967     {
968     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
969     supprimer_mg_coarete(coarete);
970     }
971     delete mgboucle;
972     return OK;
973     }
974    
975    
976     int MG_GEOMETRIE::supprimer_mg_boucle(unsigned int num)
977     {
978     MG_BOUCLE* mgboucle=get_mg_boucle(num);
979     if (mgboucle==NULL)
980     {
981     // afficheur << INEXISTE2 << enderr;
982     return FAIL;
983     }
984     MG_IDENTIFICATEUR* id=mgboucle;
985     LISTE_ENTITE::iterator i=lst_entite.find(id);
986     lst_entite.erase(i);
987     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
988     for (unsigned int k=0;k<num;k++) j++;
989     lst_mg_boucle.erase(j);
990     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
991     {
992     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
993     supprimer_mg_coarete(coarete);
994     }
995     delete mgboucle;
996     return OK;
997     }
998    
999    
1000     void MG_GEOMETRIE::supprimer_tout_mg_boucle(void)
1001     {
1002     while (get_nb_mg_boucle()!=0)
1003     {
1004     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1005     MG_BOUCLE* mgboucle=(*j).second;
1006     MG_IDENTIFICATEUR* id=mgboucle;
1007     LISTE_ENTITE::iterator i=lst_entite.find(id);
1008     lst_entite.erase(i);
1009     lst_mg_boucle.erase(j);
1010     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1011     {
1012     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1013     supprimer_mg_coarete(coarete);
1014     }
1015     delete mgboucle;
1016     }
1017     }
1018    
1019     MG_BOUCLE* MG_GEOMETRIE::get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
1020     {
1021     it = lst_mg_boucle.begin();
1022     if (it == lst_mg_boucle.end())
1023     return NULL;
1024     return it->second ;
1025     }
1026    
1027     MG_BOUCLE* MG_GEOMETRIE::get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
1028     {
1029     it++;
1030     if (it==lst_mg_boucle.end())
1031     return NULL;
1032     return it->second;
1033     }
1034    
1035    
1036     // ENTITE MG_FACE
1037    
1038     int MG_GEOMETRIE::ajouter_mg_face(MG_FACE *mgface)
1039     {
1040     gest->recherche_bonid(*mgface);
1041     MG_IDENTIFICATEUR *id=mgface;
1042     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1043     if (!p.second)
1044     {
1045     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1046     return FAIL;
1047     }
1048    
1049     std::pair<const unsigned long,MG_FACE*> tmp(mgface->get_id(),mgface);
1050     lst_mg_face.insert(tmp);
1051     return OK;
1052     }
1053    
1054    
1055     MG_FACE* MG_GEOMETRIE::get_mg_faceid(unsigned long num)
1056     {
1057     LISTE_MG_FACE::iterator i=lst_mg_face.find(num);
1058     if (i==lst_mg_face.end())
1059     {
1060     // afficheur << INEXISTE << enderr;
1061     return NULL;
1062     }
1063     return ((*i).second);
1064     }
1065    
1066     MG_FACE* MG_GEOMETRIE::get_mg_faceid(std::string id)
1067     {
1068     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1069     int nb=lst_mg_face.size();
1070     for (int j=0;j<nb;j++)
1071     {
1072     MG_FACE* face=(*i).second;
1073     std::string idori=face->get_idoriginal();
1074     if (idori==id) return face;
1075     i++;
1076     }
1077     return NULL;
1078     }
1079    
1080    
1081     MG_FACE* MG_GEOMETRIE::get_mg_face(unsigned int num)
1082     {
1083     if (!(num<lst_mg_face.size()))
1084     {
1085     // afficheur << INEXISTE << enderr;
1086     return NULL;
1087     }
1088     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1089     for (unsigned long j=0;j<num;j++) i++;
1090     return ((*i).second);
1091     }
1092    
1093    
1094    
1095     unsigned int MG_GEOMETRIE::get_nb_mg_face(void)
1096     {
1097     return lst_mg_face.size();
1098     }
1099    
1100    
1101     int MG_GEOMETRIE::supprimer_mg_faceid(unsigned long num)
1102     {
1103     MG_FACE* mgface=get_mg_faceid(num);
1104     if (mgface==NULL)
1105     {
1106     // afficheur << INEXISTE2 << enderr;
1107     return FAIL;
1108     }
1109     if (mgface->get_nb_mg_coface()!=0)
1110     {
1111     // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1112     return FAIL;
1113     }
1114     MG_IDENTIFICATEUR* id=mgface;
1115     LISTE_ENTITE::iterator i=lst_entite.find(id);
1116     lst_entite.erase(i);
1117     LISTE_MG_FACE::iterator j=lst_mg_face.find(num);
1118     lst_mg_face.erase(j);
1119     delete mgface;
1120     return OK;
1121     }
1122    
1123    
1124     int MG_GEOMETRIE::supprimer_mg_face(unsigned int num)
1125     {
1126     MG_FACE* mgface=get_mg_face(num);
1127     if (mgface==NULL)
1128     {
1129     // afficheur << INEXISTE2 << enderr;
1130     return FAIL;
1131     }
1132     if (mgface->get_nb_mg_coface()!=0)
1133     {
1134     // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1135     return FAIL;
1136     }
1137     MG_IDENTIFICATEUR* id=mgface;
1138     LISTE_ENTITE::iterator i=lst_entite.find(id);
1139     lst_entite.erase(i);
1140     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1141     for (unsigned int k=0;k<num;k++) j++;
1142     lst_mg_face.erase(j);
1143     delete mgface;
1144     return OK;
1145     }
1146    
1147    
1148     void MG_GEOMETRIE::supprimer_tout_mg_face(void)
1149     {
1150    
1151     while (get_nb_mg_face()!=0)
1152     {
1153     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1154     MG_FACE* mgface=(*j).second;
1155     MG_IDENTIFICATEUR* id=mgface;
1156     LISTE_ENTITE::iterator i=lst_entite.find(id);
1157     lst_entite.erase(i);
1158     lst_mg_face.erase(j);
1159     delete mgface;
1160     }
1161     }
1162    
1163     MG_FACE* MG_GEOMETRIE::get_premier_face(LISTE_MG_FACE::iterator &it)
1164     {
1165     it = lst_mg_face.begin();
1166     if (it == lst_mg_face.end())
1167     return NULL;
1168     return it->second ;
1169     }
1170    
1171     MG_FACE* MG_GEOMETRIE::get_suivant_face(LISTE_MG_FACE::iterator &it)
1172     {
1173     it++;
1174     if (it==lst_mg_face.end())
1175     return NULL;
1176     return it->second;
1177     }
1178    
1179    
1180     // ENTITE MG_COFACE
1181    
1182    
1183     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1184     {
1185     MG_COFACE* mgcoface=new MG_COFACE(mgface,mgcoq,sens);
1186     gest->recherche_bonid(*mgcoface);
1187     MG_IDENTIFICATEUR *id=mgcoface;
1188     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1189     if (!p.second)
1190     {
1191     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1192     delete mgcoface;
1193     return NULL;
1194     }
1195    
1196     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1197     lst_mg_coface.insert(tmp);
1198     mgface->ajouter_mg_coface(mgcoface);
1199     return mgcoface;
1200     }
1201    
1202    
1203     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(unsigned long num,MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1204     {
1205     MG_COFACE* mgcoface=new MG_COFACE(num,mgface,mgcoq,sens);
1206     MG_IDENTIFICATEUR *id=mgcoface;
1207     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1208     if (!p.second)
1209     {
1210     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1211     delete mgcoface;
1212     return NULL;
1213     }
1214    
1215     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1216     lst_mg_coface.insert(tmp);
1217     mgface->ajouter_mg_coface(mgcoface);
1218     return mgcoface;
1219     }
1220    
1221     int MG_GEOMETRIE::supprimer_mg_coface(MG_COFACE* mgcoface)
1222     {
1223     if (mgcoface==NULL)
1224     {
1225     // afficheur << INEXISTE2 << enderr;
1226     return FAIL;
1227     }
1228     MG_IDENTIFICATEUR* id=mgcoface;
1229     LISTE_ENTITE::iterator i=lst_entite.find(id);
1230     lst_entite.erase(i);
1231     LISTE_MG_COFACE::iterator j=lst_mg_coface.find(mgcoface->get_id());
1232     lst_mg_coface.erase(j);
1233     mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1234     delete mgcoface;
1235     return OK;
1236     }
1237    
1238     // ENTITE MG_COQUILLE
1239    
1240     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoq,MG_COQUE *mgcoque)
1241     {
1242     gest->recherche_bonid(*mgcoq);
1243     MG_IDENTIFICATEUR *id=mgcoq;
1244     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1245     if (!p.second)
1246     {
1247     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1248     return FAIL;
1249     }
1250    
1251     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1252     lst_mg_coquille.insert(tmp);
1253     mgcoque->ajouter_mg_coquille(mgcoq);
1254     return OK;
1255     }
1256    
1257    
1258     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoquille,MG_VOLUME* mgvolume)
1259     {
1260     gest->recherche_bonid(*mgcoquille);
1261     MG_IDENTIFICATEUR *id=mgcoquille;
1262     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1263     if (!p.second)
1264     {
1265     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1266     return FAIL;
1267     }
1268    
1269     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoquille->get_id(),mgcoquille);
1270     lst_mg_coquille.insert(tmp);
1271     mgvolume->ajouter_mg_coquille(mgcoquille);
1272     return OK;
1273     }
1274    
1275    
1276     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquilleid(unsigned long num)
1277     {
1278     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.find(num);
1279     if (i==lst_mg_coquille.end())
1280     {
1281     // afficheur << INEXISTE << enderr;
1282     return NULL;
1283     }
1284     return ((*i).second);
1285     }
1286    
1287    
1288    
1289     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquille(unsigned int num)
1290     {
1291     if (!(num<lst_mg_coquille.size()))
1292     {
1293     // afficheur << INEXISTE << enderr;
1294     return NULL;
1295     }
1296     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.begin();
1297     for (unsigned long j=0;j<num;j++) i++;
1298     return ((*i).second);
1299     }
1300    
1301     MG_COQUILLE* MG_GEOMETRIE::get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
1302     {
1303     it = lst_mg_coquille.begin();
1304     if (it == lst_mg_coquille.end())
1305     return NULL;
1306     return it->second ;
1307     }
1308    
1309     MG_COQUILLE* MG_GEOMETRIE::get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
1310     {
1311     it++;
1312     if (it==lst_mg_coquille.end())
1313     return NULL;
1314     return it->second;
1315     }
1316    
1317    
1318     unsigned int MG_GEOMETRIE::get_nb_mg_coquille(void)
1319     {
1320     return lst_mg_coquille.size();
1321     }
1322    
1323    
1324     int MG_GEOMETRIE::supprimer_mg_coquilleid(unsigned long num)
1325     {
1326     MG_COQUILLE* mgcoquille=get_mg_coquilleid(num);
1327     if (mgcoquille==NULL)
1328     {
1329     // afficheur << INEXISTE2 << enderr;
1330     return FAIL;
1331     }
1332     MG_IDENTIFICATEUR* id=mgcoquille;
1333     LISTE_ENTITE::iterator i=lst_entite.find(id);
1334     lst_entite.erase(i);
1335     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.find(num);
1336     lst_mg_coquille.erase(j);
1337     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1338     {
1339     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1340     supprimer_mg_coface(coface);
1341     }
1342     delete mgcoquille;
1343     return OK;
1344     }
1345    
1346    
1347     int MG_GEOMETRIE::supprimer_mg_coquille(unsigned int num)
1348     {
1349     MG_COQUILLE* mgcoquille=get_mg_coquille(num);
1350     if (mgcoquille==NULL)
1351     {
1352     // afficheur << INEXISTE2 << enderr;
1353     return FAIL;
1354     }
1355     MG_IDENTIFICATEUR* id=mgcoquille;
1356     LISTE_ENTITE::iterator i=lst_entite.find(id);
1357     lst_entite.erase(i);
1358     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1359     for (unsigned int k=0;k<num;k++) j++;
1360     lst_mg_coquille.erase(j);
1361     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1362     {
1363     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1364     supprimer_mg_coface(coface);
1365     }
1366     delete mgcoquille;
1367     return OK;
1368     }
1369    
1370    
1371     void MG_GEOMETRIE::supprimer_tout_mg_coquille(void)
1372     {
1373     while (get_nb_mg_coquille()!=0)
1374     {
1375     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1376     MG_COQUILLE* mgcoquille=(*j).second;
1377     MG_IDENTIFICATEUR* id=mgcoquille;
1378     LISTE_ENTITE::iterator i=lst_entite.find(id);
1379     lst_entite.erase(i);
1380     lst_mg_coquille.erase(j);
1381     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1382     {
1383     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1384     supprimer_mg_coface(coface);
1385     }
1386     delete mgcoquille;
1387     }
1388     }
1389    
1390    
1391     // ENTITE MG_VOLUME
1392    
1393     int MG_GEOMETRIE::ajouter_mg_volume(MG_VOLUME *mgvolume)
1394     {
1395     gest->recherche_bonid(*mgvolume);
1396     MG_IDENTIFICATEUR *id=mgvolume;
1397     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1398     if (!p.second)
1399     {
1400     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1401     return FAIL;
1402     }
1403    
1404     std::pair<const unsigned long,MG_VOLUME*> tmp(mgvolume->get_id(),mgvolume);
1405     lst_mg_volume.insert(tmp);
1406     return OK;
1407     }
1408    
1409    
1410     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(unsigned long num)
1411     {
1412     LISTE_MG_VOLUME::iterator i=lst_mg_volume.find(num);
1413     if (i==lst_mg_volume.end())
1414     {
1415     // afficheur << INEXISTE << enderr;
1416     return NULL;
1417     }
1418     return ((*i).second);
1419     }
1420    
1421     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(std::string id)
1422     {
1423     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1424     int nb=lst_mg_volume.size();
1425     for (int j=0;j<nb;j++)
1426     {
1427     MG_VOLUME* volume=(*i).second;
1428     std::string idori=volume->get_idoriginal();
1429     if (idori==id) return volume;
1430     i++;
1431     }
1432     return NULL;
1433     }
1434    
1435    
1436     MG_VOLUME* MG_GEOMETRIE::get_mg_volume(unsigned int num)
1437     {
1438     if (!(num<lst_mg_volume.size()))
1439     {
1440     // afficheur << INEXISTE << enderr;
1441     return NULL;
1442     }
1443     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1444     for (unsigned long j=0;j<num;j++) i++;
1445     return ((*i).second);
1446     }
1447    
1448     MG_VOLUME* MG_GEOMETRIE::get_premier_volume(LISTE_MG_VOLUME::iterator &it)
1449     {
1450     it = lst_mg_volume.begin();
1451     if (it == lst_mg_volume.end())
1452     return NULL;
1453     return it->second ;
1454     }
1455    
1456     MG_VOLUME* MG_GEOMETRIE::get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
1457     {
1458     it++;
1459     if (it==lst_mg_volume.end())
1460     return NULL;
1461     return it->second;
1462     }
1463    
1464    
1465    
1466     unsigned int MG_GEOMETRIE::get_nb_mg_volume(void)
1467     {
1468     return lst_mg_volume.size();
1469     }
1470    
1471    
1472     int MG_GEOMETRIE::supprimer_mg_volumeid(unsigned long num)
1473     {
1474     MG_VOLUME* mgvolume=get_mg_volumeid(num);
1475     if (mgvolume==NULL)
1476     {
1477     // afficheur << INEXISTE2 << enderr;
1478     return FAIL;
1479     }
1480     MG_IDENTIFICATEUR* id=mgvolume;
1481     LISTE_ENTITE::iterator i=lst_entite.find(id);
1482     lst_entite.erase(i);
1483     LISTE_MG_VOLUME::iterator j=lst_mg_volume.find(num);
1484     lst_mg_volume.erase(j);
1485     delete mgvolume;
1486     return OK;
1487     }
1488    
1489    
1490     int MG_GEOMETRIE::supprimer_mg_volume(unsigned int num)
1491     {
1492     MG_VOLUME* mgvolume=get_mg_volume(num);
1493     if (mgvolume==NULL)
1494     {
1495     // afficheur << INEXISTE2 << enderr;
1496     return FAIL;
1497     }
1498     MG_IDENTIFICATEUR* id=mgvolume;
1499     LISTE_ENTITE::iterator i=lst_entite.find(id);
1500     lst_entite.erase(i);
1501     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1502     for (unsigned int k=0;k<num;k++) j++;
1503     lst_mg_volume.erase(j);
1504     delete mgvolume;
1505     return OK;
1506     }
1507    
1508    
1509     void MG_GEOMETRIE::supprimer_tout_mg_volume(void)
1510     {
1511     while (get_nb_mg_volume()!=0)
1512     {
1513     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1514     MG_VOLUME* mgvolume=(*j).second;
1515     MG_IDENTIFICATEUR* id=mgvolume;
1516     LISTE_ENTITE::iterator i=lst_entite.find(id);
1517     lst_entite.erase(i);
1518     lst_mg_volume.erase(j);
1519     delete mgvolume;
1520     }
1521     }
1522    
1523     // ENTITE MG_COQUE
1524    
1525     int MG_GEOMETRIE::ajouter_mg_coque(MG_COQUE *mgcoque)
1526     {
1527     gest->recherche_bonid(*mgcoque);
1528     MG_IDENTIFICATEUR *id=mgcoque;
1529     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1530     if (!p.second)
1531     {
1532     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1533     return FAIL;
1534     }
1535    
1536     std::pair<const unsigned long,MG_COQUE*> tmp(mgcoque->get_id(),mgcoque);
1537     lst_mg_coque.insert(tmp);
1538     return OK;
1539     }
1540    
1541    
1542     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(unsigned long num)
1543     {
1544     LISTE_MG_COQUE::iterator i=lst_mg_coque.find(num);
1545     if (i==lst_mg_coque.end())
1546     {
1547     // afficheur << INEXISTE << enderr;
1548     return NULL;
1549     }
1550     return ((*i).second);
1551     }
1552    
1553     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(std::string id)
1554     {
1555     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1556     int nb=lst_mg_coque.size();
1557     for (int j=0;j<nb;j++)
1558     {
1559     MG_COQUE* coque=(*i).second;
1560     std::string idori=coque->get_idoriginal();
1561     if (idori==id) return coque;
1562     i++;
1563     }
1564     return NULL;
1565     }
1566    
1567    
1568     MG_COQUE* MG_GEOMETRIE::get_mg_coque(unsigned int num)
1569     {
1570     if (!(num<lst_mg_coque.size()))
1571     {
1572     // afficheur << INEXISTE << enderr;
1573     return NULL;
1574     }
1575     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1576     for (unsigned long j=0;j<num;j++) i++;
1577     return ((*i).second);
1578     }
1579    
1580    
1581     MG_COQUE* MG_GEOMETRIE::get_premier_coque(LISTE_MG_COQUE::iterator &it)
1582     {
1583     it = lst_mg_coque.begin();
1584     if (it == lst_mg_coque.end())
1585     return NULL;
1586     return it->second ;
1587     }
1588    
1589     MG_COQUE* MG_GEOMETRIE::get_suivant_coque(LISTE_MG_COQUE::iterator &it)
1590     {
1591     it++;
1592     if (it==lst_mg_coque.end())
1593     return NULL;
1594     return it->second;
1595     }
1596    
1597    
1598     unsigned int MG_GEOMETRIE::get_nb_mg_coque(void)
1599     {
1600     return lst_mg_coque.size();
1601     }
1602    
1603    
1604     int MG_GEOMETRIE::supprimer_mg_coqueid(unsigned long num)
1605     {
1606     MG_COQUE* mgcoque=get_mg_coqueid(num);
1607     if (mgcoque==NULL)
1608     {
1609     // afficheur << INEXISTE2 << enderr;
1610     return FAIL;
1611     }
1612     MG_IDENTIFICATEUR* id=mgcoque;
1613     LISTE_ENTITE::iterator i=lst_entite.find(id);
1614     lst_entite.erase(i);
1615     LISTE_MG_COQUE::iterator j=lst_mg_coque.find(num);
1616     lst_mg_coque.erase(j);
1617     delete mgcoque;
1618     return OK;
1619     }
1620    
1621    
1622     int MG_GEOMETRIE::supprimer_mg_coque(unsigned int num)
1623     {
1624     MG_COQUE* mgcoque=get_mg_coque(num);
1625     if (mgcoque==NULL)
1626     {
1627     // afficheur << INEXISTE2 << enderr;
1628     return FAIL;
1629     }
1630     MG_IDENTIFICATEUR* id=mgcoque;
1631     LISTE_ENTITE::iterator i=lst_entite.find(id);
1632     lst_entite.erase(i);
1633     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1634     for (unsigned int k=0;k<num;k++) j++;
1635     lst_mg_coque.erase(j);
1636     delete mgcoque;
1637     return OK;
1638     }
1639    
1640    
1641     void MG_GEOMETRIE::supprimer_tout_mg_coque(void)
1642     {
1643     while (get_nb_mg_coque()!=0)
1644     {
1645     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1646     MG_COQUE* mgcoque=(*j).second;
1647     MG_IDENTIFICATEUR* id=mgcoque;
1648     LISTE_ENTITE::iterator i=lst_entite.find(id);
1649     lst_entite.erase(i);
1650     lst_mg_coque.erase(j);
1651     delete mgcoque;
1652     }
1653     }
1654    
1655    
1656     // ENTITE MG_POUTRE
1657    
1658     int MG_GEOMETRIE::ajouter_mg_poutre(MG_POUTRE *mgpoutre)
1659     {
1660     gest->recherche_bonid(*mgpoutre);
1661     MG_IDENTIFICATEUR *id=mgpoutre;
1662     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1663     if (!p.second)
1664     {
1665     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1666     return FAIL;
1667     }
1668    
1669     std::pair<const unsigned long,MG_POUTRE*> tmp(mgpoutre->get_id(),mgpoutre);
1670     lst_mg_poutre.insert(tmp);
1671     return OK;
1672     }
1673    
1674    
1675     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(unsigned long num)
1676     {
1677     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.find(num);
1678     if (i==lst_mg_poutre.end())
1679     {
1680     // afficheur << INEXISTE << enderr;
1681     return NULL;
1682     }
1683     return ((*i).second);
1684     }
1685    
1686     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(std::string id)
1687     {
1688     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1689     int nb=lst_mg_poutre.size();
1690     for (int j=0;j<nb;j++)
1691     {
1692     MG_POUTRE* poutre=(*i).second;
1693     std::string idori=poutre->get_idoriginal();
1694     if (idori==id) return poutre;
1695     i++;
1696     }
1697     return NULL;
1698     }
1699    
1700    
1701     MG_POUTRE* MG_GEOMETRIE::get_mg_poutre(unsigned int num)
1702     {
1703     if (!(num<lst_mg_poutre.size()))
1704     {
1705     // afficheur << INEXISTE << enderr;
1706     return NULL;
1707     }
1708     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1709     for (unsigned long j=0;j<num;j++) i++;
1710     return ((*i).second);
1711     }
1712    
1713    
1714     MG_POUTRE* MG_GEOMETRIE::get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
1715     {
1716     it = lst_mg_poutre.begin();
1717     if (it == lst_mg_poutre.end())
1718     return NULL;
1719     return it->second ;
1720     }
1721    
1722     MG_POUTRE* MG_GEOMETRIE::get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
1723     {
1724     it++;
1725     if (it==lst_mg_poutre.end())
1726     return NULL;
1727     return it->second;
1728     }
1729    
1730    
1731     unsigned int MG_GEOMETRIE::get_nb_mg_poutre(void)
1732     {
1733     return lst_mg_poutre.size();
1734     }
1735    
1736    
1737     int MG_GEOMETRIE::supprimer_mg_poutreid(unsigned long num)
1738     {
1739     MG_POUTRE* mgpoutre=get_mg_poutreid(num);
1740     if (mgpoutre==NULL)
1741     {
1742     // afficheur << INEXISTE2 << enderr;
1743     return FAIL;
1744     }
1745     MG_IDENTIFICATEUR* id=mgpoutre;
1746     LISTE_ENTITE::iterator i=lst_entite.find(id);
1747     lst_entite.erase(i);
1748     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.find(num);
1749     lst_mg_poutre.erase(j);
1750     delete mgpoutre;
1751     return OK;
1752     }
1753    
1754    
1755     int MG_GEOMETRIE::supprimer_mg_poutre(unsigned int num)
1756     {
1757     MG_POUTRE* mgpoutre=get_mg_poutre(num);
1758     if (mgpoutre==NULL)
1759     {
1760     // afficheur << INEXISTE2 << enderr;
1761     return FAIL;
1762     }
1763     MG_IDENTIFICATEUR* id=mgpoutre;
1764     LISTE_ENTITE::iterator i=lst_entite.find(id);
1765     lst_entite.erase(i);
1766     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
1767     for (unsigned int k=0;k<num;k++) j++;
1768     lst_mg_poutre.erase(j);
1769     delete mgpoutre;
1770     return OK;
1771     }
1772    
1773    
1774     void MG_GEOMETRIE::supprimer_tout_mg_poutre(void)
1775     {
1776     while (get_nb_mg_poutre()!=0)
1777     {
1778     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
1779     MG_POUTRE* mgpoutre=(*j).second;
1780     MG_IDENTIFICATEUR* id=mgpoutre;
1781     LISTE_ENTITE::iterator i=lst_entite.find(id);
1782     lst_entite.erase(i);
1783     lst_mg_poutre.erase(j);
1784     delete mgpoutre;
1785     }
1786     }
1787     // ENTITE MG_GROUPE_TOPOLOGIQUE
1788    
1789     int MG_GEOMETRIE::ajouter_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE *mggroupe_topologique)
1790     {
1791     gest->recherche_bonid(*mggroupe_topologique);
1792     MG_IDENTIFICATEUR *id=mggroupe_topologique;
1793     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1794     if (!p.second)
1795     {
1796     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1797     return FAIL;
1798     }
1799    
1800     std::pair<const unsigned long,MG_GROUPE_TOPOLOGIQUE*> tmp(mggroupe_topologique->get_id(),mggroupe_topologique);
1801     lst_mg_groupe_topologique.insert(tmp);
1802     return OK;
1803     }
1804    
1805    
1806     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologiqueid(unsigned long num)
1807     {
1808     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.find(num);
1809     if (i==lst_mg_groupe_topologique.end())
1810     {
1811     // afficheur << INEXISTE << enderr;
1812     return NULL;
1813     }
1814     return ((*i).second);
1815     }
1816    
1817    
1818    
1819     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologique(unsigned int num)
1820     {
1821     if (!(num<lst_mg_groupe_topologique.size()))
1822     {
1823     // afficheur << INEXISTE << enderr;
1824     return NULL;
1825     }
1826     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.begin();
1827     for (unsigned long j=0;j<num;j++) i++;
1828     return ((*i).second);
1829     }
1830    
1831    
1832     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_premier_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
1833     {
1834     it = lst_mg_groupe_topologique.begin();
1835     if (it == lst_mg_groupe_topologique.end())
1836     return NULL;
1837     return it->second ;
1838     }
1839    
1840     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_suivant_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
1841     {
1842     it++;
1843     if (it==lst_mg_groupe_topologique.end())
1844     return NULL;
1845     return it->second;
1846     }
1847    
1848    
1849     unsigned int MG_GEOMETRIE::get_nb_mg_groupe_topologique(void)
1850     {
1851     return lst_mg_groupe_topologique.size();
1852     }
1853    
1854    
1855     int MG_GEOMETRIE::supprimer_mg_groupe_topologiqueid(unsigned long num)
1856     {
1857     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologiqueid(num);
1858     if (mggroupe_topologique==NULL)
1859     {
1860     // afficheur << INEXISTE2 << enderr;
1861     return FAIL;
1862     }
1863     MG_IDENTIFICATEUR* id=mggroupe_topologique;
1864     LISTE_ENTITE::iterator i=lst_entite.find(id);
1865     lst_entite.erase(i);
1866     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.find(num);
1867     lst_mg_groupe_topologique.erase(j);
1868     delete mggroupe_topologique;
1869     return OK;
1870     }
1871    
1872    
1873     int MG_GEOMETRIE::supprimer_mg_groupe_topologique(unsigned int num)
1874     {
1875     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologique(num);
1876     if (mggroupe_topologique==NULL)
1877     {
1878     // afficheur << INEXISTE2 << enderr;
1879     return FAIL;
1880     }
1881     MG_IDENTIFICATEUR* id=mggroupe_topologique;
1882     LISTE_ENTITE::iterator i=lst_entite.find(id);
1883     lst_entite.erase(i);
1884     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
1885     for (unsigned int k=0;k<num;k++) j++;
1886     lst_mg_groupe_topologique.erase(j);
1887     delete mggroupe_topologique;
1888     return OK;
1889     }
1890    
1891    
1892     void MG_GEOMETRIE::supprimer_tout_mg_groupe_topologique(void)
1893     {
1894     while (get_nb_mg_groupe_topologique()!=0)
1895     {
1896     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
1897     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=(*j).second;
1898     MG_IDENTIFICATEUR* id=mggroupe_topologique;
1899     LISTE_ENTITE::iterator i=lst_entite.find(id);
1900     lst_entite.erase(i);
1901     lst_mg_groupe_topologique.erase(j);
1902     delete mggroupe_topologique;
1903     }
1904     }
1905    
1906    
1907     // ENTITE MG_VISU_COURBE
1908    
1909     int MG_GEOMETRIE::ajouter_mg_visu_courbe(MG_VISU_COURBE *mgvcrb)
1910     {
1911     gest->recherche_bonidvisuel(*mgvcrb);
1912     std::pair<const unsigned long,MG_VISU_COURBE*> tmp(mgvcrb->get_id(),mgvcrb);
1913     lst_mg_visu_courbe.insert(tmp);
1914     return OK;
1915     }
1916    
1917    
1918     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbeid(unsigned long num)
1919     {
1920     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.find(num);
1921     if (i==lst_mg_visu_courbe.end())
1922     {
1923     return NULL;
1924     }
1925     return ((*i).second);
1926     }
1927    
1928    
1929    
1930     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbe(unsigned int num)
1931     {
1932     if (!(num<lst_mg_visu_courbe.size()))
1933     {
1934     return NULL;
1935     }
1936     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.begin();
1937    
1938     for (unsigned long j=0;j<num;j++) i++;
1939     return ((*i).second);
1940     }
1941    
1942    
1943    
1944     unsigned int MG_GEOMETRIE::get_nb_mg_visu_courbe(void)
1945     {
1946     return lst_mg_visu_courbe.size();
1947     }
1948    
1949    
1950     int MG_GEOMETRIE::supprimer_mg_visu_courbeid(unsigned long num)
1951     {
1952     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbeid(num);
1953     if (mgvcrb==NULL)
1954     {
1955     return FAIL;
1956     }
1957     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.find(num);
1958     lst_mg_visu_courbe.erase(j);
1959     delete mgvcrb;
1960     return OK;
1961     }
1962    
1963    
1964     int MG_GEOMETRIE::supprimer_mg_visu_courbe(unsigned int num)
1965     {
1966     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbe(num);
1967     if (mgvcrb==NULL)
1968     {
1969     return FAIL;
1970     }
1971     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
1972     for (unsigned int k=0;k<num;k++) j++;
1973     lst_mg_visu_courbe.erase(j);
1974     delete mgvcrb;
1975     return OK;
1976     }
1977    
1978     void MG_GEOMETRIE::supprimer_tout_mg_visu_courbe(void)
1979     {
1980     while (get_nb_mg_visu_courbe()!=0)
1981     {
1982     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
1983     MG_VISU_COURBE* mgvcrb=(*j).second;
1984     lst_mg_visu_courbe.erase(j);
1985     delete mgvcrb;
1986     }
1987     }
1988    
1989    
1990     // FIN DE GESTION DES ENTITES
1991    
1992     void MG_GEOMETRIE::enregistrer(std::ostream& o)
1993     {
1994     if (nom_du_fichier==NULL) o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo ;
1995     else o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
1996     if (gest_materiau!="") o << "," << gest_materiau.c_str() ;
1997     o << ");" << std::endl;
1998 francois 295 o << "%" << get_id() << "=GEOMETRIE_EPS(" << precision << ");" << std::endl;
1999 francois 283 LISTE_ENTITE::const_iterator i;
2000     for (i=lst_entite.begin();i!=lst_entite.end();i++)
2001     (*i)->enregistrer(o);
2002     }
2003    
2004    
2005     char* MG_GEOMETRIE::get_nom_du_fichier(void)
2006     {
2007     return nom_du_fichier;
2008     }
2009    
2010     char* MG_GEOMETRIE::get_type_geometrie(void)
2011     {
2012     return type_geo;
2013     }
2014    
2015    
2016    
2017     void MG_GEOMETRIE::cree_entite_visuel(double facteur)
2018     {
2019     supprimer_tout_mg_visu_courbe();
2020     int nbarete=get_nb_mg_arete();
2021     for (int i=0;i<nbarete;i++)
2022     {
2023     MG_ARETE* mgarete=get_mg_arete(i);
2024     double xyz1[3];
2025     double tmin=mgarete->get_tmin();
2026     double tmax=mgarete->get_tmax();
2027     mgarete->evaluer(tmin,xyz1);
2028     int nb_pas=(int)(20.*facteur);
2029     for (int j=1;j<nb_pas+1;j++)
2030     {
2031     double t=tmin+j*(tmax-tmin)/nb_pas;
2032     double xyz2[3];
2033     mgarete->evaluer(t,xyz2);
2034     MG_VISU_COURBE* mgvisucourbe=new MG_VISU_COURBE(xyz1,xyz2);
2035     ajouter_mg_visu_courbe(mgvisucourbe);
2036     xyz1[0]=xyz2[0];
2037     xyz1[1]=xyz2[1];
2038     xyz1[2]=xyz2[2];
2039     }
2040     }
2041     }
2042    
2043     std::ostream& operator << (std::ostream& o,MG_GEOMETRIE& geo)
2044     {
2045     geo.enregistrer(o);
2046     return o;
2047     }
2048    
2049    
2050    
2051     void MG_GEOMETRIE::change_gest_materiau(char* nom)
2052     {
2053     gest_materiau=nom;
2054     }
2055    
2056     char* MG_GEOMETRIE::get_gest_materiau(void)
2057     {
2058     return (char*)gest_materiau.c_str();
2059     }
2060    
2061     double MG_GEOMETRIE::get_valeur_precision(void)
2062     {
2063     return precision;
2064     }
2065    
2066     void MG_GEOMETRIE::change_valeur_precision(double val)
2067     {
2068     precision=val;
2069     }
2070    
2071     double MG_GEOMETRIE::get_valeur_unite(void)
2072     {
2073     return valeur_unite;
2074     }
2075    
2076     void MG_GEOMETRIE::change_valeur_unite(double val)
2077     {
2078     valeur_unite=val;
2079     }
2080    
2081    
2082    
2083     void MG_GEOMETRIE::construit_vectorisation(void)
2084     {
2085     LISTE_MG_FACE::iterator itface;
2086     for (MG_FACE* face=get_premier_face(itface);face!=NULL;face=get_suivant_face(itface))
2087     face->get_vectorisation();
2088     LISTE_MG_ARETE::iterator itarete;
2089     for (MG_ARETE* arete=get_premier_arete(itarete);arete!=NULL;arete=get_suivant_arete(itarete))
2090     arete->get_vectorisation();
2091     LISTE_MG_SOMMET::iterator itsommet;
2092     for (MG_SOMMET* som=get_premier_sommet(itsommet);som!=NULL;som=get_suivant_sommet(itsommet))
2093     som->get_vectorisation();
2094     LISTE_MG_SURFACE::iterator itsurface;
2095     for (MG_SURFACE* surface=get_premier_surface(itsurface);surface!=NULL;surface=get_suivant_surface(itsurface))
2096     surface->get_vectorisation();
2097     LISTE_MG_COURBE::iterator itcourbe;
2098     for (MG_COURBE* courb=get_premier_courbe(itcourbe);courb!=NULL;courb=get_suivant_courbe(itcourbe))
2099     courb->get_vectorisation();
2100     LISTE_MG_POINT::iterator itpoint;
2101     for (MG_POINT* point=get_premier_point(itpoint);point!=NULL;point=get_suivant_point(itpoint))
2102     point->get_vectorisation();
2103     }