ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 951
Committed: Fri Aug 10 15:17:17 2018 UTC (6 years, 9 months ago) by couturad
File size: 74449 byte(s)
Log Message:
-> Ajout de Project Chrono (voir CMakeLists.txt).
-> Ajout d'un générateur de microstructure basé sur la dynamique des corps rigides (MSTRUCT_GENERATEUR_DCR).
-> Ajout d'un opérateur de décallage de la topologie (MG_CG_OP_TRANSF_DECALLAGE).
-> Retrait de «using namespace std»  (conflit avec namespace chrono) et modification des fichiers affectés.
-> Modification de mailleur2d.cpp afin d'enregistrer un fichier MAGiC (void.magic) lorsque le nombre d'itération dépasse la valeur maximale.

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