ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 57218 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

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 francois 763 void MG_GEOMETRIE::enregistrer(std::ostream& o,double version)
2159 francois 283 {
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 francois 763 (*i)->enregistrer(o,version);
2168 francois 283 }
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 francois 763 geo.enregistrer(o,VERSIONFICHIER);
2212 francois 283 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