ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_maillage.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 86964 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_maillage.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include <fstream>
27     #include <iostream>
28    
29    
30     #include "mg_maillage.h"
31     #include "mg_gestionnaire.h"
32 francois 296 #include "mc_gestionnaire.h"
33     #include "mc_propriete.h"
34     #include "mc_materiau.h"
35 francois 283 #include "tpl_map_entite.h"
36     //#include "message.h"
37    
38    
39    
40     int MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=0;
41    
42    
43 francois 465 MG_MAILLAGE::MG_MAILLAGE(MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(),mg_geometrie(geo),est_structure(false)
44 francois 283 {
45     }
46    
47 francois 465 MG_MAILLAGE::MG_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(num),mg_geometrie(geo),est_structure(false)
48 francois 283 {
49     }
50    
51 francois 516
52     MG_MAILLAGE::MG_MAILLAGE(FEM_MAILLAGE* fem,double coef):MG_IDENTIFICATEUR(),mg_geometrie(fem->get_mg_geometrie()),est_structure(false)
53     {
54     if (fem->get_degre()==1)
55     {
56     gest=fem->get_mg_maillage()->get_gestionnaire();
57     gest->ajouter_mg_maillage(this);
58     LISTE_FEM_NOEUD::iterator it;
59     for (FEM_NOEUD* no=fem->get_premier_noeud(it);no!=NULL;no=fem->get_suivant_noeud(it))
60     {
61     double x=no->get_x(coef);
62     double y=no->get_y(coef);
63     double z=no->get_z(coef);
64     MG_NOEUD *newno=new MG_NOEUD(no->get_lien_topologie(),x,y,z,DEFORME);
65     ajouter_mg_noeud(newno);
66     no->change_numero(newno->get_id());
67     }
68     LISTE_FEM_ELEMENT1::iterator it1;
69     for (FEM_ELEMENT1 *ele=fem->get_premier_element1(it1);ele!=NULL;ele=fem->get_suivant_element1(it1))
70     {
71     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
72     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
73     MG_SEGMENT *seg=new MG_SEGMENT(ele->get_lien_topologie(),no1,no2,DEFORME);
74     ajouter_mg_segment(seg);
75     }
76     LISTE_FEM_ELEMENT2::iterator it2;
77     for (FEM_ELEMENT2 *ele=fem->get_premier_element2(it2);ele!=NULL;ele=fem->get_suivant_element2(it2))
78     {
79     if (ele->get_nb_fem_noeud()==3)
80     {
81     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
82     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
83     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
84     ajouter_mg_triangle(ele->get_lien_topologie(),no1,no2,no3,DEFORME);
85     }
86     if (ele->get_nb_fem_noeud()==4)
87     {
88     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
89     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
90     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
91     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
92     ajouter_mg_quadrangle(ele->get_lien_topologie(),no1,no2,no3,no4,DEFORME);
93     }
94     }
95     LISTE_FEM_ELEMENT3::iterator it3;
96     for (FEM_ELEMENT3 *ele=fem->get_premier_element3(it3);ele!=NULL;ele=fem->get_suivant_element3(it3))
97     {
98     if (ele->get_nb_fem_noeud()==4)
99     {
100     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
101     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
102     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
103     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
104     ajouter_mg_tetra(ele->get_lien_topologie(),no1,no2,no3,no4,DEFORME);
105     }
106     if (ele->get_nb_fem_noeud()==8)
107     {
108     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
109     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
110     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
111     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
112     MG_NOEUD* no5=get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
113     MG_NOEUD* no6=get_mg_noeudid(ele->get_fem_noeud(5)->get_numero());
114     MG_NOEUD* no7=get_mg_noeudid(ele->get_fem_noeud(6)->get_numero());
115     MG_NOEUD* no8=get_mg_noeudid(ele->get_fem_noeud(7)->get_numero());
116     ajouter_mg_hexa(ele->get_lien_topologie(),no1,no2,no3,no4,no5,no6,no7,no8,DEFORME);
117     }
118     }
119    
120     }
121     }
122    
123 francois 517 MG_MAILLAGE* MG_MAILLAGE::detacher(MG_GESTIONNAIRE *gest)
124     {
125     MG_MAILLAGE* mgmai=new MG_MAILLAGE(NULL);
126     gest->ajouter_mg_maillage(mgmai);
127     LISTE_MG_NOEUD::iterator itNo;
128     for (MG_NOEUD * noeud = get_premier_noeud(itNo); noeud; noeud=get_suivant_noeud(itNo))
129     {
130     double x=noeud->get_x();
131     double y=noeud->get_y();
132     double z=noeud->get_z();
133     MG_NOEUD *newno=new MG_NOEUD(NULL,x,y,z,noeud->get_origine());
134     mgmai->ajouter_mg_noeud(newno);
135     noeud->change_nouveau_numero(newno->get_id());
136     }
137     LISTE_MG_SEGMENT::iterator itSeg;
138     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
139     {
140     MG_NOEUD* no1=mgmai->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
141     MG_NOEUD* no2=mgmai->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
142     MG_SEGMENT *seg=new MG_SEGMENT(NULL,no1,no2,segment->get_origine());
143     mgmai->ajouter_mg_segment(seg);
144     }
145     LISTE_MG_TRIANGLE::iterator itTri;
146     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
147     {
148     MG_NOEUD* no1=mgmai->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
149     MG_NOEUD* no2=mgmai->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
150     MG_NOEUD* no3=mgmai->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
151     mgmai->ajouter_mg_triangle(NULL,no1,no2,no3,triangle->get_origine());
152     }
153     LISTE_MG_QUADRANGLE::iterator itquad;
154     for (MG_QUADRANGLE *quad = get_premier_quadrangle(itquad); quad; quad=get_suivant_quadrangle(itquad))
155     {
156     MG_NOEUD* no1=mgmai->get_mg_noeudid(quad->get_noeud1()->get_nouveau_numero());
157     MG_NOEUD* no2=mgmai->get_mg_noeudid(quad->get_noeud2()->get_nouveau_numero());
158     MG_NOEUD* no3=mgmai->get_mg_noeudid(quad->get_noeud3()->get_nouveau_numero());
159     MG_NOEUD* no4=mgmai->get_mg_noeudid(quad->get_noeud4()->get_nouveau_numero());
160     mgmai->ajouter_mg_quadrangle(NULL,no1,no2,no3,no4,quad->get_origine());
161     }
162     LISTE_MG_TETRA::iterator ittet;
163     for (MG_TETRA *tet = get_premier_tetra(ittet); tet; tet=get_suivant_tetra(ittet))
164     {
165     MG_NOEUD* no1=mgmai->get_mg_noeudid(tet->get_noeud1()->get_nouveau_numero());
166     MG_NOEUD* no2=mgmai->get_mg_noeudid(tet->get_noeud2()->get_nouveau_numero());
167     MG_NOEUD* no3=mgmai->get_mg_noeudid(tet->get_noeud3()->get_nouveau_numero());
168     MG_NOEUD* no4=mgmai->get_mg_noeudid(tet->get_noeud4()->get_nouveau_numero());
169     mgmai->ajouter_mg_tetra(NULL,no1,no2,no3,no4,tet->get_origine());
170     }
171     LISTE_MG_HEXA::iterator ithex;
172     for (MG_HEXA *hex = get_premier_hexa(ithex); hex; hex=get_suivant_hexa(ithex))
173     {
174     MG_NOEUD* no1=mgmai->get_mg_noeudid(hex->get_noeud1()->get_nouveau_numero());
175     MG_NOEUD* no2=mgmai->get_mg_noeudid(hex->get_noeud2()->get_nouveau_numero());
176     MG_NOEUD* no3=mgmai->get_mg_noeudid(hex->get_noeud3()->get_nouveau_numero());
177     MG_NOEUD* no4=mgmai->get_mg_noeudid(hex->get_noeud4()->get_nouveau_numero());
178     MG_NOEUD* no5=mgmai->get_mg_noeudid(hex->get_noeud5()->get_nouveau_numero());
179     MG_NOEUD* no6=mgmai->get_mg_noeudid(hex->get_noeud6()->get_nouveau_numero());
180     MG_NOEUD* no7=mgmai->get_mg_noeudid(hex->get_noeud7()->get_nouveau_numero());
181     MG_NOEUD* no8=mgmai->get_mg_noeudid(hex->get_noeud8()->get_nouveau_numero());
182     mgmai->ajouter_mg_hexa(NULL,no1,no2,no3,no4,no5,no6,no7,no8,hex->get_origine());
183     }
184     return mgmai;
185     }
186 francois 516
187 francois 283 MG_MAILLAGE* MG_MAILLAGE::dupliquer(MG_GESTIONNAIRE* gest)
188     {
189     MG_MAILLAGE* mgmai=new MG_MAILLAGE(this->get_mg_geometrie());
190     gest->ajouter_mg_maillage(mgmai);
191     long decalage=mgmai->get_id()-this->get_id();
192     LISTE_ENTITE::const_iterator i;
193     // D'abord les noeuds (les segments en dependent)
194     LISTE_MG_NOEUD::iterator itNo;
195     for (MG_NOEUD * noeud = get_premier_noeud(itNo); noeud; noeud=get_suivant_noeud(itNo))
196     noeud->dupliquer(mgmai,decalage);
197     // Ensuite les segments (les triangles en dependent)
198     LISTE_MG_SEGMENT::iterator itSeg;
199     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
200     segment->dupliquer(mgmai,decalage);
201     // Ensuite les triangles (les tetra en dependent)
202     LISTE_MG_TRIANGLE::iterator itTri;
203     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
204     triangle->dupliquer(mgmai,decalage);
205     // Pour finir les tetra
206     LISTE_MG_TETRA::iterator itTetra;
207     for (MG_TETRA * tetra = get_premier_tetra(itTetra); tetra; tetra=get_suivant_tetra(itTetra))
208     tetra->dupliquer(mgmai,decalage);
209     /* bug quand l'identificateur d'un triangle pr�c�de celui de ses segments
210     for (i=lst_entite.begin();i!=lst_entite.end();i++)
211     {
212     MG_ELEMENT_MAILLAGE& ele=(MG_ELEMENT_MAILLAGE&)(*(*i));
213     ele.dupliquer(mgmai,decalage);
214     }*/
215     int nb_segment = get_nb_mg_segment();
216     int nb_triangle = get_nb_mg_triangle();
217     int nb_tetra = get_nb_mg_tetra();
218    
219     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
220     {
221     MG_TRIANGLE * triangle2 = mgmai->get_mg_triangleid(triangle->get_id()+decalage);
222    
223     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra = triangle->get_lien_tetra();
224     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra2 = triangle2->get_lien_tetra();
225     for (int it_tetra = 0; it_tetra != lst_lien_tetra->get_nb(); it_tetra++)
226     {
227     MG_TETRA * t = lst_lien_tetra->get(it_tetra);
228     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
229    
230     lst_lien_tetra2->ajouter ( t2 );
231     }
232     }
233    
234     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
235     {
236     MG_SEGMENT * segment2 = mgmai->get_mg_segmentid(segment->get_id()+decalage);
237    
238     TPL_LISTE_ENTITE<MG_TRIANGLE*> * lst_lien_triangle = segment->get_lien_triangle();
239     TPL_LISTE_ENTITE<MG_TRIANGLE*> * lst_lien_triangle2 = segment2->get_lien_triangle();
240     for (int it_triang = 0; it_triang != lst_lien_triangle->get_nb(); it_triang++)
241     {
242     MG_TRIANGLE * t = lst_lien_triangle->get(it_triang);
243     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
244    
245     lst_lien_triangle2->ajouter ( t2 );
246     }
247     }
248    
249     for (MG_NOEUD * n = get_premier_noeud(itNo); n; n=get_suivant_noeud(itNo))
250     {
251     MG_NOEUD * n2 = mgmai->get_mg_noeudid(n->get_id()+decalage);
252    
253     if (nb_segment != 0)
254     {
255     TPL_LISTE_ENTITE<MG_SEGMENT*> * lst_lien_segment = n->get_lien_segment();
256     TPL_LISTE_ENTITE<MG_SEGMENT*> * lst_lien_segment2 = n2->get_lien_segment();
257     for (int it_seg = 0; it_seg != lst_lien_segment->get_nb(); it_seg++)
258     {
259     MG_SEGMENT * seg = lst_lien_segment->get(it_seg);
260     MG_SEGMENT * seg2 = mgmai->get_mg_segmentid( seg->get_id() + decalage );
261    
262     lst_lien_segment2->ajouter ( seg2 );
263     }
264    
265     TPL_LISTE_ENTITE< MG_SEGMENT*> * lst_lien_petit_segment = n->get_lien_petit_segment();
266     TPL_LISTE_ENTITE< MG_SEGMENT*> * lst_lien_petit_segment2 = n2->get_lien_petit_segment();
267     for (int it_seg = 0; it_seg != lst_lien_petit_segment->get_nb(); it_seg++)
268     {
269     MG_SEGMENT * seg = lst_lien_petit_segment->get(it_seg);
270     MG_SEGMENT * seg2 = mgmai->get_mg_segmentid( seg->get_id() + decalage );
271    
272     lst_lien_petit_segment2->ajouter ( seg2 );
273     }
274     }
275    
276     if (nb_triangle != 0)
277     {
278     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_triangle = n->get_lien_triangle();
279     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_triangle2 = n2->get_lien_triangle();
280     for (int it_triang = 0; it_triang != lst_lien_triangle->get_nb(); it_triang++)
281     {
282     MG_TRIANGLE * t = lst_lien_triangle->get(it_triang);
283     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
284    
285     lst_lien_triangle2->ajouter ( t2 );
286     }
287    
288     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_petit_triangle = n->get_lien_petit_triangle();
289     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_petit_triangle2 = n2->get_lien_petit_triangle();
290     for (int it_triang = 0; it_triang != lst_lien_petit_triangle->get_nb(); it_triang++)
291     {
292     MG_TRIANGLE * t = lst_lien_petit_triangle->get(it_triang);
293     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
294    
295     lst_lien_petit_triangle2->ajouter ( t2 );
296     }
297     }
298    
299     if (nb_tetra != 0)
300     {
301     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra = n->get_lien_tetra();
302     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra2 = n2->get_lien_tetra();
303     for (int it_tetra = 0; it_tetra != lst_lien_tetra->get_nb(); it_tetra++)
304     {
305     MG_TETRA * t = lst_lien_tetra->get(it_tetra);
306     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
307    
308     lst_lien_tetra2->ajouter ( t2 );
309     }
310    
311     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_petit_tetra = n->get_lien_petit_tetra();
312     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_petit_tetra2 = n2->get_lien_petit_tetra();
313     for (int it_tetra = 0; it_tetra != lst_lien_petit_tetra->get_nb(); it_tetra++)
314     {
315     MG_TETRA * t = lst_lien_petit_tetra->get(it_tetra);
316     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
317    
318     lst_lien_petit_tetra2->ajouter ( t2 );
319     }
320     }
321    
322     }
323    
324     return mgmai;
325     }
326    
327    
328     MG_MAILLAGE::~MG_MAILLAGE()
329     {
330     supprimer_tout_mg_tetra();
331     supprimer_tout_mg_triangle();
332     supprimer_tout_mg_segment();
333     supprimer_tout_mg_noeud();
334     }
335    
336     MG_GEOMETRIE* MG_MAILLAGE::get_mg_geometrie(void)
337     {
338     return mg_geometrie;
339     }
340    
341    
342     void MG_MAILLAGE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
343     {
344     gest=mggest;
345     }
346    
347     // ENTITE MG_NOEUD
348     MG_NOEUD* MG_MAILLAGE::ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE* topo,double xx,double yy,double zz,int origine,unsigned long num)
349     {
350     MG_NOEUD* mgnoeud;
351     if (num==0) mgnoeud=new MG_NOEUD(topo,xx,yy,zz,origine);
352     else mgnoeud=new MG_NOEUD(num,topo,xx,yy,zz,origine);
353     int resultat = ajouter_mg_noeud(mgnoeud);
354     if (resultat==FAIL)
355     {
356     delete mgnoeud;
357     return NULL;
358     }
359     return mgnoeud;
360     }
361    
362     int MG_MAILLAGE::ajouter_mg_noeud(MG_NOEUD *mgnoeud)
363     {
364     gest->recherche_bonid(*mgnoeud);
365     MG_IDENTIFICATEUR *id=mgnoeud;
366     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
367     if (!p.second)
368     {
369     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
370     return FAIL;
371     }
372    
373     std::pair<const unsigned long,MG_NOEUD*> tmp(mgnoeud->get_id(),mgnoeud);
374     lst_mg_noeud.insert(tmp);
375     return OK;
376     }
377    
378    
379     MG_NOEUD* MG_MAILLAGE::get_mg_noeudid(unsigned long num)
380     {
381     LISTE_MG_NOEUD::iterator i=lst_mg_noeud.find(num);
382     if (i==lst_mg_noeud.end())
383     {
384     // afficheur << INEXISTE << enderr;
385     return NULL;
386     }
387     return ((*i).second);
388     }
389    
390    
391    
392     MG_NOEUD* MG_MAILLAGE::get_mg_noeud(unsigned int num)
393     {
394     if (!(num<lst_mg_noeud.size()))
395     {
396     // afficheur << INEXISTE << enderr;
397     return NULL;
398     }
399     LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();
400     for (unsigned long j=0;j<num;j++) i++;
401     return ((*i).second);
402     }
403    
404    
405    
406     unsigned int MG_MAILLAGE::get_nb_mg_noeud(void)
407     {
408     return lst_mg_noeud.size();
409     }
410    
411    
412     int MG_MAILLAGE::supprimer_mg_noeudid(unsigned long num)
413     {
414     MG_NOEUD* mgnoeud=get_mg_noeudid(num);
415     if (mgnoeud==NULL)
416     {
417     // afficheur << INEXISTE2 << enderr;
418     return FAIL;
419     }
420     if (mgnoeud->get_lien_segment()->get_nb())
421     {
422     // afficheur << ERRNOEUDSEGMENT << mgnoeud->get_id() << enderr;
423     return FAIL;
424     }
425     if (mgnoeud->get_lien_triangle()->get_nb())
426     {
427     // afficheur << ERRNOEUDTRIANGLE << mgnoeud->get_id() << enderr;
428     return FAIL;
429     }
430     MG_IDENTIFICATEUR* id=mgnoeud;
431     LISTE_ENTITE::iterator i=lst_entite.find(id);
432     lst_entite.erase(i);
433     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.find(num);
434     lst_mg_noeud.erase(j);
435     delete mgnoeud;
436     return OK;
437     }
438    
439    
440     int MG_MAILLAGE::supprimer_mg_noeud(unsigned int num)
441     {
442     MG_NOEUD* mgnoeud=get_mg_noeud(num);
443     if (mgnoeud==NULL)
444     {
445     // afficheur << INEXISTE2 << enderr;
446     return FAIL;
447     }
448     if (mgnoeud->get_lien_segment()->get_nb())
449     {
450     // afficheur << ERRNOEUDSEGMENT << mgnoeud->get_id() << enderr;
451     return FAIL;
452     }
453     if (mgnoeud->get_lien_triangle()->get_nb())
454     {
455     // afficheur << ERRNOEUDTRIANGLE << mgnoeud->get_id() << enderr;
456     return FAIL;
457     }
458     MG_IDENTIFICATEUR* id=mgnoeud;
459     LISTE_ENTITE::iterator i=lst_entite.find(id);
460     lst_entite.erase(i);
461     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.begin();
462     for (unsigned int k=0;k<num;k++) j++;
463     lst_mg_noeud.erase(j);
464     delete mgnoeud;
465     return OK;
466     }
467    
468    
469     void MG_MAILLAGE::supprimer_tout_mg_noeud(void)
470     {
471     while (get_nb_mg_noeud()!=0)
472     {
473     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.begin();
474     MG_NOEUD* mgnoeud=(*j).second;
475     MG_IDENTIFICATEUR* id=mgnoeud;
476     LISTE_ENTITE::iterator i=lst_entite.find(id);
477     lst_entite.erase(i);
478     lst_mg_noeud.erase(j);
479     delete mgnoeud;
480     }
481     }
482    
483    
484     MG_NOEUD* MG_MAILLAGE::get_premier_noeud(LISTE_MG_NOEUD::iterator & it)
485     {
486     it = lst_mg_noeud.begin();
487     if (it == lst_mg_noeud.end())
488     return NULL;
489     return it->second;
490     }
491    
492     MG_NOEUD* MG_MAILLAGE::get_suivant_noeud(LISTE_MG_NOEUD::iterator & it)
493     {
494     it++;
495     if (it == lst_mg_noeud.end())
496     return NULL;
497     return it->second;
498     }
499    
500    
501     // ENTITE MG_SEGMENT
502     MG_SEGMENT* MG_MAILLAGE::ajouter_mg_segment(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,int origine,double longue,unsigned long num)
503     {
504     MG_SEGMENT* mgsegment;
505     if (num==0) mgsegment=new MG_SEGMENT(topo,mgnoeud1,mgnoeud2,origine,longue);
506     else mgsegment=new MG_SEGMENT(num,topo,mgnoeud1,mgnoeud2,origine,longue);
507     int resultat=ajouter_mg_segment(mgsegment);
508     if (resultat==FAIL)
509     {
510     delete mgsegment;
511     return NULL;
512     }
513     return mgsegment;
514     }
515    
516     int MG_MAILLAGE::ajouter_mg_segment(MG_SEGMENT *mgsegment)
517     {
518     gest->recherche_bonid(*mgsegment);
519     MG_IDENTIFICATEUR *id=mgsegment;
520     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
521     if (!p.second)
522     {
523     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
524     return FAIL;
525     }
526    
527     std::pair<const unsigned long,MG_SEGMENT*> tmp(mgsegment->get_id(),mgsegment);
528     lst_mg_segment.insert(tmp);
529     return OK;
530     }
531    
532    
533     MG_SEGMENT* MG_MAILLAGE::get_mg_segmentid(unsigned long num)
534     {
535     LISTE_MG_SEGMENT::iterator i=lst_mg_segment.find(num);
536     if (i==lst_mg_segment.end())
537     {
538     // afficheur << INEXISTE << enderr;
539     return NULL;
540     }
541     return ((*i).second);
542     }
543    
544     MG_SEGMENT* MG_MAILLAGE::get_mg_segment(unsigned long noeud1id,unsigned long noeud2id)
545     {
546     unsigned long id=std::min(noeud1id,noeud2id);
547     MG_NOEUD* noeud=get_mg_noeudid(id);
548     int nb_segment=noeud->get_lien_petit_segment()->get_nb();
549     for (int i=0;i<nb_segment;i++)
550     {
551     MG_SEGMENT* mgsegment=noeud->get_lien_petit_segment()->get(i);
552     if ( (mgsegment->get_noeud1()->get_id()==noeud1id) && (mgsegment->get_noeud2()->get_id()==noeud2id) ) return mgsegment;
553     if ( (mgsegment->get_noeud2()->get_id()==noeud1id) && (mgsegment->get_noeud1()->get_id()==noeud2id) ) return mgsegment;
554     }
555     return NULL;
556     }
557    
558     MG_SEGMENT* MG_MAILLAGE::get_mg_segment(unsigned int num)
559     {
560     if (!(num<lst_mg_segment.size()))
561     {
562     // afficheur << INEXISTE << enderr;
563     return NULL;
564     }
565     LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();
566     //for (unsigned long j=0;j<num;j++) i++;
567     std::advance(i,num);
568     return ((*i).second);
569     }
570    
571     MG_SEGMENT* MG_MAILLAGE::get_premier_segment(LISTE_MG_SEGMENT::iterator & it)
572     {
573     it = lst_mg_segment.begin();
574     if (it == lst_mg_segment.end())
575     return NULL;
576     return it->second;
577     }
578    
579     MG_SEGMENT* MG_MAILLAGE::get_suivant_segment(LISTE_MG_SEGMENT::iterator & it)
580     {
581     it++;
582     if (it == lst_mg_segment.end())
583     return NULL;
584     return it->second;
585     }
586    
587     unsigned int MG_MAILLAGE::get_nb_mg_segment(void)
588     {
589     return lst_mg_segment.size();
590     }
591    
592    
593     int MG_MAILLAGE::supprimer_mg_segmentid(unsigned long num)
594     {
595     MG_SEGMENT* mgsegment=get_mg_segmentid(num);
596     if (mgsegment==NULL)
597     {
598     // afficheur << INEXISTE2 << enderr;
599     return FAIL;
600     }
601     MG_IDENTIFICATEUR* id=mgsegment;
602     LISTE_ENTITE::iterator i=lst_entite.find(id);
603     lst_entite.erase(i);
604     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.find(num);
605     lst_mg_segment.erase(j);
606     MG_NOEUD* noeud1=mgsegment->get_noeud1();
607     MG_NOEUD* noeud2=mgsegment->get_noeud2();
608     delete mgsegment;
609     if (noeud1->get_nb_reference()==0)
610     if (noeud1->get_lien_topologie()!=NULL)
611     {
612     if (noeud1->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud1->get_id());
613     }
614     else supprimer_mg_noeudid(noeud1->get_id());
615     if (noeud2->get_nb_reference()==0)
616     if (noeud2->get_lien_topologie()!=NULL)
617     {
618     if (noeud2->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud2->get_id());
619     }
620     else supprimer_mg_noeudid(noeud2->get_id());
621     return OK;
622     }
623    
624    
625     int MG_MAILLAGE::supprimer_mg_segment(unsigned int num)
626     {
627     MG_SEGMENT* mgsegment=get_mg_segment(num);
628     if (mgsegment==NULL)
629     {
630     // afficheur << INEXISTE2 << enderr;
631     return FAIL;
632     }
633     MG_IDENTIFICATEUR* id=mgsegment;
634     LISTE_ENTITE::iterator i=lst_entite.find(id);
635     lst_entite.erase(i);
636     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.begin();
637     for (unsigned int k=0;k<num;k++) j++;
638     lst_mg_segment.erase(j);
639     MG_NOEUD* noeud1=mgsegment->get_noeud1();
640     MG_NOEUD* noeud2=mgsegment->get_noeud2();
641     delete mgsegment;
642     if (noeud1->get_nb_reference()==0)
643     if (noeud1->get_lien_topologie()!=NULL)
644     {
645     if (noeud1->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud1->get_id());
646     }
647     else supprimer_mg_noeudid(noeud1->get_id());
648     if (noeud2->get_nb_reference()==0)
649     if (noeud2->get_lien_topologie()!=NULL)
650     {
651     if (noeud2->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud2->get_id());
652     }
653     else supprimer_mg_noeudid(noeud2->get_id());
654     return OK;
655     }
656    
657    
658     void MG_MAILLAGE::supprimer_tout_mg_segment(void)
659     {
660     while (get_nb_mg_segment()!=0)
661     {
662     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.begin();
663     MG_SEGMENT* mgsegment=(*j).second;
664     MG_IDENTIFICATEUR* id=mgsegment;
665     LISTE_ENTITE::iterator i=lst_entite.find(id);
666     lst_entite.erase(i);
667     lst_mg_segment.erase(j);
668     delete mgsegment;
669     }
670    
671     }
672    
673     // ENTITE MG_TRIANGLE
674    
675     MG_TRIANGLE* MG_MAILLAGE::ajouter_mg_triangle(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,int origine,unsigned long num)
676     {
677     MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
678     MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
679     MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud1->get_id());
680     if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(topo,mgnoeud1,mgnoeud2,origine);
681     if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(topo,mgnoeud2,mgnoeud3,origine);
682     if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(topo,mgnoeud3,mgnoeud1,origine);
683     MG_TRIANGLE* mgtriangle;
684     if (num==0) mgtriangle=new MG_TRIANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
685     else mgtriangle=new MG_TRIANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
686     int resultat=ajouter_mg_triangle(mgtriangle);
687     if (resultat==FAIL)
688     {
689     delete mgtriangle;
690     return NULL;
691     }
692     return mgtriangle;
693     }
694    
695    
696     int MG_MAILLAGE::ajouter_mg_triangle(MG_TRIANGLE *mgtriangle)
697     {
698     gest->recherche_bonid(*mgtriangle);
699     MG_IDENTIFICATEUR *id=mgtriangle;
700     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
701     if (!p.second)
702     {
703     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
704     return FAIL;
705     }
706    
707     std::pair<const unsigned long,MG_TRIANGLE*> tmp(mgtriangle->get_id(),mgtriangle);
708     lst_mg_triangle.insert(tmp);
709     return OK;
710     }
711    
712    
713     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangleid(unsigned long num)
714     {
715     LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.find(num);
716     if (i==lst_mg_triangle.end())
717     {
718     // afficheur << INEXISTE << enderr;
719     return NULL;
720     }
721     return ((*i).second);
722     }
723    
724    
725    
726     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned int num)
727     {
728     if (!(num<lst_mg_triangle.size()))
729     {
730     // afficheur << INEXISTE << enderr;
731     return NULL;
732     }
733     LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();
734     for (unsigned long j=0;j<num;j++) i++;
735     return ((*i).second);
736     }
737    
738     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id)
739     {
740     unsigned long id=std::min(noeud1id,noeud2id);
741     id=std::min(id,noeud3id);
742     MG_NOEUD* noeud=get_mg_noeudid(id);
743     int nb_triangle=noeud->get_lien_petit_triangle()->get_nb();
744     for (int i=0;i<nb_triangle;i++)
745     {
746     MG_TRIANGLE* mgtriangle=noeud->get_lien_petit_triangle()->get(i);
747     if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
748     if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
749     if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
750     if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
751     if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
752     if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
753     }
754     return NULL;
755     }
756    
757     unsigned int MG_MAILLAGE::get_nb_mg_triangle(void)
758     {
759     return lst_mg_triangle.size();
760     }
761    
762    
763     int MG_MAILLAGE::supprimer_mg_triangleid(unsigned long num)
764     {
765     MG_TRIANGLE* mgtriangle=get_mg_triangleid(num);
766     if (mgtriangle==NULL)
767     {
768     // afficheur << INEXISTE2 << enderr;
769     return FAIL;
770     }
771     MG_IDENTIFICATEUR* id=mgtriangle;
772     LISTE_ENTITE::iterator i=lst_entite.find(id);
773     lst_entite.erase(i);
774     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.find(num);
775     lst_mg_triangle.erase(j);
776     MG_SEGMENT* segment1=mgtriangle->get_segment1();
777     MG_SEGMENT* segment2=mgtriangle->get_segment2();
778     MG_SEGMENT* segment3=mgtriangle->get_segment3();
779     delete mgtriangle;
780     if (segment1->get_nb_reference()==0)
781     if (segment1->get_lien_topologie()!=NULL)
782     {
783     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
784     }
785     else supprimer_mg_segmentid(segment1->get_id());
786     if (segment2->get_nb_reference()==0)
787     if (segment2->get_lien_topologie()!=NULL)
788     {
789     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
790     }
791     else supprimer_mg_segmentid(segment2->get_id());
792     if (segment3->get_nb_reference()==0)
793     if (segment3->get_lien_topologie()!=NULL)
794     {
795     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
796     }
797     else supprimer_mg_segmentid(segment3->get_id());
798     return OK;
799     }
800    
801    
802     int MG_MAILLAGE::supprimer_mg_triangle(unsigned int num)
803     {
804     MG_TRIANGLE* mgtriangle=get_mg_triangle(num);
805     if (mgtriangle==NULL)
806     {
807     // afficheur << INEXISTE2 << enderr;
808     return FAIL;
809     }
810     MG_IDENTIFICATEUR* id=mgtriangle;
811     LISTE_ENTITE::iterator i=lst_entite.find(id);
812     lst_entite.erase(i);
813     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
814     for (unsigned int k=0;k<num;k++) j++;
815     lst_mg_triangle.erase(j);
816     MG_SEGMENT* segment1=mgtriangle->get_segment1();
817     MG_SEGMENT* segment2=mgtriangle->get_segment2();
818     MG_SEGMENT* segment3=mgtriangle->get_segment3();
819     delete mgtriangle;
820     if (segment1->get_nb_reference()==0)
821     if (segment1->get_lien_topologie()!=NULL)
822     {
823     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
824     }
825     else supprimer_mg_segmentid(segment1->get_id());
826     if (segment2->get_nb_reference()==0)
827     if (segment2->get_lien_topologie()!=NULL)
828     {
829     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
830     }
831     else supprimer_mg_segmentid(segment2->get_id());
832     if (segment3->get_nb_reference()==0)
833     if (segment3->get_lien_topologie()!=NULL)
834     {
835     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
836     }
837     else supprimer_mg_segmentid(segment3->get_id());
838     return OK;
839     }
840    
841    
842     void MG_MAILLAGE::supprimer_tout_mg_triangle(void)
843     {
844     while (get_nb_mg_triangle()!=0)
845     {
846     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
847     MG_TRIANGLE* mgtriangle=(*j).second;
848     MG_IDENTIFICATEUR* id=mgtriangle;
849     LISTE_ENTITE::iterator i=lst_entite.find(id);
850     lst_entite.erase(i);
851     lst_mg_triangle.erase(j);
852     delete mgtriangle;
853     }
854     }
855    
856    
857     MG_TRIANGLE* MG_MAILLAGE::get_premier_triangle(LISTE_MG_TRIANGLE::iterator & it)
858     {
859     it = lst_mg_triangle.begin();
860     if (it == lst_mg_triangle.end())
861     return NULL;
862     return it->second;
863     }
864    
865     MG_TRIANGLE* MG_MAILLAGE::get_suivant_triangle(LISTE_MG_TRIANGLE::iterator & it)
866     {
867     it++;
868     if (it == lst_mg_triangle.end())
869     return NULL;
870     return it->second;
871     }
872    
873 francois 308
874     // ENTITE MG_QUADRANGLE
875    
876     MG_QUADRANGLE* MG_MAILLAGE::ajouter_mg_quadrangle(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,int origine,unsigned long num)
877     {
878     MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
879     MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
880     MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud4->get_id());
881     MG_SEGMENT* mgsegment4=get_mg_segment(mgnoeud4->get_id(),mgnoeud1->get_id());
882     if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(topo,mgnoeud1,mgnoeud2,origine);
883     if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(topo,mgnoeud2,mgnoeud3,origine);
884     if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(topo,mgnoeud3,mgnoeud4,origine);
885     if (mgsegment4==NULL) mgsegment4=ajouter_mg_segment(topo,mgnoeud4,mgnoeud1,origine);
886     MG_QUADRANGLE* mgquadrangle;
887     if (num==0) mgquadrangle=new MG_QUADRANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
888     else mgquadrangle=new MG_QUADRANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
889     int resultat=ajouter_mg_quadrangle(mgquadrangle);
890     if (resultat==FAIL)
891     {
892     delete mgquadrangle;
893     return NULL;
894     }
895     return mgquadrangle;
896     }
897    
898    
899     int MG_MAILLAGE::ajouter_mg_quadrangle(MG_QUADRANGLE *mgquadrangle)
900     {
901     gest->recherche_bonid(*mgquadrangle);
902     MG_IDENTIFICATEUR *id=mgquadrangle;
903     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
904     if (!p.second)
905     {
906     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
907     return FAIL;
908     }
909    
910     std::pair<const unsigned long,MG_QUADRANGLE*> tmp(mgquadrangle->get_id(),mgquadrangle);
911     lst_mg_quadrangle.insert(tmp);
912     return OK;
913     }
914    
915    
916     MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangleid(unsigned long num)
917     {
918     LISTE_MG_QUADRANGLE::iterator i=lst_mg_quadrangle.find(num);
919     if (i==lst_mg_quadrangle.end())
920     {
921     // afficheur << INEXISTE << enderr;
922     return NULL;
923     }
924     return ((*i).second);
925     }
926    
927    
928    
929     MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangle(unsigned int num)
930     {
931     if (!(num<lst_mg_quadrangle.size()))
932     {
933     // afficheur << INEXISTE << enderr;
934     return NULL;
935     }
936     LISTE_MG_QUADRANGLE::iterator i=lst_mg_quadrangle.begin();
937     for (unsigned long j=0;j<num;j++) i++;
938     return ((*i).second);
939     }
940    
941     MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id,unsigned long noeud4id)
942     {
943     unsigned long id=std::min(noeud1id,noeud2id);
944     id=std::min(id,noeud3id);
945     id=std::min(id,noeud4id);
946     std::map<unsigned long,unsigned long> map1;
947     map1[noeud1id]=noeud1id;
948     map1[noeud2id]=noeud2id;
949     map1[noeud3id]=noeud3id;
950     map1[noeud4id]=noeud4id;
951     MG_NOEUD* noeud=get_mg_noeudid(id);
952     int nb_quadrangle=noeud->get_lien_petit_quadrangle()->get_nb();
953     for (int i=0;i<nb_quadrangle;i++)
954     {
955     MG_QUADRANGLE* mgquadrangle=noeud->get_lien_petit_quadrangle()->get(i);
956     std::map<unsigned long,unsigned long> map2;
957     map2[mgquadrangle->get_noeud1()->get_id()]=mgquadrangle->get_noeud1()->get_id();
958     map2[mgquadrangle->get_noeud2()->get_id()]=mgquadrangle->get_noeud2()->get_id();
959     map2[mgquadrangle->get_noeud3()->get_id()]=mgquadrangle->get_noeud3()->get_id();
960     map2[mgquadrangle->get_noeud4()->get_id()]=mgquadrangle->get_noeud4()->get_id();
961     std::map<unsigned long,unsigned long>::iterator it1,it2;
962     it1=map1.begin();it2=map2.begin();
963     int ok=1;
964     while (it1!=map1.end())
965     {
966     if ((*it1).first!=(*it2).first) {ok=0;break;}
967     it1++;
968     it2++;
969     }
970     if (ok) return mgquadrangle;
971     }
972     return NULL;
973     }
974    
975     unsigned int MG_MAILLAGE::get_nb_mg_quadrangle(void)
976     {
977     return lst_mg_quadrangle.size();
978     }
979    
980    
981     int MG_MAILLAGE::supprimer_mg_quadrangleid(unsigned long num)
982     {
983     MG_QUADRANGLE* mgquadrangle=get_mg_quadrangleid(num);
984     if (mgquadrangle==NULL)
985     {
986     // afficheur << INEXISTE2 << enderr;
987     return FAIL;
988     }
989     MG_IDENTIFICATEUR* id=mgquadrangle;
990     LISTE_ENTITE::iterator i=lst_entite.find(id);
991     lst_entite.erase(i);
992     LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.find(num);
993     lst_mg_quadrangle.erase(j);
994     MG_SEGMENT* segment1=mgquadrangle->get_segment1();
995     MG_SEGMENT* segment2=mgquadrangle->get_segment2();
996     MG_SEGMENT* segment3=mgquadrangle->get_segment3();
997     MG_SEGMENT* segment4=mgquadrangle->get_segment4();
998     delete mgquadrangle;
999     if (segment1->get_nb_reference()==0)
1000     if (segment1->get_lien_topologie()!=NULL)
1001     {
1002     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
1003     }
1004     else supprimer_mg_segmentid(segment1->get_id());
1005     if (segment2->get_nb_reference()==0)
1006     if (segment2->get_lien_topologie()!=NULL)
1007     {
1008     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
1009     }
1010     else supprimer_mg_segmentid(segment2->get_id());
1011     if (segment3->get_nb_reference()==0)
1012     if (segment3->get_lien_topologie()!=NULL)
1013     {
1014     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
1015     }
1016     else supprimer_mg_segmentid(segment3->get_id());
1017     if (segment4->get_nb_reference()==0)
1018     if (segment4->get_lien_topologie()!=NULL)
1019     {
1020     if (segment4->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment4->get_id());
1021     }
1022     else supprimer_mg_segmentid(segment4->get_id());
1023     return OK;
1024     }
1025    
1026    
1027     int MG_MAILLAGE::supprimer_mg_quadrangle(unsigned int num)
1028     {
1029     MG_QUADRANGLE* mgquadrangle=get_mg_quadrangle(num);
1030     if (mgquadrangle==NULL)
1031     {
1032     // afficheur << INEXISTE2 << enderr;
1033     return FAIL;
1034     }
1035     MG_IDENTIFICATEUR* id=mgquadrangle;
1036     LISTE_ENTITE::iterator i=lst_entite.find(id);
1037     lst_entite.erase(i);
1038     LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.begin();
1039     for (unsigned int k=0;k<num;k++) j++;
1040     lst_mg_quadrangle.erase(j);
1041     MG_SEGMENT* segment1=mgquadrangle->get_segment1();
1042     MG_SEGMENT* segment2=mgquadrangle->get_segment2();
1043     MG_SEGMENT* segment3=mgquadrangle->get_segment3();
1044     MG_SEGMENT* segment4=mgquadrangle->get_segment4();
1045     delete mgquadrangle;
1046     if (segment1->get_nb_reference()==0)
1047     if (segment1->get_lien_topologie()!=NULL)
1048     {
1049     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
1050     }
1051     else supprimer_mg_segmentid(segment1->get_id());
1052     if (segment2->get_nb_reference()==0)
1053     if (segment2->get_lien_topologie()!=NULL)
1054     {
1055     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
1056     }
1057     else supprimer_mg_segmentid(segment2->get_id());
1058     if (segment3->get_nb_reference()==0)
1059     if (segment3->get_lien_topologie()!=NULL)
1060     {
1061     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
1062     }
1063     else supprimer_mg_segmentid(segment3->get_id());
1064     if (segment4->get_nb_reference()==0)
1065     if (segment4->get_lien_topologie()!=NULL)
1066     {
1067     if (segment4->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment4->get_id());
1068     }
1069     else supprimer_mg_segmentid(segment4->get_id());
1070     return OK;
1071     }
1072    
1073    
1074     void MG_MAILLAGE::supprimer_tout_mg_quadrangle(void)
1075     {
1076     while (get_nb_mg_quadrangle()!=0)
1077     {
1078     LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.begin();
1079     MG_QUADRANGLE* mgquadrangle=(*j).second;
1080     MG_IDENTIFICATEUR* id=mgquadrangle;
1081     LISTE_ENTITE::iterator i=lst_entite.find(id);
1082     lst_entite.erase(i);
1083     lst_mg_quadrangle.erase(j);
1084     delete mgquadrangle;
1085     }
1086     }
1087    
1088    
1089     MG_QUADRANGLE* MG_MAILLAGE::get_premier_quadrangle(LISTE_MG_QUADRANGLE::iterator & it)
1090     {
1091     it = lst_mg_quadrangle.begin();
1092     if (it == lst_mg_quadrangle.end())
1093     return NULL;
1094     return it->second;
1095     }
1096    
1097     MG_QUADRANGLE* MG_MAILLAGE::get_suivant_quadrangle(LISTE_MG_QUADRANGLE::iterator & it)
1098     {
1099     it++;
1100     if (it == lst_mg_quadrangle.end())
1101     return NULL;
1102     return it->second;
1103     }
1104 francois 283 // ENTITE MG_TETRA
1105    
1106     MG_TETRA* MG_MAILLAGE::ajouter_mg_tetra(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,int origine,unsigned long num)
1107     {
1108     MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
1109     MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud4->get_id());
1110     MG_TRIANGLE* mgtriangle3=get_mg_triangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud4->get_id());
1111     MG_TRIANGLE* mgtriangle4=get_mg_triangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id());
1112     if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud3,mgnoeud2,origine);
1113     if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud2,mgnoeud4,origine);
1114     if (mgtriangle3==NULL) mgtriangle3=ajouter_mg_triangle(topo,mgnoeud2,mgnoeud3,mgnoeud4,origine);
1115     if (mgtriangle4==NULL) mgtriangle4=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud4,mgnoeud3,origine);
1116     MG_TETRA* mgtetra;
1117     if (num==0) mgtetra=new MG_TETRA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1118     else mgtetra=new MG_TETRA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1119     int resultat=ajouter_mg_tetra(mgtetra);
1120     if (resultat==FAIL)
1121     {
1122     delete mgtetra;
1123     return NULL;
1124     }
1125     return mgtetra;
1126     }
1127    
1128    
1129     int MG_MAILLAGE::ajouter_mg_tetra(MG_TETRA *mgtetra)
1130     {
1131     gest->recherche_bonid(*mgtetra);
1132     MG_IDENTIFICATEUR *id=mgtetra;
1133     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1134     if (!p.second)
1135     {
1136     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1137     return FAIL;
1138     }
1139    
1140     std::pair<const unsigned long,MG_TETRA*> tmp(mgtetra->get_id(),mgtetra);
1141     lst_mg_tetra.insert(tmp);
1142     return OK;
1143     }
1144    
1145    
1146     MG_TETRA* MG_MAILLAGE::get_mg_tetraid(unsigned long num)
1147     {
1148     LISTE_MG_TETRA::iterator i=lst_mg_tetra.find(num);
1149     if (i==lst_mg_tetra.end())
1150     {
1151     // afficheur << INEXISTE << enderr;
1152     return NULL;
1153     }
1154     return ((*i).second);
1155     }
1156    
1157    
1158    
1159     MG_TETRA* MG_MAILLAGE::get_mg_tetra(unsigned int num)
1160     {
1161     if (!(num<lst_mg_tetra.size()))
1162     {
1163     // afficheur << INEXISTE << enderr;
1164     return NULL;
1165     }
1166     LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();
1167     for (unsigned long j=0;j<num;j++) i++;
1168     return ((*i).second);
1169     }
1170    
1171 francois 363 MG_TETRA* MG_MAILLAGE::get_mg_tetra(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4)
1172 francois 283 {
1173 francois 363 MG_NOEUD* noeud=noeud1;
1174     if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1175     if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1176     if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1177     int nb_tetra=noeud->get_lien_petit_tetra()->get_nb();
1178 francois 283 for (int i=0;i<nb_tetra;i++)
1179     {
1180     MG_TETRA* mgtetra=noeud->get_lien_petit_tetra()->get(i);
1181 francois 363 if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1182     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1183     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1184     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1185     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1186     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1187     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1188     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1189     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1190     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1191     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1192     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1193     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1194     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1195     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1196     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1197     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1198     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1199     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1200     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1201     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1202     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1203     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1204     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1205 francois 283 }
1206     return NULL;
1207     }
1208    
1209     unsigned int MG_MAILLAGE::get_nb_mg_tetra(void)
1210     {
1211     return lst_mg_tetra.size();
1212     }
1213    
1214    
1215     int MG_MAILLAGE::supprimer_mg_tetraid(unsigned long num)
1216     {
1217     MG_TETRA* mgtetra=get_mg_tetraid(num);
1218     if (mgtetra==NULL)
1219     {
1220     // afficheur << INEXISTE2 << enderr;
1221     return FAIL;
1222     }
1223     MG_IDENTIFICATEUR* id=mgtetra;
1224     LISTE_ENTITE::iterator i=lst_entite.find(id);
1225     lst_entite.erase(i);
1226     LISTE_MG_TETRA::iterator j=lst_mg_tetra.find(num);
1227     lst_mg_tetra.erase(j);
1228     MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
1229     MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
1230     MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
1231     MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
1232     delete mgtetra;
1233     if (triangle1->get_nb_reference()==0)
1234     if (triangle1->get_lien_topologie()!=NULL)
1235     {
1236     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1237     }
1238     else supprimer_mg_triangleid(triangle1->get_id());
1239     if (triangle2->get_nb_reference()==0)
1240     if (triangle2->get_lien_topologie()!=NULL)
1241     {
1242     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1243     }
1244     else supprimer_mg_triangleid(triangle2->get_id());
1245     if (triangle3->get_nb_reference()==0)
1246     if (triangle3->get_lien_topologie()!=NULL)
1247     {
1248     if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
1249     }
1250     else supprimer_mg_triangleid(triangle3->get_id());
1251     if (triangle4->get_nb_reference()==0)
1252     if (triangle4->get_lien_topologie()!=NULL)
1253     {
1254     if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
1255     }
1256     else supprimer_mg_triangleid(triangle4->get_id());
1257     return OK;
1258     }
1259    
1260    
1261     int MG_MAILLAGE::supprimer_mg_tetra(unsigned int num)
1262     {
1263     MG_TETRA* mgtetra=get_mg_tetra(num);
1264     if (mgtetra==NULL)
1265     {
1266     // afficheur << INEXISTE2 << enderr;
1267     return FAIL;
1268     }
1269     MG_IDENTIFICATEUR* id=mgtetra;
1270     LISTE_ENTITE::iterator i=lst_entite.find(id);
1271     lst_entite.erase(i);
1272     LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
1273     for (unsigned int k=0;k<num;k++) j++;
1274     lst_mg_tetra.erase(j);
1275     MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
1276     MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
1277     MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
1278     MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
1279     delete mgtetra;
1280     if (triangle1->get_nb_reference()==0)
1281     if (triangle1->get_lien_topologie()!=NULL)
1282     {
1283     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1284     }
1285     else supprimer_mg_triangleid(triangle1->get_id());
1286     if (triangle2->get_nb_reference()==0)
1287     if (triangle2->get_lien_topologie()!=NULL)
1288     {
1289     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1290     }
1291     else supprimer_mg_triangleid(triangle2->get_id());
1292     if (triangle3->get_nb_reference()==0)
1293     if (triangle3->get_lien_topologie()!=NULL)
1294     {
1295     if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
1296     }
1297     else supprimer_mg_triangleid(triangle3->get_id());
1298     if (triangle4->get_nb_reference()==0)
1299     if (triangle4->get_lien_topologie()!=NULL)
1300     {
1301     if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
1302     }
1303     else supprimer_mg_triangleid(triangle4->get_id());
1304     return OK;
1305     }
1306    
1307    
1308     void MG_MAILLAGE::supprimer_tout_mg_tetra(void)
1309     {
1310     while (get_nb_mg_tetra()!=0)
1311     {
1312     LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
1313     MG_TETRA* mgtetra=(*j).second;
1314     MG_IDENTIFICATEUR* id=mgtetra;
1315     LISTE_ENTITE::iterator i=lst_entite.find(id);
1316     lst_entite.erase(i);
1317     lst_mg_tetra.erase(j);
1318     delete mgtetra;
1319     }
1320     }
1321    
1322    
1323     MG_TETRA* MG_MAILLAGE::get_premier_tetra(LISTE_MG_TETRA::iterator & it)
1324     {
1325     it = lst_mg_tetra.begin();
1326     if (it == lst_mg_tetra.end())
1327     return NULL;
1328     return it->second;
1329     }
1330    
1331     MG_TETRA* MG_MAILLAGE::get_suivant_tetra(LISTE_MG_TETRA::iterator & it)
1332     {
1333     it++;
1334     if (it == lst_mg_tetra.end())
1335     return NULL;
1336     return it->second;
1337     }
1338 francois 308 // ENTITE MG_HEXA
1339 francois 283
1340 francois 308 MG_HEXA* MG_MAILLAGE::ajouter_mg_hexa(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,class MG_NOEUD *mgnoeud5,class MG_NOEUD *mgnoeud6,class MG_NOEUD *mgnoeud7,class MG_NOEUD *mgnoeud8,int origine,unsigned long num)
1341     {
1342     MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud6->get_id(),mgnoeud5->get_id());
1343     MG_QUADRANGLE* mgquadrangle2=get_mg_quadrangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud7->get_id(),mgnoeud6->get_id());
1344     MG_QUADRANGLE* mgquadrangle3=get_mg_quadrangle(mgnoeud3->get_id(),mgnoeud4->get_id(),mgnoeud8->get_id(),mgnoeud7->get_id());
1345     MG_QUADRANGLE* mgquadrangle4=get_mg_quadrangle(mgnoeud4->get_id(),mgnoeud1->get_id(),mgnoeud5->get_id(),mgnoeud8->get_id());
1346     MG_QUADRANGLE* mgquadrangle5=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
1347     MG_QUADRANGLE* mgquadrangle6=get_mg_quadrangle(mgnoeud5->get_id(),mgnoeud6->get_id(),mgnoeud7->get_id(),mgnoeud8->get_id());
1348     if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(topo,mgnoeud1,mgnoeud2,mgnoeud6,mgnoeud5,origine);
1349     if (mgquadrangle2==NULL) mgquadrangle2=ajouter_mg_quadrangle(topo,mgnoeud2,mgnoeud3,mgnoeud7,mgnoeud6,origine);
1350     if (mgquadrangle3==NULL) mgquadrangle3=ajouter_mg_quadrangle(topo,mgnoeud3,mgnoeud4,mgnoeud8,mgnoeud7,origine);
1351     if (mgquadrangle4==NULL) mgquadrangle4=ajouter_mg_quadrangle(topo,mgnoeud4,mgnoeud1,mgnoeud5,mgnoeud8,origine);
1352     if (mgquadrangle5==NULL) mgquadrangle5=ajouter_mg_quadrangle(topo,mgnoeud1,mgnoeud4,mgnoeud3,mgnoeud2,origine);
1353     if (mgquadrangle6==NULL) mgquadrangle6=ajouter_mg_quadrangle(topo,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,origine);
1354     MG_HEXA* mghexa;
1355     if (num==0) mghexa=new MG_HEXA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1356     else mghexa=new MG_HEXA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1357     int resultat=ajouter_mg_hexa(mghexa);
1358     if (resultat==FAIL)
1359     {
1360     delete mghexa;
1361     return NULL;
1362     }
1363     return mghexa;
1364     }
1365 francois 283
1366    
1367 francois 308 int MG_MAILLAGE::ajouter_mg_hexa(MG_HEXA *mghexa)
1368     {
1369     gest->recherche_bonid(*mghexa);
1370     MG_IDENTIFICATEUR *id=mghexa;
1371     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1372     if (!p.second)
1373     {
1374     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1375     return FAIL;
1376     }
1377 francois 283
1378 francois 308 std::pair<const unsigned long,MG_HEXA*> tmp(mghexa->get_id(),mghexa);
1379     lst_mg_hexa.insert(tmp);
1380     return OK;
1381     }
1382    
1383    
1384     MG_HEXA* MG_MAILLAGE::get_mg_hexaid(unsigned long num)
1385     {
1386     LISTE_MG_HEXA::iterator i=lst_mg_hexa.find(num);
1387     if (i==lst_mg_hexa.end())
1388     {
1389     // afficheur << INEXISTE << enderr;
1390     return NULL;
1391     }
1392     return ((*i).second);
1393     }
1394    
1395    
1396    
1397     MG_HEXA* MG_MAILLAGE::get_mg_hexa(unsigned int num)
1398     {
1399     if (!(num<lst_mg_hexa.size()))
1400     {
1401     // afficheur << INEXISTE << enderr;
1402     return NULL;
1403     }
1404     LISTE_MG_HEXA::iterator i=lst_mg_hexa.begin();
1405     for (unsigned long j=0;j<num;j++) i++;
1406     return ((*i).second);
1407     }
1408    
1409 francois 363 MG_HEXA* MG_MAILLAGE::get_mg_hexa(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6,MG_NOEUD* noeud7,MG_NOEUD* noeud8)
1410 francois 308 {
1411 francois 363 MG_NOEUD* noeud=noeud1;
1412     if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1413     if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1414     if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1415     if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
1416     if (noeud6->get_id()<noeud->get_id()) noeud=noeud6;
1417     if (noeud7->get_id()<noeud->get_id()) noeud=noeud7;
1418     if (noeud8->get_id()<noeud->get_id()) noeud=noeud8;
1419    
1420    
1421 francois 308 std::map<unsigned long,unsigned long> map1;
1422 francois 363 map1[noeud1->get_id()]=noeud1->get_id();
1423     map1[noeud2->get_id()]=noeud2->get_id();
1424     map1[noeud3->get_id()]=noeud3->get_id();
1425     map1[noeud4->get_id()]=noeud4->get_id();
1426     map1[noeud5->get_id()]=noeud5->get_id();
1427     map1[noeud6->get_id()]=noeud6->get_id();
1428     map1[noeud7->get_id()]=noeud7->get_id();
1429     map1[noeud8->get_id()]=noeud8->get_id();
1430 francois 308 int nb_hexa=noeud->get_lien_petit_hexa()->get_nb();
1431     for (int i=0;i<nb_hexa;i++)
1432     {
1433     MG_HEXA* mghexa=noeud->get_lien_petit_hexa()->get(i);
1434     std::map<unsigned long,unsigned long> map2;
1435     map2[mghexa->get_noeud1()->get_id()]=mghexa->get_noeud1()->get_id();
1436     map2[mghexa->get_noeud2()->get_id()]=mghexa->get_noeud2()->get_id();
1437     map2[mghexa->get_noeud3()->get_id()]=mghexa->get_noeud3()->get_id();
1438     map2[mghexa->get_noeud4()->get_id()]=mghexa->get_noeud4()->get_id();
1439     map2[mghexa->get_noeud5()->get_id()]=mghexa->get_noeud5()->get_id();
1440     map2[mghexa->get_noeud6()->get_id()]=mghexa->get_noeud6()->get_id();
1441     map2[mghexa->get_noeud7()->get_id()]=mghexa->get_noeud7()->get_id();
1442     map2[mghexa->get_noeud8()->get_id()]=mghexa->get_noeud8()->get_id();
1443     std::map<unsigned long,unsigned long>::iterator it1,it2;
1444     it1=map1.begin();it2=map2.begin();
1445     int ok=1;
1446     while (it1!=map1.end())
1447     {
1448     if ((*it1).first!=(*it2).first) {ok=0;break;}
1449     it1++;
1450     it2++;
1451     }
1452     if (ok) return mghexa;
1453     }
1454     return NULL;
1455    
1456    
1457    
1458    
1459     }
1460    
1461     unsigned int MG_MAILLAGE::get_nb_mg_hexa(void)
1462     {
1463     return lst_mg_hexa.size();
1464     }
1465    
1466    
1467     int MG_MAILLAGE::supprimer_mg_hexaid(unsigned long num)
1468     {
1469     MG_HEXA* mghexa=get_mg_hexaid(num);
1470     if (mghexa==NULL)
1471     {
1472     // afficheur << INEXISTE2 << enderr;
1473     return FAIL;
1474     }
1475     MG_IDENTIFICATEUR* id=mghexa;
1476     LISTE_ENTITE::iterator i=lst_entite.find(id);
1477     lst_entite.erase(i);
1478     LISTE_MG_HEXA::iterator j=lst_mg_hexa.find(num);
1479     lst_mg_hexa.erase(j);
1480     MG_QUADRANGLE* quadrangle1=mghexa->get_quadrangle1();
1481     MG_QUADRANGLE* quadrangle2=mghexa->get_quadrangle2();
1482     MG_QUADRANGLE* quadrangle3=mghexa->get_quadrangle3();
1483     MG_QUADRANGLE* quadrangle4=mghexa->get_quadrangle4();
1484     MG_QUADRANGLE* quadrangle5=mghexa->get_quadrangle5();
1485     MG_QUADRANGLE* quadrangle6=mghexa->get_quadrangle6();
1486     delete mghexa;
1487     if (quadrangle1->get_nb_reference()==0)
1488     if (quadrangle1->get_lien_topologie()!=NULL)
1489     {
1490     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1491     }
1492     else supprimer_mg_quadrangleid(quadrangle1->get_id());
1493     if (quadrangle2->get_nb_reference()==0)
1494     if (quadrangle2->get_lien_topologie()!=NULL)
1495     {
1496     if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1497     }
1498     else supprimer_mg_quadrangleid(quadrangle2->get_id());
1499     if (quadrangle3->get_nb_reference()==0)
1500     if (quadrangle3->get_lien_topologie()!=NULL)
1501     {
1502     if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1503     }
1504     else supprimer_mg_quadrangleid(quadrangle3->get_id());
1505     if (quadrangle4->get_nb_reference()==0)
1506     if (quadrangle4->get_lien_topologie()!=NULL)
1507     {
1508     if (quadrangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle4->get_id());
1509     }
1510     else supprimer_mg_quadrangleid(quadrangle4->get_id());
1511     if (quadrangle5->get_nb_reference()==0)
1512     if (quadrangle5->get_lien_topologie()!=NULL)
1513     {
1514     if (quadrangle5->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle5->get_id());
1515     }
1516     else supprimer_mg_quadrangleid(quadrangle5->get_id());
1517     if (quadrangle6->get_nb_reference()==0)
1518     if (quadrangle6->get_lien_topologie()!=NULL)
1519     {
1520     if (quadrangle6->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle6->get_id());
1521     }
1522     else supprimer_mg_quadrangleid(quadrangle6->get_id());
1523     return OK;
1524     }
1525    
1526    
1527     int MG_MAILLAGE::supprimer_mg_hexa(unsigned int num)
1528     {
1529     MG_HEXA* mghexa=get_mg_hexa(num);
1530     if (mghexa==NULL)
1531     {
1532     // afficheur << INEXISTE2 << enderr;
1533     return FAIL;
1534     }
1535     MG_IDENTIFICATEUR* id=mghexa;
1536     LISTE_ENTITE::iterator i=lst_entite.find(id);
1537     lst_entite.erase(i);
1538     LISTE_MG_HEXA::iterator j=lst_mg_hexa.begin();
1539     for (unsigned int k=0;k<num;k++) j++;
1540     lst_mg_hexa.erase(j);
1541     MG_QUADRANGLE* quadrangle1=mghexa->get_quadrangle1();
1542     MG_QUADRANGLE* quadrangle2=mghexa->get_quadrangle2();
1543     MG_QUADRANGLE* quadrangle3=mghexa->get_quadrangle3();
1544     MG_QUADRANGLE* quadrangle4=mghexa->get_quadrangle4();
1545     MG_QUADRANGLE* quadrangle5=mghexa->get_quadrangle5();
1546     MG_QUADRANGLE* quadrangle6=mghexa->get_quadrangle6();
1547     delete mghexa;
1548     if (quadrangle1->get_nb_reference()==0)
1549     if (quadrangle1->get_lien_topologie()!=NULL)
1550     {
1551     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1552     }
1553     else supprimer_mg_quadrangleid(quadrangle1->get_id());
1554     if (quadrangle2->get_nb_reference()==0)
1555     if (quadrangle2->get_lien_topologie()!=NULL)
1556     {
1557     if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1558     }
1559     else supprimer_mg_quadrangleid(quadrangle2->get_id());
1560     if (quadrangle3->get_nb_reference()==0)
1561     if (quadrangle3->get_lien_topologie()!=NULL)
1562     {
1563     if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1564     }
1565     else supprimer_mg_quadrangleid(quadrangle3->get_id());
1566     if (quadrangle4->get_nb_reference()==0)
1567     if (quadrangle4->get_lien_topologie()!=NULL)
1568     {
1569     if (quadrangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle4->get_id());
1570     }
1571     else supprimer_mg_quadrangleid(quadrangle4->get_id());
1572     if (quadrangle5->get_nb_reference()==0)
1573     if (quadrangle5->get_lien_topologie()!=NULL)
1574     {
1575     if (quadrangle5->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle5->get_id());
1576     }
1577     else supprimer_mg_quadrangleid(quadrangle5->get_id());
1578     if (quadrangle6->get_nb_reference()==0)
1579     if (quadrangle6->get_lien_topologie()!=NULL)
1580     {
1581     if (quadrangle6->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle6->get_id());
1582     }
1583     else supprimer_mg_quadrangleid(quadrangle6->get_id());
1584     return OK;
1585     }
1586    
1587    
1588     void MG_MAILLAGE::supprimer_tout_mg_hexa(void)
1589     {
1590     while (get_nb_mg_hexa()!=0)
1591     {
1592     LISTE_MG_HEXA::iterator j=lst_mg_hexa.begin();
1593     MG_HEXA* mghexa=(*j).second;
1594     MG_IDENTIFICATEUR* id=mghexa;
1595     LISTE_ENTITE::iterator i=lst_entite.find(id);
1596     lst_entite.erase(i);
1597     lst_mg_hexa.erase(j);
1598     delete mghexa;
1599     }
1600     }
1601    
1602    
1603     MG_HEXA* MG_MAILLAGE::get_premier_hexa(LISTE_MG_HEXA::iterator & it)
1604     {
1605     it = lst_mg_hexa.begin();
1606     if (it == lst_mg_hexa.end())
1607     return NULL;
1608     return it->second;
1609     }
1610    
1611     MG_HEXA* MG_MAILLAGE::get_suivant_hexa(LISTE_MG_HEXA::iterator & it)
1612     {
1613     it++;
1614     if (it == lst_mg_hexa.end())
1615     return NULL;
1616     return it->second;
1617     }
1618    
1619    
1620    
1621    
1622 francois 283 bool MG_MAILLAGE::contient ( MG_IDENTIFICATEUR * id )
1623     {
1624     return ( lst_entite.find ( id ) != lst_entite.end() );
1625     }
1626    
1627 francois 763 void MG_MAILLAGE::enregistrer(std::ostream& o,double version)
1628 francois 283 {
1629 francois 581 int recherchedim=0;
1630     if (mg_geometrie==NULL) recherchedim=1;
1631     if (mg_geometrie!=NULL)
1632     if (strcmp(mg_geometrie->get_type_geometrie(),"VIRTUEL")==0) recherchedim=1;
1633     if (recherchedim==1)
1634 francois 283 {
1635     if (get_nb_mg_tetra()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=3;
1636 francois 308 else if (get_nb_mg_hexa()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=3;
1637 francois 283 else if (get_nb_mg_triangle()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=2;
1638 francois 308 else if (get_nb_mg_quadrangle()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=2;
1639 francois 283 else if (get_nb_mg_segment()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=1;
1640     else MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=0;
1641     }
1642 francois 465 if (est_structure==true)
1643     {
1644 francois 576 if (mg_geometrie==NULL) o << "%" << get_id() << "=MAILLAGE_STRUCTURE(NULL," << boite_englobante.get_xmin() << "," << boite_englobante.get_ymin() << "," << boite_englobante.get_zmin() << "," << boite_englobante.get_xmax() << "," << boite_englobante.get_ymax() << ","<< boite_englobante.get_zmax() << "," << nx <<"," << ny << "," << nz << ");" << std::endl;
1645     else o << "%" << get_id() << "=MAILLAGE_STRUCTURE($" << mg_geometrie->get_id() << "," << boite_englobante.get_xmin() << "," << boite_englobante.get_ymin() << "," << boite_englobante.get_zmin() << "," << boite_englobante.get_xmax() << "," << boite_englobante.get_ymax() << ","<< boite_englobante.get_zmax() << "," << nx <<"," << ny << "," << nz << ");" << std::endl;
1646 francois 465 }
1647     else
1648     {
1649 francois 466 if (mg_geometrie==NULL) o << "%" << get_id() << "=MAILLAGE(NULL);" << std::endl;
1650     else o << "%" << get_id() << "=MAILLAGE($" << mg_geometrie->get_id() << ");" << std::endl;
1651 francois 465 }
1652 francois 283 LISTE_ENTITE::const_iterator i;
1653     for (i=lst_entite.begin();i!=lst_entite.end();i++)
1654     {
1655     MG_IDENTIFICATEUR* entite = *i;
1656 francois 763 entite->enregistrer(o,version);
1657 francois 283 }
1658     }
1659    
1660     void MG_MAILLAGE::enregistrer_sous_mesh_1D(std::ostream& o)
1661     {
1662    
1663     int nb_noeud=0;
1664     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1665     {
1666     MG_NOEUD* noeud=((*i).second);
1667     if (noeud->get_lien_topologie()->get_dimension()<2) nb_noeud++;
1668     }
1669    
1670     int nb_seg=0;
1671     for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
1672     {
1673     MG_SEGMENT* seg=((*i).second);
1674     if (seg->get_lien_topologie()->get_dimension()<2) nb_seg++;
1675     }
1676    
1677     o << nb_noeud << " " << nb_seg << std::endl;
1678     int ii=0;
1679     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1680     {
1681     MG_NOEUD* noeud=((*i).second);
1682     if (noeud->get_lien_topologie()->get_dimension()<2)
1683     {
1684     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
1685     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1686     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
1687     o << noeud->get_lien_topologie()->get_id() << " " << noeud->get_id() << std::endl;
1688     noeud->change_nouveau_numero(ii+1);
1689     ii++;
1690     }
1691     }
1692    
1693     for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
1694     {
1695     MG_SEGMENT* seg=((*i).second);
1696     if (seg->get_lien_topologie()->get_dimension()<2)
1697     {
1698     o << "2 " << seg->get_noeud1()->get_nouveau_numero() << " " << seg->get_noeud2()->get_nouveau_numero() << " " ;
1699     if (seg->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1700     if (seg->get_lien_topologie()->get_dimension()==1) o << "edge ";
1701     o << seg->get_lien_topologie()->get_id() << std::endl;
1702     }
1703     }
1704    
1705     }
1706    
1707     void MG_MAILLAGE::enregistrer_sous_mesh_2D
1708     (std::ostream& o)
1709     {
1710     int nb_noeud=0;
1711     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1712     {
1713     MG_NOEUD* noeud=((*i).second);
1714     if (noeud->get_lien_topologie()->get_dimension()<3) nb_noeud++;
1715     }
1716    
1717     int nb_tri=0;
1718     for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
1719     {
1720     MG_TRIANGLE* triangle=((*i).second);
1721     if (triangle->get_lien_topologie()->get_dimension()<3) nb_tri++;
1722     }
1723    
1724     o << nb_noeud << " " << nb_tri << std::endl;
1725     int ii=0;
1726     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1727     {
1728     MG_NOEUD* noeud=((*i).second);
1729     if (noeud->get_lien_topologie()->get_dimension()<3)
1730     {
1731     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
1732     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1733     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
1734     if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
1735     o << noeud->get_lien_topologie()->get_id() << std::endl;
1736     noeud->change_nouveau_numero(ii+1);
1737     ii++;
1738     }
1739     }
1740    
1741     int compteur=0;
1742     for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
1743     {
1744     MG_TRIANGLE* triangle=((*i).second);
1745     if (triangle->get_lien_topologie()->get_dimension()<3)
1746     {
1747     o << "3 " << triangle->get_noeud1()->get_nouveau_numero() << " " << triangle->get_noeud2()->get_nouveau_numero() << " " << triangle->get_noeud3()->get_nouveau_numero() << " " ;
1748     if (triangle->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1749     if (triangle->get_lien_topologie()->get_dimension()==1) o << "edge ";
1750     if (triangle->get_lien_topologie()->get_dimension()==2) o << "face ";
1751     if (triangle->get_lien_topologie()->get_dimension()==3) o << "body ";
1752     o << triangle->get_lien_topologie()->get_id() << std::endl;
1753     compteur++;
1754     }
1755     }
1756    
1757     }
1758    
1759     void MG_MAILLAGE::enregistrer_sous_mesh_3D(std::ostream& o)
1760     {
1761     o << get_nb_mg_noeud() << " " << get_nb_mg_tetra() << std::endl;
1762     int ii=0;
1763     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1764     {
1765     MG_NOEUD* noeud=((*i).second);
1766     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
1767     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1768     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
1769     if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
1770     if (noeud->get_lien_topologie()->get_dimension()==3) o << "body ";
1771     o << noeud->get_lien_topologie()->get_id() << std::endl;
1772     noeud->change_nouveau_numero(ii+1);
1773     ii++;
1774     }
1775    
1776    
1777     for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
1778     {
1779     MG_TETRA* tetra=((*i).second);
1780     o << "4 " << tetra->get_noeud1()->get_nouveau_numero() << " " << tetra->get_noeud2()->get_nouveau_numero() << " " << tetra->get_noeud3()->get_nouveau_numero() << " " << tetra->get_noeud4()->get_nouveau_numero() << " " ;
1781     if (tetra->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1782     if (tetra->get_lien_topologie()->get_dimension()==1) o << "edge ";
1783     if (tetra->get_lien_topologie()->get_dimension()==2) o << "face ";
1784     if (tetra->get_lien_topologie()->get_dimension()==3) o << "body ";
1785     o << tetra->get_lien_topologie()->get_id() << std::endl;
1786     }
1787    
1788     }
1789    
1790     void MG_MAILLAGE::exporter_mesh(std::string& nomfic)
1791     {
1792     char chaine[500];
1793     sprintf(chaine,"%s_1D.mai",nomfic.c_str());
1794     std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
1795     of1.precision(16);
1796     of1.setf(std::ios::showpoint);
1797     enregistrer_sous_mesh_1D(of1);
1798     sprintf(chaine,"%s_2D.mai",nomfic.c_str());
1799     std::ofstream of2(chaine,std::ios::out|std::ios::trunc);
1800     of2.precision(16);
1801     of2.setf(std::ios::showpoint);
1802     enregistrer_sous_mesh_2D(of2);
1803     sprintf(chaine,"%s_3D.mai",nomfic.c_str());
1804     std::ofstream of3(chaine,std::ios::out|std::ios::trunc);
1805     of3.precision(16);
1806     of3.setf(std::ios::showpoint);
1807     enregistrer_sous_mesh_3D(of3);
1808     }
1809    
1810     /*
1811     void MG_MAILLAGE::exporter_cosmos(std::string& nomfic)
1812     {
1813     char chaine[500];
1814     sprintf(chaine,"%s.ses",nomfic.c_str());
1815     std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
1816     of1.precision(16);
1817     of1.setf(std::ios::showpoint);
1818     of1 << "TITLE, " << chaine << " : Fichier de maillage MAGiC" << std::endl;
1819     of1 << "EGROUP,1,TETRA4,0,0,0,0,0,0,0,0;" << std::endl;
1820     int nb_volume=mg_geometrie->get_nb_mg_volume();
1821     for (int i=0;i<nb_volume;i++)
1822     {
1823     MG_VOLUME *mgvol=mg_geometrie->get_mg_volume(i);
1824     if (mgvol->get_num_materiau()>=0)
1825     {
1826     MT_GESTIONNAIRE mtgest(mg_geometrie->get_gest_materiau());
1827     MT_MATERIAU* mat=mtgest.get_materiau(mgvol->get_num_materiau());
1828     MT_PROPRIETE* prop=mat->get_propriete("EX");
1829     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", EX, " << prop->get_valeur(2) << ";" << std::endl;
1830     prop=mat->get_propriete("NUXY");
1831     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", NUXY, " << prop->get_valeur(2) << ";" << std::endl;
1832     prop=mat->get_propriete("GXY");
1833     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", GXY, " << prop->get_valeur(2) << ";" << std::endl;
1834     prop=mat->get_propriete("DENS");
1835     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", DENS, " << prop->get_valeur(2) << ";" << std::endl;
1836     prop=mat->get_propriete("SIGXT");
1837     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGXT, " << prop->get_valeur(2) << ";" << std::endl;
1838     prop=mat->get_propriete("SIGYLD");
1839     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGYLD, " << prop->get_valeur(2) << ";" << std::endl;
1840     prop=mat->get_propriete("ALPX");
1841     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", ALPX, " << prop->get_valeur(2) << ";" << std::endl;
1842     prop=mat->get_propriete("KX");
1843     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", KX, " << prop->get_valeur(2) << ";" << std::endl;
1844     prop=mat->get_propriete("C");
1845     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", C, " << prop->get_valeur(2) << ";" << std::endl;
1846     }
1847     }
1848     of1 << "ACTSET,CS,0;" << std::endl;
1849     of1 << "ACTSET,EG,1;" << std::endl;
1850     int ii=0;
1851     double valeurunite=mg_geometrie->get_valeur_unite();
1852     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1853     {
1854     MG_NOEUD* noeud=((*i).second);
1855     of1 << "ND, " << (ii+1) << ", " << noeud->get_x()*valeurunite << ", " << noeud->get_y()*valeurunite << ", " << noeud->get_z()*valeurunite << ";" << std::endl;
1856     char nom[3];
1857     int nb=noeud->get_lien_topologie()->get_nb_ccf();
1858     for (int k=0;k<nb;k++)
1859     {
1860     noeud->get_lien_topologie()->get_type_ccf(k,nom);
1861     if (strcmp(nom,"Da")==0) of1 << "DND , " << ii+1 << ", AL, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1862     if (strcmp(nom,"Dx")==0) of1 << "DND , " << ii+1 << ", UX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1863     if (strcmp(nom,"Dy")==0) of1 << "DND , " << ii+1 << ", UY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1864     if (strcmp(nom,"Dz")==0) of1 << "DND , " << ii+1 << ", UZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1865     if (strcmp(nom,"Fx")==0) of1 << "FND , " << ii+1 << ", FX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1866     if (strcmp(nom,"Fy")==0) of1 << "FND , " << ii+1 << ", FY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1867     if (strcmp(nom,"Fz")==0) of1 << "FND , " << ii+1 << ", FZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1868     }
1869     ii++;
1870     noeud->change_nouveau_numero(ii);
1871     }
1872     ii=0;
1873     int nummat=-10;
1874     for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
1875     {
1876     MG_TETRA* tetra=((*i).second);
1877     MG_VOLUME* vol=(MG_VOLUME*)tetra->get_lien_topologie();
1878     int nummatac=vol->get_num_materiau();
1879     if (nummatac!=nummat)
1880     {
1881     nummat=nummatac;
1882     of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
1883     }
1884     of1 << "EL, " << ii+1 << ", VL, 1, 4, " << tetra->get_noeud1()->get_nouveau_numero() << ", " << tetra->get_noeud2()->get_nouveau_numero() << ", " << tetra->get_noeud3()->get_nouveau_numero() << ", " << tetra->get_noeud4()->get_nouveau_numero() << ", " ;
1885     ii++;
1886     if (tetra->get_triangle1()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
1887     if (tetra->get_triangle2()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
1888     if (tetra->get_triangle3()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
1889     if (tetra->get_triangle4()->get_lien_topologie()->get_dimension()!=3) of1 << "1;" << std::endl ; else of1 << "0;" << std::endl;
1890     char nom[3];
1891     int nb=tetra->get_triangle1()->get_lien_topologie()->get_nb_ccf();
1892     for (int k=0;k<nb;k++)
1893     {
1894     tetra->get_triangle1()->get_lien_topologie()->get_type_ccf(k,nom);
1895     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 1;" << std::endl;
1896     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 2;" << std::endl;
1897     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 3;" << std::endl;
1898     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 4;" << std::endl;
1899     }
1900     nb=tetra->get_triangle2()->get_lien_topologie()->get_nb_ccf();
1901     for (int k=0;k<nb;k++)
1902     {
1903     tetra->get_triangle2()->get_lien_topologie()->get_type_ccf(k,nom);
1904     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 1;" << std::endl;
1905     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 2;" << std::endl;
1906     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 3;" << std::endl;
1907     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 4;" << std::endl;
1908     }
1909     nb=tetra->get_triangle3()->get_lien_topologie()->get_nb_ccf();
1910     for (int k=0;k<nb;k++)
1911     {
1912     tetra->get_triangle3()->get_lien_topologie()->get_type_ccf(k,nom);
1913     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 1;" << std::endl;
1914     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 2;" << std::endl;
1915     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 3;" << std::endl;
1916     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 4;" << std::endl;
1917     }
1918     nb=tetra->get_triangle4()->get_lien_topologie()->get_nb_ccf();
1919     for (int k=0;k<nb;k++)
1920     {
1921     tetra->get_triangle4()->get_lien_topologie()->get_type_ccf(k,nom);
1922     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 1;" << std::endl;
1923     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 2;" << std::endl;
1924     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 3;" << std::endl;
1925     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 4;" << std::endl;
1926     }
1927     }
1928     }
1929    
1930     */
1931    
1932    
1933    
1934     void MG_MAILLAGE::exporter_giref(std::string& nomfic)
1935     {
1936     char chaine[500];
1937     sprintf(chaine,"%s.mail",nomfic.c_str());
1938     FILE *in=fopen(chaine,"wt");
1939     int lieu=0;
1940    
1941     fprintf(in,"8 Maillage\n");
1942     fprintf(in,"11 Version 1.0\n");
1943     fprintf(in,"%lu\n\n",get_id());
1944     int nb=get_nb_mg_noeud();
1945     fprintf(in,"%d\n",nb);
1946    
1947     LISTE_MG_NOEUD::iterator ind;
1948     MG_NOEUD* noeud=get_premier_noeud(ind);
1949     int i=0;
1950     while (noeud)
1951     {
1952     noeud->change_nouveau_numero(i++);
1953     MG_ELEMENT_TOPOLOGIQUE* topo=noeud->get_lien_topologie();
1954     if (topo->get_nouveau_numero()==-1)
1955     {
1956     topo->change_nouveau_numero(lieu);
1957     lieu++;
1958     }
1959     fprintf(in,"%.16e %.16e %.16e 0 %d \n",noeud->get_x(),noeud->get_y(),noeud->get_z(),topo->get_nouveau_numero());
1960     noeud=get_suivant_noeud(ind);
1961     }
1962    
1963    
1964     nb=get_nb_mg_segment();
1965     fprintf(in,"\n%d\n",nb);
1966    
1967     LISTE_MG_SEGMENT::iterator iseg;
1968     MG_SEGMENT* seg=get_premier_segment(iseg);
1969     i=0;
1970    
1971     while (seg)
1972     {
1973    
1974     seg->change_nouveau_numero(i);
1975     MG_ELEMENT_TOPOLOGIQUE* topo=seg->get_lien_topologie();
1976     if (topo->get_nouveau_numero()==-1)
1977     {
1978     topo->change_nouveau_numero(lieu);
1979     lieu++;
1980     }
1981     fprintf(in,"%d %d 0 %d \n",seg->get_noeud1()->get_nouveau_numero(),seg->get_noeud2()->get_nouveau_numero(),topo->get_nouveau_numero());
1982     seg = get_suivant_segment(iseg);
1983     }
1984     nb=get_nb_mg_triangle();
1985     fprintf(in,"\n%d\n",nb);
1986     for (int i=0;i<nb;i++)
1987     {
1988     MG_TRIANGLE* tri=get_mg_triangle(i);
1989     tri->change_nouveau_numero(i);
1990     MG_ELEMENT_TOPOLOGIQUE* topo=tri->get_lien_topologie();
1991     if (topo->get_nouveau_numero()==-1)
1992     {
1993     topo->change_nouveau_numero(lieu);
1994     lieu++;
1995     }
1996     fprintf(in,"3 %d %d %d 0 %d \n",tri->get_segment3()->get_nouveau_numero(),tri->get_segment2()->get_nouveau_numero(),tri->get_segment1()->get_nouveau_numero(),topo->get_nouveau_numero());
1997     }
1998     nb=get_nb_mg_tetra();
1999     fprintf(in,"\n0\n\n0\n\n0\n\n%d\n",nb);
2000     for (int i=0;i<nb;i++)
2001     {
2002     MG_TETRA* tet=get_mg_tetra(i);
2003     tet->change_nouveau_numero(i);
2004     MG_ELEMENT_TOPOLOGIQUE* topo=tet->get_lien_topologie();
2005     if (topo->get_nouveau_numero()==-1)
2006     {
2007     topo->change_nouveau_numero(lieu);
2008     lieu++;
2009     }
2010     TPL_MAP_ENTITE<MG_SEGMENT*> lst_segment;
2011     lst_segment.ajouter(tet->get_triangle1()->get_segment1());
2012     lst_segment.ajouter(tet->get_triangle1()->get_segment2());
2013     lst_segment.ajouter(tet->get_triangle1()->get_segment3());
2014     lst_segment.ajouter(tet->get_triangle2()->get_segment1());
2015     lst_segment.ajouter(tet->get_triangle2()->get_segment2());
2016     lst_segment.ajouter(tet->get_triangle2()->get_segment3());
2017     lst_segment.ajouter(tet->get_triangle3()->get_segment1());
2018     lst_segment.ajouter(tet->get_triangle3()->get_segment2());
2019     lst_segment.ajouter(tet->get_triangle3()->get_segment3());
2020     lst_segment.ajouter(tet->get_triangle4()->get_segment1());
2021     lst_segment.ajouter(tet->get_triangle4()->get_segment2());
2022     lst_segment.ajouter(tet->get_triangle4()->get_segment3());
2023     int tab[6];
2024     for (int j=0;j<6;j++)
2025     {
2026     MG_SEGMENT* seg=lst_segment.get(j);
2027     if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud2())) tab[0]=j;
2028     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud1())) tab[0]=j;
2029     else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud3())) tab[1]=j;
2030     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud1())) tab[1]=j;
2031     else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud4())) tab[2]=j;
2032     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud1())) tab[2]=j;
2033     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud3())) tab[3]=j;
2034     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud2())) tab[3]=j;
2035     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud4())) tab[4]=j;
2036     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud2())) tab[4]=j;
2037     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud4())) tab[5]=j;
2038     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud3())) tab[5]=j;
2039     }
2040     fprintf(in,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d 0 %d \n",tet->get_noeud1()->get_nouveau_numero(),tet->get_noeud2()->get_nouveau_numero(),tet->get_noeud3()->get_nouveau_numero(),tet->get_noeud4()->get_nouveau_numero(),lst_segment.get(tab[0])->get_nouveau_numero(),lst_segment.get(tab[1])->get_nouveau_numero(),lst_segment.get(tab[2])->get_nouveau_numero(),lst_segment.get(tab[3])->get_nouveau_numero(),lst_segment.get(tab[4])->get_nouveau_numero(),lst_segment.get(tab[5])->get_nouveau_numero(),tet->get_triangle1()->get_nouveau_numero(),tet->get_triangle2()->get_nouveau_numero(),tet->get_triangle3()->get_nouveau_numero(),tet->get_triangle4()->get_nouveau_numero(),topo->get_nouveau_numero());
2041     }
2042    
2043 francois 660 fprintf(in,"\n0\n\n0\n\n8 Maillage\n");
2044 francois 283 fclose(in);
2045     }
2046    
2047    
2048     std::ostream& operator << (std::ostream& o,MG_MAILLAGE& maillage)
2049     {
2050 francois 763 maillage.enregistrer(o,VERSIONFICHIER);
2051 francois 283 return o;
2052     }
2053    
2054    
2055     MG_SOLUTION* MG_MAILLAGE::calculer_carte_taille_reelle(char* nomfichier)
2056     {
2057     int nb_noeud=get_nb_mg_noeud();
2058     std::string nomsol="Carte de taille reelle";
2059     MG_SOLUTION* mgsol=new MG_SOLUTION(this,1,nomfichier,nb_noeud,nomsol);
2060     mgsol->change_legende(0,"F(x,y,z)");
2061     for (int j=0;j<nb_noeud;j++)
2062     {
2063     MG_NOEUD* noeud=get_mg_noeud(j);
2064     int nb_segment=noeud->get_lien_segment()->get_nb();
2065     double ec=0.;
2066     int nbr=0;
2067     for (int k=0;k<nb_segment;k++)
2068     {
2069     MG_SEGMENT* seg=noeud->get_lien_segment()->get(k);
2070     MG_SEGMENT* segtmp=get_mg_segmentid(seg->get_id());
2071     if (segtmp!=NULL)
2072     {
2073     nbr++;
2074     ec=ec+seg->get_longueur();
2075     }
2076     }
2077     ec=ec/nbr;
2078 francois 377 mgsol->ecrire(ec,j,0,0,0);
2079 francois 283 }
2080     return mgsol;
2081     }
2082    
2083    
2084     MG_GESTIONNAIRE* MG_MAILLAGE::get_gestionnaire(void)
2085     {
2086     return gest;
2087     }
2088    
2089 francois 465 void MG_MAILLAGE::change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp)
2090     {
2091     boite_englobante=btmp;
2092     nx=nxtmp;
2093     ny=nytmp;
2094     nz=nztmp;
2095     est_structure=true;
2096     }
2097    
2098     bool MG_MAILLAGE::get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp)
2099     {
2100     if (est_structure==true)
2101     {
2102     btmp=boite_englobante;
2103     nxtmp=nx;
2104     nytmp=ny;
2105     nztmp=nz;
2106     return true;
2107     }
2108     return false;
2109     }
2110    
2111    
2112     bool MG_MAILLAGE::get_est_structure(void)
2113     {
2114     return est_structure;
2115     }
2116