ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 906
Committed: Mon Nov 13 22:30:18 2017 UTC (7 years, 6 months ago) by couturad
File size: 73856 byte(s)
Log Message:
Nouveau opencascade commit 1

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