ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/mg_geometrie.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 70864 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
2     //####//------------------------------------------------------------
3     //####// MAGiC
4     //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5     //####// Departement de Genie Mecanique - UQTR
6     //####//------------------------------------------------------------
7     //####// MAGIC est un projet de recherche de l equipe ERICCA
8     //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9     //####// http://www.uqtr.ca/ericca
10     //####// http://www.uqtr.ca/
11     //####//------------------------------------------------------------
12     //####//------------------------------------------------------------
13     //####//
14     //####// mg_geometrie.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:54 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 283
23    
24     #include "gestionversion.h"
25     #include <iostream>
26     #include <string.h>
27    
28    
29     #include "mg_geometrie.h"
30     #include "mg_gestionnaire.h"
31 francois 526 #include "mg_sommet_noeud.h"
32 couturad 740 #include "occ_fonction.h"
33     #include "occ_fonction_v2015.h"
34 couturad 906 #include "occ_fonction_v2017.h"
35 francois 775 #include "ot_chaine.h"
36 francois 283
37    
38    
39     MG_GEOMETRIE::MG_GEOMETRIE(char *type,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(),gest_materiau(""),valeur_unite(unite),precision(eps)
40     {
41 couturad 906 ini(type,(char*)nom);
42 couturad 740 }
43    
44     void MG_GEOMETRIE::ini(char *type,char *nom)
45     {
46 couturad 919 geometrie_construction=false;
47 couturad 906 fonction1=NULL;
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 couturad 906 if ((strcmp(type_geo,"STEPOCC")==0)||(strcmp(type_geo,"OCC")==0)||((strcmp(type_geo,"OCCV2015")==0))||((strcmp(type_geo,"OCCV2017")==0)))
70 couturad 740 {
71     if (strcmp(type_geo,"OCC")==0) fonction1=new OCC_FONCTION;
72 couturad 908 #ifdef ALL_OCC
73 couturad 906 else if(strcmp(type_geo,"OCCV2017")==0)
74     {
75     fonction1=new OCC_FONCTION_V2017;
76     return;
77     }
78 couturad 908 #endif
79 couturad 740 else fonction1=new OCC_FONCTION_V2015;
80     char path2[500];
81     strcpy(path2,nom_du_fichier);
82     if (strcmp(type_geo,"STEPOCC")==0)
83     {
84     fonction1->OuvrirFichierStep(nom_du_fichier);
85     char *p=strchr(path2,'.')+1;
86     p[0]='b';
87     p[1]='r';
88     p[2]='e';
89     p[3]='p';
90     p[4]=0;
91     fonction1->Sauvegarder(path2);
92     strcpy(nom_du_fichier,path2);
93     strcpy(type_geo,"OCCV2015");
94     }
95     else fonction1->OuvrirFichier(nom_du_fichier);
96     }
97     #endif
98 francois 283 }
99    
100     MG_GEOMETRIE::MG_GEOMETRIE(char *type,unsigned long num,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(num),valeur_unite(unite),precision(eps)
101     {
102 couturad 740 ini(type,(char*)nom);
103 francois 283 }
104    
105    
106    
107     MG_GEOMETRIE::~MG_GEOMETRIE()
108     {
109     supprimer_tout_mg_volume();
110     supprimer_tout_mg_coquille();
111     supprimer_tout_mg_face();
112     supprimer_tout_mg_boucle();
113     supprimer_tout_mg_arete();
114     supprimer_tout_mg_sommet();
115     supprimer_tout_mg_point();
116     supprimer_tout_mg_courbe();
117     supprimer_tout_mg_surface();
118     supprimer_tout_mg_visu_courbe();
119     supprimer_tout_mg_poutre();
120     supprimer_tout_mg_coque();
121     supprimer_tout_mg_groupe_topologique();
122 francois 711 supprimer_tout_mg_geom_fonction();
123 couturad 740 #ifdef BREP_OCC
124 couturad 906 if ((strcmp(type_geo,"STEPOCC")==0)||(strcmp(type_geo,"OCC")==0)||((strcmp(type_geo,"OCCV2015")==0))||((strcmp(type_geo,"OCCV2017")==0)))
125 couturad 740 delete fonction1;
126     #endif
127    
128 francois 283 }
129    
130    
131     void MG_GEOMETRIE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
132     {
133     gest=mggest;
134     }
135    
136    
137     int MG_GEOMETRIE::ajouter_mg_point(MG_POINT *mgpt)
138     {
139     gest->recherche_bonid(*mgpt);
140     MG_IDENTIFICATEUR *id=mgpt;
141     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
142     if (!p.second)
143     {
144     return FAIL;
145     }
146    
147     std::pair<const unsigned long,MG_POINT*> tmp(mgpt->get_id(),mgpt);
148     lst_mg_point.insert(tmp);
149     return OK;
150     }
151    
152    
153     MG_POINT* MG_GEOMETRIE::get_mg_pointid(unsigned long num)
154     {
155     LISTE_MG_POINT::iterator i=lst_mg_point.find(num);
156     if (i==lst_mg_point.end())
157     {
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     return NULL;
170     }
171     LISTE_MG_POINT::iterator i=lst_mg_point.begin();
172     for (unsigned long j=0;j<num;j++) i++;
173     return ((*i).second);
174     }
175    
176    
177    
178     unsigned int MG_GEOMETRIE::get_nb_mg_point(void)
179     {
180     return lst_mg_point.size();
181     }
182    
183    
184     int MG_GEOMETRIE::supprimer_mg_pointid(unsigned long num)
185     {
186     MG_POINT* mgpt=get_mg_pointid(num);
187     if (mgpt==NULL)
188     {
189     return FAIL;
190     }
191     MG_IDENTIFICATEUR* id=mgpt;
192     LISTE_ENTITE::iterator i=lst_entite.find(id);
193     lst_entite.erase(i);
194     LISTE_MG_POINT::iterator j=lst_mg_point.find(num);
195     lst_mg_point.erase(j);
196     delete mgpt;
197     return OK;
198     }
199    
200    
201     int MG_GEOMETRIE::supprimer_mg_point(unsigned int num)
202     {
203     MG_POINT* mgpt=get_mg_point(num);
204     if (mgpt==NULL)
205     {
206     return FAIL;
207     }
208     MG_IDENTIFICATEUR* id=mgpt;
209     LISTE_ENTITE::iterator i=lst_entite.find(id);
210     lst_entite.erase(i);
211     LISTE_MG_POINT::iterator j=lst_mg_point.begin();
212     for (unsigned int k=0;k<num;k++) j++;
213     lst_mg_point.erase(j);
214     delete mgpt;
215     return OK;
216     }
217    
218    
219     void MG_GEOMETRIE::supprimer_tout_mg_point(void)
220     {
221     while (get_nb_mg_point()!=0)
222     {
223     LISTE_MG_POINT::iterator j=lst_mg_point.begin();
224     MG_POINT* mgpt=(*j).second;
225     MG_IDENTIFICATEUR* id=mgpt;
226     LISTE_ENTITE::iterator i=lst_entite.find(id);
227     lst_entite.erase(i);
228     lst_mg_point.erase(j);
229     delete mgpt;
230     }
231     }
232    
233     MG_POINT* MG_GEOMETRIE::get_premier_point(LISTE_MG_POINT::iterator &it)
234     {
235     it = lst_mg_point.begin();
236     if (it == lst_mg_point.end())
237     return NULL;
238     return it->second ;
239     }
240    
241     MG_POINT* MG_GEOMETRIE::get_suivant_point(LISTE_MG_POINT::iterator &it)
242     {
243     it++;
244     if (it==lst_mg_point.end())
245     return NULL;
246     return it->second;
247     }
248    
249    
250    
251     int MG_GEOMETRIE::ajouter_mg_courbe(MG_COURBE *mgcrb)
252     {
253     gest->recherche_bonid(*mgcrb);
254     MG_IDENTIFICATEUR *id=mgcrb;
255     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
256     if (!p.second)
257     {
258     return FAIL;
259     }
260     std::pair<const unsigned long,MG_COURBE*> tmp(mgcrb->get_id(),mgcrb);
261     lst_mg_courbe.insert(tmp);
262     return OK;
263     }
264    
265    
266     MG_COURBE* MG_GEOMETRIE::get_mg_courbeid(unsigned long num)
267     {
268     LISTE_MG_COURBE::iterator i=lst_mg_courbe.find(num);
269     if (i==lst_mg_courbe.end())
270     {
271     return NULL;
272     }
273     return ((*i).second);
274     }
275    
276    
277    
278     MG_COURBE* MG_GEOMETRIE::get_mg_courbe(unsigned int num)
279     {
280     if (!(num<lst_mg_courbe.size()))
281     {
282     return NULL;
283     }
284     LISTE_MG_COURBE::iterator i=lst_mg_courbe.begin();
285    
286     for (unsigned long j=0;j<num;j++) i++;
287     return ((*i).second);
288     }
289    
290    
291    
292     unsigned int MG_GEOMETRIE::get_nb_mg_courbe(void)
293     {
294     return lst_mg_courbe.size();
295     }
296    
297    
298     int MG_GEOMETRIE::supprimer_mg_courbeid(unsigned long num)
299     {
300     MG_COURBE* mgcrb=get_mg_courbeid(num);
301     if (mgcrb==NULL)
302     {
303     return FAIL;
304     }
305     MG_IDENTIFICATEUR* id=mgcrb;
306     LISTE_ENTITE::iterator i=lst_entite.find(id);
307     lst_entite.erase(i);
308     LISTE_MG_COURBE::iterator j=lst_mg_courbe.find(num);
309     lst_mg_courbe.erase(j);
310     delete mgcrb;
311     return OK;
312     }
313    
314    
315     int MG_GEOMETRIE::supprimer_mg_courbe(unsigned int num)
316     {
317     MG_COURBE* mgcrb=get_mg_courbe(num);
318     if (mgcrb==NULL)
319     {
320     return FAIL;
321     }
322     MG_IDENTIFICATEUR* id=mgcrb;
323     LISTE_ENTITE::iterator i=lst_entite.find(id);
324     lst_entite.erase(i);
325     LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
326     for (unsigned int k=0;k<num;k++) j++;
327     lst_mg_courbe.erase(j);
328     delete mgcrb;
329     return OK;
330     }
331    
332     void MG_GEOMETRIE::supprimer_tout_mg_courbe(void)
333     {
334     while (get_nb_mg_courbe()!=0)
335     {
336     LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
337     MG_COURBE* mgcrb=(*j).second;
338     MG_IDENTIFICATEUR* id=mgcrb;
339     LISTE_ENTITE::iterator i=lst_entite.find(id);
340     lst_entite.erase(i);
341     lst_mg_courbe.erase(j);
342     delete mgcrb;
343     }
344     }
345    
346     MG_COURBE* MG_GEOMETRIE::get_premier_courbe(LISTE_MG_COURBE::iterator &it)
347     {
348     it = lst_mg_courbe.begin();
349     if (it == lst_mg_courbe.end())
350     return NULL;
351     return it->second ;
352     }
353    
354     MG_COURBE* MG_GEOMETRIE::get_suivant_courbe(LISTE_MG_COURBE::iterator &it)
355     {
356     it++;
357     if (it==lst_mg_courbe.end())
358     return NULL;
359     return it->second;
360     }
361    
362    
363    
364    
365    
366     int MG_GEOMETRIE::ajouter_mg_surface(MG_SURFACE *mgsrf)
367     {
368     gest->recherche_bonid(*mgsrf);
369     MG_IDENTIFICATEUR *id=mgsrf;
370     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
371     if (!p.second)
372     {
373     return FAIL;
374     }
375    
376     std::pair<const unsigned long,MG_SURFACE*> tmp(mgsrf->get_id(),mgsrf);
377     lst_mg_surface.insert(tmp);
378     return OK;
379     }
380    
381    
382     MG_SURFACE* MG_GEOMETRIE::get_mg_surfaceid(unsigned long num)
383     {
384     LISTE_MG_SURFACE::iterator i=lst_mg_surface.find(num);
385     if (i==lst_mg_surface.end())
386     {
387     return NULL;
388     }
389     return ((*i).second);
390     }
391    
392    
393    
394     MG_SURFACE* MG_GEOMETRIE::get_mg_surface(unsigned int num)
395     {
396     if (!(num<lst_mg_surface.size()))
397     {
398     return NULL;
399     }
400     LISTE_MG_SURFACE::iterator i=lst_mg_surface.begin();
401     for (unsigned long j=0;j<num;j++) i++;
402     return ((*i).second);
403     }
404    
405    
406    
407     unsigned int MG_GEOMETRIE::get_nb_mg_surface(void)
408     {
409     return lst_mg_surface.size();
410     }
411    
412    
413     int MG_GEOMETRIE::supprimer_mg_surfaceid(unsigned long num)
414     {
415     MG_SURFACE* mgsrf=get_mg_surfaceid(num);
416     if (mgsrf==NULL)
417     {
418     return FAIL;
419     }
420     MG_IDENTIFICATEUR* id=mgsrf;
421     LISTE_ENTITE::iterator i=lst_entite.find(id);
422     lst_entite.erase(i);
423     LISTE_MG_SURFACE::iterator j=lst_mg_surface.find(num);
424     lst_mg_surface.erase(j);
425     delete mgsrf;
426     return OK;
427     }
428    
429    
430     int MG_GEOMETRIE::supprimer_mg_surface(unsigned int num)
431     {
432     MG_SURFACE* mgsrf=get_mg_surface(num);
433     if (mgsrf==NULL)
434     {
435     return FAIL;
436     }
437     MG_IDENTIFICATEUR* id=mgsrf;
438     LISTE_ENTITE::iterator i=lst_entite.find(id);
439     lst_entite.erase(i);
440     LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
441     for (unsigned int k=0;k<num;k++) j++;
442     lst_mg_surface.erase(j);
443     delete mgsrf;
444     return OK;
445     }
446    
447    
448     void MG_GEOMETRIE::supprimer_tout_mg_surface(void)
449     {
450     while (get_nb_mg_surface()!=0)
451     {
452     LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
453     MG_SURFACE* mgsrf=(*j).second;
454     MG_IDENTIFICATEUR* id=mgsrf;
455     LISTE_ENTITE::iterator i=lst_entite.find(id);
456     lst_entite.erase(i);
457     lst_mg_surface.erase(j);
458     delete mgsrf;
459     }
460     }
461    
462     MG_SURFACE* MG_GEOMETRIE::get_premier_surface(LISTE_MG_SURFACE::iterator &it)
463     {
464     it = lst_mg_surface.begin();
465     if (it == lst_mg_surface.end())
466     return NULL;
467     return it->second ;
468     }
469    
470     MG_SURFACE* MG_GEOMETRIE::get_suivant_surface(LISTE_MG_SURFACE::iterator &it)
471     {
472     it++;
473     if (it==lst_mg_surface.end())
474     return NULL;
475     return it->second;
476     }
477    
478    
479    
480    
481 francois 526 MG_SOMMET_NOEUD* MG_GEOMETRIE::ajouter_mg_sommet_noeud(MG_NOEUD *noeud)
482     {
483     MG_SOMMET_NOEUD* somno=new MG_SOMMET_NOEUD(noeud);
484     gest->recherche_bonid(*somno);
485     MG_IDENTIFICATEUR *id=somno;
486     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
487     if (!p.second)
488     {
489     delete somno;
490     return NULL;
491     }
492     std::pair<const unsigned long,MG_SOMMET*> tmp(somno->get_id(),somno);
493     lst_mg_sommet.insert(tmp);
494     return somno;
495     }
496    
497 francois 283 int MG_GEOMETRIE::ajouter_mg_sommet(MG_SOMMET *mgsom)
498     {
499     gest->recherche_bonid(*mgsom);
500     MG_IDENTIFICATEUR *id=mgsom;
501     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
502     if (!p.second)
503     {
504     return FAIL;
505     }
506    
507     std::pair<const unsigned long,MG_SOMMET*> tmp(mgsom->get_id(),mgsom);
508     lst_mg_sommet.insert(tmp);
509     return OK;
510     }
511    
512    
513     MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(unsigned long num)
514     {
515     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.find(num);
516     if (i==lst_mg_sommet.end())
517     {
518     return NULL;
519     }
520     return ((*i).second);
521     }
522    
523     MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(std::string id)
524     {
525     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
526     int nb=lst_mg_sommet.size();
527     for (int j=0;j<nb;j++)
528     {
529     MG_SOMMET* sommet=(*i).second;
530     std::string idori=sommet->get_idoriginal();
531     if (idori==id) return sommet;
532     i++;
533     }
534     return NULL;
535     }
536    
537    
538    
539     MG_SOMMET* MG_GEOMETRIE::get_mg_sommet(unsigned int num)
540     {
541     if (!(num<lst_mg_sommet.size()))
542     {
543     return NULL;
544     }
545     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
546     for (unsigned long j=0;j<num;j++) i++;
547     return ((*i).second);
548     }
549    
550    
551    
552     unsigned int MG_GEOMETRIE::get_nb_mg_sommet(void)
553     {
554     return lst_mg_sommet.size();
555     }
556    
557    
558     int MG_GEOMETRIE::supprimer_mg_sommetid(unsigned long num)
559     {
560     MG_SOMMET* mgsom=get_mg_sommetid(num);
561     if (mgsom==NULL)
562     {
563     return FAIL;
564     }
565     if (mgsom->get_nb_mg_cosommet()!=0)
566     {
567     return FAIL;
568     }
569     MG_IDENTIFICATEUR* id=mgsom;
570     LISTE_ENTITE::iterator i=lst_entite.find(id);
571     lst_entite.erase(i);
572     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.find(num);
573     lst_mg_sommet.erase(j);
574 couturad 908 #ifdef ALL_OCC
575 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
576     #endif
577 francois 283 delete mgsom;
578     return OK;
579     }
580    
581    
582     int MG_GEOMETRIE::supprimer_mg_sommet(unsigned int num)
583     {
584     MG_SOMMET* mgsom=get_mg_sommet(num);
585     if (mgsom==NULL)
586     {
587     return FAIL;
588     }
589     if (mgsom->get_nb_mg_cosommet()!=0)
590     {
591     return FAIL;
592     }
593     MG_IDENTIFICATEUR* id=mgsom;
594     LISTE_ENTITE::iterator i=lst_entite.find(id);
595     lst_entite.erase(i);
596     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
597     for (unsigned int k=0;k<num;k++) j++;
598     lst_mg_sommet.erase(j);
599 couturad 908 #ifdef ALL_OCC
600 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
601     #endif
602 francois 283 delete mgsom;
603     return OK;
604     }
605    
606    
607     void MG_GEOMETRIE::supprimer_tout_mg_sommet(void)
608     {
609     while (get_nb_mg_sommet()!=0)
610     {
611     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
612     MG_SOMMET* mgsom=(*j).second;
613     MG_IDENTIFICATEUR* id=mgsom;
614     LISTE_ENTITE::iterator i=lst_entite.find(id);
615     lst_entite.erase(i);
616     lst_mg_sommet.erase(j);
617 couturad 908 #ifdef ALL_OCC
618 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
619     #endif
620 francois 283 delete mgsom;
621     }
622     }
623    
624     MG_SOMMET* MG_GEOMETRIE::get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
625     {
626     it = lst_mg_sommet.begin();
627     if (it == lst_mg_sommet.end())
628     return NULL;
629     return it->second ;
630     }
631    
632     MG_SOMMET* MG_GEOMETRIE::get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
633     {
634     it++;
635     if (it==lst_mg_sommet.end())
636     return NULL;
637     return it->second;
638     }
639    
640    
641    
642    
643 couturad 906 int MG_GEOMETRIE::ajouter_mg_cosommet(MG_COSOMMET* mgcosom)
644     {
645     gest->recherche_bonid(*mgcosom);
646     MG_IDENTIFICATEUR *id=mgcosom;
647     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
648     if (!p.second)
649     {
650     return FAIL;
651     }
652    
653     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
654     lst_mg_cosommet.insert(tmp);
655     return OK;
656     }
657    
658 francois 283 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     delete mgcosom;
667     return NULL;
668     }
669    
670     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
671     lst_mg_cosommet.insert(tmp);
672     mgsom->ajouter_mg_cosommet(mgcosom);
673     return mgcosom;
674     }
675    
676     MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(unsigned long num,MG_ARETE *mgarete,MG_SOMMET *mgsom)
677     {
678     MG_COSOMMET* mgcosom=new MG_COSOMMET(num,mgsom,mgarete,precision);
679     MG_IDENTIFICATEUR *id=mgcosom;
680     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
681     if (!p.second)
682     {
683     delete mgcosom;
684     return NULL;
685     }
686    
687     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
688     lst_mg_cosommet.insert(tmp);
689     mgsom->ajouter_mg_cosommet(mgcosom);
690     return mgcosom;
691     }
692    
693     int MG_GEOMETRIE::supprimer_mg_cosommet(MG_COSOMMET* mgcosom)
694     {
695     if (mgcosom==NULL)
696     {
697     return FAIL;
698     }
699     MG_IDENTIFICATEUR* id=mgcosom;
700     LISTE_ENTITE::iterator i=lst_entite.find(id);
701     lst_entite.erase(i);
702     LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(mgcosom->get_id());
703     lst_mg_cosommet.erase(j);
704     mgcosom->get_sommet()->supprimer_mg_cosommet(mgcosom);
705     delete mgcosom;
706     return OK;
707     }
708    
709 couturad 906 int MG_GEOMETRIE::supprimer_mg_cosommetid(long int num)
710     {
711     MG_COSOMMET* mgcosommet=get_mg_cosommetid(num);
712     if (mgcosommet==NULL)
713     {
714     return FAIL;
715     }
716     MG_IDENTIFICATEUR* id=mgcosommet;
717     LISTE_ENTITE::iterator i=lst_entite.find(id);
718     lst_entite.erase(i);
719     LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(num);
720     lst_mg_cosommet.erase(j);
721     mgcosommet->get_sommet()->supprimer_mg_cosommet(mgcosommet);
722     delete mgcosommet;
723     return OK;
724     }
725    
726    
727     unsigned int MG_GEOMETRIE::get_nb_cosommet(void)
728     {
729     return lst_mg_cosommet.size();
730     }
731    
732     MG_COSOMMET* MG_GEOMETRIE::get_premier_cosommet(LISTE_MG_COSOMMET::iterator& it)
733     {
734     it=lst_mg_cosommet.begin();
735     if(it==lst_mg_cosommet.end()) return NULL;
736     return it->second;
737     }
738    
739     MG_COSOMMET* MG_GEOMETRIE::get_suivant_cosommet(LISTE_MG_COSOMMET::iterator& it)
740     {
741     it++;
742     if(it==lst_mg_cosommet.end()) return NULL;
743     return it->second;
744     }
745    
746     MG_COSOMMET* MG_GEOMETRIE::get_mg_cosommetid(long num)
747     {
748     LISTE_MG_COSOMMET::iterator i=lst_mg_cosommet.find(num);
749     if (i==lst_mg_cosommet.end())
750     {
751     return NULL;
752     }
753     return ((*i).second);
754     }
755    
756    
757    
758 francois 283
759     int MG_GEOMETRIE::ajouter_mg_arete(MG_ARETE *mgarete)
760     {
761     gest->recherche_bonid(*mgarete);
762     MG_IDENTIFICATEUR *id=mgarete;
763     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
764     if (!p.second)
765     {
766     return FAIL;
767     }
768    
769     std::pair<const unsigned long,MG_ARETE*> tmp(mgarete->get_id(),mgarete);
770     lst_mg_arete.insert(tmp);
771     return OK;
772     }
773    
774    
775     MG_ARETE* MG_GEOMETRIE::get_mg_areteid(unsigned long num)
776     {
777     LISTE_MG_ARETE::iterator i=lst_mg_arete.find(num);
778     if (i==lst_mg_arete.end())
779     {
780     return NULL;
781     }
782     return ((*i).second);
783     }
784    
785     MG_ARETE* MG_GEOMETRIE::get_mg_areteid(std::string id)
786     {
787     LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
788     int nb=lst_mg_arete.size();
789     for (int j=0;j<nb;j++)
790     {
791     MG_ARETE* arete=(*i).second;
792     std::string idori=arete->get_idoriginal();
793     if (idori==id) return arete;
794     i++;
795     }
796     return NULL;
797     }
798    
799    
800     MG_ARETE* MG_GEOMETRIE::get_mg_arete(unsigned int num)
801     {
802     if (!(num<lst_mg_arete.size()))
803     {
804     return NULL;
805     }
806     LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
807     for (unsigned long j=0;j<num;j++) i++;
808     return ((*i).second);
809     }
810    
811    
812    
813     unsigned int MG_GEOMETRIE::get_nb_mg_arete(void)
814     {
815     return lst_mg_arete.size();
816     }
817    
818    
819     int MG_GEOMETRIE::supprimer_mg_areteid(unsigned long num)
820     {
821     MG_ARETE* mgarete=get_mg_areteid(num);
822     if (mgarete==NULL)
823     {
824     return FAIL;
825     }
826     if (mgarete->get_nb_mg_coarete()!=0)
827     {
828     return FAIL;
829     }
830     MG_IDENTIFICATEUR* id=mgarete;
831     LISTE_ENTITE::iterator i=lst_entite.find(id);
832     lst_entite.erase(i);
833     LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
834     lst_mg_arete.erase(j);
835     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
836     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
837 couturad 906 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
838     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
839 francois 283 supprimer_mg_cosommet(cosom1);
840     supprimer_mg_cosommet(cosom2);
841 couturad 908 #ifdef ALL_OCC
842 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
843     #endif
844 francois 283 delete mgarete;
845     return OK;
846     }
847    
848    
849     int MG_GEOMETRIE::supprimer_mg_arete(unsigned int num)
850     {
851     MG_ARETE* mgarete=get_mg_arete(num);
852     if (mgarete==NULL)
853     {
854     return FAIL;
855     }
856     if (mgarete->get_nb_mg_coarete()!=0)
857     {
858     return FAIL;
859     }
860     MG_IDENTIFICATEUR* id=mgarete;
861     LISTE_ENTITE::iterator i=lst_entite.find(id);
862     lst_entite.erase(i);
863     LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
864     lst_mg_arete.erase(j);
865     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
866     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
867     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
868     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
869     supprimer_mg_cosommet(cosom1);
870     supprimer_mg_cosommet(cosom2);
871 couturad 906
872 couturad 908 #ifdef ALL_OCC
873 couturad 906 if(strcmp(type_geo,"OCCV2017")) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
874     #endif
875 francois 283 delete mgarete;
876     return OK;
877     }
878    
879    
880     void MG_GEOMETRIE::supprimer_tout_mg_arete(void)
881     {
882     while (get_nb_mg_arete()!=0)
883     {
884     LISTE_MG_ARETE::iterator j=lst_mg_arete.begin();
885     MG_ARETE* mgarete=(*j).second;
886     MG_IDENTIFICATEUR* id=mgarete;
887     LISTE_ENTITE::iterator i=lst_entite.find(id);
888     lst_entite.erase(i);
889     lst_mg_arete.erase(j);
890 francois 576 if (!mgarete->est_une_arete_element())
891     {
892 couturad 906
893 francois 576 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
894     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
895     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
896     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
897     supprimer_mg_cosommet(cosom1);
898 couturad 906 supprimer_mg_cosommet(cosom2);
899 couturad 908 #ifdef ALL_OCC
900 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
901     #endif
902 francois 576 delete mgarete;
903     }
904 francois 283 }
905     }
906    
907     MG_ARETE* MG_GEOMETRIE::get_premier_arete(LISTE_MG_ARETE::iterator &it)
908     {
909     it = lst_mg_arete.begin();
910     if (it == lst_mg_arete.end())
911     return NULL;
912     return it->second ;
913     }
914    
915     MG_ARETE* MG_GEOMETRIE::get_suivant_arete(LISTE_MG_ARETE::iterator &it)
916     {
917     it++;
918     if (it==lst_mg_arete.end())
919     return NULL;
920     return it->second;
921     }
922    
923    
924    
925 couturad 906 int MG_GEOMETRIE::ajouter_mg_coarete(MG_COARETE* mgcoarete)
926     {
927     gest->recherche_bonid(*mgcoarete);
928     MG_IDENTIFICATEUR *id=mgcoarete;
929     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
930     if (!p.second)
931     {
932     return FAIL;
933     }
934     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
935     lst_mg_coarete.insert(tmp);
936     return OK;
937     }
938    
939    
940 francois 283 MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
941     {
942     MG_COARETE* mgcoarete=new MG_COARETE(mgarete,mgboucle,sens);
943     gest->recherche_bonid(*mgcoarete);
944     MG_IDENTIFICATEUR *id=mgcoarete;
945     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
946     if (!p.second)
947     {
948     delete mgcoarete;
949     return NULL;
950     }
951    
952     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
953     lst_mg_coarete.insert(tmp);
954     mgarete->ajouter_mg_coarete(mgcoarete);
955     return mgcoarete;
956     }
957    
958    
959     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(unsigned long num,MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
960     {
961     MG_COARETE* mgcoarete=new MG_COARETE(num,mgarete,mgboucle,sens);
962     MG_IDENTIFICATEUR *id=mgcoarete;
963     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
964     if (!p.second)
965     {
966     delete mgcoarete;
967     return NULL;
968     }
969    
970     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
971     lst_mg_coarete.insert(tmp);
972     mgarete->ajouter_mg_coarete(mgcoarete);
973     return mgcoarete;
974     }
975    
976     int MG_GEOMETRIE::supprimer_mg_coarete(MG_COARETE* mgcoarete)
977     {
978     if (mgcoarete==NULL)
979     {
980     return FAIL;
981     }
982     MG_IDENTIFICATEUR* id=mgcoarete;
983     LISTE_ENTITE::iterator i=lst_entite.find(id);
984     lst_entite.erase(i);
985     LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(mgcoarete->get_id());
986     lst_mg_coarete.erase(j);
987     mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
988     delete mgcoarete;
989     return OK;
990     }
991    
992 couturad 906 int MG_GEOMETRIE::supprimer_mg_coareteid(long int num)
993     {
994     MG_COARETE* mgcoarete=get_mg_coareteid(num);
995     if (mgcoarete==NULL)
996     {
997     return FAIL;
998     }
999     MG_IDENTIFICATEUR* id=mgcoarete;
1000     LISTE_ENTITE::iterator i=lst_entite.find(id);
1001     lst_entite.erase(i);
1002     LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(num);
1003     lst_mg_coarete.erase(j);
1004     mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
1005     delete mgcoarete;
1006     return OK;
1007     }
1008    
1009    
1010     unsigned int MG_GEOMETRIE::get_nb_coarete(void)
1011     {
1012     return lst_mg_coarete.size();
1013     }
1014    
1015     MG_COARETE* MG_GEOMETRIE::get_premier_coarete(LISTE_MG_COARETE::iterator& it)
1016     {
1017     it=lst_mg_coarete.begin();
1018     if(it==lst_mg_coarete.end()) return NULL;
1019     return it->second;
1020     }
1021    
1022     MG_COARETE* MG_GEOMETRIE::get_suivant_coarete(LISTE_MG_COARETE::iterator& it)
1023     {
1024     it++;
1025     if(it==lst_mg_coarete.end()) return NULL;
1026     return it->second;
1027     }
1028    
1029     MG_COARETE* MG_GEOMETRIE::get_mg_coareteid(long num)
1030     {
1031     LISTE_MG_COARETE::iterator i=lst_mg_coarete.find(num);
1032     if (i==lst_mg_coarete.end())
1033     {
1034     return NULL;
1035     }
1036     return ((*i).second);
1037     }
1038    
1039    
1040 francois 283
1041 couturad 906 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE* mgboucle)
1042     {
1043     gest->recherche_bonid(*mgboucle);
1044     MG_IDENTIFICATEUR *id=mgboucle;
1045     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1046     if (!p.second)
1047     {
1048     return FAIL;
1049     }
1050     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1051     std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1052     return OK;
1053     }
1054    
1055 francois 283 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_POUTRE* mgpoutre)
1056     {
1057     gest->recherche_bonid(*mgboucle);
1058     MG_IDENTIFICATEUR *id=mgboucle;
1059     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1060     if (!p.second)
1061     {
1062     return FAIL;
1063     }
1064    
1065     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1066 couturad 906 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1067     if(p2.second) mgpoutre->ajouter_mg_boucle(mgboucle);
1068 francois 283 return OK;
1069     }
1070    
1071     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_FACE* mgface)
1072     {
1073     gest->recherche_bonid(*mgboucle);
1074     MG_IDENTIFICATEUR *id=mgboucle;
1075     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1076     if (!p.second)
1077     {
1078     return FAIL;
1079     }
1080    
1081     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1082 couturad 906 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1083     if(p2.second) mgface->ajouter_mg_boucle(mgboucle);
1084 francois 283 return OK;
1085     }
1086    
1087    
1088     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucleid(unsigned long num)
1089     {
1090     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.find(num);
1091     if (i==lst_mg_boucle.end())
1092     {
1093     return NULL;
1094     }
1095     return ((*i).second);
1096     }
1097    
1098    
1099    
1100     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucle(unsigned int num)
1101     {
1102     if (!(num<lst_mg_boucle.size()))
1103     {
1104     return NULL;
1105     }
1106     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.begin();
1107     for (unsigned long j=0;j<num;j++) i++;
1108     return ((*i).second);
1109     }
1110    
1111    
1112    
1113     unsigned int MG_GEOMETRIE::get_nb_mg_boucle(void)
1114     {
1115     return lst_mg_boucle.size();
1116     }
1117    
1118    
1119     int MG_GEOMETRIE::supprimer_mg_boucleid(unsigned long num)
1120     {
1121     MG_BOUCLE* mgboucle=get_mg_boucleid(num);
1122     if (mgboucle==NULL)
1123     {
1124     return FAIL;
1125     }
1126     MG_IDENTIFICATEUR* id=mgboucle;
1127     LISTE_ENTITE::iterator i=lst_entite.find(id);
1128     lst_entite.erase(i);
1129     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.find(num);
1130     lst_mg_boucle.erase(j);
1131     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1132     {
1133     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1134     supprimer_mg_coarete(coarete);
1135     }
1136 couturad 908 #ifdef ALL_OCC
1137 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1138     #endif
1139 francois 283 delete mgboucle;
1140     return OK;
1141     }
1142    
1143    
1144     int MG_GEOMETRIE::supprimer_mg_boucle(unsigned int num)
1145     {
1146     MG_BOUCLE* mgboucle=get_mg_boucle(num);
1147     if (mgboucle==NULL)
1148     {
1149     return FAIL;
1150     }
1151     MG_IDENTIFICATEUR* id=mgboucle;
1152     LISTE_ENTITE::iterator i=lst_entite.find(id);
1153     lst_entite.erase(i);
1154     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1155     for (unsigned int k=0;k<num;k++) j++;
1156     lst_mg_boucle.erase(j);
1157     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1158     {
1159     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1160     supprimer_mg_coarete(coarete);
1161     }
1162 couturad 908 #ifdef ALL_OCC
1163 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1164     #endif
1165 francois 283 delete mgboucle;
1166     return OK;
1167     }
1168    
1169    
1170     void MG_GEOMETRIE::supprimer_tout_mg_boucle(void)
1171     {
1172     while (get_nb_mg_boucle()!=0)
1173     {
1174     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1175     MG_BOUCLE* mgboucle=(*j).second;
1176     MG_IDENTIFICATEUR* id=mgboucle;
1177     LISTE_ENTITE::iterator i=lst_entite.find(id);
1178     lst_entite.erase(i);
1179     lst_mg_boucle.erase(j);
1180     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1181     {
1182     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1183     supprimer_mg_coarete(coarete);
1184     }
1185 couturad 908 #ifdef ALL_OCC
1186 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1187     #endif
1188 francois 283 delete mgboucle;
1189     }
1190     }
1191    
1192     MG_BOUCLE* MG_GEOMETRIE::get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
1193     {
1194     it = lst_mg_boucle.begin();
1195     if (it == lst_mg_boucle.end())
1196     return NULL;
1197     return it->second ;
1198     }
1199    
1200     MG_BOUCLE* MG_GEOMETRIE::get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
1201     {
1202     it++;
1203     if (it==lst_mg_boucle.end())
1204     return NULL;
1205     return it->second;
1206     }
1207    
1208    
1209    
1210     int MG_GEOMETRIE::ajouter_mg_face(MG_FACE *mgface)
1211     {
1212     gest->recherche_bonid(*mgface);
1213     MG_IDENTIFICATEUR *id=mgface;
1214     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1215     if (!p.second)
1216     {
1217     return FAIL;
1218     }
1219    
1220     std::pair<const unsigned long,MG_FACE*> tmp(mgface->get_id(),mgface);
1221     lst_mg_face.insert(tmp);
1222     return OK;
1223     }
1224    
1225    
1226     MG_FACE* MG_GEOMETRIE::get_mg_faceid(unsigned long num)
1227     {
1228     LISTE_MG_FACE::iterator i=lst_mg_face.find(num);
1229     if (i==lst_mg_face.end())
1230     {
1231     return NULL;
1232     }
1233     return ((*i).second);
1234     }
1235    
1236     MG_FACE* MG_GEOMETRIE::get_mg_faceid(std::string id)
1237     {
1238     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1239     int nb=lst_mg_face.size();
1240     for (int j=0;j<nb;j++)
1241     {
1242     MG_FACE* face=(*i).second;
1243     std::string idori=face->get_idoriginal();
1244     if (idori==id) return face;
1245     i++;
1246     }
1247     return NULL;
1248     }
1249    
1250    
1251     MG_FACE* MG_GEOMETRIE::get_mg_face(unsigned int num)
1252     {
1253     if (!(num<lst_mg_face.size()))
1254     {
1255     return NULL;
1256     }
1257     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1258     for (unsigned long j=0;j<num;j++) i++;
1259     return ((*i).second);
1260     }
1261    
1262    
1263    
1264     unsigned int MG_GEOMETRIE::get_nb_mg_face(void)
1265     {
1266     return lst_mg_face.size();
1267     }
1268    
1269    
1270     int MG_GEOMETRIE::supprimer_mg_faceid(unsigned long num)
1271     {
1272     MG_FACE* mgface=get_mg_faceid(num);
1273     if (mgface==NULL)
1274     {
1275     return FAIL;
1276     }
1277     if (mgface->get_nb_mg_coface()!=0)
1278     {
1279 couturad 911 std::cerr << "ERRCOFACE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << std::endl;
1280 francois 283 return FAIL;
1281     }
1282     MG_IDENTIFICATEUR* id=mgface;
1283     LISTE_ENTITE::iterator i=lst_entite.find(id);
1284     lst_entite.erase(i);
1285     LISTE_MG_FACE::iterator j=lst_mg_face.find(num);
1286     lst_mg_face.erase(j);
1287 couturad 908 #ifdef ALL_OCC
1288 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1289     #endif
1290 francois 283 delete mgface;
1291     return OK;
1292     }
1293    
1294    
1295     int MG_GEOMETRIE::supprimer_mg_face(unsigned int num)
1296     {
1297     MG_FACE* mgface=get_mg_face(num);
1298     if (mgface==NULL)
1299     {
1300     return FAIL;
1301     }
1302     if (mgface->get_nb_mg_coface()!=0)
1303     {
1304     return FAIL;
1305     }
1306     MG_IDENTIFICATEUR* id=mgface;
1307     LISTE_ENTITE::iterator i=lst_entite.find(id);
1308     lst_entite.erase(i);
1309     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1310     for (unsigned int k=0;k<num;k++) j++;
1311     lst_mg_face.erase(j);
1312 couturad 908 #ifdef ALL_OCC
1313 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1314     #endif
1315 francois 283 delete mgface;
1316     return OK;
1317     }
1318    
1319    
1320     void MG_GEOMETRIE::supprimer_tout_mg_face(void)
1321     {
1322    
1323     while (get_nb_mg_face()!=0)
1324     {
1325     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1326     MG_FACE* mgface=(*j).second;
1327     MG_IDENTIFICATEUR* id=mgface;
1328     LISTE_ENTITE::iterator i=lst_entite.find(id);
1329     lst_entite.erase(i);
1330     lst_mg_face.erase(j);
1331 couturad 908 #ifdef ALL_OCC
1332 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1333     #endif
1334 francois 283 delete mgface;
1335     }
1336     }
1337    
1338     MG_FACE* MG_GEOMETRIE::get_premier_face(LISTE_MG_FACE::iterator &it)
1339     {
1340     it = lst_mg_face.begin();
1341     if (it == lst_mg_face.end())
1342     return NULL;
1343     return it->second ;
1344     }
1345    
1346     MG_FACE* MG_GEOMETRIE::get_suivant_face(LISTE_MG_FACE::iterator &it)
1347     {
1348     it++;
1349     if (it==lst_mg_face.end())
1350     return NULL;
1351     return it->second;
1352     }
1353    
1354    
1355    
1356 couturad 906 int MG_GEOMETRIE::ajouter_mg_coface(MG_COFACE* mgcoface)
1357     {
1358     gest->recherche_bonid(*mgcoface);
1359     MG_IDENTIFICATEUR *id=mgcoface;
1360     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1361     if (!p.second)
1362     {
1363     return FAIL;
1364     }
1365 francois 283
1366 couturad 906 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1367     lst_mg_coface.insert(tmp);
1368     return OK;
1369     }
1370    
1371 francois 283 MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1372     {
1373     MG_COFACE* mgcoface=new MG_COFACE(mgface,mgcoq,sens);
1374     gest->recherche_bonid(*mgcoface);
1375     MG_IDENTIFICATEUR *id=mgcoface;
1376     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1377     if (!p.second)
1378     {
1379     delete mgcoface;
1380     return NULL;
1381     }
1382    
1383     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1384     lst_mg_coface.insert(tmp);
1385     mgface->ajouter_mg_coface(mgcoface);
1386     return mgcoface;
1387     }
1388    
1389    
1390     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(unsigned long num,MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1391     {
1392     MG_COFACE* mgcoface=new MG_COFACE(num,mgface,mgcoq,sens);
1393     MG_IDENTIFICATEUR *id=mgcoface;
1394     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1395     if (!p.second)
1396     {
1397     delete mgcoface;
1398     return NULL;
1399     }
1400    
1401     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1402     lst_mg_coface.insert(tmp);
1403     mgface->ajouter_mg_coface(mgcoface);
1404     return mgcoface;
1405     }
1406    
1407     int MG_GEOMETRIE::supprimer_mg_coface(MG_COFACE* mgcoface)
1408     {
1409     if (mgcoface==NULL)
1410     {
1411     return FAIL;
1412     }
1413     MG_IDENTIFICATEUR* id=mgcoface;
1414     LISTE_ENTITE::iterator i=lst_entite.find(id);
1415     lst_entite.erase(i);
1416     LISTE_MG_COFACE::iterator j=lst_mg_coface.find(mgcoface->get_id());
1417     lst_mg_coface.erase(j);
1418     mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1419     delete mgcoface;
1420     return OK;
1421     }
1422    
1423 couturad 906 int MG_GEOMETRIE::supprimer_mg_cofaceid(long int num)
1424     {
1425     MG_COFACE* mgcoface=get_mg_cofaceid(num);
1426     if (mgcoface==NULL)
1427     {
1428     return FAIL;
1429     }
1430     MG_IDENTIFICATEUR* id=mgcoface;
1431     LISTE_ENTITE::iterator i=lst_entite.find(id);
1432     lst_entite.erase(i);
1433     LISTE_MG_COFACE::iterator j=lst_mg_coface.find(num);
1434     lst_mg_coface.erase(j);
1435     mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1436     delete mgcoface;
1437     return OK;
1438     }
1439    
1440    
1441     unsigned int MG_GEOMETRIE::get_nb_coface(void)
1442     {
1443     return lst_mg_coface.size();
1444     }
1445    
1446     MG_COFACE* MG_GEOMETRIE::get_premier_coface(LISTE_MG_COFACE::iterator& it)
1447     {
1448     it=lst_mg_coface.begin();
1449     if(it==lst_mg_coface.end()) return NULL;
1450     return it->second;
1451     }
1452    
1453     MG_COFACE* MG_GEOMETRIE::get_suivant_coface(LISTE_MG_COFACE::iterator& it)
1454     {
1455     it++;
1456     if(it==lst_mg_coface.end()) return NULL;
1457     return it->second;
1458     }
1459    
1460     MG_COFACE* MG_GEOMETRIE::get_mg_cofaceid(long num)
1461     {
1462     LISTE_MG_COFACE::iterator i=lst_mg_coface.find(num);
1463     if (i==lst_mg_coface.end())
1464     {
1465     return NULL;
1466     }
1467     return ((*i).second);
1468     }
1469    
1470    
1471    
1472 francois 283
1473 couturad 906 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE* mgcoq)
1474     {
1475     gest->recherche_bonid(*mgcoq);
1476     MG_IDENTIFICATEUR *id=mgcoq;
1477     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1478     if (!p.second)
1479     {
1480     return FAIL;
1481     }
1482     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1483     std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1484     return OK;
1485     }
1486    
1487 francois 283 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoq,MG_COQUE *mgcoque)
1488     {
1489     gest->recherche_bonid(*mgcoq);
1490     MG_IDENTIFICATEUR *id=mgcoq;
1491     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1492     if (!p.second)
1493     {
1494     return FAIL;
1495     }
1496    
1497     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1498 couturad 906 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1499     if(p2.second) mgcoque->ajouter_mg_coquille(mgcoq);
1500 francois 283 return OK;
1501     }
1502    
1503    
1504     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoquille,MG_VOLUME* mgvolume)
1505     {
1506     gest->recherche_bonid(*mgcoquille);
1507     MG_IDENTIFICATEUR *id=mgcoquille;
1508     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1509     if (!p.second)
1510     {
1511     return FAIL;
1512     }
1513    
1514     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoquille->get_id(),mgcoquille);
1515 couturad 906 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1516     if(p2.second) mgvolume->ajouter_mg_coquille(mgcoquille);
1517 francois 283 return OK;
1518     }
1519    
1520    
1521     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquilleid(unsigned long num)
1522     {
1523     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.find(num);
1524     if (i==lst_mg_coquille.end())
1525     {
1526     return NULL;
1527     }
1528     return ((*i).second);
1529     }
1530    
1531    
1532    
1533     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquille(unsigned int num)
1534     {
1535     if (!(num<lst_mg_coquille.size()))
1536     {
1537     return NULL;
1538     }
1539     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.begin();
1540     for (unsigned long j=0;j<num;j++) i++;
1541     return ((*i).second);
1542     }
1543    
1544     MG_COQUILLE* MG_GEOMETRIE::get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
1545     {
1546     it = lst_mg_coquille.begin();
1547     if (it == lst_mg_coquille.end())
1548     return NULL;
1549     return it->second ;
1550     }
1551    
1552     MG_COQUILLE* MG_GEOMETRIE::get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
1553     {
1554     it++;
1555     if (it==lst_mg_coquille.end())
1556     return NULL;
1557     return it->second;
1558     }
1559    
1560    
1561     unsigned int MG_GEOMETRIE::get_nb_mg_coquille(void)
1562     {
1563     return lst_mg_coquille.size();
1564     }
1565    
1566    
1567     int MG_GEOMETRIE::supprimer_mg_coquilleid(unsigned long num)
1568     {
1569     MG_COQUILLE* mgcoquille=get_mg_coquilleid(num);
1570     if (mgcoquille==NULL)
1571     {
1572     return FAIL;
1573     }
1574     MG_IDENTIFICATEUR* id=mgcoquille;
1575     LISTE_ENTITE::iterator i=lst_entite.find(id);
1576     lst_entite.erase(i);
1577     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.find(num);
1578     lst_mg_coquille.erase(j);
1579     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1580     {
1581     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1582     supprimer_mg_coface(coface);
1583     }
1584 couturad 908 #ifdef ALL_OCC
1585 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1586     #endif
1587 francois 283 delete mgcoquille;
1588     return OK;
1589     }
1590    
1591    
1592     int MG_GEOMETRIE::supprimer_mg_coquille(unsigned int num)
1593     {
1594     MG_COQUILLE* mgcoquille=get_mg_coquille(num);
1595     if (mgcoquille==NULL)
1596     {
1597     return FAIL;
1598     }
1599     MG_IDENTIFICATEUR* id=mgcoquille;
1600     LISTE_ENTITE::iterator i=lst_entite.find(id);
1601     lst_entite.erase(i);
1602     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1603     for (unsigned int k=0;k<num;k++) j++;
1604     lst_mg_coquille.erase(j);
1605     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1606     {
1607     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1608     supprimer_mg_coface(coface);
1609     }
1610 couturad 908 #ifdef ALL_OCC
1611 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1612     #endif
1613 francois 283 delete mgcoquille;
1614     return OK;
1615     }
1616    
1617    
1618     void MG_GEOMETRIE::supprimer_tout_mg_coquille(void)
1619     {
1620     while (get_nb_mg_coquille()!=0)
1621     {
1622     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1623     MG_COQUILLE* mgcoquille=(*j).second;
1624     MG_IDENTIFICATEUR* id=mgcoquille;
1625     LISTE_ENTITE::iterator i=lst_entite.find(id);
1626     lst_entite.erase(i);
1627     lst_mg_coquille.erase(j);
1628     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1629     {
1630     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1631     supprimer_mg_coface(coface);
1632     }
1633 couturad 908 #ifdef ALL_OCC
1634 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1635     #endif
1636 francois 283 delete mgcoquille;
1637     }
1638     }
1639    
1640    
1641    
1642     int MG_GEOMETRIE::ajouter_mg_volume(MG_VOLUME *mgvolume)
1643     {
1644     gest->recherche_bonid(*mgvolume);
1645     MG_IDENTIFICATEUR *id=mgvolume;
1646     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1647     if (!p.second)
1648     {
1649     return FAIL;
1650     }
1651    
1652     std::pair<const unsigned long,MG_VOLUME*> tmp(mgvolume->get_id(),mgvolume);
1653     lst_mg_volume.insert(tmp);
1654     return OK;
1655     }
1656    
1657    
1658     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(unsigned long num)
1659     {
1660     LISTE_MG_VOLUME::iterator i=lst_mg_volume.find(num);
1661     if (i==lst_mg_volume.end())
1662     {
1663     return NULL;
1664     }
1665     return ((*i).second);
1666     }
1667    
1668     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(std::string id)
1669     {
1670     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1671     int nb=lst_mg_volume.size();
1672     for (int j=0;j<nb;j++)
1673     {
1674     MG_VOLUME* volume=(*i).second;
1675     std::string idori=volume->get_idoriginal();
1676     if (idori==id) return volume;
1677     i++;
1678     }
1679     return NULL;
1680     }
1681    
1682    
1683     MG_VOLUME* MG_GEOMETRIE::get_mg_volume(unsigned int num)
1684     {
1685     if (!(num<lst_mg_volume.size()))
1686     {
1687     return NULL;
1688     }
1689     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1690     for (unsigned long j=0;j<num;j++) i++;
1691     return ((*i).second);
1692     }
1693    
1694     MG_VOLUME* MG_GEOMETRIE::get_premier_volume(LISTE_MG_VOLUME::iterator &it)
1695     {
1696     it = lst_mg_volume.begin();
1697     if (it == lst_mg_volume.end())
1698     return NULL;
1699     return it->second ;
1700     }
1701    
1702     MG_VOLUME* MG_GEOMETRIE::get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
1703     {
1704     it++;
1705     if (it==lst_mg_volume.end())
1706     return NULL;
1707     return it->second;
1708     }
1709    
1710    
1711    
1712     unsigned int MG_GEOMETRIE::get_nb_mg_volume(void)
1713     {
1714     return lst_mg_volume.size();
1715     }
1716    
1717    
1718     int MG_GEOMETRIE::supprimer_mg_volumeid(unsigned long num)
1719     {
1720     MG_VOLUME* mgvolume=get_mg_volumeid(num);
1721     if (mgvolume==NULL)
1722     {
1723     return FAIL;
1724     }
1725     MG_IDENTIFICATEUR* id=mgvolume;
1726     LISTE_ENTITE::iterator i=lst_entite.find(id);
1727     lst_entite.erase(i);
1728     LISTE_MG_VOLUME::iterator j=lst_mg_volume.find(num);
1729     lst_mg_volume.erase(j);
1730 couturad 908 #ifdef ALL_OCC
1731 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1732     #endif
1733 francois 283 delete mgvolume;
1734     return OK;
1735     }
1736    
1737    
1738     int MG_GEOMETRIE::supprimer_mg_volume(unsigned int num)
1739     {
1740     MG_VOLUME* mgvolume=get_mg_volume(num);
1741     if (mgvolume==NULL)
1742     {
1743     return FAIL;
1744     }
1745     MG_IDENTIFICATEUR* id=mgvolume;
1746     LISTE_ENTITE::iterator i=lst_entite.find(id);
1747     lst_entite.erase(i);
1748     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1749     for (unsigned int k=0;k<num;k++) j++;
1750     lst_mg_volume.erase(j);
1751 couturad 908 #ifdef ALL_OCC
1752 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1753     #endif
1754 francois 283 delete mgvolume;
1755     return OK;
1756     }
1757    
1758    
1759     void MG_GEOMETRIE::supprimer_tout_mg_volume(void)
1760     {
1761     while (get_nb_mg_volume()!=0)
1762     {
1763     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1764     MG_VOLUME* mgvolume=(*j).second;
1765     MG_IDENTIFICATEUR* id=mgvolume;
1766     LISTE_ENTITE::iterator i=lst_entite.find(id);
1767     lst_entite.erase(i);
1768     lst_mg_volume.erase(j);
1769 couturad 908 #ifdef ALL_OCC
1770 couturad 906 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1771     #endif
1772 francois 283 delete mgvolume;
1773     }
1774     }
1775    
1776    
1777     int MG_GEOMETRIE::ajouter_mg_coque(MG_COQUE *mgcoque)
1778     {
1779     gest->recherche_bonid(*mgcoque);
1780     MG_IDENTIFICATEUR *id=mgcoque;
1781     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1782     if (!p.second)
1783     {
1784     return FAIL;
1785     }
1786    
1787     std::pair<const unsigned long,MG_COQUE*> tmp(mgcoque->get_id(),mgcoque);
1788     lst_mg_coque.insert(tmp);
1789     return OK;
1790     }
1791    
1792    
1793     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(unsigned long num)
1794     {
1795     LISTE_MG_COQUE::iterator i=lst_mg_coque.find(num);
1796     if (i==lst_mg_coque.end())
1797     {
1798     return NULL;
1799     }
1800     return ((*i).second);
1801     }
1802    
1803     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(std::string id)
1804     {
1805     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1806     int nb=lst_mg_coque.size();
1807     for (int j=0;j<nb;j++)
1808     {
1809     MG_COQUE* coque=(*i).second;
1810     std::string idori=coque->get_idoriginal();
1811     if (idori==id) return coque;
1812     i++;
1813     }
1814     return NULL;
1815     }
1816    
1817    
1818     MG_COQUE* MG_GEOMETRIE::get_mg_coque(unsigned int num)
1819     {
1820     if (!(num<lst_mg_coque.size()))
1821     {
1822     return NULL;
1823     }
1824     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1825     for (unsigned long j=0;j<num;j++) i++;
1826     return ((*i).second);
1827     }
1828    
1829    
1830     MG_COQUE* MG_GEOMETRIE::get_premier_coque(LISTE_MG_COQUE::iterator &it)
1831     {
1832     it = lst_mg_coque.begin();
1833     if (it == lst_mg_coque.end())
1834     return NULL;
1835     return it->second ;
1836     }
1837    
1838     MG_COQUE* MG_GEOMETRIE::get_suivant_coque(LISTE_MG_COQUE::iterator &it)
1839     {
1840     it++;
1841     if (it==lst_mg_coque.end())
1842     return NULL;
1843     return it->second;
1844     }
1845    
1846    
1847     unsigned int MG_GEOMETRIE::get_nb_mg_coque(void)
1848     {
1849     return lst_mg_coque.size();
1850     }
1851    
1852    
1853     int MG_GEOMETRIE::supprimer_mg_coqueid(unsigned long num)
1854     {
1855     MG_COQUE* mgcoque=get_mg_coqueid(num);
1856     if (mgcoque==NULL)
1857     {
1858     return FAIL;
1859     }
1860     MG_IDENTIFICATEUR* id=mgcoque;
1861     LISTE_ENTITE::iterator i=lst_entite.find(id);
1862     lst_entite.erase(i);
1863     LISTE_MG_COQUE::iterator j=lst_mg_coque.find(num);
1864     lst_mg_coque.erase(j);
1865     delete mgcoque;
1866     return OK;
1867     }
1868    
1869    
1870     int MG_GEOMETRIE::supprimer_mg_coque(unsigned int num)
1871     {
1872     MG_COQUE* mgcoque=get_mg_coque(num);
1873     if (mgcoque==NULL)
1874     {
1875     return FAIL;
1876     }
1877     MG_IDENTIFICATEUR* id=mgcoque;
1878     LISTE_ENTITE::iterator i=lst_entite.find(id);
1879     lst_entite.erase(i);
1880     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1881     for (unsigned int k=0;k<num;k++) j++;
1882     lst_mg_coque.erase(j);
1883     delete mgcoque;
1884     return OK;
1885     }
1886    
1887    
1888     void MG_GEOMETRIE::supprimer_tout_mg_coque(void)
1889     {
1890     while (get_nb_mg_coque()!=0)
1891     {
1892     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1893     MG_COQUE* mgcoque=(*j).second;
1894     MG_IDENTIFICATEUR* id=mgcoque;
1895     LISTE_ENTITE::iterator i=lst_entite.find(id);
1896     lst_entite.erase(i);
1897     lst_mg_coque.erase(j);
1898     delete mgcoque;
1899     }
1900     }
1901    
1902    
1903    
1904     int MG_GEOMETRIE::ajouter_mg_poutre(MG_POUTRE *mgpoutre)
1905     {
1906     gest->recherche_bonid(*mgpoutre);
1907     MG_IDENTIFICATEUR *id=mgpoutre;
1908     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1909     if (!p.second)
1910     {
1911     return FAIL;
1912     }
1913    
1914     std::pair<const unsigned long,MG_POUTRE*> tmp(mgpoutre->get_id(),mgpoutre);
1915     lst_mg_poutre.insert(tmp);
1916     return OK;
1917     }
1918    
1919    
1920     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(unsigned long num)
1921     {
1922     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.find(num);
1923     if (i==lst_mg_poutre.end())
1924     {
1925     return NULL;
1926     }
1927     return ((*i).second);
1928     }
1929    
1930     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(std::string id)
1931     {
1932     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1933     int nb=lst_mg_poutre.size();
1934     for (int j=0;j<nb;j++)
1935     {
1936     MG_POUTRE* poutre=(*i).second;
1937     std::string idori=poutre->get_idoriginal();
1938     if (idori==id) return poutre;
1939     i++;
1940     }
1941     return NULL;
1942     }
1943    
1944    
1945     MG_POUTRE* MG_GEOMETRIE::get_mg_poutre(unsigned int num)
1946     {
1947     if (!(num<lst_mg_poutre.size()))
1948     {
1949     return NULL;
1950     }
1951     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1952     for (unsigned long j=0;j<num;j++) i++;
1953     return ((*i).second);
1954     }
1955    
1956    
1957     MG_POUTRE* MG_GEOMETRIE::get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
1958     {
1959     it = lst_mg_poutre.begin();
1960     if (it == lst_mg_poutre.end())
1961     return NULL;
1962     return it->second ;
1963     }
1964    
1965     MG_POUTRE* MG_GEOMETRIE::get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
1966     {
1967     it++;
1968     if (it==lst_mg_poutre.end())
1969     return NULL;
1970     return it->second;
1971     }
1972    
1973    
1974     unsigned int MG_GEOMETRIE::get_nb_mg_poutre(void)
1975     {
1976     return lst_mg_poutre.size();
1977     }
1978    
1979    
1980     int MG_GEOMETRIE::supprimer_mg_poutreid(unsigned long num)
1981     {
1982     MG_POUTRE* mgpoutre=get_mg_poutreid(num);
1983     if (mgpoutre==NULL)
1984     {
1985     return FAIL;
1986     }
1987     MG_IDENTIFICATEUR* id=mgpoutre;
1988     LISTE_ENTITE::iterator i=lst_entite.find(id);
1989     lst_entite.erase(i);
1990     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.find(num);
1991     lst_mg_poutre.erase(j);
1992     delete mgpoutre;
1993     return OK;
1994     }
1995    
1996    
1997     int MG_GEOMETRIE::supprimer_mg_poutre(unsigned int num)
1998     {
1999     MG_POUTRE* mgpoutre=get_mg_poutre(num);
2000     if (mgpoutre==NULL)
2001     {
2002     return FAIL;
2003     }
2004     MG_IDENTIFICATEUR* id=mgpoutre;
2005     LISTE_ENTITE::iterator i=lst_entite.find(id);
2006     lst_entite.erase(i);
2007     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
2008     for (unsigned int k=0;k<num;k++) j++;
2009     lst_mg_poutre.erase(j);
2010     delete mgpoutre;
2011     return OK;
2012     }
2013    
2014    
2015     void MG_GEOMETRIE::supprimer_tout_mg_poutre(void)
2016     {
2017     while (get_nb_mg_poutre()!=0)
2018     {
2019     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
2020     MG_POUTRE* mgpoutre=(*j).second;
2021     MG_IDENTIFICATEUR* id=mgpoutre;
2022     LISTE_ENTITE::iterator i=lst_entite.find(id);
2023     lst_entite.erase(i);
2024     lst_mg_poutre.erase(j);
2025     delete mgpoutre;
2026     }
2027     }
2028    
2029     int MG_GEOMETRIE::ajouter_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE *mggroupe_topologique)
2030     {
2031     gest->recherche_bonid(*mggroupe_topologique);
2032     MG_IDENTIFICATEUR *id=mggroupe_topologique;
2033     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
2034     if (!p.second)
2035     {
2036     return FAIL;
2037     }
2038    
2039     std::pair<const unsigned long,MG_GROUPE_TOPOLOGIQUE*> tmp(mggroupe_topologique->get_id(),mggroupe_topologique);
2040     lst_mg_groupe_topologique.insert(tmp);
2041     return OK;
2042     }
2043    
2044    
2045     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologiqueid(unsigned long num)
2046     {
2047     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.find(num);
2048     if (i==lst_mg_groupe_topologique.end())
2049     {
2050     return NULL;
2051     }
2052     return ((*i).second);
2053     }
2054    
2055    
2056    
2057     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologique(unsigned int num)
2058     {
2059     if (!(num<lst_mg_groupe_topologique.size()))
2060     {
2061     return NULL;
2062     }
2063     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.begin();
2064     for (unsigned long j=0;j<num;j++) i++;
2065     return ((*i).second);
2066     }
2067    
2068    
2069     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_premier_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
2070     {
2071     it = lst_mg_groupe_topologique.begin();
2072     if (it == lst_mg_groupe_topologique.end())
2073     return NULL;
2074     return it->second ;
2075     }
2076    
2077     MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_suivant_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
2078     {
2079     it++;
2080     if (it==lst_mg_groupe_topologique.end())
2081     return NULL;
2082     return it->second;
2083     }
2084    
2085    
2086     unsigned int MG_GEOMETRIE::get_nb_mg_groupe_topologique(void)
2087     {
2088     return lst_mg_groupe_topologique.size();
2089     }
2090    
2091    
2092     int MG_GEOMETRIE::supprimer_mg_groupe_topologiqueid(unsigned long num)
2093     {
2094     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologiqueid(num);
2095     if (mggroupe_topologique==NULL)
2096     {
2097     return FAIL;
2098     }
2099     MG_IDENTIFICATEUR* id=mggroupe_topologique;
2100     LISTE_ENTITE::iterator i=lst_entite.find(id);
2101     lst_entite.erase(i);
2102     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.find(num);
2103     lst_mg_groupe_topologique.erase(j);
2104     delete mggroupe_topologique;
2105     return OK;
2106     }
2107    
2108    
2109     int MG_GEOMETRIE::supprimer_mg_groupe_topologique(unsigned int num)
2110     {
2111     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologique(num);
2112     if (mggroupe_topologique==NULL)
2113     {
2114     return FAIL;
2115     }
2116     MG_IDENTIFICATEUR* id=mggroupe_topologique;
2117     LISTE_ENTITE::iterator i=lst_entite.find(id);
2118     lst_entite.erase(i);
2119     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
2120     for (unsigned int k=0;k<num;k++) j++;
2121     lst_mg_groupe_topologique.erase(j);
2122     delete mggroupe_topologique;
2123     return OK;
2124     }
2125    
2126    
2127     void MG_GEOMETRIE::supprimer_tout_mg_groupe_topologique(void)
2128     {
2129     while (get_nb_mg_groupe_topologique()!=0)
2130     {
2131     LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
2132     MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=(*j).second;
2133     MG_IDENTIFICATEUR* id=mggroupe_topologique;
2134     LISTE_ENTITE::iterator i=lst_entite.find(id);
2135     lst_entite.erase(i);
2136     lst_mg_groupe_topologique.erase(j);
2137     delete mggroupe_topologique;
2138     }
2139     }
2140    
2141 francois 711 int MG_GEOMETRIE::ajouter_mg_geom_fonction(MG_GEOM_FONCTION *mggeomfon)
2142     {
2143     gest->recherche_bonid(*mggeomfon);
2144     MG_IDENTIFICATEUR *id=mggeomfon;
2145     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
2146     if (!p.second)
2147     {
2148     return FAIL;
2149     }
2150 francois 283
2151 francois 711 std::pair<const unsigned long,MG_GEOM_FONCTION*> tmp(mggeomfon->get_id(),mggeomfon);
2152     lst_mg_geom_fonction.insert(tmp);
2153     return OK;
2154     }
2155    
2156    
2157     MG_GEOM_FONCTION* MG_GEOMETRIE::get_mg_geom_fonctionid(unsigned long num)
2158     {
2159     LISTE_MG_GEOM_FONCTION::iterator i=lst_mg_geom_fonction.find(num);
2160     if (i==lst_mg_geom_fonction.end())
2161     {
2162     return NULL;
2163     }
2164     return ((*i).second);
2165     }
2166    
2167    
2168    
2169     MG_GEOM_FONCTION* MG_GEOMETRIE::get_mg_geom_fonction(unsigned int num)
2170     {
2171     if (!(num<lst_mg_geom_fonction.size()))
2172     {
2173     return NULL;
2174     }
2175     LISTE_MG_GEOM_FONCTION::iterator i=lst_mg_geom_fonction.begin();
2176     for (unsigned long j=0;j<num;j++) i++;
2177     return ((*i).second);
2178     }
2179    
2180    
2181     MG_GEOM_FONCTION* MG_GEOMETRIE::get_premier_geom_fonction(LISTE_MG_GEOM_FONCTION::iterator &it)
2182     {
2183     it = lst_mg_geom_fonction.begin();
2184     if (it == lst_mg_geom_fonction.end())
2185     return NULL;
2186     return it->second ;
2187     }
2188    
2189     MG_GEOM_FONCTION* MG_GEOMETRIE::get_suivant_geom_fonction(LISTE_MG_GEOM_FONCTION::iterator &it)
2190     {
2191     it++;
2192     if (it==lst_mg_geom_fonction.end())
2193     return NULL;
2194     return it->second;
2195     }
2196    
2197    
2198     unsigned int MG_GEOMETRIE::get_nb_mg_geom_fonction(void)
2199     {
2200     return lst_mg_geom_fonction.size();
2201     }
2202    
2203    
2204     int MG_GEOMETRIE::supprimer_mg_geom_fonctionid(unsigned long num)
2205     {
2206     MG_GEOM_FONCTION* mggeomfon=get_mg_geom_fonctionid(num);
2207     if (mggeomfon==NULL)
2208     {
2209     return FAIL;
2210     }
2211     MG_IDENTIFICATEUR* id=mggeomfon;
2212     LISTE_ENTITE::iterator i=lst_entite.find(id);
2213     lst_entite.erase(i);
2214     LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.find(num);
2215     lst_mg_geom_fonction.erase(j);
2216     delete mggeomfon;
2217     return OK;
2218     }
2219    
2220    
2221     int MG_GEOMETRIE::supprimer_mg_geom_fonction(unsigned int num)
2222     {
2223     MG_GEOM_FONCTION* mggeomfon=get_mg_geom_fonction(num);
2224     if (mggeomfon==NULL)
2225     {
2226     return FAIL;
2227     }
2228     MG_IDENTIFICATEUR* id=mggeomfon;
2229     LISTE_ENTITE::iterator i=lst_entite.find(id);
2230     lst_entite.erase(i);
2231     LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.begin();
2232     for (unsigned int k=0;k<num;k++) j++;
2233     lst_mg_geom_fonction.erase(j);
2234     delete mggeomfon;
2235     return OK;
2236     }
2237    
2238    
2239     void MG_GEOMETRIE::supprimer_tout_mg_geom_fonction(void)
2240     {
2241     while (get_nb_mg_geom_fonction()!=0)
2242     {
2243     LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.begin();
2244     MG_GEOM_FONCTION* mggeomfon=(*j).second;
2245     MG_IDENTIFICATEUR* id=mggeomfon;
2246     LISTE_ENTITE::iterator i=lst_entite.find(id);
2247     lst_entite.erase(i);
2248     lst_mg_geom_fonction.erase(j);
2249     delete mggeomfon;
2250     }
2251     }
2252    
2253    
2254 couturad 906
2255 francois 283
2256     int MG_GEOMETRIE::ajouter_mg_visu_courbe(MG_VISU_COURBE *mgvcrb)
2257     {
2258     gest->recherche_bonidvisuel(*mgvcrb);
2259     std::pair<const unsigned long,MG_VISU_COURBE*> tmp(mgvcrb->get_id(),mgvcrb);
2260     lst_mg_visu_courbe.insert(tmp);
2261     return OK;
2262     }
2263    
2264    
2265     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbeid(unsigned long num)
2266     {
2267     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.find(num);
2268     if (i==lst_mg_visu_courbe.end())
2269     {
2270     return NULL;
2271     }
2272     return ((*i).second);
2273     }
2274    
2275    
2276    
2277     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbe(unsigned int num)
2278     {
2279     if (!(num<lst_mg_visu_courbe.size()))
2280     {
2281     return NULL;
2282     }
2283     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.begin();
2284    
2285     for (unsigned long j=0;j<num;j++) i++;
2286     return ((*i).second);
2287     }
2288    
2289    
2290    
2291     unsigned int MG_GEOMETRIE::get_nb_mg_visu_courbe(void)
2292     {
2293     return lst_mg_visu_courbe.size();
2294     }
2295    
2296 couturad 906 MG_VISU_COURBE* MG_GEOMETRIE::get_premier_visu_courbe(LISTE_MG_VISU_COURBE::iterator& it)
2297     {
2298     it = lst_mg_visu_courbe.begin();
2299     if (it == lst_mg_visu_courbe.end())
2300     return NULL;
2301     return it->second ;
2302     }
2303 francois 283
2304 couturad 906 MG_VISU_COURBE* MG_GEOMETRIE::get_suivant_visu_courbe(LISTE_MG_VISU_COURBE::iterator& it)
2305     {
2306     it++;
2307     if (it == lst_mg_visu_courbe.end())
2308     return NULL;
2309     return it->second ;
2310     }
2311    
2312    
2313    
2314 francois 283 int MG_GEOMETRIE::supprimer_mg_visu_courbeid(unsigned long num)
2315     {
2316     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbeid(num);
2317     if (mgvcrb==NULL)
2318     {
2319     return FAIL;
2320     }
2321     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.find(num);
2322     lst_mg_visu_courbe.erase(j);
2323     delete mgvcrb;
2324     return OK;
2325     }
2326    
2327    
2328     int MG_GEOMETRIE::supprimer_mg_visu_courbe(unsigned int num)
2329     {
2330     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbe(num);
2331     if (mgvcrb==NULL)
2332     {
2333     return FAIL;
2334     }
2335     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
2336     for (unsigned int k=0;k<num;k++) j++;
2337     lst_mg_visu_courbe.erase(j);
2338     delete mgvcrb;
2339     return OK;
2340     }
2341    
2342     void MG_GEOMETRIE::supprimer_tout_mg_visu_courbe(void)
2343     {
2344     while (get_nb_mg_visu_courbe()!=0)
2345     {
2346     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
2347     MG_VISU_COURBE* mgvcrb=(*j).second;
2348     lst_mg_visu_courbe.erase(j);
2349     delete mgvcrb;
2350     }
2351     }
2352    
2353 couturad 906 int MG_GEOMETRIE::ajouter_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique)
2354     {
2355     switch(mg_element_topologique->get_type())
2356     {
2357     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
2358     ajouter_mg_sommet((MG_SOMMET*)mg_element_topologique); break;
2359     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
2360     ajouter_mg_arete((MG_ARETE*)mg_element_topologique); break;
2361     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
2362     ajouter_mg_face((MG_FACE*)mg_element_topologique); break;
2363     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
2364     ajouter_mg_coque((MG_COQUE*)mg_element_topologique); break;
2365     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
2366     ajouter_mg_poutre((MG_POUTRE*)mg_element_topologique); break;
2367     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
2368     ajouter_mg_volume((MG_VOLUME*)mg_element_topologique); break;
2369     }
2370 francois 1075 return 0;
2371    
2372 couturad 906 }
2373 francois 283
2374 couturad 906 int MG_GEOMETRIE::ajouter_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique)
2375     {
2376     switch(mg_element_cotopologique->get_type())
2377     {
2378     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
2379     ajouter_mg_cosommet((MG_COSOMMET*)mg_element_cotopologique); break;
2380     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
2381     ajouter_mg_coarete((MG_COARETE*)mg_element_cotopologique); break;
2382     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
2383     ajouter_mg_boucle((MG_BOUCLE*)mg_element_cotopologique); break;
2384     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
2385     ajouter_mg_coface((MG_COFACE*)mg_element_cotopologique); break;
2386     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
2387     ajouter_mg_coquille((MG_COQUILLE*)mg_element_cotopologique); break;
2388     }
2389 francois 1075 return 0;
2390    
2391 couturad 906 }
2392    
2393     int MG_GEOMETRIE::ajouter_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE* mg_element_geometrique)
2394     {
2395     switch(mg_element_geometrique->get_type())
2396     {
2397     case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
2398     ajouter_mg_point((MG_POINT*)mg_element_geometrique); break;
2399     case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
2400     ajouter_mg_courbe((MG_COURBE*)mg_element_geometrique); break;
2401     case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
2402     ajouter_mg_surface((MG_SURFACE*)mg_element_geometrique); break;
2403     }
2404 francois 1075 return 0;
2405 couturad 906 }
2406    
2407     int MG_GEOMETRIE::supprimer_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique)
2408     {
2409     switch(mg_element_topologique->get_type())
2410     {
2411     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
2412     supprimer_mg_sommetid(mg_element_topologique->get_id()); break;
2413     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
2414     supprimer_mg_areteid(mg_element_topologique->get_id()); break;
2415     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
2416     supprimer_mg_faceid(mg_element_topologique->get_id()); break;
2417     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
2418     supprimer_mg_coqueid(mg_element_topologique->get_id()); break;
2419     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
2420     supprimer_mg_poutreid(mg_element_topologique->get_id()); break;
2421     case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
2422     supprimer_mg_volumeid(mg_element_topologique->get_id()); break;
2423     }
2424 francois 1075 return 0;
2425 couturad 906 }
2426    
2427     int MG_GEOMETRIE::supprimer_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique)
2428     {
2429     switch(mg_element_cotopologique->get_type())
2430     {
2431     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
2432     supprimer_mg_cosommetid(mg_element_cotopologique->get_id()); break;
2433     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
2434     supprimer_mg_coareteid(mg_element_cotopologique->get_id()); break;
2435     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
2436     supprimer_mg_boucleid(mg_element_cotopologique->get_id()); break;
2437     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
2438     supprimer_mg_cofaceid(mg_element_cotopologique->get_id()); break;
2439     case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
2440     supprimer_mg_coquilleid(mg_element_cotopologique->get_id()); break;
2441     }
2442 francois 1075 return 0;
2443    
2444 couturad 906 }
2445    
2446     int MG_GEOMETRIE::supprimer_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE* mg_element_geometrique)
2447     {
2448     switch(mg_element_geometrique->get_type())
2449     {
2450     case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
2451     supprimer_mg_pointid(mg_element_geometrique->get_id()); break;
2452     case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
2453     supprimer_mg_courbeid(mg_element_geometrique->get_id()); break;
2454     case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
2455     supprimer_mg_surfaceid(mg_element_geometrique->get_id()); break;
2456     }
2457 francois 1075 return 0;
2458 couturad 906 }
2459    
2460    
2461     MG_ELEMENT_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_element_topologiqueid(long int num)
2462     {
2463     MG_ELEMENT_TOPOLOGIQUE* ele;
2464     if(get_mg_sommetid(num)!=NULL)
2465     {
2466     ele = get_mg_sommetid(num);
2467     return ele;
2468     }
2469     else if(get_mg_areteid(num)!=NULL)
2470     {
2471     ele = get_mg_areteid(num);
2472     return ele;
2473     }
2474     else if(get_mg_faceid(num)!=NULL)
2475     {
2476     ele = get_mg_faceid(num);
2477     return ele;
2478     }
2479     else if(get_mg_volumeid(num)!=NULL)
2480     {
2481     ele = get_mg_volumeid(num);
2482     return ele;
2483     }
2484     else if(get_mg_poutreid(num)!=NULL)
2485     {
2486     ele = get_mg_poutreid(num);
2487     return ele;
2488     }
2489     else if(get_mg_coqueid(num)!=NULL)
2490     {
2491     ele = get_mg_coqueid(num);
2492     return ele;
2493     }
2494     else return NULL;
2495     }
2496    
2497     MG_ELEMENT_COTOPOLOGIQUE* MG_GEOMETRIE::get_mg_element_cotopologiqueid(long int num)
2498     {
2499     MG_ELEMENT_COTOPOLOGIQUE* ele;
2500     if(get_mg_cosommetid(num)!=NULL)
2501     {
2502     ele = get_mg_cosommetid(num);
2503     return ele;
2504     }
2505     else if(get_mg_coareteid(num)!=NULL)
2506     {
2507     ele = get_mg_coareteid(num);
2508     return ele;
2509     }
2510     else if(get_mg_boucleid(num)!=NULL)
2511     {
2512     ele = get_mg_boucleid(num);
2513     return ele;
2514     }
2515     else if(get_mg_cofaceid(num)!=NULL)
2516     {
2517     ele = get_mg_cofaceid(num);
2518     return ele;
2519     }
2520     else if(get_mg_coquilleid(num)!=NULL)
2521     {
2522     ele = get_mg_coquilleid(num);
2523     return ele;
2524     }
2525     else return NULL;
2526     }
2527    
2528    
2529     void MG_GEOMETRIE::remplir_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE* mg_groupe_topologique)
2530     {
2531     LISTE_MG_SOMMET::iterator it_sommet;
2532     for(MG_SOMMET* sommet=get_premier_sommet(it_sommet);sommet!=NULL;sommet=get_suivant_sommet(it_sommet)) mg_groupe_topologique->ajouter(sommet);
2533     LISTE_MG_ARETE::iterator it_arete;
2534     for(MG_ARETE* arete=get_premier_arete(it_arete);arete!=NULL;arete=get_suivant_arete(it_arete)) mg_groupe_topologique->ajouter(arete);
2535     LISTE_MG_FACE::iterator it_face;
2536     for(MG_FACE* face=get_premier_face(it_face);face!=NULL;face=get_suivant_face(it_face)) mg_groupe_topologique->ajouter(face);
2537     LISTE_MG_VOLUME::iterator it_volume;
2538     for(MG_VOLUME* volume=get_premier_volume(it_volume);volume!=NULL;volume=get_suivant_volume(it_volume)) mg_groupe_topologique->ajouter(volume);
2539     LISTE_MG_COQUE::iterator it_coque;
2540     for(MG_COQUE* coque=get_premier_coque(it_coque);coque!=NULL;coque=get_suivant_coque(it_coque)) mg_groupe_topologique->ajouter(coque);
2541     LISTE_MG_POUTRE::iterator it_poutre;
2542     for(MG_POUTRE* poutre=get_premier_poutre(it_poutre);poutre!=NULL;poutre=get_suivant_poutre(it_poutre)) mg_groupe_topologique->ajouter(poutre);
2543     }
2544    
2545    
2546 francois 283
2547 francois 763 void MG_GEOMETRIE::enregistrer(std::ostream& o,double version)
2548 francois 283 {
2549 couturad 908 #ifdef ALL_OCC
2550 couturad 906 if(strcmp(type_geo,"OCCV2017")==0)
2551     {
2552     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)fonction1;
2553 couturad 919 occ_fonction_v2017->enregistrer_fichier_OCAF(nom_du_fichier,this);
2554 couturad 906 }
2555 couturad 919 #endif
2556     if(!geometrie_construction)
2557     {
2558     if (nom_du_fichier==NULL) o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo ;
2559     else o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
2560     }
2561     else o << "%" << get_id() << "=CONSTRUCTION(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
2562 francois 283 if (gest_materiau!="") o << "," << gest_materiau.c_str() ;
2563     o << ");" << std::endl;
2564 francois 295 o << "%" << get_id() << "=GEOMETRIE_EPS(" << precision << ");" << std::endl;
2565 francois 283 LISTE_ENTITE::const_iterator i;
2566     for (i=lst_entite.begin();i!=lst_entite.end();i++)
2567 francois 763 (*i)->enregistrer(o,version);
2568 francois 283 }
2569    
2570 francois 910 void MG_GEOMETRIE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
2571     {
2572 couturad 919 liste_fichier.push_back(nom_du_fichier);
2573 francois 910 LISTE_ENTITE::const_iterator i;
2574     for (i=lst_entite.begin();i!=lst_entite.end();i++)
2575     (*i)->get_fichier_dependant(liste_fichier);
2576     }
2577 francois 283
2578     char* MG_GEOMETRIE::get_nom_du_fichier(void)
2579     {
2580     return nom_du_fichier;
2581     }
2582    
2583     char* MG_GEOMETRIE::get_type_geometrie(void)
2584     {
2585     return type_geo;
2586     }
2587    
2588 francois 775 bool MG_GEOMETRIE::est_virtuelle(void)
2589     {
2590     bool res=false;
2591     std::string type=get_type_geometrie();
2592     OT_CHAINE ot;
2593     type=ot.upcase(type);
2594     if (type=="VIRTUEL") res=true;
2595     return res;
2596     }
2597 francois 283
2598     void MG_GEOMETRIE::cree_entite_visuel(double facteur)
2599     {
2600     supprimer_tout_mg_visu_courbe();
2601     int nbarete=get_nb_mg_arete();
2602     for (int i=0;i<nbarete;i++)
2603     {
2604     MG_ARETE* mgarete=get_mg_arete(i);
2605     double xyz1[3];
2606     double tmin=mgarete->get_tmin();
2607     double tmax=mgarete->get_tmax();
2608     mgarete->evaluer(tmin,xyz1);
2609     int nb_pas=(int)(20.*facteur);
2610     for (int j=1;j<nb_pas+1;j++)
2611     {
2612     double t=tmin+j*(tmax-tmin)/nb_pas;
2613     double xyz2[3];
2614     mgarete->evaluer(t,xyz2);
2615     MG_VISU_COURBE* mgvisucourbe=new MG_VISU_COURBE(xyz1,xyz2);
2616     ajouter_mg_visu_courbe(mgvisucourbe);
2617     xyz1[0]=xyz2[0];
2618     xyz1[1]=xyz2[1];
2619     xyz1[2]=xyz2[2];
2620     }
2621     }
2622     }
2623    
2624     std::ostream& operator << (std::ostream& o,MG_GEOMETRIE& geo)
2625     {
2626 francois 763 geo.enregistrer(o,VERSIONFICHIER);
2627 francois 283 return o;
2628     }
2629    
2630    
2631    
2632     void MG_GEOMETRIE::change_gest_materiau(char* nom)
2633     {
2634     gest_materiau=nom;
2635     }
2636    
2637     char* MG_GEOMETRIE::get_gest_materiau(void)
2638     {
2639     return (char*)gest_materiau.c_str();
2640     }
2641    
2642     double MG_GEOMETRIE::get_valeur_precision(void)
2643     {
2644     return precision;
2645     }
2646    
2647     void MG_GEOMETRIE::change_valeur_precision(double val)
2648     {
2649     precision=val;
2650     }
2651    
2652     double MG_GEOMETRIE::get_valeur_unite(void)
2653     {
2654     return valeur_unite;
2655     }
2656    
2657     void MG_GEOMETRIE::change_valeur_unite(double val)
2658     {
2659     valeur_unite=val;
2660     }
2661    
2662    
2663    
2664     void MG_GEOMETRIE::construit_vectorisation(void)
2665     {
2666     LISTE_MG_FACE::iterator itface;
2667     for (MG_FACE* face=get_premier_face(itface);face!=NULL;face=get_suivant_face(itface))
2668     face->get_vectorisation();
2669     LISTE_MG_ARETE::iterator itarete;
2670     for (MG_ARETE* arete=get_premier_arete(itarete);arete!=NULL;arete=get_suivant_arete(itarete))
2671     arete->get_vectorisation();
2672     LISTE_MG_SOMMET::iterator itsommet;
2673     for (MG_SOMMET* som=get_premier_sommet(itsommet);som!=NULL;som=get_suivant_sommet(itsommet))
2674     som->get_vectorisation();
2675     LISTE_MG_SURFACE::iterator itsurface;
2676     for (MG_SURFACE* surface=get_premier_surface(itsurface);surface!=NULL;surface=get_suivant_surface(itsurface))
2677     surface->get_vectorisation();
2678     LISTE_MG_COURBE::iterator itcourbe;
2679     for (MG_COURBE* courb=get_premier_courbe(itcourbe);courb!=NULL;courb=get_suivant_courbe(itcourbe))
2680     courb->get_vectorisation();
2681     LISTE_MG_POINT::iterator itpoint;
2682     for (MG_POINT* point=get_premier_point(itpoint);point!=NULL;point=get_suivant_point(itpoint))
2683     point->get_vectorisation();
2684     }
2685 couturad 740
2686    
2687     #ifdef BREP_SAT
2688     SAT_GESTIONNAIRE& MG_GEOMETRIE::get_gest_sat(void)
2689     {
2690     return fichsat;
2691     }
2692     #endif
2693     #ifdef BREP_STEP
2694     ST_GESTIONNAIRE& MG_GEOMETRIE::get_gest_step(void)
2695     {
2696     return fichstep;
2697     }
2698     #endif
2699    
2700     #ifdef BREP_OCC
2701     OCC_FONCTION& MG_GEOMETRIE::get_occ_fonction(void)
2702     {
2703     return *fonction1;
2704     }
2705     #endif
2706 couturad 919
2707     bool MG_GEOMETRIE::est_construction(void)
2708     {
2709     return geometrie_construction;
2710     }
2711    
2712     void MG_GEOMETRIE::change_est_construction(bool val)
2713     {
2714     geometrie_construction=val;
2715     }
2716    
2717 francois 984 void MG_GEOMETRIE::efface_ccf(bool volume, bool face, bool arete, bool sommet)
2718     {
2719     if (volume)
2720     {
2721     LISTE_MG_VOLUME::iterator it;
2722     for (MG_VOLUME* vol=get_premier_volume(it);vol!=NULL;vol=get_suivant_volume(it))
2723     {
2724     while (vol->get_nb_ccf()>0)
2725     vol->supprimer_ccf(0);
2726     }
2727     }
2728     if (face)
2729     {
2730     LISTE_MG_FACE::iterator it;
2731     for (MG_FACE* fac=get_premier_face(it);fac!=NULL;fac=get_suivant_face(it))
2732     {
2733     while (fac->get_nb_ccf()>0)
2734     fac->supprimer_ccf(0);
2735     }
2736     }
2737     if (arete)
2738     {
2739     LISTE_MG_ARETE::iterator it;
2740     for (MG_ARETE* are=get_premier_arete(it);are!=NULL;are=get_suivant_arete(it))
2741     {
2742     while (are->get_nb_ccf()>0)
2743     are->supprimer_ccf(0);
2744     }
2745     }
2746     if (sommet)
2747     {
2748     LISTE_MG_SOMMET::iterator it;
2749     for (MG_SOMMET* som=get_premier_sommet(it);som!=NULL;som=get_suivant_sommet(it))
2750     {
2751     while (som->get_nb_ccf()>0)
2752     som->supprimer_ccf(0);
2753     }
2754     }
2755     }