ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 526
Committed: Fri Jun 13 19:34:07 2014 UTC (10 years, 11 months ago) by francois
File size: 52490 byte(s)
Log Message:
Creation d'un sommet_noeud. C'est un sommet "virtuel" qui est créé à partir d'un noeud pour pouvoir appliquer des condiitions aux limites.

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     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
796     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
797     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
798     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
799     supprimer_mg_cosommet(cosom1);
800     supprimer_mg_cosommet(cosom2);
801     delete mgarete;
802     }
803     }
804    
805     MG_ARETE* MG_GEOMETRIE::get_premier_arete(LISTE_MG_ARETE::iterator &it)
806     {
807     it = lst_mg_arete.begin();
808     if (it == lst_mg_arete.end())
809     return NULL;
810     return it->second ;
811     }
812    
813     MG_ARETE* MG_GEOMETRIE::get_suivant_arete(LISTE_MG_ARETE::iterator &it)
814     {
815     it++;
816     if (it==lst_mg_arete.end())
817     return NULL;
818     return it->second;
819     }
820    
821    
822     // ENTITE MG_COARETE
823    
824     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
825     {
826     MG_COARETE* mgcoarete=new MG_COARETE(mgarete,mgboucle,sens);
827     gest->recherche_bonid(*mgcoarete);
828     MG_IDENTIFICATEUR *id=mgcoarete;
829     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
830     if (!p.second)
831     {
832     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
833     delete mgcoarete;
834     return NULL;
835     }
836    
837     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
838     lst_mg_coarete.insert(tmp);
839     mgarete->ajouter_mg_coarete(mgcoarete);
840     return mgcoarete;
841     }
842    
843    
844     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(unsigned long num,MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
845     {
846     MG_COARETE* mgcoarete=new MG_COARETE(num,mgarete,mgboucle,sens);
847     MG_IDENTIFICATEUR *id=mgcoarete;
848     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
849     if (!p.second)
850     {
851     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
852     delete mgcoarete;
853     return NULL;
854     }
855    
856     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
857     lst_mg_coarete.insert(tmp);
858     mgarete->ajouter_mg_coarete(mgcoarete);
859     return mgcoarete;
860     }
861    
862     int MG_GEOMETRIE::supprimer_mg_coarete(MG_COARETE* mgcoarete)
863     {
864     if (mgcoarete==NULL)
865     {
866     // afficheur << INEXISTE2 << enderr;
867     return FAIL;
868     }
869     MG_IDENTIFICATEUR* id=mgcoarete;
870     LISTE_ENTITE::iterator i=lst_entite.find(id);
871     lst_entite.erase(i);
872     LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(mgcoarete->get_id());
873     lst_mg_coarete.erase(j);
874     mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
875     delete mgcoarete;
876     return OK;
877     }
878    
879     // ENTITE MG_BOUCLE
880    
881     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_POUTRE* mgpoutre)
882     {
883     gest->recherche_bonid(*mgboucle);
884     MG_IDENTIFICATEUR *id=mgboucle;
885     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
886     if (!p.second)
887     {
888     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
889     return FAIL;
890     }
891    
892     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
893     lst_mg_boucle.insert(tmp);
894     mgpoutre->ajouter_mg_boucle(mgboucle);
895     return OK;
896     }
897    
898    
899     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_FACE* mgface)
900     {
901     gest->recherche_bonid(*mgboucle);
902     MG_IDENTIFICATEUR *id=mgboucle;
903     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
904     if (!p.second)
905     {
906     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
907     return FAIL;
908     }
909    
910     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
911     lst_mg_boucle.insert(tmp);
912     mgface->ajouter_mg_boucle(mgboucle);
913     return OK;
914     }
915    
916    
917     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucleid(unsigned long num)
918     {
919     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.find(num);
920     if (i==lst_mg_boucle.end())
921     {
922     // afficheur << INEXISTE << enderr;
923     return NULL;
924     }
925     return ((*i).second);
926     }
927    
928    
929    
930     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucle(unsigned int num)
931     {
932     if (!(num<lst_mg_boucle.size()))
933     {
934     // afficheur << INEXISTE << enderr;
935     return NULL;
936     }
937     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.begin();
938     for (unsigned long j=0;j<num;j++) i++;
939     return ((*i).second);
940     }
941    
942    
943    
944     unsigned int MG_GEOMETRIE::get_nb_mg_boucle(void)
945     {
946     return lst_mg_boucle.size();
947     }
948    
949    
950     int MG_GEOMETRIE::supprimer_mg_boucleid(unsigned long num)
951     {
952     MG_BOUCLE* mgboucle=get_mg_boucleid(num);
953     if (mgboucle==NULL)
954     {
955     // afficheur << INEXISTE2 << enderr;
956     return FAIL;
957     }
958     MG_IDENTIFICATEUR* id=mgboucle;
959     LISTE_ENTITE::iterator i=lst_entite.find(id);
960     lst_entite.erase(i);
961     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.find(num);
962     lst_mg_boucle.erase(j);
963     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
964     {
965     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
966     supprimer_mg_coarete(coarete);
967     }
968     delete mgboucle;
969     return OK;
970     }
971    
972    
973     int MG_GEOMETRIE::supprimer_mg_boucle(unsigned int num)
974     {
975     MG_BOUCLE* mgboucle=get_mg_boucle(num);
976     if (mgboucle==NULL)
977     {
978     // afficheur << INEXISTE2 << enderr;
979     return FAIL;
980     }
981     MG_IDENTIFICATEUR* id=mgboucle;
982     LISTE_ENTITE::iterator i=lst_entite.find(id);
983     lst_entite.erase(i);
984     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
985     for (unsigned int k=0;k<num;k++) j++;
986     lst_mg_boucle.erase(j);
987     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
988     {
989     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
990     supprimer_mg_coarete(coarete);
991     }
992     delete mgboucle;
993     return OK;
994     }
995    
996    
997     void MG_GEOMETRIE::supprimer_tout_mg_boucle(void)
998     {
999     while (get_nb_mg_boucle()!=0)
1000     {
1001     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1002     MG_BOUCLE* mgboucle=(*j).second;
1003     MG_IDENTIFICATEUR* id=mgboucle;
1004     LISTE_ENTITE::iterator i=lst_entite.find(id);
1005     lst_entite.erase(i);
1006     lst_mg_boucle.erase(j);
1007     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1008     {
1009     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1010     supprimer_mg_coarete(coarete);
1011     }
1012     delete mgboucle;
1013     }
1014     }
1015    
1016     MG_BOUCLE* MG_GEOMETRIE::get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
1017     {
1018     it = lst_mg_boucle.begin();
1019     if (it == lst_mg_boucle.end())
1020     return NULL;
1021     return it->second ;
1022     }
1023    
1024     MG_BOUCLE* MG_GEOMETRIE::get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
1025     {
1026     it++;
1027     if (it==lst_mg_boucle.end())
1028     return NULL;
1029     return it->second;
1030     }
1031    
1032    
1033     // ENTITE MG_FACE
1034    
1035     int MG_GEOMETRIE::ajouter_mg_face(MG_FACE *mgface)
1036     {
1037     gest->recherche_bonid(*mgface);
1038     MG_IDENTIFICATEUR *id=mgface;
1039     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1040     if (!p.second)
1041     {
1042     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1043     return FAIL;
1044     }
1045    
1046     std::pair<const unsigned long,MG_FACE*> tmp(mgface->get_id(),mgface);
1047     lst_mg_face.insert(tmp);
1048     return OK;
1049     }
1050    
1051    
1052     MG_FACE* MG_GEOMETRIE::get_mg_faceid(unsigned long num)
1053     {
1054     LISTE_MG_FACE::iterator i=lst_mg_face.find(num);
1055     if (i==lst_mg_face.end())
1056     {
1057     // afficheur << INEXISTE << enderr;
1058     return NULL;
1059     }
1060     return ((*i).second);
1061     }
1062    
1063     MG_FACE* MG_GEOMETRIE::get_mg_faceid(std::string id)
1064     {
1065     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1066     int nb=lst_mg_face.size();
1067     for (int j=0;j<nb;j++)
1068     {
1069     MG_FACE* face=(*i).second;
1070     std::string idori=face->get_idoriginal();
1071     if (idori==id) return face;
1072     i++;
1073     }
1074     return NULL;
1075     }
1076    
1077    
1078     MG_FACE* MG_GEOMETRIE::get_mg_face(unsigned int num)
1079     {
1080     if (!(num<lst_mg_face.size()))
1081     {
1082     // afficheur << INEXISTE << enderr;
1083     return NULL;
1084     }
1085     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1086     for (unsigned long j=0;j<num;j++) i++;
1087     return ((*i).second);
1088     }
1089    
1090    
1091    
1092     unsigned int MG_GEOMETRIE::get_nb_mg_face(void)
1093     {
1094     return lst_mg_face.size();
1095     }
1096    
1097    
1098     int MG_GEOMETRIE::supprimer_mg_faceid(unsigned long num)
1099     {
1100     MG_FACE* mgface=get_mg_faceid(num);
1101     if (mgface==NULL)
1102     {
1103     // afficheur << INEXISTE2 << enderr;
1104     return FAIL;
1105     }
1106     if (mgface->get_nb_mg_coface()!=0)
1107     {
1108     // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1109     return FAIL;
1110     }
1111     MG_IDENTIFICATEUR* id=mgface;
1112     LISTE_ENTITE::iterator i=lst_entite.find(id);
1113     lst_entite.erase(i);
1114     LISTE_MG_FACE::iterator j=lst_mg_face.find(num);
1115     lst_mg_face.erase(j);
1116     delete mgface;
1117     return OK;
1118     }
1119    
1120    
1121     int MG_GEOMETRIE::supprimer_mg_face(unsigned int num)
1122     {
1123     MG_FACE* mgface=get_mg_face(num);
1124     if (mgface==NULL)
1125     {
1126     // afficheur << INEXISTE2 << enderr;
1127     return FAIL;
1128     }
1129     if (mgface->get_nb_mg_coface()!=0)
1130     {
1131     // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1132     return FAIL;
1133     }
1134     MG_IDENTIFICATEUR* id=mgface;
1135     LISTE_ENTITE::iterator i=lst_entite.find(id);
1136     lst_entite.erase(i);
1137     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1138     for (unsigned int k=0;k<num;k++) j++;
1139     lst_mg_face.erase(j);
1140     delete mgface;
1141     return OK;
1142     }
1143    
1144    
1145     void MG_GEOMETRIE::supprimer_tout_mg_face(void)
1146     {
1147    
1148     while (get_nb_mg_face()!=0)
1149     {
1150     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1151     MG_FACE* mgface=(*j).second;
1152     MG_IDENTIFICATEUR* id=mgface;
1153     LISTE_ENTITE::iterator i=lst_entite.find(id);
1154     lst_entite.erase(i);
1155     lst_mg_face.erase(j);
1156     delete mgface;
1157     }
1158     }
1159    
1160     MG_FACE* MG_GEOMETRIE::get_premier_face(LISTE_MG_FACE::iterator &it)
1161     {
1162     it = lst_mg_face.begin();
1163     if (it == lst_mg_face.end())
1164     return NULL;
1165     return it->second ;
1166     }
1167    
1168     MG_FACE* MG_GEOMETRIE::get_suivant_face(LISTE_MG_FACE::iterator &it)
1169     {
1170     it++;
1171     if (it==lst_mg_face.end())
1172     return NULL;
1173     return it->second;
1174     }
1175    
1176    
1177     // ENTITE MG_COFACE
1178    
1179    
1180     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1181     {
1182     MG_COFACE* mgcoface=new MG_COFACE(mgface,mgcoq,sens);
1183     gest->recherche_bonid(*mgcoface);
1184     MG_IDENTIFICATEUR *id=mgcoface;
1185     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1186     if (!p.second)
1187     {
1188     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1189     delete mgcoface;
1190     return NULL;
1191     }
1192    
1193     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1194     lst_mg_coface.insert(tmp);
1195     mgface->ajouter_mg_coface(mgcoface);
1196     return mgcoface;
1197     }
1198    
1199    
1200     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(unsigned long num,MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1201     {
1202     MG_COFACE* mgcoface=new MG_COFACE(num,mgface,mgcoq,sens);
1203     MG_IDENTIFICATEUR *id=mgcoface;
1204     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1205     if (!p.second)
1206     {
1207     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1208     delete mgcoface;
1209     return NULL;
1210     }
1211    
1212     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1213     lst_mg_coface.insert(tmp);
1214     mgface->ajouter_mg_coface(mgcoface);
1215     return mgcoface;
1216     }
1217    
1218     int MG_GEOMETRIE::supprimer_mg_coface(MG_COFACE* mgcoface)
1219     {
1220     if (mgcoface==NULL)
1221     {
1222     // afficheur << INEXISTE2 << enderr;
1223     return FAIL;
1224     }
1225     MG_IDENTIFICATEUR* id=mgcoface;
1226     LISTE_ENTITE::iterator i=lst_entite.find(id);
1227     lst_entite.erase(i);
1228     LISTE_MG_COFACE::iterator j=lst_mg_coface.find(mgcoface->get_id());
1229     lst_mg_coface.erase(j);
1230     mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1231     delete mgcoface;
1232     return OK;
1233     }
1234    
1235     // ENTITE MG_COQUILLE
1236    
1237     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoq,MG_COQUE *mgcoque)
1238     {
1239     gest->recherche_bonid(*mgcoq);
1240     MG_IDENTIFICATEUR *id=mgcoq;
1241     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1242     if (!p.second)
1243     {
1244     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1245     return FAIL;
1246     }
1247    
1248     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1249     lst_mg_coquille.insert(tmp);
1250     mgcoque->ajouter_mg_coquille(mgcoq);
1251     return OK;
1252     }
1253    
1254    
1255     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoquille,MG_VOLUME* mgvolume)
1256     {
1257     gest->recherche_bonid(*mgcoquille);
1258     MG_IDENTIFICATEUR *id=mgcoquille;
1259     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1260     if (!p.second)
1261     {
1262     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1263     return FAIL;
1264     }
1265    
1266     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoquille->get_id(),mgcoquille);
1267     lst_mg_coquille.insert(tmp);
1268     mgvolume->ajouter_mg_coquille(mgcoquille);
1269     return OK;
1270     }
1271    
1272    
1273     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquilleid(unsigned long num)
1274     {
1275     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.find(num);
1276     if (i==lst_mg_coquille.end())
1277     {
1278     // afficheur << INEXISTE << enderr;
1279     return NULL;
1280     }
1281     return ((*i).second);
1282     }
1283    
1284    
1285    
1286     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquille(unsigned int num)
1287     {
1288     if (!(num<lst_mg_coquille.size()))
1289     {
1290     // afficheur << INEXISTE << enderr;
1291     return NULL;
1292     }
1293     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.begin();
1294     for (unsigned long j=0;j<num;j++) i++;
1295     return ((*i).second);
1296     }
1297    
1298     MG_COQUILLE* MG_GEOMETRIE::get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
1299     {
1300     it = lst_mg_coquille.begin();
1301     if (it == lst_mg_coquille.end())
1302     return NULL;
1303     return it->second ;
1304     }
1305    
1306     MG_COQUILLE* MG_GEOMETRIE::get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
1307     {
1308     it++;
1309     if (it==lst_mg_coquille.end())
1310     return NULL;
1311     return it->second;
1312     }
1313    
1314    
1315     unsigned int MG_GEOMETRIE::get_nb_mg_coquille(void)
1316     {
1317     return lst_mg_coquille.size();
1318     }
1319    
1320    
1321     int MG_GEOMETRIE::supprimer_mg_coquilleid(unsigned long num)
1322     {
1323     MG_COQUILLE* mgcoquille=get_mg_coquilleid(num);
1324     if (mgcoquille==NULL)
1325     {
1326     // afficheur << INEXISTE2 << enderr;
1327     return FAIL;
1328     }
1329     MG_IDENTIFICATEUR* id=mgcoquille;
1330     LISTE_ENTITE::iterator i=lst_entite.find(id);
1331     lst_entite.erase(i);
1332     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.find(num);
1333     lst_mg_coquille.erase(j);
1334     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1335     {
1336     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1337     supprimer_mg_coface(coface);
1338     }
1339     delete mgcoquille;
1340     return OK;
1341     }
1342    
1343    
1344     int MG_GEOMETRIE::supprimer_mg_coquille(unsigned int num)
1345     {
1346     MG_COQUILLE* mgcoquille=get_mg_coquille(num);
1347     if (mgcoquille==NULL)
1348     {
1349     // afficheur << INEXISTE2 << enderr;
1350     return FAIL;
1351     }
1352     MG_IDENTIFICATEUR* id=mgcoquille;
1353     LISTE_ENTITE::iterator i=lst_entite.find(id);
1354     lst_entite.erase(i);
1355     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1356     for (unsigned int k=0;k<num;k++) j++;
1357     lst_mg_coquille.erase(j);
1358     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1359     {
1360     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1361     supprimer_mg_coface(coface);
1362     }
1363     delete mgcoquille;
1364     return OK;
1365     }
1366    
1367    
1368     void MG_GEOMETRIE::supprimer_tout_mg_coquille(void)
1369     {
1370     while (get_nb_mg_coquille()!=0)
1371     {
1372     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1373     MG_COQUILLE* mgcoquille=(*j).second;
1374     MG_IDENTIFICATEUR* id=mgcoquille;
1375     LISTE_ENTITE::iterator i=lst_entite.find(id);
1376     lst_entite.erase(i);
1377     lst_mg_coquille.erase(j);
1378     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1379     {
1380     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1381     supprimer_mg_coface(coface);
1382     }
1383     delete mgcoquille;
1384     }
1385     }
1386    
1387    
1388     // ENTITE MG_VOLUME
1389    
1390     int MG_GEOMETRIE::ajouter_mg_volume(MG_VOLUME *mgvolume)
1391     {
1392     gest->recherche_bonid(*mgvolume);
1393     MG_IDENTIFICATEUR *id=mgvolume;
1394     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1395     if (!p.second)
1396     {
1397     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1398     return FAIL;
1399     }
1400    
1401     std::pair<const unsigned long,MG_VOLUME*> tmp(mgvolume->get_id(),mgvolume);
1402     lst_mg_volume.insert(tmp);
1403     return OK;
1404     }
1405    
1406    
1407     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(unsigned long num)
1408     {
1409     LISTE_MG_VOLUME::iterator i=lst_mg_volume.find(num);
1410     if (i==lst_mg_volume.end())
1411     {
1412     // afficheur << INEXISTE << enderr;
1413     return NULL;
1414     }
1415     return ((*i).second);
1416     }
1417    
1418     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(std::string id)
1419     {
1420     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1421     int nb=lst_mg_volume.size();
1422     for (int j=0;j<nb;j++)
1423     {
1424     MG_VOLUME* volume=(*i).second;
1425     std::string idori=volume->get_idoriginal();
1426     if (idori==id) return volume;
1427     i++;
1428     }
1429     return NULL;
1430     }
1431    
1432    
1433     MG_VOLUME* MG_GEOMETRIE::get_mg_volume(unsigned int num)
1434     {
1435     if (!(num<lst_mg_volume.size()))
1436     {
1437     // afficheur << INEXISTE << enderr;
1438     return NULL;
1439     }
1440     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1441     for (unsigned long j=0;j<num;j++) i++;
1442     return ((*i).second);
1443     }
1444    
1445     MG_VOLUME* MG_GEOMETRIE::get_premier_volume(LISTE_MG_VOLUME::iterator &it)
1446     {
1447     it = lst_mg_volume.begin();
1448     if (it == lst_mg_volume.end())
1449     return NULL;
1450     return it->second ;
1451     }
1452    
1453     MG_VOLUME* MG_GEOMETRIE::get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
1454     {
1455     it++;
1456     if (it==lst_mg_volume.end())
1457     return NULL;
1458     return it->second;
1459     }
1460    
1461    
1462    
1463     unsigned int MG_GEOMETRIE::get_nb_mg_volume(void)
1464     {
1465     return lst_mg_volume.size();
1466     }
1467    
1468    
1469     int MG_GEOMETRIE::supprimer_mg_volumeid(unsigned long num)
1470     {
1471     MG_VOLUME* mgvolume=get_mg_volumeid(num);
1472     if (mgvolume==NULL)
1473     {
1474     // afficheur << INEXISTE2 << enderr;
1475     return FAIL;
1476     }
1477     MG_IDENTIFICATEUR* id=mgvolume;
1478     LISTE_ENTITE::iterator i=lst_entite.find(id);
1479     lst_entite.erase(i);
1480     LISTE_MG_VOLUME::iterator j=lst_mg_volume.find(num);
1481     lst_mg_volume.erase(j);
1482     delete mgvolume;
1483     return OK;
1484     }
1485    
1486    
1487     int MG_GEOMETRIE::supprimer_mg_volume(unsigned int num)
1488     {
1489     MG_VOLUME* mgvolume=get_mg_volume(num);
1490     if (mgvolume==NULL)
1491     {
1492     // afficheur << INEXISTE2 << enderr;
1493     return FAIL;
1494     }
1495     MG_IDENTIFICATEUR* id=mgvolume;
1496     LISTE_ENTITE::iterator i=lst_entite.find(id);
1497     lst_entite.erase(i);
1498     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1499     for (unsigned int k=0;k<num;k++) j++;
1500     lst_mg_volume.erase(j);
1501     delete mgvolume;
1502     return OK;
1503     }
1504    
1505    
1506     void MG_GEOMETRIE::supprimer_tout_mg_volume(void)
1507     {
1508     while (get_nb_mg_volume()!=0)
1509     {
1510     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1511     MG_VOLUME* mgvolume=(*j).second;
1512     MG_IDENTIFICATEUR* id=mgvolume;
1513     LISTE_ENTITE::iterator i=lst_entite.find(id);
1514     lst_entite.erase(i);
1515     lst_mg_volume.erase(j);
1516     delete mgvolume;
1517     }
1518     }
1519    
1520     // ENTITE MG_COQUE
1521    
1522     int MG_GEOMETRIE::ajouter_mg_coque(MG_COQUE *mgcoque)
1523     {
1524     gest->recherche_bonid(*mgcoque);
1525     MG_IDENTIFICATEUR *id=mgcoque;
1526     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1527     if (!p.second)
1528     {
1529     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1530     return FAIL;
1531     }
1532    
1533     std::pair<const unsigned long,MG_COQUE*> tmp(mgcoque->get_id(),mgcoque);
1534     lst_mg_coque.insert(tmp);
1535     return OK;
1536     }
1537    
1538    
1539     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(unsigned long num)
1540     {
1541     LISTE_MG_COQUE::iterator i=lst_mg_coque.find(num);
1542     if (i==lst_mg_coque.end())
1543     {
1544     // afficheur << INEXISTE << enderr;
1545     return NULL;
1546     }
1547     return ((*i).second);
1548     }
1549    
1550     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(std::string id)
1551     {
1552     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1553     int nb=lst_mg_coque.size();
1554     for (int j=0;j<nb;j++)
1555     {
1556     MG_COQUE* coque=(*i).second;
1557     std::string idori=coque->get_idoriginal();
1558     if (idori==id) return coque;
1559     i++;
1560     }
1561     return NULL;
1562     }
1563    
1564    
1565     MG_COQUE* MG_GEOMETRIE::get_mg_coque(unsigned int num)
1566     {
1567     if (!(num<lst_mg_coque.size()))
1568     {
1569     // afficheur << INEXISTE << enderr;
1570     return NULL;
1571     }
1572     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1573     for (unsigned long j=0;j<num;j++) i++;
1574     return ((*i).second);
1575     }
1576    
1577    
1578     MG_COQUE* MG_GEOMETRIE::get_premier_coque(LISTE_MG_COQUE::iterator &it)
1579     {
1580     it = lst_mg_coque.begin();
1581     if (it == lst_mg_coque.end())
1582     return NULL;
1583     return it->second ;
1584     }
1585    
1586     MG_COQUE* MG_GEOMETRIE::get_suivant_coque(LISTE_MG_COQUE::iterator &it)
1587     {
1588     it++;
1589     if (it==lst_mg_coque.end())
1590     return NULL;
1591     return it->second;
1592     }
1593    
1594    
1595     unsigned int MG_GEOMETRIE::get_nb_mg_coque(void)
1596     {
1597     return lst_mg_coque.size();
1598     }
1599    
1600    
1601     int MG_GEOMETRIE::supprimer_mg_coqueid(unsigned long num)
1602     {
1603     MG_COQUE* mgcoque=get_mg_coqueid(num);
1604     if (mgcoque==NULL)
1605     {
1606     // afficheur << INEXISTE2 << enderr;
1607     return FAIL;
1608     }
1609     MG_IDENTIFICATEUR* id=mgcoque;
1610     LISTE_ENTITE::iterator i=lst_entite.find(id);
1611     lst_entite.erase(i);
1612     LISTE_MG_COQUE::iterator j=lst_mg_coque.find(num);
1613     lst_mg_coque.erase(j);
1614     delete mgcoque;
1615     return OK;
1616     }
1617    
1618    
1619     int MG_GEOMETRIE::supprimer_mg_coque(unsigned int num)
1620     {
1621     MG_COQUE* mgcoque=get_mg_coque(num);
1622     if (mgcoque==NULL)
1623     {
1624     // afficheur << INEXISTE2 << enderr;
1625     return FAIL;
1626     }
1627     MG_IDENTIFICATEUR* id=mgcoque;
1628     LISTE_ENTITE::iterator i=lst_entite.find(id);
1629     lst_entite.erase(i);
1630     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1631     for (unsigned int k=0;k<num;k++) j++;
1632     lst_mg_coque.erase(j);
1633     delete mgcoque;
1634     return OK;
1635     }
1636    
1637    
1638     void MG_GEOMETRIE::supprimer_tout_mg_coque(void)
1639     {
1640     while (get_nb_mg_coque()!=0)
1641     {
1642     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1643     MG_COQUE* mgcoque=(*j).second;
1644     MG_IDENTIFICATEUR* id=mgcoque;
1645     LISTE_ENTITE::iterator i=lst_entite.find(id);
1646     lst_entite.erase(i);
1647     lst_mg_coque.erase(j);
1648     delete mgcoque;
1649     }
1650     }
1651    
1652    
1653     // ENTITE MG_POUTRE
1654    
1655     int MG_GEOMETRIE::ajouter_mg_poutre(MG_POUTRE *mgpoutre)
1656     {
1657     gest->recherche_bonid(*mgpoutre);
1658     MG_IDENTIFICATEUR *id=mgpoutre;
1659     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1660     if (!p.second)
1661     {
1662     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1663     return FAIL;
1664     }
1665    
1666     std::pair<const unsigned long,MG_POUTRE*> tmp(mgpoutre->get_id(),mgpoutre);
1667     lst_mg_poutre.insert(tmp);
1668     return OK;
1669     }
1670    
1671    
1672     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(unsigned long num)
1673     {
1674     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.find(num);
1675     if (i==lst_mg_poutre.end())
1676     {
1677     // afficheur << INEXISTE << enderr;
1678     return NULL;
1679     }
1680     return ((*i).second);
1681     }
1682    
1683     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(std::string id)
1684     {
1685     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1686     int nb=lst_mg_poutre.size();
1687     for (int j=0;j<nb;j++)
1688     {
1689     MG_POUTRE* poutre=(*i).second;
1690     std::string idori=poutre->get_idoriginal();
1691     if (idori==id) return poutre;
1692     i++;
1693     }
1694     return NULL;
1695     }
1696    
1697    
1698     MG_POUTRE* MG_GEOMETRIE::get_mg_poutre(unsigned int num)
1699     {
1700     if (!(num<lst_mg_poutre.size()))
1701     {
1702     // afficheur << INEXISTE << enderr;
1703     return NULL;
1704     }
1705     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1706     for (unsigned long j=0;j<num;j++) i++;
1707     return ((*i).second);
1708     }
1709    
1710    
1711     MG_POUTRE* MG_GEOMETRIE::get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
1712     {
1713     it = lst_mg_poutre.begin();
1714     if (it == lst_mg_poutre.end())
1715     return NULL;
1716     return it->second ;
1717     }
1718    
1719     MG_POUTRE* MG_GEOMETRIE::get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
1720     {
1721     it++;
1722     if (it==lst_mg_poutre.end())
1723     return NULL;
1724     return it->second;
1725     }
1726    
1727    
1728     unsigned int MG_GEOMETRIE::get_nb_mg_poutre(void)
1729     {
1730     return lst_mg_poutre.size();
1731     }
1732    
1733    
1734     int MG_GEOMETRIE::supprimer_mg_poutreid(unsigned long num)
1735     {
1736     MG_POUTRE* mgpoutre=get_mg_poutreid(num);
1737     if (mgpoutre==NULL)
1738     {
1739     // afficheur << INEXISTE2 << enderr;
1740     return FAIL;
1741     }
1742     MG_IDENTIFICATEUR* id=mgpoutre;
1743     LISTE_ENTITE::iterator i=lst_entite.find(id);
1744     lst_entite.erase(i);
1745     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.find(num);
1746     lst_mg_poutre.erase(j);
1747     delete mgpoutre;
1748     return OK;
1749     }
1750    
1751    
1752     int MG_GEOMETRIE::supprimer_mg_poutre(unsigned int num)
1753     {
1754     MG_POUTRE* mgpoutre=get_mg_poutre(num);
1755     if (mgpoutre==NULL)
1756     {
1757     // afficheur << INEXISTE2 << enderr;
1758     return FAIL;
1759     }
1760     MG_IDENTIFICATEUR* id=mgpoutre;
1761     LISTE_ENTITE::iterator i=lst_entite.find(id);
1762     lst_entite.erase(i);
1763     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
1764     for (unsigned int k=0;k<num;k++) j++;
1765     lst_mg_poutre.erase(j);
1766     delete mgpoutre;
1767     return OK;
1768     }
1769    
1770    
1771     void MG_GEOMETRIE::supprimer_tout_mg_poutre(void)
1772     {
1773     while (get_nb_mg_poutre()!=0)
1774     {
1775     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
1776     MG_POUTRE* mgpoutre=(*j).second;
1777     MG_IDENTIFICATEUR* id=mgpoutre;
1778     LISTE_ENTITE::iterator i=lst_entite.find(id);
1779     lst_entite.erase(i);
1780     lst_mg_poutre.erase(j);
1781     delete mgpoutre;
1782     }
1783     }
1784     // ENTITE MG_GROUPE_TOPOLOGIQUE
1785    
1786     int MG_GEOMETRIE::ajouter_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE *mggroupe_topologique)
1787     {
1788     gest->recherche_bonid(*mggroupe_topologique);
1789     MG_IDENTIFICATEUR *id=mggroupe_topologique;
1790     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1791     if (!p.second)
1792     {
1793     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1794     return FAIL;
1795     }
1796    
1797     std::pair<const unsigned long,MG_GROUPE_TOPOLOGIQUE*> tmp(mggroupe_topologique->get_id(),mggroupe_topologique);
1798     lst_mg_groupe_topologique.insert(tmp);
1799     return OK;
1800     }
1801    
1802    
1803     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologiqueid(unsigned long num)
1804     {
1805     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.find(num);
1806     if (i==lst_mg_groupe_topologique.end())
1807     {
1808     // afficheur << INEXISTE << enderr;
1809     return NULL;
1810     }
1811     return ((*i).second);
1812     }
1813    
1814    
1815    
1816     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologique(unsigned int num)
1817     {
1818     if (!(num<lst_mg_groupe_topologique.size()))
1819     {
1820     // afficheur << INEXISTE << enderr;
1821     return NULL;
1822     }
1823     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.begin();
1824     for (unsigned long j=0;j<num;j++) i++;
1825     return ((*i).second);
1826     }
1827    
1828    
1829     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_premier_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
1830     {
1831     it = lst_mg_groupe_topologique.begin();
1832     if (it == lst_mg_groupe_topologique.end())
1833     return NULL;
1834     return it->second ;
1835     }
1836    
1837     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_suivant_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
1838     {
1839     it++;
1840     if (it==lst_mg_groupe_topologique.end())
1841     return NULL;
1842     return it->second;
1843     }
1844    
1845    
1846     unsigned int MG_GEOMETRIE::get_nb_mg_groupe_topologique(void)
1847     {
1848     return lst_mg_groupe_topologique.size();
1849     }
1850    
1851    
1852     int MG_GEOMETRIE::supprimer_mg_groupe_topologiqueid(unsigned long num)
1853     {
1854     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologiqueid(num);
1855     if (mggroupe_topologique==NULL)
1856     {
1857     // afficheur << INEXISTE2 << enderr;
1858     return FAIL;
1859     }
1860     MG_IDENTIFICATEUR* id=mggroupe_topologique;
1861     LISTE_ENTITE::iterator i=lst_entite.find(id);
1862     lst_entite.erase(i);
1863     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.find(num);
1864     lst_mg_groupe_topologique.erase(j);
1865     delete mggroupe_topologique;
1866     return OK;
1867     }
1868    
1869    
1870     int MG_GEOMETRIE::supprimer_mg_groupe_topologique(unsigned int num)
1871     {
1872     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologique(num);
1873     if (mggroupe_topologique==NULL)
1874     {
1875     // afficheur << INEXISTE2 << enderr;
1876     return FAIL;
1877     }
1878     MG_IDENTIFICATEUR* id=mggroupe_topologique;
1879     LISTE_ENTITE::iterator i=lst_entite.find(id);
1880     lst_entite.erase(i);
1881     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
1882     for (unsigned int k=0;k<num;k++) j++;
1883     lst_mg_groupe_topologique.erase(j);
1884     delete mggroupe_topologique;
1885     return OK;
1886     }
1887    
1888    
1889     void MG_GEOMETRIE::supprimer_tout_mg_groupe_topologique(void)
1890     {
1891     while (get_nb_mg_groupe_topologique()!=0)
1892     {
1893     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
1894     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=(*j).second;
1895     MG_IDENTIFICATEUR* id=mggroupe_topologique;
1896     LISTE_ENTITE::iterator i=lst_entite.find(id);
1897     lst_entite.erase(i);
1898     lst_mg_groupe_topologique.erase(j);
1899     delete mggroupe_topologique;
1900     }
1901     }
1902    
1903    
1904     // ENTITE MG_VISU_COURBE
1905    
1906     int MG_GEOMETRIE::ajouter_mg_visu_courbe(MG_VISU_COURBE *mgvcrb)
1907     {
1908     gest->recherche_bonidvisuel(*mgvcrb);
1909     std::pair<const unsigned long,MG_VISU_COURBE*> tmp(mgvcrb->get_id(),mgvcrb);
1910     lst_mg_visu_courbe.insert(tmp);
1911     return OK;
1912     }
1913    
1914    
1915     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbeid(unsigned long num)
1916     {
1917     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.find(num);
1918     if (i==lst_mg_visu_courbe.end())
1919     {
1920     return NULL;
1921     }
1922     return ((*i).second);
1923     }
1924    
1925    
1926    
1927     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbe(unsigned int num)
1928     {
1929     if (!(num<lst_mg_visu_courbe.size()))
1930     {
1931     return NULL;
1932     }
1933     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.begin();
1934    
1935     for (unsigned long j=0;j<num;j++) i++;
1936     return ((*i).second);
1937     }
1938    
1939    
1940    
1941     unsigned int MG_GEOMETRIE::get_nb_mg_visu_courbe(void)
1942     {
1943     return lst_mg_visu_courbe.size();
1944     }
1945    
1946    
1947     int MG_GEOMETRIE::supprimer_mg_visu_courbeid(unsigned long num)
1948     {
1949     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbeid(num);
1950     if (mgvcrb==NULL)
1951     {
1952     return FAIL;
1953     }
1954     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.find(num);
1955     lst_mg_visu_courbe.erase(j);
1956     delete mgvcrb;
1957     return OK;
1958     }
1959    
1960    
1961     int MG_GEOMETRIE::supprimer_mg_visu_courbe(unsigned int num)
1962     {
1963     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbe(num);
1964     if (mgvcrb==NULL)
1965     {
1966     return FAIL;
1967     }
1968     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
1969     for (unsigned int k=0;k<num;k++) j++;
1970     lst_mg_visu_courbe.erase(j);
1971     delete mgvcrb;
1972     return OK;
1973     }
1974    
1975     void MG_GEOMETRIE::supprimer_tout_mg_visu_courbe(void)
1976     {
1977     while (get_nb_mg_visu_courbe()!=0)
1978     {
1979     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
1980     MG_VISU_COURBE* mgvcrb=(*j).second;
1981     lst_mg_visu_courbe.erase(j);
1982     delete mgvcrb;
1983     }
1984     }
1985    
1986    
1987     // FIN DE GESTION DES ENTITES
1988    
1989     void MG_GEOMETRIE::enregistrer(std::ostream& o)
1990     {
1991     if (nom_du_fichier==NULL) o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo ;
1992     else o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
1993     if (gest_materiau!="") o << "," << gest_materiau.c_str() ;
1994     o << ");" << std::endl;
1995 francois 295 o << "%" << get_id() << "=GEOMETRIE_EPS(" << precision << ");" << std::endl;
1996 francois 283 LISTE_ENTITE::const_iterator i;
1997     for (i=lst_entite.begin();i!=lst_entite.end();i++)
1998     (*i)->enregistrer(o);
1999     }
2000    
2001    
2002     char* MG_GEOMETRIE::get_nom_du_fichier(void)
2003     {
2004     return nom_du_fichier;
2005     }
2006    
2007     char* MG_GEOMETRIE::get_type_geometrie(void)
2008     {
2009     return type_geo;
2010     }
2011    
2012    
2013    
2014     void MG_GEOMETRIE::cree_entite_visuel(double facteur)
2015     {
2016     supprimer_tout_mg_visu_courbe();
2017     int nbarete=get_nb_mg_arete();
2018     for (int i=0;i<nbarete;i++)
2019     {
2020     MG_ARETE* mgarete=get_mg_arete(i);
2021     double xyz1[3];
2022     double tmin=mgarete->get_tmin();
2023     double tmax=mgarete->get_tmax();
2024     mgarete->evaluer(tmin,xyz1);
2025     int nb_pas=(int)(20.*facteur);
2026     for (int j=1;j<nb_pas+1;j++)
2027     {
2028     double t=tmin+j*(tmax-tmin)/nb_pas;
2029     double xyz2[3];
2030     mgarete->evaluer(t,xyz2);
2031     MG_VISU_COURBE* mgvisucourbe=new MG_VISU_COURBE(xyz1,xyz2);
2032     ajouter_mg_visu_courbe(mgvisucourbe);
2033     xyz1[0]=xyz2[0];
2034     xyz1[1]=xyz2[1];
2035     xyz1[2]=xyz2[2];
2036     }
2037     }
2038     }
2039    
2040     std::ostream& operator << (std::ostream& o,MG_GEOMETRIE& geo)
2041     {
2042     geo.enregistrer(o);
2043     return o;
2044     }
2045    
2046    
2047    
2048     void MG_GEOMETRIE::change_gest_materiau(char* nom)
2049     {
2050     gest_materiau=nom;
2051     }
2052    
2053     char* MG_GEOMETRIE::get_gest_materiau(void)
2054     {
2055     return (char*)gest_materiau.c_str();
2056     }
2057    
2058     double MG_GEOMETRIE::get_valeur_precision(void)
2059     {
2060     return precision;
2061     }
2062    
2063     void MG_GEOMETRIE::change_valeur_precision(double val)
2064     {
2065     precision=val;
2066     }
2067    
2068     double MG_GEOMETRIE::get_valeur_unite(void)
2069     {
2070     return valeur_unite;
2071     }
2072    
2073     void MG_GEOMETRIE::change_valeur_unite(double val)
2074     {
2075     valeur_unite=val;
2076     }
2077    
2078    
2079    
2080     void MG_GEOMETRIE::construit_vectorisation(void)
2081     {
2082     LISTE_MG_FACE::iterator itface;
2083     for (MG_FACE* face=get_premier_face(itface);face!=NULL;face=get_suivant_face(itface))
2084     face->get_vectorisation();
2085     LISTE_MG_ARETE::iterator itarete;
2086     for (MG_ARETE* arete=get_premier_arete(itarete);arete!=NULL;arete=get_suivant_arete(itarete))
2087     arete->get_vectorisation();
2088     LISTE_MG_SOMMET::iterator itsommet;
2089     for (MG_SOMMET* som=get_premier_sommet(itsommet);som!=NULL;som=get_suivant_sommet(itsommet))
2090     som->get_vectorisation();
2091     LISTE_MG_SURFACE::iterator itsurface;
2092     for (MG_SURFACE* surface=get_premier_surface(itsurface);surface!=NULL;surface=get_suivant_surface(itsurface))
2093     surface->get_vectorisation();
2094     LISTE_MG_COURBE::iterator itcourbe;
2095     for (MG_COURBE* courb=get_premier_courbe(itcourbe);courb!=NULL;courb=get_suivant_courbe(itcourbe))
2096     courb->get_vectorisation();
2097     LISTE_MG_POINT::iterator itpoint;
2098     for (MG_POINT* point=get_premier_point(itpoint);point!=NULL;point=get_suivant_point(itpoint))
2099     point->get_vectorisation();
2100     }