ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 919
Committed: Tue Mar 6 17:51:54 2018 UTC (7 years, 2 months ago) by couturad
File size: 74472 byte(s)
Log Message:
Correction des bugs lors de l'execution en mode RELWITHDEBINFO.
Ajouts de fichiers pour la librairie MICROSTRUCTURE

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