ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 187
Committed: Tue Jul 7 21:34:10 2009 UTC (15 years, 10 months ago) by francois
Original Path: magic/lib/geometrie/geometrie/src/mg_geometrie.cpp
File size: 45788 byte(s)
Log Message:
Parametre epsilon global pour la sensibilite de fermeture du BREP sous OpenCascade

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
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 francois 169 #include <string.h>
28 5
29    
30     #include "mg_geometrie.h"
31     #include "mg_gestionnaire.h"
32     //#include "affiche.h"
33     //#include "message.h"
34    
35    
36     //using namespace std;
37    
38 francois 187 MG_GEOMETRIE::MG_GEOMETRIE(char *type,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(),gest_materiau(""),valeur_unite(unite),precision(eps)
39 5 {
40     nom_du_fichier=new char[strlen(nom)+1];
41     strcpy(nom_du_fichier,nom);
42     strcpy(type_geo,type);
43     }
44    
45    
46    
47 francois 187 MG_GEOMETRIE::MG_GEOMETRIE(char *type,unsigned long num,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(num),valeur_unite(unite),precision(eps)
48 5 {
49     nom_du_fichier=new char[strlen(nom)+1];
50     strcpy(nom_du_fichier,nom);
51     strcpy(type_geo,type);
52     }
53    
54    
55    
56     MG_GEOMETRIE::~MG_GEOMETRIE()
57     {
58     supprimer_tout_mg_volume();
59     supprimer_tout_mg_coquille();
60     supprimer_tout_mg_face();
61     supprimer_tout_mg_boucle();
62     supprimer_tout_mg_arete();
63     supprimer_tout_mg_sommet();
64     supprimer_tout_mg_point();
65     supprimer_tout_mg_courbe();
66     supprimer_tout_mg_surface();
67     supprimer_tout_mg_visu_courbe();
68    
69     if (nom_du_fichier!=NULL) delete [] nom_du_fichier;
70    
71     }
72    
73    
74     void MG_GEOMETRIE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
75     {
76     gest=mggest;
77     }
78    
79    
80    
81     // ENTITE MG_POINT
82    
83     int MG_GEOMETRIE::ajouter_mg_point(MG_POINT *mgpt)
84     {
85     gest->recherche_bonid(*mgpt);
86     MG_IDENTIFICATEUR *id=mgpt;
87     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
88     if (!p.second)
89     {
90     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
91     return FAIL;
92     }
93    
94     std::pair<const unsigned long,MG_POINT*> tmp(mgpt->get_id(),mgpt);
95     lst_mg_point.insert(tmp);
96     return OK;
97     }
98    
99    
100     MG_POINT* MG_GEOMETRIE::get_mg_pointid(unsigned long num)
101     {
102     LISTE_MG_POINT::iterator i=lst_mg_point.find(num);
103     if (i==lst_mg_point.end())
104     {
105     // afficheur << INEXISTE << enderr;
106     return NULL;
107     }
108     return ((*i).second);
109     }
110    
111    
112    
113     MG_POINT* MG_GEOMETRIE::get_mg_point(unsigned int num)
114     {
115     if (!(num<lst_mg_point.size()))
116     {
117     // afficheur << INEXISTE << enderr;
118     return NULL;
119     }
120     LISTE_MG_POINT::iterator i=lst_mg_point.begin();
121     for (unsigned long j=0;j<num;j++) i++;
122     return ((*i).second);
123     }
124    
125    
126    
127     unsigned int MG_GEOMETRIE::get_nb_mg_point(void)
128     {
129     return lst_mg_point.size();
130     }
131    
132    
133     int MG_GEOMETRIE::supprimer_mg_pointid(unsigned long num)
134     {
135     MG_POINT* mgpt=get_mg_pointid(num);
136     if (mgpt==NULL)
137     {
138     // afficheur << INEXISTE2 << enderr;
139     return FAIL;
140     }
141     MG_IDENTIFICATEUR* id=mgpt;
142     LISTE_ENTITE::iterator i=lst_entite.find(id);
143     lst_entite.erase(i);
144     LISTE_MG_POINT::iterator j=lst_mg_point.find(num);
145     lst_mg_point.erase(j);
146     delete mgpt;
147     return OK;
148     }
149    
150    
151     int MG_GEOMETRIE::supprimer_mg_point(unsigned int num)
152     {
153     MG_POINT* mgpt=get_mg_point(num);
154     if (mgpt==NULL)
155     {
156     // afficheur << INEXISTE2 << enderr;
157     return FAIL;
158     }
159     MG_IDENTIFICATEUR* id=mgpt;
160     LISTE_ENTITE::iterator i=lst_entite.find(id);
161     lst_entite.erase(i);
162     LISTE_MG_POINT::iterator j=lst_mg_point.begin();
163     for (unsigned int k=0;k<num;k++) j++;
164     lst_mg_point.erase(j);
165     delete mgpt;
166     return OK;
167     }
168    
169    
170     void MG_GEOMETRIE::supprimer_tout_mg_point(void)
171     {
172     while (get_nb_mg_point()!=0)
173     {
174     LISTE_MG_POINT::iterator j=lst_mg_point.begin();
175     MG_POINT* mgpt=(*j).second;
176     MG_IDENTIFICATEUR* id=mgpt;
177     LISTE_ENTITE::iterator i=lst_entite.find(id);
178     lst_entite.erase(i);
179     lst_mg_point.erase(j);
180     delete mgpt;
181     }
182     }
183    
184     MG_POINT* MG_GEOMETRIE::get_premier_point(LISTE_MG_POINT::iterator &it)
185     {
186     it = lst_mg_point.begin();
187     if (it == lst_mg_point.end())
188     return NULL;
189     return it->second ;
190     }
191    
192     MG_POINT* MG_GEOMETRIE::get_suivant_point(LISTE_MG_POINT::iterator &it)
193     {
194     it++;
195     if(it==lst_mg_point.end())
196     return NULL;
197     return it->second;
198     }
199    
200    
201     // ENTITE MG_COURBE
202    
203     int MG_GEOMETRIE::ajouter_mg_courbe(MG_COURBE *mgcrb)
204     {
205     gest->recherche_bonid(*mgcrb);
206     MG_IDENTIFICATEUR *id=mgcrb;
207     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
208     if (!p.second)
209     {
210     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
211     return FAIL;
212     }
213     std::pair<const unsigned long,MG_COURBE*> tmp(mgcrb->get_id(),mgcrb);
214     lst_mg_courbe.insert(tmp);
215     return OK;
216     }
217    
218    
219     MG_COURBE* MG_GEOMETRIE::get_mg_courbeid(unsigned long num)
220     {
221     LISTE_MG_COURBE::iterator i=lst_mg_courbe.find(num);
222     if (i==lst_mg_courbe.end())
223     {
224     // afficheur << INEXISTE << enderr;
225     return NULL;
226     }
227     return ((*i).second);
228     }
229    
230    
231    
232     MG_COURBE* MG_GEOMETRIE::get_mg_courbe(unsigned int num)
233     {
234     if (!(num<lst_mg_courbe.size()))
235     {
236     // afficheur << INEXISTE << enderr;
237     return NULL;
238     }
239     LISTE_MG_COURBE::iterator i=lst_mg_courbe.begin();
240    
241     for (unsigned long j=0;j<num;j++) i++;
242     return ((*i).second);
243     }
244    
245    
246    
247     unsigned int MG_GEOMETRIE::get_nb_mg_courbe(void)
248     {
249     return lst_mg_courbe.size();
250     }
251    
252    
253     int MG_GEOMETRIE::supprimer_mg_courbeid(unsigned long num)
254     {
255     MG_COURBE* mgcrb=get_mg_courbeid(num);
256     if (mgcrb==NULL)
257     {
258     // afficheur << INEXISTE2 << enderr;
259     return FAIL;
260     }
261     MG_IDENTIFICATEUR* id=mgcrb;
262     LISTE_ENTITE::iterator i=lst_entite.find(id);
263     lst_entite.erase(i);
264     LISTE_MG_COURBE::iterator j=lst_mg_courbe.find(num);
265     lst_mg_courbe.erase(j);
266     delete mgcrb;
267     return OK;
268     }
269    
270    
271     int MG_GEOMETRIE::supprimer_mg_courbe(unsigned int num)
272     {
273     MG_COURBE* mgcrb=get_mg_courbe(num);
274     if (mgcrb==NULL)
275     {
276     // afficheur << INEXISTE2 << enderr;
277     return FAIL;
278     }
279     MG_IDENTIFICATEUR* id=mgcrb;
280     LISTE_ENTITE::iterator i=lst_entite.find(id);
281     lst_entite.erase(i);
282     LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
283     for (unsigned int k=0;k<num;k++) j++;
284     lst_mg_courbe.erase(j);
285     delete mgcrb;
286     return OK;
287     }
288    
289     void MG_GEOMETRIE::supprimer_tout_mg_courbe(void)
290     {
291     while (get_nb_mg_courbe()!=0)
292     {
293     LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
294     MG_COURBE* mgcrb=(*j).second;
295     MG_IDENTIFICATEUR* id=mgcrb;
296     LISTE_ENTITE::iterator i=lst_entite.find(id);
297     lst_entite.erase(i);
298     lst_mg_courbe.erase(j);
299     delete mgcrb;
300     }
301     }
302    
303     MG_COURBE* MG_GEOMETRIE::get_premier_courbe(LISTE_MG_COURBE::iterator &it)
304     {
305     it = lst_mg_courbe.begin();
306     if (it == lst_mg_courbe.end())
307     return NULL;
308     return it->second ;
309     }
310    
311     MG_COURBE* MG_GEOMETRIE::get_suivant_courbe(LISTE_MG_COURBE::iterator &it)
312     {
313     it++;
314     if(it==lst_mg_courbe.end())
315     return NULL;
316     return it->second;
317     }
318    
319    
320    
321    
322     // ENTITE MG_SURFACE
323    
324     int MG_GEOMETRIE::ajouter_mg_surface(MG_SURFACE *mgsrf)
325     {
326     gest->recherche_bonid(*mgsrf);
327     MG_IDENTIFICATEUR *id=mgsrf;
328     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
329     if (!p.second)
330     {
331     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
332     return FAIL;
333     }
334    
335     std::pair<const unsigned long,MG_SURFACE*> tmp(mgsrf->get_id(),mgsrf);
336     lst_mg_surface.insert(tmp);
337     return OK;
338     }
339    
340    
341     MG_SURFACE* MG_GEOMETRIE::get_mg_surfaceid(unsigned long num)
342     {
343     LISTE_MG_SURFACE::iterator i=lst_mg_surface.find(num);
344     if (i==lst_mg_surface.end())
345     {
346     // afficheur << INEXISTE << enderr;
347     return NULL;
348     }
349     return ((*i).second);
350     }
351    
352    
353    
354     MG_SURFACE* MG_GEOMETRIE::get_mg_surface(unsigned int num)
355     {
356     if (!(num<lst_mg_surface.size()))
357     {
358     // afficheur << INEXISTE << enderr;
359     return NULL;
360     }
361     LISTE_MG_SURFACE::iterator i=lst_mg_surface.begin();
362     for (unsigned long j=0;j<num;j++) i++;
363     return ((*i).second);
364     }
365    
366    
367    
368     unsigned int MG_GEOMETRIE::get_nb_mg_surface(void)
369     {
370     return lst_mg_surface.size();
371     }
372    
373    
374     int MG_GEOMETRIE::supprimer_mg_surfaceid(unsigned long num)
375     {
376     MG_SURFACE* mgsrf=get_mg_surfaceid(num);
377     if (mgsrf==NULL)
378     {
379     // afficheur << INEXISTE2 << enderr;
380     return FAIL;
381     }
382     MG_IDENTIFICATEUR* id=mgsrf;
383     LISTE_ENTITE::iterator i=lst_entite.find(id);
384     lst_entite.erase(i);
385     LISTE_MG_SURFACE::iterator j=lst_mg_surface.find(num);
386     lst_mg_surface.erase(j);
387     delete mgsrf;
388     return OK;
389     }
390    
391    
392     int MG_GEOMETRIE::supprimer_mg_surface(unsigned int num)
393     {
394     MG_SURFACE* mgsrf=get_mg_surface(num);
395     if (mgsrf==NULL)
396     {
397     // afficheur << INEXISTE2 << enderr;
398     return FAIL;
399     }
400     MG_IDENTIFICATEUR* id=mgsrf;
401     LISTE_ENTITE::iterator i=lst_entite.find(id);
402     lst_entite.erase(i);
403     LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
404     for (unsigned int k=0;k<num;k++) j++;
405     lst_mg_surface.erase(j);
406     delete mgsrf;
407     return OK;
408     }
409    
410    
411     void MG_GEOMETRIE::supprimer_tout_mg_surface(void)
412     {
413     while (get_nb_mg_surface()!=0)
414     {
415     LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
416     MG_SURFACE* mgsrf=(*j).second;
417     MG_IDENTIFICATEUR* id=mgsrf;
418     LISTE_ENTITE::iterator i=lst_entite.find(id);
419     lst_entite.erase(i);
420     lst_mg_surface.erase(j);
421     delete mgsrf;
422     }
423     }
424    
425     MG_SURFACE* MG_GEOMETRIE::get_premier_surface(LISTE_MG_SURFACE::iterator &it)
426     {
427     it = lst_mg_surface.begin();
428     if (it == lst_mg_surface.end())
429     return NULL;
430     return it->second ;
431     }
432    
433     MG_SURFACE* MG_GEOMETRIE::get_suivant_surface(LISTE_MG_SURFACE::iterator &it)
434     {
435     it++;
436     if(it==lst_mg_surface.end())
437     return NULL;
438     return it->second;
439     }
440    
441    
442    
443    
444     // ENTITE MG_SOMMET
445    
446     int MG_GEOMETRIE::ajouter_mg_sommet(MG_SOMMET *mgsom)
447     {
448     gest->recherche_bonid(*mgsom);
449     MG_IDENTIFICATEUR *id=mgsom;
450     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
451     if (!p.second)
452     {
453     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
454     return FAIL;
455     }
456    
457     std::pair<const unsigned long,MG_SOMMET*> tmp(mgsom->get_id(),mgsom);
458     lst_mg_sommet.insert(tmp);
459     return OK;
460     }
461    
462    
463     MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(unsigned long num)
464     {
465     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.find(num);
466     if (i==lst_mg_sommet.end())
467     {
468     // afficheur << INEXISTE << enderr;
469     return NULL;
470     }
471     return ((*i).second);
472     }
473    
474     MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(std::string id)
475     {
476     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
477     int nb=lst_mg_sommet.size();
478     for (int j=0;j<nb;j++)
479     {
480     MG_SOMMET* sommet=(*i).second;
481     std::string idori=sommet->get_idoriginal();
482     if (idori==id) return sommet;
483     i++;
484     }
485     return NULL;
486     }
487    
488    
489    
490     MG_SOMMET* MG_GEOMETRIE::get_mg_sommet(unsigned int num)
491     {
492     if (!(num<lst_mg_sommet.size()))
493     {
494     // afficheur << INEXISTE << enderr;
495     return NULL;
496     }
497     LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
498     for (unsigned long j=0;j<num;j++) i++;
499     return ((*i).second);
500     }
501    
502    
503    
504     unsigned int MG_GEOMETRIE::get_nb_mg_sommet(void)
505     {
506     return lst_mg_sommet.size();
507     }
508    
509    
510     int MG_GEOMETRIE::supprimer_mg_sommetid(unsigned long num)
511     {
512     MG_SOMMET* mgsom=get_mg_sommetid(num);
513     if (mgsom==NULL)
514     {
515     // afficheur << INEXISTE2 << enderr;
516     return FAIL;
517     }
518     if (mgsom->get_nb_mg_cosommet()!=0)
519     {
520     // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
521     return FAIL;
522     }
523     MG_IDENTIFICATEUR* id=mgsom;
524     LISTE_ENTITE::iterator i=lst_entite.find(id);
525     lst_entite.erase(i);
526     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.find(num);
527     lst_mg_sommet.erase(j);
528     delete mgsom;
529     return OK;
530     }
531    
532    
533     int MG_GEOMETRIE::supprimer_mg_sommet(unsigned int num)
534     {
535     MG_SOMMET* mgsom=get_mg_sommet(num);
536     if (mgsom==NULL)
537     {
538     // afficheur << INEXISTE2 << enderr;
539     return FAIL;
540     }
541     if (mgsom->get_nb_mg_cosommet()!=0)
542     {
543     // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
544     return FAIL;
545     }
546     MG_IDENTIFICATEUR* id=mgsom;
547     LISTE_ENTITE::iterator i=lst_entite.find(id);
548     lst_entite.erase(i);
549     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
550     for (unsigned int k=0;k<num;k++) j++;
551     lst_mg_sommet.erase(j);
552     delete mgsom;
553     return OK;
554     }
555    
556    
557     void MG_GEOMETRIE::supprimer_tout_mg_sommet(void)
558     {
559     while (get_nb_mg_sommet()!=0)
560     {
561     LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
562     MG_SOMMET* mgsom=(*j).second;
563     MG_IDENTIFICATEUR* id=mgsom;
564     LISTE_ENTITE::iterator i=lst_entite.find(id);
565     lst_entite.erase(i);
566     lst_mg_sommet.erase(j);
567     delete mgsom;
568     }
569     }
570    
571     MG_SOMMET* MG_GEOMETRIE::get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
572     {
573     it = lst_mg_sommet.begin();
574     if (it == lst_mg_sommet.end())
575     return NULL;
576     return it->second ;
577     }
578    
579     MG_SOMMET* MG_GEOMETRIE::get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
580     {
581     it++;
582     if(it==lst_mg_sommet.end())
583     return NULL;
584     return it->second;
585     }
586    
587    
588     // ENTITE MG_COSOMMET
589    
590    
591     MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(MG_ARETE *mgarete,MG_SOMMET *mgsom)
592     {
593 francois 187 MG_COSOMMET* mgcosom=new MG_COSOMMET(mgsom,mgarete,precision);
594 5 gest->recherche_bonid(*mgcosom);
595     MG_IDENTIFICATEUR *id=mgcosom;
596     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
597     if (!p.second)
598     {
599     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
600     delete mgcosom;
601     return NULL;
602     }
603    
604     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
605     lst_mg_cosommet.insert(tmp);
606     mgsom->ajouter_mg_cosommet(mgcosom);
607     return mgcosom;
608     }
609    
610     MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(unsigned long num,MG_ARETE *mgarete,MG_SOMMET *mgsom)
611     {
612 francois 187 MG_COSOMMET* mgcosom=new MG_COSOMMET(num,mgsom,mgarete,precision);
613 5 MG_IDENTIFICATEUR *id=mgcosom;
614     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
615     if (!p.second)
616     {
617     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
618     delete mgcosom;
619     return NULL;
620     }
621    
622     std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
623     lst_mg_cosommet.insert(tmp);
624     mgsom->ajouter_mg_cosommet(mgcosom);
625     return mgcosom;
626     }
627    
628     int MG_GEOMETRIE::supprimer_mg_cosommet(MG_COSOMMET* mgcosom)
629     {
630     if (mgcosom==NULL)
631     {
632     // afficheur << INEXISTE2 << enderr;
633     return FAIL;
634     }
635     MG_IDENTIFICATEUR* id=mgcosom;
636     LISTE_ENTITE::iterator i=lst_entite.find(id);
637     lst_entite.erase(i);
638     LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(mgcosom->get_id());
639     lst_mg_cosommet.erase(j);
640     mgcosom->get_sommet()->supprimer_mg_cosommet(mgcosom);
641     delete mgcosom;
642     return OK;
643     }
644    
645     // ENTITE MG_ARETE
646    
647     int MG_GEOMETRIE::ajouter_mg_arete(MG_ARETE *mgarete)
648     {
649     gest->recherche_bonid(*mgarete);
650     MG_IDENTIFICATEUR *id=mgarete;
651     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
652     if (!p.second)
653     {
654     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
655     return FAIL;
656     }
657    
658     std::pair<const unsigned long,MG_ARETE*> tmp(mgarete->get_id(),mgarete);
659     lst_mg_arete.insert(tmp);
660     return OK;
661     }
662    
663    
664     MG_ARETE* MG_GEOMETRIE::get_mg_areteid(unsigned long num)
665     {
666     LISTE_MG_ARETE::iterator i=lst_mg_arete.find(num);
667     if (i==lst_mg_arete.end())
668     {
669     // afficheur << INEXISTE << enderr;
670     return NULL;
671     }
672     return ((*i).second);
673     }
674    
675     MG_ARETE* MG_GEOMETRIE::get_mg_areteid(std::string id)
676     {
677     LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
678     int nb=lst_mg_arete.size();
679     for (int j=0;j<nb;j++)
680     {
681     MG_ARETE* arete=(*i).second;
682     std::string idori=arete->get_idoriginal();
683     if (idori==id) return arete;
684     i++;
685     }
686     return NULL;
687     }
688    
689    
690     MG_ARETE* MG_GEOMETRIE::get_mg_arete(unsigned int num)
691     {
692     if (!(num<lst_mg_arete.size()))
693     {
694     // afficheur << INEXISTE << enderr;
695     return NULL;
696     }
697     LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
698     for (unsigned long j=0;j<num;j++) i++;
699     return ((*i).second);
700     }
701    
702    
703    
704     unsigned int MG_GEOMETRIE::get_nb_mg_arete(void)
705     {
706     return lst_mg_arete.size();
707     }
708    
709    
710     int MG_GEOMETRIE::supprimer_mg_areteid(unsigned long num)
711     {
712     MG_ARETE* mgarete=get_mg_areteid(num);
713     if (mgarete==NULL)
714     {
715     // afficheur << INEXISTE2 << enderr;
716     return FAIL;
717     }
718     if (mgarete->get_nb_mg_coarete()!=0)
719     {
720     // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
721     return FAIL;
722     }
723     MG_IDENTIFICATEUR* id=mgarete;
724     LISTE_ENTITE::iterator i=lst_entite.find(id);
725     lst_entite.erase(i);
726     LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
727     lst_mg_arete.erase(j);
728     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
729     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
730     supprimer_mg_cosommet(cosom1);
731     supprimer_mg_cosommet(cosom2);
732     delete mgarete;
733     return OK;
734     }
735    
736    
737     int MG_GEOMETRIE::supprimer_mg_arete(unsigned int num)
738     {
739     MG_ARETE* mgarete=get_mg_arete(num);
740     if (mgarete==NULL)
741     {
742     // afficheur << INEXISTE2 << enderr;
743     return FAIL;
744     }
745     if (mgarete->get_nb_mg_coarete()!=0)
746     {
747     // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
748     return FAIL;
749     }
750     MG_IDENTIFICATEUR* id=mgarete;
751     LISTE_ENTITE::iterator i=lst_entite.find(id);
752     lst_entite.erase(i);
753     LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
754     lst_mg_arete.erase(j);
755     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
756     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
757     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
758     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
759     supprimer_mg_cosommet(cosom1);
760     supprimer_mg_cosommet(cosom2);
761     delete mgarete;
762     return OK;
763     }
764    
765    
766     void MG_GEOMETRIE::supprimer_tout_mg_arete(void)
767     {
768     while (get_nb_mg_arete()!=0)
769     {
770     LISTE_MG_ARETE::iterator j=lst_mg_arete.begin();
771     MG_ARETE* mgarete=(*j).second;
772     MG_IDENTIFICATEUR* id=mgarete;
773     LISTE_ENTITE::iterator i=lst_entite.find(id);
774     lst_entite.erase(i);
775     lst_mg_arete.erase(j);
776     MG_COSOMMET* cosom1=mgarete->get_cosommet1();
777     MG_COSOMMET* cosom2=mgarete->get_cosommet2();
778     cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
779     cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
780     supprimer_mg_cosommet(cosom1);
781     supprimer_mg_cosommet(cosom2);
782     delete mgarete;
783     }
784     }
785    
786     MG_ARETE* MG_GEOMETRIE::get_premier_arete(LISTE_MG_ARETE::iterator &it)
787     {
788     it = lst_mg_arete.begin();
789     if (it == lst_mg_arete.end())
790     return NULL;
791     return it->second ;
792     }
793    
794     MG_ARETE* MG_GEOMETRIE::get_suivant_arete(LISTE_MG_ARETE::iterator &it)
795     {
796     it++;
797     if(it==lst_mg_arete.end())
798     return NULL;
799     return it->second;
800     }
801    
802    
803     // ENTITE MG_COARETE
804    
805     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
806     {
807     MG_COARETE* mgcoarete=new MG_COARETE(mgarete,mgboucle,sens);
808     gest->recherche_bonid(*mgcoarete);
809     MG_IDENTIFICATEUR *id=mgcoarete;
810     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
811     if (!p.second)
812     {
813     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
814     delete mgcoarete;
815     return NULL;
816     }
817    
818     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
819     lst_mg_coarete.insert(tmp);
820     mgarete->ajouter_mg_coarete(mgcoarete);
821     return mgcoarete;
822     }
823    
824    
825     MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(unsigned long num,MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
826     {
827     MG_COARETE* mgcoarete=new MG_COARETE(num,mgarete,mgboucle,sens);
828     MG_IDENTIFICATEUR *id=mgcoarete;
829     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
830     if (!p.second)
831     {
832     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
833     delete mgcoarete;
834     return NULL;
835     }
836    
837     std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
838     lst_mg_coarete.insert(tmp);
839     mgarete->ajouter_mg_coarete(mgcoarete);
840     return mgcoarete;
841     }
842    
843     int MG_GEOMETRIE::supprimer_mg_coarete(MG_COARETE* mgcoarete)
844     {
845     if (mgcoarete==NULL)
846     {
847     // afficheur << INEXISTE2 << enderr;
848     return FAIL;
849     }
850     MG_IDENTIFICATEUR* id=mgcoarete;
851     LISTE_ENTITE::iterator i=lst_entite.find(id);
852     lst_entite.erase(i);
853     LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(mgcoarete->get_id());
854     lst_mg_coarete.erase(j);
855     mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
856     delete mgcoarete;
857     return OK;
858     }
859    
860     // ENTITE MG_BOUCLE
861    
862     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_POUTRE* mgpoutre)
863     {
864     gest->recherche_bonid(*mgboucle);
865     MG_IDENTIFICATEUR *id=mgboucle;
866     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
867     if (!p.second)
868     {
869     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
870     return FAIL;
871     }
872    
873     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
874     lst_mg_boucle.insert(tmp);
875     mgpoutre->ajouter_mg_boucle(mgboucle);
876     return OK;
877     }
878    
879    
880     int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_FACE* mgface)
881     {
882     gest->recherche_bonid(*mgboucle);
883     MG_IDENTIFICATEUR *id=mgboucle;
884     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
885     if (!p.second)
886     {
887     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
888     return FAIL;
889     }
890    
891     std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
892     lst_mg_boucle.insert(tmp);
893     mgface->ajouter_mg_boucle(mgboucle);
894     return OK;
895     }
896    
897    
898     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucleid(unsigned long num)
899     {
900     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.find(num);
901     if (i==lst_mg_boucle.end())
902     {
903     // afficheur << INEXISTE << enderr;
904     return NULL;
905     }
906     return ((*i).second);
907     }
908    
909    
910    
911     MG_BOUCLE* MG_GEOMETRIE::get_mg_boucle(unsigned int num)
912     {
913     if (!(num<lst_mg_boucle.size()))
914     {
915     // afficheur << INEXISTE << enderr;
916     return NULL;
917     }
918     LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.begin();
919     for (unsigned long j=0;j<num;j++) i++;
920     return ((*i).second);
921     }
922    
923    
924    
925     unsigned int MG_GEOMETRIE::get_nb_mg_boucle(void)
926     {
927     return lst_mg_boucle.size();
928     }
929    
930    
931     int MG_GEOMETRIE::supprimer_mg_boucleid(unsigned long num)
932     {
933     MG_BOUCLE* mgboucle=get_mg_boucleid(num);
934     if (mgboucle==NULL)
935     {
936     // afficheur << INEXISTE2 << enderr;
937     return FAIL;
938     }
939     MG_IDENTIFICATEUR* id=mgboucle;
940     LISTE_ENTITE::iterator i=lst_entite.find(id);
941     lst_entite.erase(i);
942     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.find(num);
943     lst_mg_boucle.erase(j);
944     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
945     {
946     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
947     supprimer_mg_coarete(coarete);
948     }
949     delete mgboucle;
950     return OK;
951     }
952    
953    
954     int MG_GEOMETRIE::supprimer_mg_boucle(unsigned int num)
955     {
956     MG_BOUCLE* mgboucle=get_mg_boucle(num);
957     if (mgboucle==NULL)
958     {
959     // afficheur << INEXISTE2 << enderr;
960     return FAIL;
961     }
962     MG_IDENTIFICATEUR* id=mgboucle;
963     LISTE_ENTITE::iterator i=lst_entite.find(id);
964     lst_entite.erase(i);
965     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
966     for (unsigned int k=0;k<num;k++) j++;
967     lst_mg_boucle.erase(j);
968     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
969     {
970     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
971     supprimer_mg_coarete(coarete);
972     }
973     delete mgboucle;
974     return OK;
975     }
976    
977    
978     void MG_GEOMETRIE::supprimer_tout_mg_boucle(void)
979     {
980     while (get_nb_mg_boucle()!=0)
981     {
982     LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
983     MG_BOUCLE* mgboucle=(*j).second;
984     MG_IDENTIFICATEUR* id=mgboucle;
985     LISTE_ENTITE::iterator i=lst_entite.find(id);
986     lst_entite.erase(i);
987     lst_mg_boucle.erase(j);
988     for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
989     {
990     MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
991     supprimer_mg_coarete(coarete);
992     }
993     delete mgboucle;
994     }
995     }
996    
997     MG_BOUCLE* MG_GEOMETRIE::get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
998     {
999     it = lst_mg_boucle.begin();
1000     if (it == lst_mg_boucle.end())
1001     return NULL;
1002     return it->second ;
1003     }
1004    
1005     MG_BOUCLE* MG_GEOMETRIE::get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
1006     {
1007     it++;
1008     if(it==lst_mg_boucle.end())
1009     return NULL;
1010     return it->second;
1011     }
1012    
1013    
1014     // ENTITE MG_FACE
1015    
1016     int MG_GEOMETRIE::ajouter_mg_face(MG_FACE *mgface)
1017     {
1018     gest->recherche_bonid(*mgface);
1019     MG_IDENTIFICATEUR *id=mgface;
1020     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1021     if (!p.second)
1022     {
1023     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1024     return FAIL;
1025     }
1026    
1027     std::pair<const unsigned long,MG_FACE*> tmp(mgface->get_id(),mgface);
1028     lst_mg_face.insert(tmp);
1029     return OK;
1030     }
1031    
1032    
1033     MG_FACE* MG_GEOMETRIE::get_mg_faceid(unsigned long num)
1034     {
1035     LISTE_MG_FACE::iterator i=lst_mg_face.find(num);
1036     if (i==lst_mg_face.end())
1037     {
1038     // afficheur << INEXISTE << enderr;
1039     return NULL;
1040     }
1041     return ((*i).second);
1042     }
1043    
1044     MG_FACE* MG_GEOMETRIE::get_mg_faceid(std::string id)
1045     {
1046     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1047     int nb=lst_mg_face.size();
1048     for (int j=0;j<nb;j++)
1049     {
1050     MG_FACE* face=(*i).second;
1051     std::string idori=face->get_idoriginal();
1052     if (idori==id) return face;
1053     i++;
1054     }
1055     return NULL;
1056     }
1057    
1058    
1059     MG_FACE* MG_GEOMETRIE::get_mg_face(unsigned int num)
1060     {
1061     if (!(num<lst_mg_face.size()))
1062     {
1063     // afficheur << INEXISTE << enderr;
1064     return NULL;
1065     }
1066     LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1067     for (unsigned long j=0;j<num;j++) i++;
1068     return ((*i).second);
1069     }
1070    
1071    
1072    
1073     unsigned int MG_GEOMETRIE::get_nb_mg_face(void)
1074     {
1075     return lst_mg_face.size();
1076     }
1077    
1078    
1079     int MG_GEOMETRIE::supprimer_mg_faceid(unsigned long num)
1080     {
1081     MG_FACE* mgface=get_mg_faceid(num);
1082     if (mgface==NULL)
1083     {
1084     // afficheur << INEXISTE2 << enderr;
1085     return FAIL;
1086     }
1087     if (mgface->get_nb_mg_coface()!=0)
1088     {
1089     // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1090     return FAIL;
1091     }
1092     MG_IDENTIFICATEUR* id=mgface;
1093     LISTE_ENTITE::iterator i=lst_entite.find(id);
1094     lst_entite.erase(i);
1095     LISTE_MG_FACE::iterator j=lst_mg_face.find(num);
1096     lst_mg_face.erase(j);
1097     delete mgface;
1098     return OK;
1099     }
1100    
1101    
1102     int MG_GEOMETRIE::supprimer_mg_face(unsigned int num)
1103     {
1104     MG_FACE* mgface=get_mg_face(num);
1105     if (mgface==NULL)
1106     {
1107     // afficheur << INEXISTE2 << enderr;
1108     return FAIL;
1109     }
1110     if (mgface->get_nb_mg_coface()!=0)
1111     {
1112     // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1113     return FAIL;
1114     }
1115     MG_IDENTIFICATEUR* id=mgface;
1116     LISTE_ENTITE::iterator i=lst_entite.find(id);
1117     lst_entite.erase(i);
1118     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1119     for (unsigned int k=0;k<num;k++) j++;
1120     lst_mg_face.erase(j);
1121     delete mgface;
1122     return OK;
1123     }
1124    
1125    
1126     void MG_GEOMETRIE::supprimer_tout_mg_face(void)
1127     {
1128    
1129     while (get_nb_mg_face()!=0)
1130     {
1131     LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1132     MG_FACE* mgface=(*j).second;
1133     MG_IDENTIFICATEUR* id=mgface;
1134     LISTE_ENTITE::iterator i=lst_entite.find(id);
1135     lst_entite.erase(i);
1136     lst_mg_face.erase(j);
1137     delete mgface;
1138     }
1139     }
1140    
1141     MG_FACE* MG_GEOMETRIE::get_premier_face(LISTE_MG_FACE::iterator &it)
1142     {
1143     it = lst_mg_face.begin();
1144     if (it == lst_mg_face.end())
1145     return NULL;
1146     return it->second ;
1147     }
1148    
1149     MG_FACE* MG_GEOMETRIE::get_suivant_face(LISTE_MG_FACE::iterator &it)
1150     {
1151     it++;
1152     if(it==lst_mg_face.end())
1153     return NULL;
1154     return it->second;
1155     }
1156    
1157    
1158     // ENTITE MG_COFACE
1159    
1160    
1161     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1162     {
1163     MG_COFACE* mgcoface=new MG_COFACE(mgface,mgcoq,sens);
1164     gest->recherche_bonid(*mgcoface);
1165     MG_IDENTIFICATEUR *id=mgcoface;
1166     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1167     if (!p.second)
1168     {
1169     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1170     delete mgcoface;
1171     return NULL;
1172     }
1173    
1174     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1175     lst_mg_coface.insert(tmp);
1176     mgface->ajouter_mg_coface(mgcoface);
1177     return mgcoface;
1178     }
1179    
1180    
1181     MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(unsigned long num,MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1182     {
1183     MG_COFACE* mgcoface=new MG_COFACE(num,mgface,mgcoq,sens);
1184     MG_IDENTIFICATEUR *id=mgcoface;
1185     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1186     if (!p.second)
1187     {
1188     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1189     delete mgcoface;
1190     return NULL;
1191     }
1192    
1193     std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1194     lst_mg_coface.insert(tmp);
1195     mgface->ajouter_mg_coface(mgcoface);
1196     return mgcoface;
1197     }
1198    
1199     int MG_GEOMETRIE::supprimer_mg_coface(MG_COFACE* mgcoface)
1200     {
1201     if (mgcoface==NULL)
1202     {
1203     // afficheur << INEXISTE2 << enderr;
1204     return FAIL;
1205     }
1206     MG_IDENTIFICATEUR* id=mgcoface;
1207     LISTE_ENTITE::iterator i=lst_entite.find(id);
1208     lst_entite.erase(i);
1209     LISTE_MG_COFACE::iterator j=lst_mg_coface.find(mgcoface->get_id());
1210     lst_mg_coface.erase(j);
1211     mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1212     delete mgcoface;
1213     return OK;
1214     }
1215    
1216     // ENTITE MG_COQUILLE
1217    
1218     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoq,MG_COQUE *mgcoque)
1219     {
1220     gest->recherche_bonid(*mgcoq);
1221     MG_IDENTIFICATEUR *id=mgcoq;
1222     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1223     if (!p.second)
1224     {
1225     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1226     return FAIL;
1227     }
1228    
1229     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1230     lst_mg_coquille.insert(tmp);
1231     mgcoque->ajouter_mg_coquille(mgcoq);
1232     return OK;
1233     }
1234    
1235    
1236     int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoquille,MG_VOLUME* mgvolume)
1237     {
1238     gest->recherche_bonid(*mgcoquille);
1239     MG_IDENTIFICATEUR *id=mgcoquille;
1240     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1241     if (!p.second)
1242     {
1243     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1244     return FAIL;
1245     }
1246    
1247     std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoquille->get_id(),mgcoquille);
1248     lst_mg_coquille.insert(tmp);
1249     mgvolume->ajouter_mg_coquille(mgcoquille);
1250     return OK;
1251     }
1252    
1253    
1254     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquilleid(unsigned long num)
1255     {
1256     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.find(num);
1257     if (i==lst_mg_coquille.end())
1258     {
1259     // afficheur << INEXISTE << enderr;
1260     return NULL;
1261     }
1262     return ((*i).second);
1263     }
1264    
1265    
1266    
1267     MG_COQUILLE* MG_GEOMETRIE::get_mg_coquille(unsigned int num)
1268     {
1269     if (!(num<lst_mg_coquille.size()))
1270     {
1271     // afficheur << INEXISTE << enderr;
1272     return NULL;
1273     }
1274     LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.begin();
1275     for (unsigned long j=0;j<num;j++) i++;
1276     return ((*i).second);
1277     }
1278    
1279     MG_COQUILLE* MG_GEOMETRIE::get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
1280     {
1281     it = lst_mg_coquille.begin();
1282     if (it == lst_mg_coquille.end())
1283     return NULL;
1284     return it->second ;
1285     }
1286    
1287     MG_COQUILLE* MG_GEOMETRIE::get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
1288     {
1289     it++;
1290     if(it==lst_mg_coquille.end())
1291     return NULL;
1292     return it->second;
1293     }
1294    
1295    
1296     unsigned int MG_GEOMETRIE::get_nb_mg_coquille(void)
1297     {
1298     return lst_mg_coquille.size();
1299     }
1300    
1301    
1302     int MG_GEOMETRIE::supprimer_mg_coquilleid(unsigned long num)
1303     {
1304     MG_COQUILLE* mgcoquille=get_mg_coquilleid(num);
1305     if (mgcoquille==NULL)
1306     {
1307     // afficheur << INEXISTE2 << enderr;
1308     return FAIL;
1309     }
1310     MG_IDENTIFICATEUR* id=mgcoquille;
1311     LISTE_ENTITE::iterator i=lst_entite.find(id);
1312     lst_entite.erase(i);
1313     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.find(num);
1314     lst_mg_coquille.erase(j);
1315     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1316     {
1317     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1318     supprimer_mg_coface(coface);
1319     }
1320     delete mgcoquille;
1321     return OK;
1322     }
1323    
1324    
1325     int MG_GEOMETRIE::supprimer_mg_coquille(unsigned int num)
1326     {
1327     MG_COQUILLE* mgcoquille=get_mg_coquille(num);
1328     if (mgcoquille==NULL)
1329     {
1330     // afficheur << INEXISTE2 << enderr;
1331     return FAIL;
1332     }
1333     MG_IDENTIFICATEUR* id=mgcoquille;
1334     LISTE_ENTITE::iterator i=lst_entite.find(id);
1335     lst_entite.erase(i);
1336     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1337     for (unsigned int k=0;k<num;k++) j++;
1338     lst_mg_coquille.erase(j);
1339     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1340     {
1341     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1342     supprimer_mg_coface(coface);
1343     }
1344     delete mgcoquille;
1345     return OK;
1346     }
1347    
1348    
1349     void MG_GEOMETRIE::supprimer_tout_mg_coquille(void)
1350     {
1351     while (get_nb_mg_coquille()!=0)
1352     {
1353     LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1354     MG_COQUILLE* mgcoquille=(*j).second;
1355     MG_IDENTIFICATEUR* id=mgcoquille;
1356     LISTE_ENTITE::iterator i=lst_entite.find(id);
1357     lst_entite.erase(i);
1358     lst_mg_coquille.erase(j);
1359     for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1360     {
1361     MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1362     supprimer_mg_coface(coface);
1363     }
1364     delete mgcoquille;
1365     }
1366     }
1367    
1368    
1369     // ENTITE MG_VOLUME
1370    
1371     int MG_GEOMETRIE::ajouter_mg_volume(MG_VOLUME *mgvolume)
1372     {
1373     gest->recherche_bonid(*mgvolume);
1374     MG_IDENTIFICATEUR *id=mgvolume;
1375     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1376     if (!p.second)
1377     {
1378     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1379     return FAIL;
1380     }
1381    
1382     std::pair<const unsigned long,MG_VOLUME*> tmp(mgvolume->get_id(),mgvolume);
1383     lst_mg_volume.insert(tmp);
1384     return OK;
1385     }
1386    
1387    
1388     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(unsigned long num)
1389     {
1390     LISTE_MG_VOLUME::iterator i=lst_mg_volume.find(num);
1391     if (i==lst_mg_volume.end())
1392     {
1393     // afficheur << INEXISTE << enderr;
1394     return NULL;
1395     }
1396     return ((*i).second);
1397     }
1398    
1399     MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(std::string id)
1400     {
1401     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1402     int nb=lst_mg_volume.size();
1403     for (int j=0;j<nb;j++)
1404     {
1405     MG_VOLUME* volume=(*i).second;
1406     std::string idori=volume->get_idoriginal();
1407     if (idori==id) return volume;
1408     i++;
1409     }
1410     return NULL;
1411     }
1412    
1413    
1414     MG_VOLUME* MG_GEOMETRIE::get_mg_volume(unsigned int num)
1415     {
1416     if (!(num<lst_mg_volume.size()))
1417     {
1418     // afficheur << INEXISTE << enderr;
1419     return NULL;
1420     }
1421     LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1422     for (unsigned long j=0;j<num;j++) i++;
1423     return ((*i).second);
1424     }
1425    
1426     MG_VOLUME* MG_GEOMETRIE::get_premier_volume(LISTE_MG_VOLUME::iterator &it)
1427     {
1428     it = lst_mg_volume.begin();
1429     if (it == lst_mg_volume.end())
1430     return NULL;
1431     return it->second ;
1432     }
1433    
1434     MG_VOLUME* MG_GEOMETRIE::get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
1435     {
1436     it++;
1437     if(it==lst_mg_volume.end())
1438     return NULL;
1439     return it->second;
1440     }
1441    
1442    
1443    
1444     unsigned int MG_GEOMETRIE::get_nb_mg_volume(void)
1445     {
1446     return lst_mg_volume.size();
1447     }
1448    
1449    
1450     int MG_GEOMETRIE::supprimer_mg_volumeid(unsigned long num)
1451     {
1452     MG_VOLUME* mgvolume=get_mg_volumeid(num);
1453     if (mgvolume==NULL)
1454     {
1455     // afficheur << INEXISTE2 << enderr;
1456     return FAIL;
1457     }
1458     MG_IDENTIFICATEUR* id=mgvolume;
1459     LISTE_ENTITE::iterator i=lst_entite.find(id);
1460     lst_entite.erase(i);
1461     LISTE_MG_VOLUME::iterator j=lst_mg_volume.find(num);
1462     lst_mg_volume.erase(j);
1463     delete mgvolume;
1464     return OK;
1465     }
1466    
1467    
1468     int MG_GEOMETRIE::supprimer_mg_volume(unsigned int num)
1469     {
1470     MG_VOLUME* mgvolume=get_mg_volume(num);
1471     if (mgvolume==NULL)
1472     {
1473     // afficheur << INEXISTE2 << enderr;
1474     return FAIL;
1475     }
1476     MG_IDENTIFICATEUR* id=mgvolume;
1477     LISTE_ENTITE::iterator i=lst_entite.find(id);
1478     lst_entite.erase(i);
1479     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1480     for (unsigned int k=0;k<num;k++) j++;
1481     lst_mg_volume.erase(j);
1482     delete mgvolume;
1483     return OK;
1484     }
1485    
1486    
1487     void MG_GEOMETRIE::supprimer_tout_mg_volume(void)
1488     {
1489     while (get_nb_mg_volume()!=0)
1490     {
1491     LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1492     MG_VOLUME* mgvolume=(*j).second;
1493     MG_IDENTIFICATEUR* id=mgvolume;
1494     LISTE_ENTITE::iterator i=lst_entite.find(id);
1495     lst_entite.erase(i);
1496     lst_mg_volume.erase(j);
1497     delete mgvolume;
1498     }
1499     }
1500    
1501     // ENTITE MG_COQUE
1502    
1503     int MG_GEOMETRIE::ajouter_mg_coque(MG_COQUE *mgcoque)
1504     {
1505     gest->recherche_bonid(*mgcoque);
1506     MG_IDENTIFICATEUR *id=mgcoque;
1507     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1508     if (!p.second)
1509     {
1510     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1511     return FAIL;
1512     }
1513    
1514     std::pair<const unsigned long,MG_COQUE*> tmp(mgcoque->get_id(),mgcoque);
1515     lst_mg_coque.insert(tmp);
1516     return OK;
1517     }
1518    
1519    
1520     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(unsigned long num)
1521     {
1522     LISTE_MG_COQUE::iterator i=lst_mg_coque.find(num);
1523     if (i==lst_mg_coque.end())
1524     {
1525     // afficheur << INEXISTE << enderr;
1526     return NULL;
1527     }
1528     return ((*i).second);
1529     }
1530    
1531     MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(std::string id)
1532     {
1533     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1534     int nb=lst_mg_coque.size();
1535     for (int j=0;j<nb;j++)
1536     {
1537     MG_COQUE* coque=(*i).second;
1538     std::string idori=coque->get_idoriginal();
1539     if (idori==id) return coque;
1540     i++;
1541     }
1542     return NULL;
1543     }
1544    
1545    
1546     MG_COQUE* MG_GEOMETRIE::get_mg_coque(unsigned int num)
1547     {
1548     if (!(num<lst_mg_coque.size()))
1549     {
1550     // afficheur << INEXISTE << enderr;
1551     return NULL;
1552     }
1553     LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1554     for (unsigned long j=0;j<num;j++) i++;
1555     return ((*i).second);
1556     }
1557    
1558    
1559     MG_COQUE* MG_GEOMETRIE::get_premier_coque(LISTE_MG_COQUE::iterator &it)
1560     {
1561     it = lst_mg_coque.begin();
1562     if (it == lst_mg_coque.end())
1563     return NULL;
1564     return it->second ;
1565     }
1566    
1567     MG_COQUE* MG_GEOMETRIE::get_suivant_coque(LISTE_MG_COQUE::iterator &it)
1568     {
1569     it++;
1570     if(it==lst_mg_coque.end())
1571     return NULL;
1572     return it->second;
1573     }
1574    
1575    
1576     unsigned int MG_GEOMETRIE::get_nb_mg_coque(void)
1577     {
1578     return lst_mg_coque.size();
1579     }
1580    
1581    
1582     int MG_GEOMETRIE::supprimer_mg_coqueid(unsigned long num)
1583     {
1584     MG_COQUE* mgcoque=get_mg_coqueid(num);
1585     if (mgcoque==NULL)
1586     {
1587     // afficheur << INEXISTE2 << enderr;
1588     return FAIL;
1589     }
1590     MG_IDENTIFICATEUR* id=mgcoque;
1591     LISTE_ENTITE::iterator i=lst_entite.find(id);
1592     lst_entite.erase(i);
1593     LISTE_MG_COQUE::iterator j=lst_mg_coque.find(num);
1594     lst_mg_coque.erase(j);
1595     delete mgcoque;
1596     return OK;
1597     }
1598    
1599    
1600     int MG_GEOMETRIE::supprimer_mg_coque(unsigned int num)
1601     {
1602     MG_COQUE* mgcoque=get_mg_coque(num);
1603     if (mgcoque==NULL)
1604     {
1605     // afficheur << INEXISTE2 << enderr;
1606     return FAIL;
1607     }
1608     MG_IDENTIFICATEUR* id=mgcoque;
1609     LISTE_ENTITE::iterator i=lst_entite.find(id);
1610     lst_entite.erase(i);
1611     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1612     for (unsigned int k=0;k<num;k++) j++;
1613     lst_mg_coque.erase(j);
1614     delete mgcoque;
1615     return OK;
1616     }
1617    
1618    
1619     void MG_GEOMETRIE::supprimer_tout_mg_coque(void)
1620     {
1621     while (get_nb_mg_coque()!=0)
1622     {
1623     LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1624     MG_COQUE* mgcoque=(*j).second;
1625     MG_IDENTIFICATEUR* id=mgcoque;
1626     LISTE_ENTITE::iterator i=lst_entite.find(id);
1627     lst_entite.erase(i);
1628     lst_mg_coque.erase(j);
1629     delete mgcoque;
1630     }
1631     }
1632    
1633    
1634     // ENTITE MG_POUTRE
1635    
1636     int MG_GEOMETRIE::ajouter_mg_poutre(MG_POUTRE *mgpoutre)
1637     {
1638     gest->recherche_bonid(*mgpoutre);
1639     MG_IDENTIFICATEUR *id=mgpoutre;
1640     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1641     if (!p.second)
1642     {
1643     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1644     return FAIL;
1645     }
1646    
1647     std::pair<const unsigned long,MG_POUTRE*> tmp(mgpoutre->get_id(),mgpoutre);
1648     lst_mg_poutre.insert(tmp);
1649     return OK;
1650     }
1651    
1652    
1653     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(unsigned long num)
1654     {
1655     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.find(num);
1656     if (i==lst_mg_poutre.end())
1657     {
1658     // afficheur << INEXISTE << enderr;
1659     return NULL;
1660     }
1661     return ((*i).second);
1662     }
1663    
1664     MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(std::string id)
1665     {
1666     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1667     int nb=lst_mg_poutre.size();
1668     for (int j=0;j<nb;j++)
1669     {
1670     MG_POUTRE* poutre=(*i).second;
1671     std::string idori=poutre->get_idoriginal();
1672     if (idori==id) return poutre;
1673     i++;
1674     }
1675     return NULL;
1676     }
1677    
1678    
1679     MG_POUTRE* MG_GEOMETRIE::get_mg_poutre(unsigned int num)
1680     {
1681     if (!(num<lst_mg_poutre.size()))
1682     {
1683     // afficheur << INEXISTE << enderr;
1684     return NULL;
1685     }
1686     LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
1687     for (unsigned long j=0;j<num;j++) i++;
1688     return ((*i).second);
1689     }
1690    
1691    
1692     MG_POUTRE* MG_GEOMETRIE::get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
1693     {
1694     it = lst_mg_poutre.begin();
1695     if (it == lst_mg_poutre.end())
1696     return NULL;
1697     return it->second ;
1698     }
1699    
1700     MG_POUTRE* MG_GEOMETRIE::get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
1701     {
1702     it++;
1703     if(it==lst_mg_poutre.end())
1704     return NULL;
1705     return it->second;
1706     }
1707    
1708    
1709     unsigned int MG_GEOMETRIE::get_nb_mg_poutre(void)
1710     {
1711     return lst_mg_poutre.size();
1712     }
1713    
1714    
1715     int MG_GEOMETRIE::supprimer_mg_poutreid(unsigned long num)
1716     {
1717     MG_POUTRE* mgpoutre=get_mg_poutreid(num);
1718     if (mgpoutre==NULL)
1719     {
1720     // afficheur << INEXISTE2 << enderr;
1721     return FAIL;
1722     }
1723     MG_IDENTIFICATEUR* id=mgpoutre;
1724     LISTE_ENTITE::iterator i=lst_entite.find(id);
1725     lst_entite.erase(i);
1726     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.find(num);
1727     lst_mg_poutre.erase(j);
1728     delete mgpoutre;
1729     return OK;
1730     }
1731    
1732    
1733     int MG_GEOMETRIE::supprimer_mg_poutre(unsigned int num)
1734     {
1735     MG_POUTRE* mgpoutre=get_mg_poutre(num);
1736     if (mgpoutre==NULL)
1737     {
1738     // afficheur << INEXISTE2 << enderr;
1739     return FAIL;
1740     }
1741     MG_IDENTIFICATEUR* id=mgpoutre;
1742     LISTE_ENTITE::iterator i=lst_entite.find(id);
1743     lst_entite.erase(i);
1744     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
1745     for (unsigned int k=0;k<num;k++) j++;
1746     lst_mg_poutre.erase(j);
1747     delete mgpoutre;
1748     return OK;
1749     }
1750    
1751    
1752     void MG_GEOMETRIE::supprimer_tout_mg_poutre(void)
1753     {
1754     while (get_nb_mg_poutre()!=0)
1755     {
1756     LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
1757     MG_POUTRE* mgpoutre=(*j).second;
1758     MG_IDENTIFICATEUR* id=mgpoutre;
1759     LISTE_ENTITE::iterator i=lst_entite.find(id);
1760     lst_entite.erase(i);
1761     lst_mg_poutre.erase(j);
1762     delete mgpoutre;
1763     }
1764     }
1765    
1766    
1767     // ENTITE MG_VISU_COURBE
1768    
1769     int MG_GEOMETRIE::ajouter_mg_visu_courbe(MG_VISU_COURBE *mgvcrb)
1770     {
1771     gest->recherche_bonidvisuel(*mgvcrb);
1772     std::pair<const unsigned long,MG_VISU_COURBE*> tmp(mgvcrb->get_id(),mgvcrb);
1773     lst_mg_visu_courbe.insert(tmp);
1774     return OK;
1775     }
1776    
1777    
1778     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbeid(unsigned long num)
1779     {
1780     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.find(num);
1781     if (i==lst_mg_visu_courbe.end())
1782     {
1783     return NULL;
1784     }
1785     return ((*i).second);
1786     }
1787    
1788    
1789    
1790     MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbe(unsigned int num)
1791     {
1792     if (!(num<lst_mg_visu_courbe.size()))
1793     {
1794     return NULL;
1795     }
1796     LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.begin();
1797    
1798     for (unsigned long j=0;j<num;j++) i++;
1799     return ((*i).second);
1800     }
1801    
1802    
1803    
1804     unsigned int MG_GEOMETRIE::get_nb_mg_visu_courbe(void)
1805     {
1806     return lst_mg_visu_courbe.size();
1807     }
1808    
1809    
1810     int MG_GEOMETRIE::supprimer_mg_visu_courbeid(unsigned long num)
1811     {
1812     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbeid(num);
1813     if (mgvcrb==NULL)
1814     {
1815     return FAIL;
1816     }
1817     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.find(num);
1818     lst_mg_visu_courbe.erase(j);
1819     delete mgvcrb;
1820     return OK;
1821     }
1822    
1823    
1824     int MG_GEOMETRIE::supprimer_mg_visu_courbe(unsigned int num)
1825     {
1826     MG_VISU_COURBE* mgvcrb=get_mg_visu_courbe(num);
1827     if (mgvcrb==NULL)
1828     {
1829     return FAIL;
1830     }
1831     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
1832     for (unsigned int k=0;k<num;k++) j++;
1833     lst_mg_visu_courbe.erase(j);
1834     delete mgvcrb;
1835     return OK;
1836     }
1837    
1838     void MG_GEOMETRIE::supprimer_tout_mg_visu_courbe(void)
1839     {
1840     while (get_nb_mg_visu_courbe()!=0)
1841     {
1842     LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
1843     MG_VISU_COURBE* mgvcrb=(*j).second;
1844     lst_mg_visu_courbe.erase(j);
1845     delete mgvcrb;
1846     }
1847     }
1848    
1849    
1850     // FIN DE GESTION DES ENTITES
1851    
1852     void MG_GEOMETRIE::enregistrer(std::ostream& o)
1853     {
1854     if (nom_du_fichier==NULL) o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo ;
1855     else o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
1856     if (gest_materiau!="") o << "," << gest_materiau.c_str() ;
1857     o << ");" << std::endl;
1858 francois 187 o << "%" << get_id() << "=GEOMETRIE_EPS(" << precision << ");" <<endl;
1859 5 LISTE_ENTITE::const_iterator i;
1860     for (i=lst_entite.begin();i!=lst_entite.end();i++)
1861     (*i)->enregistrer(o);
1862     }
1863    
1864    
1865     char* MG_GEOMETRIE::get_nom_du_fichier(void)
1866     {
1867     return nom_du_fichier;
1868     }
1869    
1870     char* MG_GEOMETRIE::get_type_geometrie(void)
1871     {
1872     return type_geo;
1873     }
1874    
1875    
1876    
1877     void MG_GEOMETRIE::cree_entite_visuel(double facteur)
1878     {
1879     supprimer_tout_mg_visu_courbe();
1880     int nbarete=get_nb_mg_arete();
1881     for (int i=0;i<nbarete;i++)
1882     {
1883     MG_ARETE* mgarete=get_mg_arete(i);
1884     double xyz1[3];
1885     double tmin=mgarete->get_tmin();
1886     double tmax=mgarete->get_tmax();
1887     mgarete->evaluer(tmin,xyz1);
1888     int nb_pas=(int)(20.*facteur);
1889     for (int j=1;j<nb_pas+1;j++)
1890     {
1891     double t=tmin+j*(tmax-tmin)/nb_pas;
1892     double xyz2[3];
1893     mgarete->evaluer(t,xyz2);
1894     MG_VISU_COURBE* mgvisucourbe=new MG_VISU_COURBE(xyz1,xyz2);
1895     ajouter_mg_visu_courbe(mgvisucourbe);
1896     xyz1[0]=xyz2[0];
1897     xyz1[1]=xyz2[1];
1898     xyz1[2]=xyz2[2];
1899     }
1900     }
1901     }
1902    
1903     std::ostream& operator << (std::ostream& o,MG_GEOMETRIE& geo)
1904     {
1905     geo.enregistrer(o);
1906     return o;
1907     }
1908    
1909    
1910    
1911     void MG_GEOMETRIE::change_gest_materiau(char* nom)
1912     {
1913     gest_materiau=nom;
1914     }
1915    
1916     char* MG_GEOMETRIE::get_gest_materiau(void)
1917     {
1918     return (char*)gest_materiau.c_str();
1919     }
1920    
1921 francois 187 double MG_GEOMETRIE::get_valeur_precision(void)
1922     {
1923     return precision;
1924     }
1925 5
1926 francois 187 void MG_GEOMETRIE::change_valeur_precision(double val)
1927     {
1928     precision=val;
1929     }
1930 5
1931     double MG_GEOMETRIE::get_valeur_unite(void)
1932     {
1933     return valeur_unite;
1934     }
1935    
1936     void MG_GEOMETRIE::change_valeur_unite(double val)
1937     {
1938     valeur_unite=val;
1939     }