ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 908
Committed: Tue Nov 21 15:33:21 2017 UTC (7 years, 5 months ago) by couturad
File size: 73867 byte(s)
Log Message:
Ajout des "#ifdef ALL_OCC" manquant

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