ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_maillage.cpp
Revision: 830
Committed: Fri Sep 30 20:08:17 2016 UTC (8 years, 7 months ago) by francois
File size: 87304 byte(s)
Log Message:
Posttraitement de l'optimisation de topologie
 * transfert des conditions aux limites sur le maillage de  peau via une geometrie virtuelle
* ajout d'un fichier .volume qui suit l'évolution du volume au travers du processus de posttraitement

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 francois 791 MG_NOEUD *newno=new MG_NOEUD(no->get_lien_topologie(),x,y,z,MAGIC::ORIGINE::DEFORME);
65 francois 516 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 francois 791 MG_SEGMENT *seg=new MG_SEGMENT(ele->get_lien_topologie(),no1,no2,MAGIC::ORIGINE::DEFORME);
74 francois 516 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 francois 791 ajouter_mg_triangle(ele->get_lien_topologie(),no1,no2,no3,MAGIC::ORIGINE::DEFORME);
85 francois 516 }
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 francois 791 ajouter_mg_quadrangle(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
93 francois 516 }
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 francois 791 ajouter_mg_tetra(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
105 francois 516 }
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 francois 791 ajouter_mg_hexa(ele->get_lien_topologie(),no1,no2,no3,no4,no5,no6,no7,no8,MAGIC::ORIGINE::DEFORME);
117 francois 516 }
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 francois 830 else if (triangle1->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle1->get_id());
1239 francois 283 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 francois 830 else if (triangle2->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle2->get_id());
1245 francois 283 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 francois 830 else if (triangle3->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle3->get_id());
1251 francois 283 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 francois 830 else if (triangle4->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle4->get_id());
1257 francois 283 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