ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
File size: 52025 byte(s)
Log Message:
structure de l'écriture

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