ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 740
Committed: Wed Sep 30 22:24:50 2015 UTC (9 years, 7 months ago) by couturad
File size: 57180 byte(s)
Log Message:
Ajout d'assemblage dans un arbre caractéristique
Modification de la gestion des id de occ avec retro-compatibilité
script adaptable au assemblage

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