ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/geometrie/geometrie/src/mg_geometrie.cpp
File size: 45467 byte(s)
Log Message:

File Contents

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