ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 775
Committed: Mon Jan 25 22:49:10 2016 UTC (9 years, 3 months ago) by francois
File size: 57371 byte(s)
Log Message:
debug conditions aux limites pour les sommets dans une geometrie virtuelle

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