ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/mg_maillage.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 108894 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
2     //####//------------------------------------------------------------
3     //####// MAGiC
4     //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5     //####// Departement de Genie Mecanique - UQTR
6     //####//------------------------------------------------------------
7     //####// MAGIC est un projet de recherche de l equipe ERICCA
8     //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9     //####// http://www.uqtr.ca/ericca
10     //####// http://www.uqtr.ca/
11     //####//------------------------------------------------------------
12     //####//------------------------------------------------------------
13     //####//
14     //####// mg_maillage.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:55 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 283
23    
24     #include "gestionversion.h"
25     #include <fstream>
26     #include <iostream>
27    
28    
29     #include "mg_maillage.h"
30     #include "mg_gestionnaire.h"
31 francois 296 #include "mc_gestionnaire.h"
32     #include "mc_propriete.h"
33     #include "mc_materiau.h"
34 francois 283 #include "tpl_map_entite.h"
35    
36    
37    
38     int MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=0;
39    
40    
41 francois 465 MG_MAILLAGE::MG_MAILLAGE(MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(),mg_geometrie(geo),est_structure(false)
42 francois 283 {
43     }
44    
45 francois 465 MG_MAILLAGE::MG_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(num),mg_geometrie(geo),est_structure(false)
46 francois 283 {
47     }
48    
49 francois 516
50     MG_MAILLAGE::MG_MAILLAGE(FEM_MAILLAGE* fem,double coef):MG_IDENTIFICATEUR(),mg_geometrie(fem->get_mg_geometrie()),est_structure(false)
51     {
52     {
53     gest=fem->get_mg_maillage()->get_gestionnaire();
54     gest->ajouter_mg_maillage(this);
55     LISTE_FEM_NOEUD::iterator it;
56     for (FEM_NOEUD* no=fem->get_premier_noeud(it);no!=NULL;no=fem->get_suivant_noeud(it))
57     {
58 francois 1117 if (no->get_mg_element_maillage()==NULL) continue;
59 francois 516 double x=no->get_x(coef);
60     double y=no->get_y(coef);
61     double z=no->get_z(coef);
62 francois 791 MG_NOEUD *newno=new MG_NOEUD(no->get_lien_topologie(),x,y,z,MAGIC::ORIGINE::DEFORME);
63 francois 516 ajouter_mg_noeud(newno);
64     no->change_numero(newno->get_id());
65     }
66     LISTE_FEM_ELEMENT1::iterator it1;
67     for (FEM_ELEMENT1 *ele=fem->get_premier_element1(it1);ele!=NULL;ele=fem->get_suivant_element1(it1))
68     {
69 francois 1117 if (ele->get_nb_fem_noeud()==2)
70     {
71     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
72     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
73     MG_SEGMENT *seg=new MG_SEGMENT(ele->get_lien_topologie(),no1,no2,MAGIC::ORIGINE::DEFORME);
74     ajouter_mg_segment(seg);
75     }
76     if (ele->get_nb_fem_noeud()==3)
77     {
78     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
79     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
80     MG_SEGMENT *seg=new MG_SEGMENT(ele->get_lien_topologie(),no1,no2,MAGIC::ORIGINE::DEFORME);
81     ajouter_mg_segment(seg);
82     }
83    
84 francois 516 }
85     LISTE_FEM_ELEMENT2::iterator it2;
86     for (FEM_ELEMENT2 *ele=fem->get_premier_element2(it2);ele!=NULL;ele=fem->get_suivant_element2(it2))
87     {
88     if (ele->get_nb_fem_noeud()==3)
89     {
90     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
91     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
92     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
93 francois 791 ajouter_mg_triangle(ele->get_lien_topologie(),no1,no2,no3,MAGIC::ORIGINE::DEFORME);
94 francois 516 }
95 francois 1117 if (ele->get_nb_fem_noeud()==6)
96     {
97     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
98     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
99     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
100     ajouter_mg_triangle(ele->get_lien_topologie(),no1,no2,no3,MAGIC::ORIGINE::DEFORME);
101     }
102 francois 516 if (ele->get_nb_fem_noeud()==4)
103     {
104     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
105     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
106     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
107     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
108 francois 791 ajouter_mg_quadrangle(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
109 francois 516 }
110 francois 1117 if (ele->get_nb_fem_noeud()==8)
111     {
112     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
113     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
114     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
115     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(6)->get_numero());
116     ajouter_mg_quadrangle(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
117     }
118 francois 516 }
119     LISTE_FEM_ELEMENT3::iterator it3;
120     for (FEM_ELEMENT3 *ele=fem->get_premier_element3(it3);ele!=NULL;ele=fem->get_suivant_element3(it3))
121     {
122     if (ele->get_nb_fem_noeud()==4)
123     {
124     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
125     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
126     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
127     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
128 francois 791 ajouter_mg_tetra(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
129 francois 516 }
130 francois 1117 if (ele->get_nb_fem_noeud()==10)
131     {
132     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
133     MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
134     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
135     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(9)->get_numero());
136     ajouter_mg_tetra(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
137     }
138 francois 516 if (ele->get_nb_fem_noeud()==8)
139     {
140     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
141 francois 1117 MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
142     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
143     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(6)->get_numero());
144     MG_NOEUD* no5=get_mg_noeudid(ele->get_fem_noeud(12)->get_numero());
145     MG_NOEUD* no6=get_mg_noeudid(ele->get_fem_noeud(14)->get_numero());
146     MG_NOEUD* no7=get_mg_noeudid(ele->get_fem_noeud(16)->get_numero());
147     MG_NOEUD* no8=get_mg_noeudid(ele->get_fem_noeud(18)->get_numero());
148     ajouter_mg_hexa(ele->get_lien_topologie(),no1,no2,no3,no4,no5,no6,no7,no8,MAGIC::ORIGINE::DEFORME);
149     }
150     if (ele->get_nb_fem_noeud()==20)
151     {
152     MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
153 francois 516 MG_NOEUD* no2=get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
154     MG_NOEUD* no3=get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
155     MG_NOEUD* no4=get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
156     MG_NOEUD* no5=get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
157     MG_NOEUD* no6=get_mg_noeudid(ele->get_fem_noeud(5)->get_numero());
158     MG_NOEUD* no7=get_mg_noeudid(ele->get_fem_noeud(6)->get_numero());
159     MG_NOEUD* no8=get_mg_noeudid(ele->get_fem_noeud(7)->get_numero());
160 francois 791 ajouter_mg_hexa(ele->get_lien_topologie(),no1,no2,no3,no4,no5,no6,no7,no8,MAGIC::ORIGINE::DEFORME);
161 francois 516 }
162     }
163    
164     }
165     }
166    
167 francois 1117 MG_MAILLAGE* MG_MAILLAGE::detacher(MG_GESTIONNAIRE *gest,MG_ELEMENT_TOPOLOGIQUE* topo)
168 francois 517 {
169 francois 1117 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
170     if (topo!=NULL)
171     {
172     topo->get_topologie_sousjacente(&lst);
173     lst.ajouter(topo);
174     }
175 francois 517 MG_MAILLAGE* mgmai=new MG_MAILLAGE(NULL);
176     gest->ajouter_mg_maillage(mgmai);
177     LISTE_MG_NOEUD::iterator itNo;
178     for (MG_NOEUD * noeud = get_premier_noeud(itNo); noeud; noeud=get_suivant_noeud(itNo))
179     {
180 francois 1117 if ((noeud->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
181     if (lst.existe(noeud->get_lien_topologie())==false) continue;
182 francois 517 double x=noeud->get_x();
183     double y=noeud->get_y();
184     double z=noeud->get_z();
185     MG_NOEUD *newno=new MG_NOEUD(NULL,x,y,z,noeud->get_origine());
186     mgmai->ajouter_mg_noeud(newno);
187     noeud->change_nouveau_numero(newno->get_id());
188     }
189     LISTE_MG_SEGMENT::iterator itSeg;
190     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
191     {
192 francois 1117 if ((segment->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
193     if (lst.existe(segment->get_lien_topologie())==false) continue;
194 francois 517 MG_NOEUD* no1=mgmai->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
195     MG_NOEUD* no2=mgmai->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
196     MG_SEGMENT *seg=new MG_SEGMENT(NULL,no1,no2,segment->get_origine());
197     mgmai->ajouter_mg_segment(seg);
198     }
199     LISTE_MG_TRIANGLE::iterator itTri;
200     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
201     {
202 francois 1117 if ((triangle->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
203     if (lst.existe(triangle->get_lien_topologie())==false) continue;
204 francois 517 MG_NOEUD* no1=mgmai->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
205     MG_NOEUD* no2=mgmai->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
206     MG_NOEUD* no3=mgmai->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
207     mgmai->ajouter_mg_triangle(NULL,no1,no2,no3,triangle->get_origine());
208     }
209     LISTE_MG_QUADRANGLE::iterator itquad;
210     for (MG_QUADRANGLE *quad = get_premier_quadrangle(itquad); quad; quad=get_suivant_quadrangle(itquad))
211     {
212 francois 1117 if ((quad->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
213     if (lst.existe(quad->get_lien_topologie())==false) continue;
214 francois 517 MG_NOEUD* no1=mgmai->get_mg_noeudid(quad->get_noeud1()->get_nouveau_numero());
215     MG_NOEUD* no2=mgmai->get_mg_noeudid(quad->get_noeud2()->get_nouveau_numero());
216     MG_NOEUD* no3=mgmai->get_mg_noeudid(quad->get_noeud3()->get_nouveau_numero());
217     MG_NOEUD* no4=mgmai->get_mg_noeudid(quad->get_noeud4()->get_nouveau_numero());
218     mgmai->ajouter_mg_quadrangle(NULL,no1,no2,no3,no4,quad->get_origine());
219     }
220     LISTE_MG_TETRA::iterator ittet;
221     for (MG_TETRA *tet = get_premier_tetra(ittet); tet; tet=get_suivant_tetra(ittet))
222     {
223 francois 1117 if ((tet->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
224     if (lst.existe(tet->get_lien_topologie())==false) continue;
225 francois 517 MG_NOEUD* no1=mgmai->get_mg_noeudid(tet->get_noeud1()->get_nouveau_numero());
226     MG_NOEUD* no2=mgmai->get_mg_noeudid(tet->get_noeud2()->get_nouveau_numero());
227     MG_NOEUD* no3=mgmai->get_mg_noeudid(tet->get_noeud3()->get_nouveau_numero());
228     MG_NOEUD* no4=mgmai->get_mg_noeudid(tet->get_noeud4()->get_nouveau_numero());
229     mgmai->ajouter_mg_tetra(NULL,no1,no2,no3,no4,tet->get_origine());
230     }
231     LISTE_MG_HEXA::iterator ithex;
232     for (MG_HEXA *hex = get_premier_hexa(ithex); hex; hex=get_suivant_hexa(ithex))
233     {
234 francois 1117 if ((hex->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
235     if (lst.existe(hex->get_lien_topologie())==false) continue;
236 francois 517 MG_NOEUD* no1=mgmai->get_mg_noeudid(hex->get_noeud1()->get_nouveau_numero());
237     MG_NOEUD* no2=mgmai->get_mg_noeudid(hex->get_noeud2()->get_nouveau_numero());
238     MG_NOEUD* no3=mgmai->get_mg_noeudid(hex->get_noeud3()->get_nouveau_numero());
239     MG_NOEUD* no4=mgmai->get_mg_noeudid(hex->get_noeud4()->get_nouveau_numero());
240     MG_NOEUD* no5=mgmai->get_mg_noeudid(hex->get_noeud5()->get_nouveau_numero());
241     MG_NOEUD* no6=mgmai->get_mg_noeudid(hex->get_noeud6()->get_nouveau_numero());
242     MG_NOEUD* no7=mgmai->get_mg_noeudid(hex->get_noeud7()->get_nouveau_numero());
243     MG_NOEUD* no8=mgmai->get_mg_noeudid(hex->get_noeud8()->get_nouveau_numero());
244     mgmai->ajouter_mg_hexa(NULL,no1,no2,no3,no4,no5,no6,no7,no8,hex->get_origine());
245     }
246 francois 876 LISTE_MG_PENTA::iterator itpen;
247     for (MG_PENTA *pen = get_premier_penta(itpen); pen; pen=get_suivant_penta(itpen))
248     {
249 francois 1117 if ((pen->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
250     if (lst.existe(pen->get_lien_topologie())==false) continue;
251 francois 876 MG_NOEUD* no1=mgmai->get_mg_noeudid(pen->get_noeud1()->get_nouveau_numero());
252     MG_NOEUD* no2=mgmai->get_mg_noeudid(pen->get_noeud2()->get_nouveau_numero());
253     MG_NOEUD* no3=mgmai->get_mg_noeudid(pen->get_noeud3()->get_nouveau_numero());
254     MG_NOEUD* no4=mgmai->get_mg_noeudid(pen->get_noeud4()->get_nouveau_numero());
255     MG_NOEUD* no5=mgmai->get_mg_noeudid(pen->get_noeud5()->get_nouveau_numero());
256     MG_NOEUD* no6=mgmai->get_mg_noeudid(pen->get_noeud6()->get_nouveau_numero());
257     mgmai->ajouter_mg_penta(NULL,no1,no2,no3,no4,no5,no6,pen->get_origine());
258     }
259 francois 517 return mgmai;
260     }
261 francois 516
262 francois 283 MG_MAILLAGE* MG_MAILLAGE::dupliquer(MG_GESTIONNAIRE* gest)
263     {
264     MG_MAILLAGE* mgmai=new MG_MAILLAGE(this->get_mg_geometrie());
265     gest->ajouter_mg_maillage(mgmai);
266     long decalage=mgmai->get_id()-this->get_id();
267     LISTE_ENTITE::const_iterator i;
268     LISTE_MG_NOEUD::iterator itNo;
269     for (MG_NOEUD * noeud = get_premier_noeud(itNo); noeud; noeud=get_suivant_noeud(itNo))
270     noeud->dupliquer(mgmai,decalage);
271     LISTE_MG_SEGMENT::iterator itSeg;
272     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
273     segment->dupliquer(mgmai,decalage);
274     LISTE_MG_TRIANGLE::iterator itTri;
275     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
276     triangle->dupliquer(mgmai,decalage);
277     LISTE_MG_TETRA::iterator itTetra;
278     for (MG_TETRA * tetra = get_premier_tetra(itTetra); tetra; tetra=get_suivant_tetra(itTetra))
279     tetra->dupliquer(mgmai,decalage);
280     /* bug quand l'identificateur d'un triangle pr�c�de celui de ses segments
281     for (i=lst_entite.begin();i!=lst_entite.end();i++)
282     {
283     MG_ELEMENT_MAILLAGE& ele=(MG_ELEMENT_MAILLAGE&)(*(*i));
284     ele.dupliquer(mgmai,decalage);
285     }*/
286 francois 1082 /* int nb_segment = get_nb_mg_segment();
287 francois 283 int nb_triangle = get_nb_mg_triangle();
288     int nb_tetra = get_nb_mg_tetra();
289    
290     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
291     {
292     MG_TRIANGLE * triangle2 = mgmai->get_mg_triangleid(triangle->get_id()+decalage);
293    
294     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra = triangle->get_lien_tetra();
295     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra2 = triangle2->get_lien_tetra();
296     for (int it_tetra = 0; it_tetra != lst_lien_tetra->get_nb(); it_tetra++)
297     {
298     MG_TETRA * t = lst_lien_tetra->get(it_tetra);
299     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
300    
301     lst_lien_tetra2->ajouter ( t2 );
302     }
303     }
304    
305     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
306     {
307     MG_SEGMENT * segment2 = mgmai->get_mg_segmentid(segment->get_id()+decalage);
308    
309     TPL_LISTE_ENTITE<MG_TRIANGLE*> * lst_lien_triangle = segment->get_lien_triangle();
310     TPL_LISTE_ENTITE<MG_TRIANGLE*> * lst_lien_triangle2 = segment2->get_lien_triangle();
311     for (int it_triang = 0; it_triang != lst_lien_triangle->get_nb(); it_triang++)
312     {
313     MG_TRIANGLE * t = lst_lien_triangle->get(it_triang);
314     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
315    
316     lst_lien_triangle2->ajouter ( t2 );
317     }
318     }
319    
320     for (MG_NOEUD * n = get_premier_noeud(itNo); n; n=get_suivant_noeud(itNo))
321     {
322     MG_NOEUD * n2 = mgmai->get_mg_noeudid(n->get_id()+decalage);
323    
324     if (nb_segment != 0)
325     {
326     TPL_LISTE_ENTITE<MG_SEGMENT*> * lst_lien_segment = n->get_lien_segment();
327     TPL_LISTE_ENTITE<MG_SEGMENT*> * lst_lien_segment2 = n2->get_lien_segment();
328     for (int it_seg = 0; it_seg != lst_lien_segment->get_nb(); it_seg++)
329     {
330     MG_SEGMENT * seg = lst_lien_segment->get(it_seg);
331     MG_SEGMENT * seg2 = mgmai->get_mg_segmentid( seg->get_id() + decalage );
332    
333     lst_lien_segment2->ajouter ( seg2 );
334     }
335    
336     TPL_LISTE_ENTITE< MG_SEGMENT*> * lst_lien_petit_segment = n->get_lien_petit_segment();
337     TPL_LISTE_ENTITE< MG_SEGMENT*> * lst_lien_petit_segment2 = n2->get_lien_petit_segment();
338     for (int it_seg = 0; it_seg != lst_lien_petit_segment->get_nb(); it_seg++)
339     {
340     MG_SEGMENT * seg = lst_lien_petit_segment->get(it_seg);
341     MG_SEGMENT * seg2 = mgmai->get_mg_segmentid( seg->get_id() + decalage );
342    
343     lst_lien_petit_segment2->ajouter ( seg2 );
344     }
345     }
346    
347     if (nb_triangle != 0)
348     {
349     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_triangle = n->get_lien_triangle();
350     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_triangle2 = n2->get_lien_triangle();
351     for (int it_triang = 0; it_triang != lst_lien_triangle->get_nb(); it_triang++)
352     {
353     MG_TRIANGLE * t = lst_lien_triangle->get(it_triang);
354     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
355    
356     lst_lien_triangle2->ajouter ( t2 );
357     }
358    
359     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_petit_triangle = n->get_lien_petit_triangle();
360     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_petit_triangle2 = n2->get_lien_petit_triangle();
361     for (int it_triang = 0; it_triang != lst_lien_petit_triangle->get_nb(); it_triang++)
362     {
363     MG_TRIANGLE * t = lst_lien_petit_triangle->get(it_triang);
364     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
365    
366     lst_lien_petit_triangle2->ajouter ( t2 );
367     }
368     }
369    
370     if (nb_tetra != 0)
371     {
372     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra = n->get_lien_tetra();
373     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra2 = n2->get_lien_tetra();
374     for (int it_tetra = 0; it_tetra != lst_lien_tetra->get_nb(); it_tetra++)
375     {
376     MG_TETRA * t = lst_lien_tetra->get(it_tetra);
377     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
378    
379     lst_lien_tetra2->ajouter ( t2 );
380     }
381    
382     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_petit_tetra = n->get_lien_petit_tetra();
383     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_petit_tetra2 = n2->get_lien_petit_tetra();
384     for (int it_tetra = 0; it_tetra != lst_lien_petit_tetra->get_nb(); it_tetra++)
385     {
386     MG_TETRA * t = lst_lien_petit_tetra->get(it_tetra);
387     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
388    
389     lst_lien_petit_tetra2->ajouter ( t2 );
390     }
391     }
392    
393 francois 1082 }*/
394 francois 283
395     return mgmai;
396     }
397    
398    
399     MG_MAILLAGE::~MG_MAILLAGE()
400     {
401 francois 876 supprimer_tout_mg_penta();
402     supprimer_tout_mg_hexa();
403 francois 283 supprimer_tout_mg_tetra();
404 francois 876 supprimer_tout_mg_quadrangle();
405 francois 283 supprimer_tout_mg_triangle();
406     supprimer_tout_mg_segment();
407     supprimer_tout_mg_noeud();
408     }
409    
410     MG_GEOMETRIE* MG_MAILLAGE::get_mg_geometrie(void)
411     {
412     return mg_geometrie;
413     }
414    
415    
416     void MG_MAILLAGE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
417     {
418     gest=mggest;
419     }
420    
421     MG_NOEUD* MG_MAILLAGE::ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE* topo,double xx,double yy,double zz,int origine,unsigned long num)
422     {
423     MG_NOEUD* mgnoeud;
424     if (num==0) mgnoeud=new MG_NOEUD(topo,xx,yy,zz,origine);
425     else mgnoeud=new MG_NOEUD(num,topo,xx,yy,zz,origine);
426     int resultat = ajouter_mg_noeud(mgnoeud);
427     if (resultat==FAIL)
428     {
429     delete mgnoeud;
430     return NULL;
431     }
432     return mgnoeud;
433     }
434    
435     int MG_MAILLAGE::ajouter_mg_noeud(MG_NOEUD *mgnoeud)
436     {
437     gest->recherche_bonid(*mgnoeud);
438     MG_IDENTIFICATEUR *id=mgnoeud;
439     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
440     if (!p.second)
441     {
442     return FAIL;
443     }
444    
445     std::pair<const unsigned long,MG_NOEUD*> tmp(mgnoeud->get_id(),mgnoeud);
446     lst_mg_noeud.insert(tmp);
447     return OK;
448     }
449    
450    
451     MG_NOEUD* MG_MAILLAGE::get_mg_noeudid(unsigned long num)
452     {
453     LISTE_MG_NOEUD::iterator i=lst_mg_noeud.find(num);
454     if (i==lst_mg_noeud.end())
455     {
456     return NULL;
457     }
458     return ((*i).second);
459     }
460    
461    
462    
463     MG_NOEUD* MG_MAILLAGE::get_mg_noeud(unsigned int num)
464     {
465     if (!(num<lst_mg_noeud.size()))
466     {
467     return NULL;
468     }
469     LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();
470     for (unsigned long j=0;j<num;j++) i++;
471     return ((*i).second);
472     }
473    
474    
475    
476     unsigned int MG_MAILLAGE::get_nb_mg_noeud(void)
477     {
478     return lst_mg_noeud.size();
479     }
480    
481    
482     int MG_MAILLAGE::supprimer_mg_noeudid(unsigned long num)
483     {
484     MG_NOEUD* mgnoeud=get_mg_noeudid(num);
485     if (mgnoeud==NULL)
486     {
487     return FAIL;
488     }
489     if (mgnoeud->get_lien_segment()->get_nb())
490     {
491     return FAIL;
492     }
493     if (mgnoeud->get_lien_triangle()->get_nb())
494     {
495     return FAIL;
496     }
497     MG_IDENTIFICATEUR* id=mgnoeud;
498     LISTE_ENTITE::iterator i=lst_entite.find(id);
499     lst_entite.erase(i);
500     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.find(num);
501     lst_mg_noeud.erase(j);
502     delete mgnoeud;
503     return OK;
504     }
505    
506    
507     int MG_MAILLAGE::supprimer_mg_noeud(unsigned int num)
508     {
509     MG_NOEUD* mgnoeud=get_mg_noeud(num);
510     if (mgnoeud==NULL)
511     {
512     return FAIL;
513     }
514     if (mgnoeud->get_lien_segment()->get_nb())
515     {
516     return FAIL;
517     }
518     if (mgnoeud->get_lien_triangle()->get_nb())
519     {
520     return FAIL;
521     }
522     MG_IDENTIFICATEUR* id=mgnoeud;
523     LISTE_ENTITE::iterator i=lst_entite.find(id);
524     lst_entite.erase(i);
525     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.begin();
526     for (unsigned int k=0;k<num;k++) j++;
527     lst_mg_noeud.erase(j);
528     delete mgnoeud;
529     return OK;
530     }
531    
532    
533     void MG_MAILLAGE::supprimer_tout_mg_noeud(void)
534     {
535     while (get_nb_mg_noeud()!=0)
536     {
537     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.begin();
538     MG_NOEUD* mgnoeud=(*j).second;
539     MG_IDENTIFICATEUR* id=mgnoeud;
540     LISTE_ENTITE::iterator i=lst_entite.find(id);
541     lst_entite.erase(i);
542     lst_mg_noeud.erase(j);
543     delete mgnoeud;
544     }
545     }
546    
547    
548     MG_NOEUD* MG_MAILLAGE::get_premier_noeud(LISTE_MG_NOEUD::iterator & it)
549     {
550     it = lst_mg_noeud.begin();
551     if (it == lst_mg_noeud.end())
552     return NULL;
553     return it->second;
554     }
555    
556     MG_NOEUD* MG_MAILLAGE::get_suivant_noeud(LISTE_MG_NOEUD::iterator & it)
557     {
558     it++;
559     if (it == lst_mg_noeud.end())
560     return NULL;
561     return it->second;
562     }
563    
564    
565     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)
566     {
567     MG_SEGMENT* mgsegment;
568     if (num==0) mgsegment=new MG_SEGMENT(topo,mgnoeud1,mgnoeud2,origine,longue);
569     else mgsegment=new MG_SEGMENT(num,topo,mgnoeud1,mgnoeud2,origine,longue);
570     int resultat=ajouter_mg_segment(mgsegment);
571     if (resultat==FAIL)
572     {
573     delete mgsegment;
574     return NULL;
575     }
576     return mgsegment;
577     }
578    
579     int MG_MAILLAGE::ajouter_mg_segment(MG_SEGMENT *mgsegment)
580     {
581     gest->recherche_bonid(*mgsegment);
582     MG_IDENTIFICATEUR *id=mgsegment;
583     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
584     if (!p.second)
585     {
586     return FAIL;
587     }
588    
589     std::pair<const unsigned long,MG_SEGMENT*> tmp(mgsegment->get_id(),mgsegment);
590     lst_mg_segment.insert(tmp);
591     return OK;
592     }
593    
594    
595     MG_SEGMENT* MG_MAILLAGE::get_mg_segmentid(unsigned long num)
596     {
597     LISTE_MG_SEGMENT::iterator i=lst_mg_segment.find(num);
598     if (i==lst_mg_segment.end())
599     {
600     return NULL;
601     }
602     return ((*i).second);
603     }
604    
605     MG_SEGMENT* MG_MAILLAGE::get_mg_segment(unsigned long noeud1id,unsigned long noeud2id)
606     {
607     unsigned long id=std::min(noeud1id,noeud2id);
608     MG_NOEUD* noeud=get_mg_noeudid(id);
609     int nb_segment=noeud->get_lien_petit_segment()->get_nb();
610     for (int i=0;i<nb_segment;i++)
611     {
612     MG_SEGMENT* mgsegment=noeud->get_lien_petit_segment()->get(i);
613     if ( (mgsegment->get_noeud1()->get_id()==noeud1id) && (mgsegment->get_noeud2()->get_id()==noeud2id) ) return mgsegment;
614     if ( (mgsegment->get_noeud2()->get_id()==noeud1id) && (mgsegment->get_noeud1()->get_id()==noeud2id) ) return mgsegment;
615     }
616     return NULL;
617     }
618    
619     MG_SEGMENT* MG_MAILLAGE::get_mg_segment(unsigned int num)
620     {
621     if (!(num<lst_mg_segment.size()))
622     {
623     return NULL;
624     }
625     LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();
626     std::advance(i,num);
627     return ((*i).second);
628     }
629    
630     MG_SEGMENT* MG_MAILLAGE::get_premier_segment(LISTE_MG_SEGMENT::iterator & it)
631     {
632     it = lst_mg_segment.begin();
633     if (it == lst_mg_segment.end())
634     return NULL;
635     return it->second;
636     }
637    
638     MG_SEGMENT* MG_MAILLAGE::get_suivant_segment(LISTE_MG_SEGMENT::iterator & it)
639     {
640     it++;
641     if (it == lst_mg_segment.end())
642     return NULL;
643     return it->second;
644     }
645    
646     unsigned int MG_MAILLAGE::get_nb_mg_segment(void)
647     {
648     return lst_mg_segment.size();
649     }
650    
651    
652     int MG_MAILLAGE::supprimer_mg_segmentid(unsigned long num)
653     {
654     MG_SEGMENT* mgsegment=get_mg_segmentid(num);
655     if (mgsegment==NULL)
656     {
657     return FAIL;
658     }
659     MG_IDENTIFICATEUR* id=mgsegment;
660     LISTE_ENTITE::iterator i=lst_entite.find(id);
661     lst_entite.erase(i);
662     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.find(num);
663     lst_mg_segment.erase(j);
664     MG_NOEUD* noeud1=mgsegment->get_noeud1();
665     MG_NOEUD* noeud2=mgsegment->get_noeud2();
666     delete mgsegment;
667     if (noeud1->get_nb_reference()==0)
668     if (noeud1->get_lien_topologie()!=NULL)
669     {
670     if (noeud1->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud1->get_id());
671     }
672     else supprimer_mg_noeudid(noeud1->get_id());
673     if (noeud2->get_nb_reference()==0)
674     if (noeud2->get_lien_topologie()!=NULL)
675     {
676     if (noeud2->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud2->get_id());
677     }
678     else supprimer_mg_noeudid(noeud2->get_id());
679     return OK;
680     }
681    
682    
683     int MG_MAILLAGE::supprimer_mg_segment(unsigned int num)
684     {
685     MG_SEGMENT* mgsegment=get_mg_segment(num);
686     if (mgsegment==NULL)
687     {
688     return FAIL;
689     }
690     MG_IDENTIFICATEUR* id=mgsegment;
691     LISTE_ENTITE::iterator i=lst_entite.find(id);
692     lst_entite.erase(i);
693     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.begin();
694     for (unsigned int k=0;k<num;k++) j++;
695     lst_mg_segment.erase(j);
696     MG_NOEUD* noeud1=mgsegment->get_noeud1();
697     MG_NOEUD* noeud2=mgsegment->get_noeud2();
698     delete mgsegment;
699     if (noeud1->get_nb_reference()==0)
700     if (noeud1->get_lien_topologie()!=NULL)
701     {
702     if (noeud1->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud1->get_id());
703     }
704     else supprimer_mg_noeudid(noeud1->get_id());
705     if (noeud2->get_nb_reference()==0)
706     if (noeud2->get_lien_topologie()!=NULL)
707     {
708     if (noeud2->get_lien_topologie()->get_dimension()>0) supprimer_mg_noeudid(noeud2->get_id());
709     }
710     else supprimer_mg_noeudid(noeud2->get_id());
711     return OK;
712     }
713    
714    
715     void MG_MAILLAGE::supprimer_tout_mg_segment(void)
716     {
717     while (get_nb_mg_segment()!=0)
718     {
719     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.begin();
720     MG_SEGMENT* mgsegment=(*j).second;
721     MG_IDENTIFICATEUR* id=mgsegment;
722     LISTE_ENTITE::iterator i=lst_entite.find(id);
723     lst_entite.erase(i);
724     lst_mg_segment.erase(j);
725     delete mgsegment;
726     }
727    
728     }
729    
730    
731     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)
732     {
733     MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
734     MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
735     MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud1->get_id());
736     if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(topo,mgnoeud1,mgnoeud2,origine);
737     if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(topo,mgnoeud2,mgnoeud3,origine);
738     if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(topo,mgnoeud3,mgnoeud1,origine);
739     MG_TRIANGLE* mgtriangle;
740     if (num==0) mgtriangle=new MG_TRIANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
741     else mgtriangle=new MG_TRIANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
742     int resultat=ajouter_mg_triangle(mgtriangle);
743     if (resultat==FAIL)
744     {
745     delete mgtriangle;
746     return NULL;
747     }
748     return mgtriangle;
749     }
750    
751    
752     int MG_MAILLAGE::ajouter_mg_triangle(MG_TRIANGLE *mgtriangle)
753     {
754     gest->recherche_bonid(*mgtriangle);
755     MG_IDENTIFICATEUR *id=mgtriangle;
756     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
757     if (!p.second)
758     {
759     return FAIL;
760     }
761    
762     std::pair<const unsigned long,MG_TRIANGLE*> tmp(mgtriangle->get_id(),mgtriangle);
763     lst_mg_triangle.insert(tmp);
764     return OK;
765     }
766    
767    
768     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangleid(unsigned long num)
769     {
770     LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.find(num);
771     if (i==lst_mg_triangle.end())
772     {
773     return NULL;
774     }
775     return ((*i).second);
776     }
777    
778    
779    
780     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned int num)
781     {
782     if (!(num<lst_mg_triangle.size()))
783     {
784     return NULL;
785     }
786     LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();
787     for (unsigned long j=0;j<num;j++) i++;
788     return ((*i).second);
789     }
790    
791     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id)
792     {
793     unsigned long id=std::min(noeud1id,noeud2id);
794     id=std::min(id,noeud3id);
795     MG_NOEUD* noeud=get_mg_noeudid(id);
796     int nb_triangle=noeud->get_lien_petit_triangle()->get_nb();
797     for (int i=0;i<nb_triangle;i++)
798     {
799     MG_TRIANGLE* mgtriangle=noeud->get_lien_petit_triangle()->get(i);
800     if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
801     if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
802     if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
803     if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
804     if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
805     if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
806     }
807     return NULL;
808     }
809    
810     unsigned int MG_MAILLAGE::get_nb_mg_triangle(void)
811     {
812     return lst_mg_triangle.size();
813     }
814    
815    
816     int MG_MAILLAGE::supprimer_mg_triangleid(unsigned long num)
817     {
818     MG_TRIANGLE* mgtriangle=get_mg_triangleid(num);
819     if (mgtriangle==NULL)
820     {
821     return FAIL;
822     }
823     MG_IDENTIFICATEUR* id=mgtriangle;
824     LISTE_ENTITE::iterator i=lst_entite.find(id);
825     lst_entite.erase(i);
826     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.find(num);
827     lst_mg_triangle.erase(j);
828     MG_SEGMENT* segment1=mgtriangle->get_segment1();
829     MG_SEGMENT* segment2=mgtriangle->get_segment2();
830     MG_SEGMENT* segment3=mgtriangle->get_segment3();
831     delete mgtriangle;
832     if (segment1->get_nb_reference()==0)
833     if (segment1->get_lien_topologie()!=NULL)
834     {
835     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
836     }
837     else supprimer_mg_segmentid(segment1->get_id());
838     if (segment2->get_nb_reference()==0)
839     if (segment2->get_lien_topologie()!=NULL)
840     {
841     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
842     }
843     else supprimer_mg_segmentid(segment2->get_id());
844     if (segment3->get_nb_reference()==0)
845     if (segment3->get_lien_topologie()!=NULL)
846     {
847     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
848     }
849     else supprimer_mg_segmentid(segment3->get_id());
850     return OK;
851     }
852    
853    
854     int MG_MAILLAGE::supprimer_mg_triangle(unsigned int num)
855     {
856     MG_TRIANGLE* mgtriangle=get_mg_triangle(num);
857     if (mgtriangle==NULL)
858     {
859     return FAIL;
860     }
861     MG_IDENTIFICATEUR* id=mgtriangle;
862     LISTE_ENTITE::iterator i=lst_entite.find(id);
863     lst_entite.erase(i);
864     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
865     for (unsigned int k=0;k<num;k++) j++;
866     lst_mg_triangle.erase(j);
867     MG_SEGMENT* segment1=mgtriangle->get_segment1();
868     MG_SEGMENT* segment2=mgtriangle->get_segment2();
869     MG_SEGMENT* segment3=mgtriangle->get_segment3();
870     delete mgtriangle;
871     if (segment1->get_nb_reference()==0)
872     if (segment1->get_lien_topologie()!=NULL)
873     {
874     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
875     }
876     else supprimer_mg_segmentid(segment1->get_id());
877     if (segment2->get_nb_reference()==0)
878     if (segment2->get_lien_topologie()!=NULL)
879     {
880     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
881     }
882     else supprimer_mg_segmentid(segment2->get_id());
883     if (segment3->get_nb_reference()==0)
884     if (segment3->get_lien_topologie()!=NULL)
885     {
886     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
887     }
888     else supprimer_mg_segmentid(segment3->get_id());
889     return OK;
890     }
891    
892    
893     void MG_MAILLAGE::supprimer_tout_mg_triangle(void)
894     {
895     while (get_nb_mg_triangle()!=0)
896     {
897     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
898     MG_TRIANGLE* mgtriangle=(*j).second;
899     MG_IDENTIFICATEUR* id=mgtriangle;
900     LISTE_ENTITE::iterator i=lst_entite.find(id);
901     lst_entite.erase(i);
902     lst_mg_triangle.erase(j);
903     delete mgtriangle;
904     }
905     }
906    
907    
908     MG_TRIANGLE* MG_MAILLAGE::get_premier_triangle(LISTE_MG_TRIANGLE::iterator & it)
909     {
910     it = lst_mg_triangle.begin();
911     if (it == lst_mg_triangle.end())
912     return NULL;
913     return it->second;
914     }
915    
916     MG_TRIANGLE* MG_MAILLAGE::get_suivant_triangle(LISTE_MG_TRIANGLE::iterator & it)
917     {
918     it++;
919     if (it == lst_mg_triangle.end())
920     return NULL;
921     return it->second;
922     }
923    
924 francois 308
925    
926     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)
927     {
928     MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
929     MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
930     MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud4->get_id());
931     MG_SEGMENT* mgsegment4=get_mg_segment(mgnoeud4->get_id(),mgnoeud1->get_id());
932     if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(topo,mgnoeud1,mgnoeud2,origine);
933     if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(topo,mgnoeud2,mgnoeud3,origine);
934     if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(topo,mgnoeud3,mgnoeud4,origine);
935     if (mgsegment4==NULL) mgsegment4=ajouter_mg_segment(topo,mgnoeud4,mgnoeud1,origine);
936     MG_QUADRANGLE* mgquadrangle;
937     if (num==0) mgquadrangle=new MG_QUADRANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
938     else mgquadrangle=new MG_QUADRANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
939     int resultat=ajouter_mg_quadrangle(mgquadrangle);
940     if (resultat==FAIL)
941     {
942     delete mgquadrangle;
943     return NULL;
944     }
945     return mgquadrangle;
946     }
947    
948    
949     int MG_MAILLAGE::ajouter_mg_quadrangle(MG_QUADRANGLE *mgquadrangle)
950     {
951     gest->recherche_bonid(*mgquadrangle);
952     MG_IDENTIFICATEUR *id=mgquadrangle;
953     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
954     if (!p.second)
955     {
956     return FAIL;
957     }
958    
959     std::pair<const unsigned long,MG_QUADRANGLE*> tmp(mgquadrangle->get_id(),mgquadrangle);
960     lst_mg_quadrangle.insert(tmp);
961     return OK;
962     }
963    
964    
965     MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangleid(unsigned long num)
966     {
967     LISTE_MG_QUADRANGLE::iterator i=lst_mg_quadrangle.find(num);
968     if (i==lst_mg_quadrangle.end())
969     {
970     return NULL;
971     }
972     return ((*i).second);
973     }
974    
975    
976    
977     MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangle(unsigned int num)
978     {
979     if (!(num<lst_mg_quadrangle.size()))
980     {
981     return NULL;
982     }
983     LISTE_MG_QUADRANGLE::iterator i=lst_mg_quadrangle.begin();
984     for (unsigned long j=0;j<num;j++) i++;
985     return ((*i).second);
986     }
987    
988     MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id,unsigned long noeud4id)
989     {
990     unsigned long id=std::min(noeud1id,noeud2id);
991     id=std::min(id,noeud3id);
992     id=std::min(id,noeud4id);
993     std::map<unsigned long,unsigned long> map1;
994     map1[noeud1id]=noeud1id;
995     map1[noeud2id]=noeud2id;
996     map1[noeud3id]=noeud3id;
997     map1[noeud4id]=noeud4id;
998     MG_NOEUD* noeud=get_mg_noeudid(id);
999     int nb_quadrangle=noeud->get_lien_petit_quadrangle()->get_nb();
1000     for (int i=0;i<nb_quadrangle;i++)
1001     {
1002     MG_QUADRANGLE* mgquadrangle=noeud->get_lien_petit_quadrangle()->get(i);
1003     std::map<unsigned long,unsigned long> map2;
1004     map2[mgquadrangle->get_noeud1()->get_id()]=mgquadrangle->get_noeud1()->get_id();
1005     map2[mgquadrangle->get_noeud2()->get_id()]=mgquadrangle->get_noeud2()->get_id();
1006     map2[mgquadrangle->get_noeud3()->get_id()]=mgquadrangle->get_noeud3()->get_id();
1007     map2[mgquadrangle->get_noeud4()->get_id()]=mgquadrangle->get_noeud4()->get_id();
1008     std::map<unsigned long,unsigned long>::iterator it1,it2;
1009     it1=map1.begin();it2=map2.begin();
1010     int ok=1;
1011     while (it1!=map1.end())
1012     {
1013     if ((*it1).first!=(*it2).first) {ok=0;break;}
1014     it1++;
1015     it2++;
1016     }
1017     if (ok) return mgquadrangle;
1018     }
1019     return NULL;
1020     }
1021    
1022     unsigned int MG_MAILLAGE::get_nb_mg_quadrangle(void)
1023     {
1024     return lst_mg_quadrangle.size();
1025     }
1026    
1027    
1028     int MG_MAILLAGE::supprimer_mg_quadrangleid(unsigned long num)
1029     {
1030     MG_QUADRANGLE* mgquadrangle=get_mg_quadrangleid(num);
1031     if (mgquadrangle==NULL)
1032     {
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.find(num);
1039     lst_mg_quadrangle.erase(j);
1040     MG_SEGMENT* segment1=mgquadrangle->get_segment1();
1041     MG_SEGMENT* segment2=mgquadrangle->get_segment2();
1042     MG_SEGMENT* segment3=mgquadrangle->get_segment3();
1043     MG_SEGMENT* segment4=mgquadrangle->get_segment4();
1044     delete mgquadrangle;
1045     if (segment1->get_nb_reference()==0)
1046     if (segment1->get_lien_topologie()!=NULL)
1047     {
1048     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
1049     }
1050     else supprimer_mg_segmentid(segment1->get_id());
1051     if (segment2->get_nb_reference()==0)
1052     if (segment2->get_lien_topologie()!=NULL)
1053     {
1054     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
1055     }
1056     else supprimer_mg_segmentid(segment2->get_id());
1057     if (segment3->get_nb_reference()==0)
1058     if (segment3->get_lien_topologie()!=NULL)
1059     {
1060     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
1061     }
1062     else supprimer_mg_segmentid(segment3->get_id());
1063     if (segment4->get_nb_reference()==0)
1064     if (segment4->get_lien_topologie()!=NULL)
1065     {
1066     if (segment4->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment4->get_id());
1067     }
1068     else supprimer_mg_segmentid(segment4->get_id());
1069     return OK;
1070     }
1071    
1072    
1073     int MG_MAILLAGE::supprimer_mg_quadrangle(unsigned int num)
1074     {
1075     MG_QUADRANGLE* mgquadrangle=get_mg_quadrangle(num);
1076     if (mgquadrangle==NULL)
1077     {
1078     return FAIL;
1079     }
1080     MG_IDENTIFICATEUR* id=mgquadrangle;
1081     LISTE_ENTITE::iterator i=lst_entite.find(id);
1082     lst_entite.erase(i);
1083     LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.begin();
1084     for (unsigned int k=0;k<num;k++) j++;
1085     lst_mg_quadrangle.erase(j);
1086     MG_SEGMENT* segment1=mgquadrangle->get_segment1();
1087     MG_SEGMENT* segment2=mgquadrangle->get_segment2();
1088     MG_SEGMENT* segment3=mgquadrangle->get_segment3();
1089     MG_SEGMENT* segment4=mgquadrangle->get_segment4();
1090     delete mgquadrangle;
1091     if (segment1->get_nb_reference()==0)
1092     if (segment1->get_lien_topologie()!=NULL)
1093     {
1094     if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
1095     }
1096     else supprimer_mg_segmentid(segment1->get_id());
1097     if (segment2->get_nb_reference()==0)
1098     if (segment2->get_lien_topologie()!=NULL)
1099     {
1100     if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
1101     }
1102     else supprimer_mg_segmentid(segment2->get_id());
1103     if (segment3->get_nb_reference()==0)
1104     if (segment3->get_lien_topologie()!=NULL)
1105     {
1106     if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
1107     }
1108     else supprimer_mg_segmentid(segment3->get_id());
1109     if (segment4->get_nb_reference()==0)
1110     if (segment4->get_lien_topologie()!=NULL)
1111     {
1112     if (segment4->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment4->get_id());
1113     }
1114     else supprimer_mg_segmentid(segment4->get_id());
1115     return OK;
1116     }
1117    
1118    
1119     void MG_MAILLAGE::supprimer_tout_mg_quadrangle(void)
1120     {
1121     while (get_nb_mg_quadrangle()!=0)
1122     {
1123     LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.begin();
1124     MG_QUADRANGLE* mgquadrangle=(*j).second;
1125     MG_IDENTIFICATEUR* id=mgquadrangle;
1126     LISTE_ENTITE::iterator i=lst_entite.find(id);
1127     lst_entite.erase(i);
1128     lst_mg_quadrangle.erase(j);
1129     delete mgquadrangle;
1130     }
1131     }
1132    
1133    
1134     MG_QUADRANGLE* MG_MAILLAGE::get_premier_quadrangle(LISTE_MG_QUADRANGLE::iterator & it)
1135     {
1136     it = lst_mg_quadrangle.begin();
1137     if (it == lst_mg_quadrangle.end())
1138     return NULL;
1139     return it->second;
1140     }
1141    
1142     MG_QUADRANGLE* MG_MAILLAGE::get_suivant_quadrangle(LISTE_MG_QUADRANGLE::iterator & it)
1143     {
1144     it++;
1145     if (it == lst_mg_quadrangle.end())
1146     return NULL;
1147     return it->second;
1148     }
1149 francois 283
1150     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)
1151     {
1152     MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
1153     MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud4->get_id());
1154     MG_TRIANGLE* mgtriangle3=get_mg_triangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud4->get_id());
1155     MG_TRIANGLE* mgtriangle4=get_mg_triangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id());
1156     if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud3,mgnoeud2,origine);
1157     if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud2,mgnoeud4,origine);
1158     if (mgtriangle3==NULL) mgtriangle3=ajouter_mg_triangle(topo,mgnoeud2,mgnoeud3,mgnoeud4,origine);
1159     if (mgtriangle4==NULL) mgtriangle4=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud4,mgnoeud3,origine);
1160     MG_TETRA* mgtetra;
1161     if (num==0) mgtetra=new MG_TETRA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1162     else mgtetra=new MG_TETRA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1163     int resultat=ajouter_mg_tetra(mgtetra);
1164     if (resultat==FAIL)
1165     {
1166     delete mgtetra;
1167     return NULL;
1168     }
1169     return mgtetra;
1170     }
1171    
1172    
1173     int MG_MAILLAGE::ajouter_mg_tetra(MG_TETRA *mgtetra)
1174     {
1175     gest->recherche_bonid(*mgtetra);
1176     MG_IDENTIFICATEUR *id=mgtetra;
1177     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1178     if (!p.second)
1179     {
1180     return FAIL;
1181     }
1182    
1183     std::pair<const unsigned long,MG_TETRA*> tmp(mgtetra->get_id(),mgtetra);
1184     lst_mg_tetra.insert(tmp);
1185     return OK;
1186     }
1187    
1188    
1189     MG_TETRA* MG_MAILLAGE::get_mg_tetraid(unsigned long num)
1190     {
1191     LISTE_MG_TETRA::iterator i=lst_mg_tetra.find(num);
1192     if (i==lst_mg_tetra.end())
1193     {
1194     return NULL;
1195     }
1196     return ((*i).second);
1197     }
1198    
1199    
1200    
1201     MG_TETRA* MG_MAILLAGE::get_mg_tetra(unsigned int num)
1202     {
1203     if (!(num<lst_mg_tetra.size()))
1204     {
1205     return NULL;
1206     }
1207     LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();
1208     for (unsigned long j=0;j<num;j++) i++;
1209     return ((*i).second);
1210     }
1211    
1212 francois 363 MG_TETRA* MG_MAILLAGE::get_mg_tetra(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4)
1213 francois 283 {
1214 francois 363 MG_NOEUD* noeud=noeud1;
1215     if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1216     if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1217     if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1218     int nb_tetra=noeud->get_lien_petit_tetra()->get_nb();
1219 francois 283 for (int i=0;i<nb_tetra;i++)
1220     {
1221     MG_TETRA* mgtetra=noeud->get_lien_petit_tetra()->get(i);
1222 francois 363 if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1223     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1224     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1225     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1226     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1227     if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1228     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1229     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1230     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1231     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1232     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1233     if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1234     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1235     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1236     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1237     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1238     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1239     if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1240     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1241     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1242     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1243     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1244     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1245     if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1246 francois 283 }
1247     return NULL;
1248     }
1249    
1250     unsigned int MG_MAILLAGE::get_nb_mg_tetra(void)
1251     {
1252     return lst_mg_tetra.size();
1253     }
1254    
1255    
1256     int MG_MAILLAGE::supprimer_mg_tetraid(unsigned long num)
1257     {
1258     MG_TETRA* mgtetra=get_mg_tetraid(num);
1259     if (mgtetra==NULL)
1260     {
1261     return FAIL;
1262     }
1263     MG_IDENTIFICATEUR* id=mgtetra;
1264     LISTE_ENTITE::iterator i=lst_entite.find(id);
1265     lst_entite.erase(i);
1266     LISTE_MG_TETRA::iterator j=lst_mg_tetra.find(num);
1267     lst_mg_tetra.erase(j);
1268     MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
1269     MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
1270     MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
1271     MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
1272     delete mgtetra;
1273     if (triangle1->get_nb_reference()==0)
1274     if (triangle1->get_lien_topologie()!=NULL)
1275     {
1276     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1277     }
1278 francois 830 else if (triangle1->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle1->get_id());
1279 francois 283 if (triangle2->get_nb_reference()==0)
1280     if (triangle2->get_lien_topologie()!=NULL)
1281     {
1282     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1283     }
1284 francois 830 else if (triangle2->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle2->get_id());
1285 francois 283 if (triangle3->get_nb_reference()==0)
1286     if (triangle3->get_lien_topologie()!=NULL)
1287     {
1288     if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
1289     }
1290 francois 830 else if (triangle3->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle3->get_id());
1291 francois 283 if (triangle4->get_nb_reference()==0)
1292     if (triangle4->get_lien_topologie()!=NULL)
1293     {
1294     if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
1295     }
1296 francois 830 else if (triangle4->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle4->get_id());
1297 francois 283 return OK;
1298     }
1299    
1300    
1301     int MG_MAILLAGE::supprimer_mg_tetra(unsigned int num)
1302     {
1303     MG_TETRA* mgtetra=get_mg_tetra(num);
1304     if (mgtetra==NULL)
1305     {
1306     return FAIL;
1307     }
1308     MG_IDENTIFICATEUR* id=mgtetra;
1309     LISTE_ENTITE::iterator i=lst_entite.find(id);
1310     lst_entite.erase(i);
1311     LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
1312     for (unsigned int k=0;k<num;k++) j++;
1313     lst_mg_tetra.erase(j);
1314     MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
1315     MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
1316     MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
1317     MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
1318     delete mgtetra;
1319     if (triangle1->get_nb_reference()==0)
1320     if (triangle1->get_lien_topologie()!=NULL)
1321     {
1322     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1323     }
1324     else supprimer_mg_triangleid(triangle1->get_id());
1325     if (triangle2->get_nb_reference()==0)
1326     if (triangle2->get_lien_topologie()!=NULL)
1327     {
1328     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1329     }
1330     else supprimer_mg_triangleid(triangle2->get_id());
1331     if (triangle3->get_nb_reference()==0)
1332     if (triangle3->get_lien_topologie()!=NULL)
1333     {
1334     if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
1335     }
1336     else supprimer_mg_triangleid(triangle3->get_id());
1337     if (triangle4->get_nb_reference()==0)
1338     if (triangle4->get_lien_topologie()!=NULL)
1339     {
1340     if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
1341     }
1342     else supprimer_mg_triangleid(triangle4->get_id());
1343     return OK;
1344     }
1345    
1346    
1347     void MG_MAILLAGE::supprimer_tout_mg_tetra(void)
1348     {
1349     while (get_nb_mg_tetra()!=0)
1350     {
1351     LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
1352     MG_TETRA* mgtetra=(*j).second;
1353     MG_IDENTIFICATEUR* id=mgtetra;
1354     LISTE_ENTITE::iterator i=lst_entite.find(id);
1355     lst_entite.erase(i);
1356     lst_mg_tetra.erase(j);
1357     delete mgtetra;
1358     }
1359     }
1360    
1361    
1362     MG_TETRA* MG_MAILLAGE::get_premier_tetra(LISTE_MG_TETRA::iterator & it)
1363     {
1364     it = lst_mg_tetra.begin();
1365     if (it == lst_mg_tetra.end())
1366     return NULL;
1367     return it->second;
1368     }
1369    
1370     MG_TETRA* MG_MAILLAGE::get_suivant_tetra(LISTE_MG_TETRA::iterator & it)
1371     {
1372     it++;
1373     if (it == lst_mg_tetra.end())
1374     return NULL;
1375     return it->second;
1376     }
1377    
1378 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)
1379     {
1380     MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud6->get_id(),mgnoeud5->get_id());
1381     MG_QUADRANGLE* mgquadrangle2=get_mg_quadrangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud7->get_id(),mgnoeud6->get_id());
1382     MG_QUADRANGLE* mgquadrangle3=get_mg_quadrangle(mgnoeud3->get_id(),mgnoeud4->get_id(),mgnoeud8->get_id(),mgnoeud7->get_id());
1383     MG_QUADRANGLE* mgquadrangle4=get_mg_quadrangle(mgnoeud4->get_id(),mgnoeud1->get_id(),mgnoeud5->get_id(),mgnoeud8->get_id());
1384     MG_QUADRANGLE* mgquadrangle5=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
1385     MG_QUADRANGLE* mgquadrangle6=get_mg_quadrangle(mgnoeud5->get_id(),mgnoeud6->get_id(),mgnoeud7->get_id(),mgnoeud8->get_id());
1386     if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(topo,mgnoeud1,mgnoeud2,mgnoeud6,mgnoeud5,origine);
1387     if (mgquadrangle2==NULL) mgquadrangle2=ajouter_mg_quadrangle(topo,mgnoeud2,mgnoeud3,mgnoeud7,mgnoeud6,origine);
1388     if (mgquadrangle3==NULL) mgquadrangle3=ajouter_mg_quadrangle(topo,mgnoeud3,mgnoeud4,mgnoeud8,mgnoeud7,origine);
1389     if (mgquadrangle4==NULL) mgquadrangle4=ajouter_mg_quadrangle(topo,mgnoeud4,mgnoeud1,mgnoeud5,mgnoeud8,origine);
1390     if (mgquadrangle5==NULL) mgquadrangle5=ajouter_mg_quadrangle(topo,mgnoeud1,mgnoeud4,mgnoeud3,mgnoeud2,origine);
1391     if (mgquadrangle6==NULL) mgquadrangle6=ajouter_mg_quadrangle(topo,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,origine);
1392     MG_HEXA* mghexa;
1393     if (num==0) mghexa=new MG_HEXA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1394     else mghexa=new MG_HEXA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1395     int resultat=ajouter_mg_hexa(mghexa);
1396     if (resultat==FAIL)
1397     {
1398     delete mghexa;
1399     return NULL;
1400     }
1401     return mghexa;
1402     }
1403 francois 283
1404    
1405 francois 308 int MG_MAILLAGE::ajouter_mg_hexa(MG_HEXA *mghexa)
1406     {
1407     gest->recherche_bonid(*mghexa);
1408     MG_IDENTIFICATEUR *id=mghexa;
1409     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1410     if (!p.second)
1411     {
1412     return FAIL;
1413     }
1414 francois 283
1415 francois 308 std::pair<const unsigned long,MG_HEXA*> tmp(mghexa->get_id(),mghexa);
1416     lst_mg_hexa.insert(tmp);
1417     return OK;
1418     }
1419    
1420    
1421     MG_HEXA* MG_MAILLAGE::get_mg_hexaid(unsigned long num)
1422     {
1423     LISTE_MG_HEXA::iterator i=lst_mg_hexa.find(num);
1424     if (i==lst_mg_hexa.end())
1425     {
1426     return NULL;
1427     }
1428     return ((*i).second);
1429     }
1430    
1431    
1432    
1433     MG_HEXA* MG_MAILLAGE::get_mg_hexa(unsigned int num)
1434     {
1435     if (!(num<lst_mg_hexa.size()))
1436     {
1437     return NULL;
1438     }
1439     LISTE_MG_HEXA::iterator i=lst_mg_hexa.begin();
1440     for (unsigned long j=0;j<num;j++) i++;
1441     return ((*i).second);
1442     }
1443    
1444 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)
1445 francois 308 {
1446 francois 363 MG_NOEUD* noeud=noeud1;
1447     if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1448     if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1449     if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1450     if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
1451     if (noeud6->get_id()<noeud->get_id()) noeud=noeud6;
1452     if (noeud7->get_id()<noeud->get_id()) noeud=noeud7;
1453     if (noeud8->get_id()<noeud->get_id()) noeud=noeud8;
1454    
1455    
1456 francois 308 std::map<unsigned long,unsigned long> map1;
1457 francois 363 map1[noeud1->get_id()]=noeud1->get_id();
1458     map1[noeud2->get_id()]=noeud2->get_id();
1459     map1[noeud3->get_id()]=noeud3->get_id();
1460     map1[noeud4->get_id()]=noeud4->get_id();
1461     map1[noeud5->get_id()]=noeud5->get_id();
1462     map1[noeud6->get_id()]=noeud6->get_id();
1463     map1[noeud7->get_id()]=noeud7->get_id();
1464     map1[noeud8->get_id()]=noeud8->get_id();
1465 francois 308 int nb_hexa=noeud->get_lien_petit_hexa()->get_nb();
1466     for (int i=0;i<nb_hexa;i++)
1467     {
1468     MG_HEXA* mghexa=noeud->get_lien_petit_hexa()->get(i);
1469     std::map<unsigned long,unsigned long> map2;
1470     map2[mghexa->get_noeud1()->get_id()]=mghexa->get_noeud1()->get_id();
1471     map2[mghexa->get_noeud2()->get_id()]=mghexa->get_noeud2()->get_id();
1472     map2[mghexa->get_noeud3()->get_id()]=mghexa->get_noeud3()->get_id();
1473     map2[mghexa->get_noeud4()->get_id()]=mghexa->get_noeud4()->get_id();
1474     map2[mghexa->get_noeud5()->get_id()]=mghexa->get_noeud5()->get_id();
1475     map2[mghexa->get_noeud6()->get_id()]=mghexa->get_noeud6()->get_id();
1476     map2[mghexa->get_noeud7()->get_id()]=mghexa->get_noeud7()->get_id();
1477     map2[mghexa->get_noeud8()->get_id()]=mghexa->get_noeud8()->get_id();
1478     std::map<unsigned long,unsigned long>::iterator it1,it2;
1479     it1=map1.begin();it2=map2.begin();
1480     int ok=1;
1481     while (it1!=map1.end())
1482     {
1483     if ((*it1).first!=(*it2).first) {ok=0;break;}
1484     it1++;
1485     it2++;
1486     }
1487     if (ok) return mghexa;
1488     }
1489     return NULL;
1490    
1491    
1492    
1493    
1494     }
1495    
1496     unsigned int MG_MAILLAGE::get_nb_mg_hexa(void)
1497     {
1498     return lst_mg_hexa.size();
1499     }
1500    
1501    
1502     int MG_MAILLAGE::supprimer_mg_hexaid(unsigned long num)
1503     {
1504     MG_HEXA* mghexa=get_mg_hexaid(num);
1505     if (mghexa==NULL)
1506     {
1507     return FAIL;
1508     }
1509     MG_IDENTIFICATEUR* id=mghexa;
1510     LISTE_ENTITE::iterator i=lst_entite.find(id);
1511     lst_entite.erase(i);
1512     LISTE_MG_HEXA::iterator j=lst_mg_hexa.find(num);
1513     lst_mg_hexa.erase(j);
1514     MG_QUADRANGLE* quadrangle1=mghexa->get_quadrangle1();
1515     MG_QUADRANGLE* quadrangle2=mghexa->get_quadrangle2();
1516     MG_QUADRANGLE* quadrangle3=mghexa->get_quadrangle3();
1517     MG_QUADRANGLE* quadrangle4=mghexa->get_quadrangle4();
1518     MG_QUADRANGLE* quadrangle5=mghexa->get_quadrangle5();
1519     MG_QUADRANGLE* quadrangle6=mghexa->get_quadrangle6();
1520     delete mghexa;
1521     if (quadrangle1->get_nb_reference()==0)
1522     if (quadrangle1->get_lien_topologie()!=NULL)
1523     {
1524     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1525     }
1526     else supprimer_mg_quadrangleid(quadrangle1->get_id());
1527     if (quadrangle2->get_nb_reference()==0)
1528     if (quadrangle2->get_lien_topologie()!=NULL)
1529     {
1530     if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1531     }
1532     else supprimer_mg_quadrangleid(quadrangle2->get_id());
1533     if (quadrangle3->get_nb_reference()==0)
1534     if (quadrangle3->get_lien_topologie()!=NULL)
1535     {
1536     if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1537     }
1538     else supprimer_mg_quadrangleid(quadrangle3->get_id());
1539     if (quadrangle4->get_nb_reference()==0)
1540     if (quadrangle4->get_lien_topologie()!=NULL)
1541     {
1542     if (quadrangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle4->get_id());
1543     }
1544     else supprimer_mg_quadrangleid(quadrangle4->get_id());
1545     if (quadrangle5->get_nb_reference()==0)
1546     if (quadrangle5->get_lien_topologie()!=NULL)
1547     {
1548     if (quadrangle5->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle5->get_id());
1549     }
1550     else supprimer_mg_quadrangleid(quadrangle5->get_id());
1551     if (quadrangle6->get_nb_reference()==0)
1552     if (quadrangle6->get_lien_topologie()!=NULL)
1553     {
1554     if (quadrangle6->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle6->get_id());
1555     }
1556     else supprimer_mg_quadrangleid(quadrangle6->get_id());
1557     return OK;
1558     }
1559    
1560    
1561     int MG_MAILLAGE::supprimer_mg_hexa(unsigned int num)
1562     {
1563     MG_HEXA* mghexa=get_mg_hexa(num);
1564     if (mghexa==NULL)
1565     {
1566     return FAIL;
1567     }
1568     MG_IDENTIFICATEUR* id=mghexa;
1569     LISTE_ENTITE::iterator i=lst_entite.find(id);
1570     lst_entite.erase(i);
1571     LISTE_MG_HEXA::iterator j=lst_mg_hexa.begin();
1572     for (unsigned int k=0;k<num;k++) j++;
1573     lst_mg_hexa.erase(j);
1574     MG_QUADRANGLE* quadrangle1=mghexa->get_quadrangle1();
1575     MG_QUADRANGLE* quadrangle2=mghexa->get_quadrangle2();
1576     MG_QUADRANGLE* quadrangle3=mghexa->get_quadrangle3();
1577     MG_QUADRANGLE* quadrangle4=mghexa->get_quadrangle4();
1578     MG_QUADRANGLE* quadrangle5=mghexa->get_quadrangle5();
1579     MG_QUADRANGLE* quadrangle6=mghexa->get_quadrangle6();
1580     delete mghexa;
1581     if (quadrangle1->get_nb_reference()==0)
1582     if (quadrangle1->get_lien_topologie()!=NULL)
1583     {
1584     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1585     }
1586     else supprimer_mg_quadrangleid(quadrangle1->get_id());
1587     if (quadrangle2->get_nb_reference()==0)
1588     if (quadrangle2->get_lien_topologie()!=NULL)
1589     {
1590     if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1591     }
1592     else supprimer_mg_quadrangleid(quadrangle2->get_id());
1593     if (quadrangle3->get_nb_reference()==0)
1594     if (quadrangle3->get_lien_topologie()!=NULL)
1595     {
1596     if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1597     }
1598     else supprimer_mg_quadrangleid(quadrangle3->get_id());
1599     if (quadrangle4->get_nb_reference()==0)
1600     if (quadrangle4->get_lien_topologie()!=NULL)
1601     {
1602     if (quadrangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle4->get_id());
1603     }
1604     else supprimer_mg_quadrangleid(quadrangle4->get_id());
1605     if (quadrangle5->get_nb_reference()==0)
1606     if (quadrangle5->get_lien_topologie()!=NULL)
1607     {
1608     if (quadrangle5->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle5->get_id());
1609     }
1610     else supprimer_mg_quadrangleid(quadrangle5->get_id());
1611     if (quadrangle6->get_nb_reference()==0)
1612     if (quadrangle6->get_lien_topologie()!=NULL)
1613     {
1614     if (quadrangle6->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle6->get_id());
1615     }
1616     else supprimer_mg_quadrangleid(quadrangle6->get_id());
1617     return OK;
1618     }
1619    
1620    
1621     void MG_MAILLAGE::supprimer_tout_mg_hexa(void)
1622     {
1623     while (get_nb_mg_hexa()!=0)
1624     {
1625     LISTE_MG_HEXA::iterator j=lst_mg_hexa.begin();
1626     MG_HEXA* mghexa=(*j).second;
1627     MG_IDENTIFICATEUR* id=mghexa;
1628     LISTE_ENTITE::iterator i=lst_entite.find(id);
1629     lst_entite.erase(i);
1630     lst_mg_hexa.erase(j);
1631     delete mghexa;
1632     }
1633     }
1634    
1635    
1636     MG_HEXA* MG_MAILLAGE::get_premier_hexa(LISTE_MG_HEXA::iterator & it)
1637     {
1638     it = lst_mg_hexa.begin();
1639     if (it == lst_mg_hexa.end())
1640     return NULL;
1641     return it->second;
1642     }
1643    
1644     MG_HEXA* MG_MAILLAGE::get_suivant_hexa(LISTE_MG_HEXA::iterator & it)
1645     {
1646     it++;
1647     if (it == lst_mg_hexa.end())
1648     return NULL;
1649     return it->second;
1650     }
1651    
1652    
1653 francois 876 MG_PENTA* MG_MAILLAGE::ajouter_mg_penta(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,int origine,unsigned long num)
1654     {
1655     MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud5->get_id(),mgnoeud4->get_id());
1656     MG_QUADRANGLE* mgquadrangle2=get_mg_quadrangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud6->get_id(),mgnoeud5->get_id());
1657     MG_QUADRANGLE* mgquadrangle3=get_mg_quadrangle(mgnoeud3->get_id(),mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud6->get_id());
1658     MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud3->get_id());
1659     MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud4->get_id(),mgnoeud5->get_id(),mgnoeud6->get_id());
1660     if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(topo,mgnoeud1,mgnoeud2,mgnoeud5,mgnoeud4,origine);
1661     if (mgquadrangle2==NULL) mgquadrangle2=ajouter_mg_quadrangle(topo,mgnoeud2,mgnoeud3,mgnoeud6,mgnoeud5,origine);
1662     if (mgquadrangle3==NULL) mgquadrangle3=ajouter_mg_quadrangle(topo,mgnoeud3,mgnoeud1,mgnoeud4,mgnoeud6,origine);
1663     if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud2,mgnoeud3,origine);
1664     if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(topo,mgnoeud4,mgnoeud5,mgnoeud6,origine);
1665     MG_PENTA* mgpenta;
1666     if (num==0) mgpenta=new MG_PENTA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgtriangle1,mgtriangle2,mgquadrangle1,mgquadrangle2,mgquadrangle3,origine);
1667     else mgpenta=new MG_PENTA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgtriangle1,mgtriangle2,mgquadrangle1,mgquadrangle2,mgquadrangle3,origine);
1668     int resultat=ajouter_mg_penta(mgpenta);
1669     if (resultat==FAIL)
1670     {
1671     delete mgpenta;
1672     return NULL;
1673     }
1674     return mgpenta;
1675     }
1676 francois 308
1677    
1678 francois 876 int MG_MAILLAGE::ajouter_mg_penta(MG_PENTA *mgpenta)
1679     {
1680     gest->recherche_bonid(*mgpenta);
1681     MG_IDENTIFICATEUR *id=mgpenta;
1682     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1683     if (!p.second)
1684     {
1685     return FAIL;
1686     }
1687    
1688     std::pair<const unsigned long,MG_PENTA*> tmp(mgpenta->get_id(),mgpenta);
1689     lst_mg_penta.insert(tmp);
1690     return OK;
1691     }
1692    
1693    
1694     MG_PENTA* MG_MAILLAGE::get_mg_pentaid(unsigned long num)
1695     {
1696     LISTE_MG_PENTA::iterator i=lst_mg_penta.find(num);
1697     if (i==lst_mg_penta.end())
1698     {
1699     return NULL;
1700     }
1701     return ((*i).second);
1702     }
1703    
1704    
1705    
1706     MG_PENTA* MG_MAILLAGE::get_mg_penta(unsigned int num)
1707     {
1708     if (!(num<lst_mg_penta.size()))
1709     {
1710     return NULL;
1711     }
1712     LISTE_MG_PENTA::iterator i=lst_mg_penta.begin();
1713     for (unsigned long j=0;j<num;j++) i++;
1714     return ((*i).second);
1715     }
1716    
1717     MG_PENTA* MG_MAILLAGE::get_mg_penta(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5,MG_NOEUD* noeud6)
1718     {
1719     MG_NOEUD* noeud=noeud1;
1720     if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1721     if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1722     if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1723     if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
1724     if (noeud6->get_id()<noeud->get_id()) noeud=noeud6;
1725    
1726    
1727     std::map<unsigned long,unsigned long> map1;
1728     map1[noeud1->get_id()]=noeud1->get_id();
1729     map1[noeud2->get_id()]=noeud2->get_id();
1730     map1[noeud3->get_id()]=noeud3->get_id();
1731     map1[noeud4->get_id()]=noeud4->get_id();
1732     map1[noeud5->get_id()]=noeud5->get_id();
1733     map1[noeud6->get_id()]=noeud6->get_id();
1734     int nb_penta=noeud->get_lien_petit_penta()->get_nb();
1735     for (int i=0;i<nb_penta;i++)
1736     {
1737     MG_PENTA* mgpenta=noeud->get_lien_petit_penta()->get(i);
1738     std::map<unsigned long,unsigned long> map2;
1739     map2[mgpenta->get_noeud1()->get_id()]=mgpenta->get_noeud1()->get_id();
1740     map2[mgpenta->get_noeud2()->get_id()]=mgpenta->get_noeud2()->get_id();
1741     map2[mgpenta->get_noeud3()->get_id()]=mgpenta->get_noeud3()->get_id();
1742     map2[mgpenta->get_noeud4()->get_id()]=mgpenta->get_noeud4()->get_id();
1743     map2[mgpenta->get_noeud5()->get_id()]=mgpenta->get_noeud5()->get_id();
1744     map2[mgpenta->get_noeud6()->get_id()]=mgpenta->get_noeud6()->get_id();
1745     std::map<unsigned long,unsigned long>::iterator it1,it2;
1746     it1=map1.begin();it2=map2.begin();
1747     int ok=1;
1748     while (it1!=map1.end())
1749     {
1750     if ((*it1).first!=(*it2).first) {ok=0;break;}
1751     it1++;
1752     it2++;
1753     }
1754     if (ok) return mgpenta;
1755     }
1756     return NULL;
1757    
1758    
1759    
1760    
1761     }
1762    
1763     unsigned int MG_MAILLAGE::get_nb_mg_penta(void)
1764     {
1765     return lst_mg_penta.size();
1766     }
1767    
1768    
1769     int MG_MAILLAGE::supprimer_mg_pentaid(unsigned long num)
1770     {
1771     MG_PENTA* mgpenta=get_mg_pentaid(num);
1772     if (mgpenta==NULL)
1773     {
1774     return FAIL;
1775     }
1776     MG_IDENTIFICATEUR* id=mgpenta;
1777     LISTE_ENTITE::iterator i=lst_entite.find(id);
1778     lst_entite.erase(i);
1779     LISTE_MG_PENTA::iterator j=lst_mg_penta.find(num);
1780     lst_mg_penta.erase(j);
1781     MG_QUADRANGLE* quadrangle1=mgpenta->get_quadrangle1();
1782     MG_QUADRANGLE* quadrangle2=mgpenta->get_quadrangle2();
1783     MG_QUADRANGLE* quadrangle3=mgpenta->get_quadrangle3();
1784     MG_TRIANGLE* triangle1=mgpenta->get_triangle1();
1785     MG_TRIANGLE* triangle2=mgpenta->get_triangle2();
1786     delete mgpenta;
1787     if (quadrangle1->get_nb_reference()==0)
1788     if (quadrangle1->get_lien_topologie()!=NULL)
1789     {
1790     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1791     }
1792     else supprimer_mg_quadrangleid(quadrangle1->get_id());
1793     if (quadrangle2->get_nb_reference()==0)
1794     if (quadrangle2->get_lien_topologie()!=NULL)
1795     {
1796     if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1797     }
1798     else supprimer_mg_quadrangleid(quadrangle2->get_id());
1799     if (quadrangle3->get_nb_reference()==0)
1800     if (quadrangle3->get_lien_topologie()!=NULL)
1801     {
1802     if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1803     }
1804     else supprimer_mg_quadrangleid(quadrangle3->get_id());
1805     if (triangle1->get_nb_reference()==0)
1806     if (triangle1->get_lien_topologie()!=NULL)
1807     {
1808     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1809     }
1810     else supprimer_mg_triangleid(triangle1->get_id());
1811     if (triangle2->get_nb_reference()==0)
1812     if (triangle2->get_lien_topologie()!=NULL)
1813     {
1814     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1815     }
1816     else supprimer_mg_triangleid(triangle2->get_id());
1817     return OK;
1818     }
1819    
1820    
1821     int MG_MAILLAGE::supprimer_mg_penta(unsigned int num)
1822     {
1823     MG_PENTA* mgpenta=get_mg_penta(num);
1824     if (mgpenta==NULL)
1825     {
1826     return FAIL;
1827     }
1828     MG_IDENTIFICATEUR* id=mgpenta;
1829     LISTE_ENTITE::iterator i=lst_entite.find(id);
1830     lst_entite.erase(i);
1831     LISTE_MG_PENTA::iterator j=lst_mg_penta.begin();
1832     for (unsigned int k=0;k<num;k++) j++;
1833     lst_mg_penta.erase(j);
1834     MG_QUADRANGLE* quadrangle1=mgpenta->get_quadrangle1();
1835     MG_QUADRANGLE* quadrangle2=mgpenta->get_quadrangle2();
1836     MG_QUADRANGLE* quadrangle3=mgpenta->get_quadrangle3();
1837     MG_TRIANGLE* triangle1=mgpenta->get_triangle1();
1838     MG_TRIANGLE* triangle2=mgpenta->get_triangle2();
1839     delete mgpenta;
1840     if (quadrangle1->get_nb_reference()==0)
1841     if (quadrangle1->get_lien_topologie()!=NULL)
1842     {
1843     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1844     }
1845     else supprimer_mg_quadrangleid(quadrangle1->get_id());
1846     if (quadrangle2->get_nb_reference()==0)
1847     if (quadrangle2->get_lien_topologie()!=NULL)
1848     {
1849     if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1850     }
1851     else supprimer_mg_quadrangleid(quadrangle2->get_id());
1852     if (quadrangle3->get_nb_reference()==0)
1853     if (quadrangle3->get_lien_topologie()!=NULL)
1854     {
1855     if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1856     }
1857     else supprimer_mg_quadrangleid(quadrangle3->get_id());
1858     if (triangle1->get_nb_reference()==0)
1859     if (triangle1->get_lien_topologie()!=NULL)
1860     {
1861     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1862     }
1863     else supprimer_mg_triangleid(triangle1->get_id());
1864     if (triangle2->get_nb_reference()==0)
1865     if (triangle2->get_lien_topologie()!=NULL)
1866     {
1867     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1868     }
1869     else supprimer_mg_triangleid(triangle2->get_id());
1870     return OK;
1871     }
1872    
1873    
1874     void MG_MAILLAGE::supprimer_tout_mg_penta(void)
1875     {
1876     while (get_nb_mg_penta()!=0)
1877     {
1878     LISTE_MG_PENTA::iterator j=lst_mg_penta.begin();
1879     MG_PENTA* mgpenta=(*j).second;
1880     MG_IDENTIFICATEUR* id=mgpenta;
1881     LISTE_ENTITE::iterator i=lst_entite.find(id);
1882     lst_entite.erase(i);
1883     lst_mg_penta.erase(j);
1884     delete mgpenta;
1885     }
1886     }
1887    
1888    
1889     MG_PENTA* MG_MAILLAGE::get_premier_penta(LISTE_MG_PENTA::iterator & it)
1890     {
1891     it = lst_mg_penta.begin();
1892     if (it == lst_mg_penta.end())
1893     return NULL;
1894     return it->second;
1895     }
1896    
1897     MG_PENTA* MG_MAILLAGE::get_suivant_penta(LISTE_MG_PENTA::iterator & it)
1898     {
1899     it++;
1900     if (it == lst_mg_penta.end())
1901     return NULL;
1902     return it->second;
1903     }
1904    
1905    
1906 francois 1123 MG_PYRAMIDE* MG_MAILLAGE::ajouter_mg_pyramide(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,class MG_NOEUD *mgnoeud4,class MG_NOEUD *mgnoeud5,int origine,unsigned long num)
1907     {
1908     MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud4->get_id());
1909     MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud5->get_id());
1910     MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud5->get_id());
1911     MG_TRIANGLE* mgtriangle3=get_mg_triangle(mgnoeud3->get_id(),mgnoeud4->get_id(),mgnoeud5->get_id());
1912     MG_TRIANGLE* mgtriangle4=get_mg_triangle(mgnoeud4->get_id(),mgnoeud1->get_id(),mgnoeud5->get_id());
1913     if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(topo,mgnoeud1,mgnoeud2,mgnoeud5,mgnoeud4,origine);
1914     if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud2,mgnoeud5,origine);
1915     if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(topo,mgnoeud2,mgnoeud3,mgnoeud5,origine);
1916     if (mgtriangle3==NULL) mgtriangle3=ajouter_mg_triangle(topo,mgnoeud3,mgnoeud4,mgnoeud5,origine);
1917     if (mgtriangle4==NULL) mgtriangle4=ajouter_mg_triangle(topo,mgnoeud4,mgnoeud1,mgnoeud5,origine);
1918     MG_PYRAMIDE* mgpyramide;
1919     if (num==0) mgpyramide=new MG_PYRAMIDE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,mgquadrangle1,origine);
1920     else mgpyramide=new MG_PYRAMIDE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,mgquadrangle1,origine);
1921     int resultat=ajouter_mg_pyramide(mgpyramide);
1922     if (resultat==FAIL)
1923     {
1924     delete mgpyramide;
1925     return NULL;
1926     }
1927     return mgpyramide;
1928     }
1929 francois 876
1930    
1931 francois 1123 int MG_MAILLAGE::ajouter_mg_pyramide(MG_PYRAMIDE *mgpyramide)
1932     {
1933     gest->recherche_bonid(*mgpyramide);
1934     MG_IDENTIFICATEUR *id=mgpyramide;
1935     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1936     if (!p.second)
1937     {
1938     return FAIL;
1939     }
1940    
1941     std::pair<const unsigned long,MG_PYRAMIDE*> tmp(mgpyramide->get_id(),mgpyramide);
1942     lst_mg_pyramide.insert(tmp);
1943     return OK;
1944     }
1945    
1946    
1947     MG_PYRAMIDE* MG_MAILLAGE::get_mg_pyramideid(unsigned long num)
1948     {
1949     LISTE_MG_PYRAMIDE::iterator i=lst_mg_pyramide.find(num);
1950     if (i==lst_mg_pyramide.end())
1951     {
1952     return NULL;
1953     }
1954     return ((*i).second);
1955     }
1956    
1957    
1958    
1959     MG_PYRAMIDE* MG_MAILLAGE::get_mg_pyramide(unsigned int num)
1960     {
1961     if (!(num<lst_mg_pyramide.size()))
1962     {
1963     return NULL;
1964     }
1965     LISTE_MG_PYRAMIDE::iterator i=lst_mg_pyramide.begin();
1966     for (unsigned long j=0;j<num;j++) i++;
1967     return ((*i).second);
1968     }
1969    
1970     MG_PYRAMIDE* MG_MAILLAGE::get_mg_pyramide(MG_NOEUD* noeud1,MG_NOEUD* noeud2,MG_NOEUD* noeud3,MG_NOEUD* noeud4,MG_NOEUD* noeud5)
1971     {
1972     MG_NOEUD* noeud=noeud1;
1973     if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1974     if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1975     if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1976     if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
1977    
1978    
1979     std::map<unsigned long,unsigned long> map1;
1980     map1[noeud1->get_id()]=noeud1->get_id();
1981     map1[noeud2->get_id()]=noeud2->get_id();
1982     map1[noeud3->get_id()]=noeud3->get_id();
1983     map1[noeud4->get_id()]=noeud4->get_id();
1984     map1[noeud5->get_id()]=noeud5->get_id();
1985     int nb_pyr=noeud->get_lien_petit_pyramide()->get_nb();
1986     for (int i=0;i<nb_pyr;i++)
1987     {
1988     MG_PYRAMIDE* mgpyramide=noeud->get_lien_petit_pyramide()->get(i);
1989     std::map<unsigned long,unsigned long> map2;
1990     map2[mgpyramide->get_noeud1()->get_id()]=mgpyramide->get_noeud1()->get_id();
1991     map2[mgpyramide->get_noeud2()->get_id()]=mgpyramide->get_noeud2()->get_id();
1992     map2[mgpyramide->get_noeud3()->get_id()]=mgpyramide->get_noeud3()->get_id();
1993     map2[mgpyramide->get_noeud4()->get_id()]=mgpyramide->get_noeud4()->get_id();
1994     map2[mgpyramide->get_noeud5()->get_id()]=mgpyramide->get_noeud5()->get_id();
1995     std::map<unsigned long,unsigned long>::iterator it1,it2;
1996     it1=map1.begin();it2=map2.begin();
1997     int ok=1;
1998     while (it1!=map1.end())
1999     {
2000     if ((*it1).first!=(*it2).first) {ok=0;break;}
2001     it1++;
2002     it2++;
2003     }
2004     if (ok) return mgpyramide;
2005     }
2006     return NULL;
2007    
2008    
2009    
2010    
2011     }
2012    
2013     unsigned int MG_MAILLAGE::get_nb_mg_pyramide(void)
2014     {
2015     return lst_mg_pyramide.size();
2016     }
2017    
2018    
2019     int MG_MAILLAGE::supprimer_mg_pyramideid(unsigned long num)
2020     {
2021     MG_PYRAMIDE* mgpyr=get_mg_pyramideid(num);
2022     if (mgpyr==NULL)
2023     {
2024     return FAIL;
2025     }
2026     MG_IDENTIFICATEUR* id=mgpyr;
2027     LISTE_ENTITE::iterator i=lst_entite.find(id);
2028     lst_entite.erase(i);
2029     LISTE_MG_PYRAMIDE::iterator j=lst_mg_pyramide.find(num);
2030     lst_mg_pyramide.erase(j);
2031     MG_QUADRANGLE* quadrangle1=mgpyr->get_quadrangle1();
2032     MG_TRIANGLE* triangle1=mgpyr->get_triangle1();
2033     MG_TRIANGLE* triangle2=mgpyr->get_triangle2();
2034     MG_TRIANGLE* triangle3=mgpyr->get_triangle3();
2035     MG_TRIANGLE* triangle4=mgpyr->get_triangle4();
2036     delete mgpyr;
2037     if (quadrangle1->get_nb_reference()==0)
2038     if (quadrangle1->get_lien_topologie()!=NULL)
2039     {
2040     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
2041     }
2042     else supprimer_mg_quadrangleid(quadrangle1->get_id());
2043     if (triangle1->get_nb_reference()==0)
2044     if (triangle1->get_lien_topologie()!=NULL)
2045     {
2046     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
2047     }
2048     else supprimer_mg_triangleid(triangle1->get_id());
2049     if (triangle2->get_nb_reference()==0)
2050     if (triangle2->get_lien_topologie()!=NULL)
2051     {
2052     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
2053     }
2054     else supprimer_mg_triangleid(triangle2->get_id());
2055     if (triangle3->get_nb_reference()==0)
2056     if (triangle3->get_lien_topologie()!=NULL)
2057     {
2058     if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
2059     }
2060     else supprimer_mg_triangleid(triangle3->get_id());
2061     if (triangle4->get_nb_reference()==0)
2062     if (triangle4->get_lien_topologie()!=NULL)
2063     {
2064     if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
2065     }
2066     else supprimer_mg_triangleid(triangle4->get_id());
2067     return OK;
2068     }
2069    
2070    
2071     int MG_MAILLAGE::supprimer_mg_pyramide(unsigned int num)
2072     {
2073     MG_PYRAMIDE* mgpyr=get_mg_pyramide(num);
2074     if (mgpyr==NULL)
2075     {
2076     return FAIL;
2077     }
2078     MG_IDENTIFICATEUR* id=mgpyr;
2079     LISTE_ENTITE::iterator i=lst_entite.find(id);
2080     lst_entite.erase(i);
2081     LISTE_MG_PYRAMIDE::iterator j=lst_mg_pyramide.begin();
2082     for (unsigned int k=0;k<num;k++) j++;
2083     lst_mg_pyramide.erase(j);
2084     MG_QUADRANGLE* quadrangle1=mgpyr->get_quadrangle1();
2085     MG_TRIANGLE* triangle1=mgpyr->get_triangle1();
2086     MG_TRIANGLE* triangle2=mgpyr->get_triangle2();
2087     MG_TRIANGLE* triangle3=mgpyr->get_triangle3();
2088     MG_TRIANGLE* triangle4=mgpyr->get_triangle4();
2089     delete mgpyr;
2090     if (quadrangle1->get_nb_reference()==0)
2091     if (quadrangle1->get_lien_topologie()!=NULL)
2092     {
2093     if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
2094     }
2095     else supprimer_mg_quadrangleid(quadrangle1->get_id());
2096     if (triangle1->get_nb_reference()==0)
2097     if (triangle1->get_lien_topologie()!=NULL)
2098     {
2099     if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
2100     }
2101     else supprimer_mg_triangleid(triangle1->get_id());
2102     if (triangle2->get_nb_reference()==0)
2103     if (triangle2->get_lien_topologie()!=NULL)
2104     {
2105     if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
2106     }
2107     else supprimer_mg_triangleid(triangle2->get_id());
2108     if (triangle3->get_nb_reference()==0)
2109     if (triangle3->get_lien_topologie()!=NULL)
2110     {
2111     if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
2112     }
2113     else supprimer_mg_triangleid(triangle1->get_id());
2114     if (triangle4->get_nb_reference()==0)
2115     if (triangle4->get_lien_topologie()!=NULL)
2116     {
2117     if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
2118     }
2119     else supprimer_mg_triangleid(triangle4->get_id());
2120     return OK;
2121     }
2122    
2123    
2124     void MG_MAILLAGE::supprimer_tout_mg_pyramide(void)
2125     {
2126     while (get_nb_mg_pyramide()!=0)
2127     {
2128     LISTE_MG_PYRAMIDE::iterator j=lst_mg_pyramide.begin();
2129     MG_PYRAMIDE* mgpyr=(*j).second;
2130     MG_IDENTIFICATEUR* id=mgpyr;
2131     LISTE_ENTITE::iterator i=lst_entite.find(id);
2132     lst_entite.erase(i);
2133     lst_mg_pyramide.erase(j);
2134     delete mgpyr;
2135     }
2136     }
2137    
2138    
2139     MG_PYRAMIDE* MG_MAILLAGE::get_premier_pyramide(LISTE_MG_PYRAMIDE::iterator & it)
2140     {
2141     it = lst_mg_pyramide.begin();
2142     if (it == lst_mg_pyramide.end())
2143     return NULL;
2144     return it->second;
2145     }
2146    
2147     MG_PYRAMIDE* MG_MAILLAGE::get_suivant_pyramide(LISTE_MG_PYRAMIDE::iterator & it)
2148     {
2149     it++;
2150     if (it == lst_mg_pyramide.end())
2151     return NULL;
2152     return it->second;
2153     }
2154    
2155    
2156 francois 283 bool MG_MAILLAGE::contient ( MG_IDENTIFICATEUR * id )
2157     {
2158     return ( lst_entite.find ( id ) != lst_entite.end() );
2159     }
2160    
2161 francois 763 void MG_MAILLAGE::enregistrer(std::ostream& o,double version)
2162 francois 283 {
2163 francois 581 int recherchedim=0;
2164     if (mg_geometrie==NULL) recherchedim=1;
2165     if (mg_geometrie!=NULL)
2166     if (strcmp(mg_geometrie->get_type_geometrie(),"VIRTUEL")==0) recherchedim=1;
2167     if (recherchedim==1)
2168 francois 283 {
2169     if (get_nb_mg_tetra()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=3;
2170 francois 308 else if (get_nb_mg_hexa()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=3;
2171 francois 283 else if (get_nb_mg_triangle()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=2;
2172 francois 308 else if (get_nb_mg_quadrangle()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=2;
2173 francois 283 else if (get_nb_mg_segment()!=0) MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=1;
2174     else MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO=0;
2175     }
2176 francois 465 if (est_structure==true)
2177     {
2178 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;
2179     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;
2180 francois 465 }
2181     else
2182     {
2183 francois 466 if (mg_geometrie==NULL) o << "%" << get_id() << "=MAILLAGE(NULL);" << std::endl;
2184     else o << "%" << get_id() << "=MAILLAGE($" << mg_geometrie->get_id() << ");" << std::endl;
2185 francois 465 }
2186 francois 283 LISTE_ENTITE::const_iterator i;
2187     for (i=lst_entite.begin();i!=lst_entite.end();i++)
2188     {
2189     MG_IDENTIFICATEUR* entite = *i;
2190 francois 763 entite->enregistrer(o,version);
2191 francois 283 }
2192     }
2193    
2194 francois 910
2195     void MG_MAILLAGE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
2196     {
2197     LISTE_ENTITE::const_iterator i;
2198     for (i=lst_entite.begin();i!=lst_entite.end();i++)
2199     (*i)->get_fichier_dependant(liste_fichier);
2200     }
2201    
2202 francois 283 void MG_MAILLAGE::enregistrer_sous_mesh_1D(std::ostream& o)
2203     {
2204    
2205     int nb_noeud=0;
2206     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2207     {
2208     MG_NOEUD* noeud=((*i).second);
2209     if (noeud->get_lien_topologie()->get_dimension()<2) nb_noeud++;
2210     }
2211    
2212     int nb_seg=0;
2213     for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
2214     {
2215     MG_SEGMENT* seg=((*i).second);
2216     if (seg->get_lien_topologie()->get_dimension()<2) nb_seg++;
2217     }
2218    
2219     o << nb_noeud << " " << nb_seg << std::endl;
2220     int ii=0;
2221     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2222     {
2223     MG_NOEUD* noeud=((*i).second);
2224     if (noeud->get_lien_topologie()->get_dimension()<2)
2225     {
2226     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
2227     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2228     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
2229     o << noeud->get_lien_topologie()->get_id() << " " << noeud->get_id() << std::endl;
2230     noeud->change_nouveau_numero(ii+1);
2231     ii++;
2232     }
2233     }
2234    
2235     for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
2236     {
2237     MG_SEGMENT* seg=((*i).second);
2238     if (seg->get_lien_topologie()->get_dimension()<2)
2239     {
2240     o << "2 " << seg->get_noeud1()->get_nouveau_numero() << " " << seg->get_noeud2()->get_nouveau_numero() << " " ;
2241     if (seg->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2242     if (seg->get_lien_topologie()->get_dimension()==1) o << "edge ";
2243     o << seg->get_lien_topologie()->get_id() << std::endl;
2244     }
2245     }
2246    
2247     }
2248    
2249     void MG_MAILLAGE::enregistrer_sous_mesh_2D
2250     (std::ostream& o)
2251     {
2252     int nb_noeud=0;
2253     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2254     {
2255     MG_NOEUD* noeud=((*i).second);
2256     if (noeud->get_lien_topologie()->get_dimension()<3) nb_noeud++;
2257     }
2258    
2259     int nb_tri=0;
2260     for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
2261     {
2262     MG_TRIANGLE* triangle=((*i).second);
2263     if (triangle->get_lien_topologie()->get_dimension()<3) nb_tri++;
2264     }
2265    
2266     o << nb_noeud << " " << nb_tri << std::endl;
2267     int ii=0;
2268     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2269     {
2270     MG_NOEUD* noeud=((*i).second);
2271     if (noeud->get_lien_topologie()->get_dimension()<3)
2272     {
2273     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
2274     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2275     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
2276     if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
2277     o << noeud->get_lien_topologie()->get_id() << std::endl;
2278     noeud->change_nouveau_numero(ii+1);
2279     ii++;
2280     }
2281     }
2282    
2283     int compteur=0;
2284     for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
2285     {
2286     MG_TRIANGLE* triangle=((*i).second);
2287     if (triangle->get_lien_topologie()->get_dimension()<3)
2288     {
2289     o << "3 " << triangle->get_noeud1()->get_nouveau_numero() << " " << triangle->get_noeud2()->get_nouveau_numero() << " " << triangle->get_noeud3()->get_nouveau_numero() << " " ;
2290     if (triangle->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2291     if (triangle->get_lien_topologie()->get_dimension()==1) o << "edge ";
2292     if (triangle->get_lien_topologie()->get_dimension()==2) o << "face ";
2293     if (triangle->get_lien_topologie()->get_dimension()==3) o << "body ";
2294     o << triangle->get_lien_topologie()->get_id() << std::endl;
2295     compteur++;
2296     }
2297     }
2298    
2299     }
2300    
2301     void MG_MAILLAGE::enregistrer_sous_mesh_3D(std::ostream& o)
2302     {
2303     o << get_nb_mg_noeud() << " " << get_nb_mg_tetra() << std::endl;
2304     int ii=0;
2305     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2306     {
2307     MG_NOEUD* noeud=((*i).second);
2308     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
2309 francois 947 if (noeud->get_lien_topologie()!=NULL)
2310     {
2311     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2312     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
2313     if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
2314     if (noeud->get_lien_topologie()->get_dimension()==3) o << "body ";
2315     o << noeud->get_lien_topologie()->get_id() ;
2316     }
2317     o << std::endl;
2318 francois 283 noeud->change_nouveau_numero(ii+1);
2319     ii++;
2320     }
2321    
2322    
2323     for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
2324     {
2325     MG_TETRA* tetra=((*i).second);
2326     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() << " " ;
2327 francois 947 if (tetra->get_lien_topologie()!=NULL)
2328     {
2329     if (tetra->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2330 francois 283 if (tetra->get_lien_topologie()->get_dimension()==1) o << "edge ";
2331     if (tetra->get_lien_topologie()->get_dimension()==2) o << "face ";
2332     if (tetra->get_lien_topologie()->get_dimension()==3) o << "body ";
2333 francois 947 o << tetra->get_lien_topologie()->get_id() ;
2334     }
2335     o << std::endl;
2336 francois 283 }
2337    
2338     }
2339    
2340     void MG_MAILLAGE::exporter_mesh(std::string& nomfic)
2341     {
2342     char chaine[500];
2343     sprintf(chaine,"%s_1D.mai",nomfic.c_str());
2344     std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
2345     of1.precision(16);
2346     of1.setf(std::ios::showpoint);
2347     enregistrer_sous_mesh_1D(of1);
2348     sprintf(chaine,"%s_2D.mai",nomfic.c_str());
2349     std::ofstream of2(chaine,std::ios::out|std::ios::trunc);
2350     of2.precision(16);
2351     of2.setf(std::ios::showpoint);
2352     enregistrer_sous_mesh_2D(of2);
2353     sprintf(chaine,"%s_3D.mai",nomfic.c_str());
2354     std::ofstream of3(chaine,std::ios::out|std::ios::trunc);
2355     of3.precision(16);
2356     of3.setf(std::ios::showpoint);
2357     enregistrer_sous_mesh_3D(of3);
2358     }
2359    
2360     /*
2361     void MG_MAILLAGE::exporter_cosmos(std::string& nomfic)
2362     {
2363     char chaine[500];
2364     sprintf(chaine,"%s.ses",nomfic.c_str());
2365     std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
2366     of1.precision(16);
2367     of1.setf(std::ios::showpoint);
2368     of1 << "TITLE, " << chaine << " : Fichier de maillage MAGiC" << std::endl;
2369     of1 << "EGROUP,1,TETRA4,0,0,0,0,0,0,0,0;" << std::endl;
2370     int nb_volume=mg_geometrie->get_nb_mg_volume();
2371     for (int i=0;i<nb_volume;i++)
2372     {
2373     MG_VOLUME *mgvol=mg_geometrie->get_mg_volume(i);
2374     if (mgvol->get_num_materiau()>=0)
2375     {
2376     MT_GESTIONNAIRE mtgest(mg_geometrie->get_gest_materiau());
2377     MT_MATERIAU* mat=mtgest.get_materiau(mgvol->get_num_materiau());
2378     MT_PROPRIETE* prop=mat->get_propriete("EX");
2379     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", EX, " << prop->get_valeur(2) << ";" << std::endl;
2380     prop=mat->get_propriete("NUXY");
2381     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", NUXY, " << prop->get_valeur(2) << ";" << std::endl;
2382     prop=mat->get_propriete("GXY");
2383     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", GXY, " << prop->get_valeur(2) << ";" << std::endl;
2384     prop=mat->get_propriete("DENS");
2385     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", DENS, " << prop->get_valeur(2) << ";" << std::endl;
2386     prop=mat->get_propriete("SIGXT");
2387     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGXT, " << prop->get_valeur(2) << ";" << std::endl;
2388     prop=mat->get_propriete("SIGYLD");
2389     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGYLD, " << prop->get_valeur(2) << ";" << std::endl;
2390     prop=mat->get_propriete("ALPX");
2391     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", ALPX, " << prop->get_valeur(2) << ";" << std::endl;
2392     prop=mat->get_propriete("KX");
2393     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", KX, " << prop->get_valeur(2) << ";" << std::endl;
2394     prop=mat->get_propriete("C");
2395     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", C, " << prop->get_valeur(2) << ";" << std::endl;
2396     }
2397     }
2398     of1 << "ACTSET,CS,0;" << std::endl;
2399     of1 << "ACTSET,EG,1;" << std::endl;
2400     int ii=0;
2401     double valeurunite=mg_geometrie->get_valeur_unite();
2402     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2403     {
2404     MG_NOEUD* noeud=((*i).second);
2405     of1 << "ND, " << (ii+1) << ", " << noeud->get_x()*valeurunite << ", " << noeud->get_y()*valeurunite << ", " << noeud->get_z()*valeurunite << ";" << std::endl;
2406     char nom[3];
2407     int nb=noeud->get_lien_topologie()->get_nb_ccf();
2408     for (int k=0;k<nb;k++)
2409     {
2410     noeud->get_lien_topologie()->get_type_ccf(k,nom);
2411     if (strcmp(nom,"Da")==0) of1 << "DND , " << ii+1 << ", AL, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2412     if (strcmp(nom,"Dx")==0) of1 << "DND , " << ii+1 << ", UX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2413     if (strcmp(nom,"Dy")==0) of1 << "DND , " << ii+1 << ", UY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2414     if (strcmp(nom,"Dz")==0) of1 << "DND , " << ii+1 << ", UZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2415     if (strcmp(nom,"Fx")==0) of1 << "FND , " << ii+1 << ", FX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2416     if (strcmp(nom,"Fy")==0) of1 << "FND , " << ii+1 << ", FY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2417     if (strcmp(nom,"Fz")==0) of1 << "FND , " << ii+1 << ", FZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2418     }
2419     ii++;
2420     noeud->change_nouveau_numero(ii);
2421     }
2422     ii=0;
2423     int nummat=-10;
2424     for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
2425     {
2426     MG_TETRA* tetra=((*i).second);
2427     MG_VOLUME* vol=(MG_VOLUME*)tetra->get_lien_topologie();
2428     int nummatac=vol->get_num_materiau();
2429     if (nummatac!=nummat)
2430     {
2431     nummat=nummatac;
2432     of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
2433     }
2434     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() << ", " ;
2435     ii++;
2436     if (tetra->get_triangle1()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
2437     if (tetra->get_triangle2()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
2438     if (tetra->get_triangle3()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
2439     if (tetra->get_triangle4()->get_lien_topologie()->get_dimension()!=3) of1 << "1;" << std::endl ; else of1 << "0;" << std::endl;
2440     char nom[3];
2441     int nb=tetra->get_triangle1()->get_lien_topologie()->get_nb_ccf();
2442     for (int k=0;k<nb;k++)
2443     {
2444     tetra->get_triangle1()->get_lien_topologie()->get_type_ccf(k,nom);
2445     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 1;" << std::endl;
2446     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 2;" << std::endl;
2447     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 3;" << std::endl;
2448     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 4;" << std::endl;
2449     }
2450     nb=tetra->get_triangle2()->get_lien_topologie()->get_nb_ccf();
2451     for (int k=0;k<nb;k++)
2452     {
2453     tetra->get_triangle2()->get_lien_topologie()->get_type_ccf(k,nom);
2454     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 1;" << std::endl;
2455     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 2;" << std::endl;
2456     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 3;" << std::endl;
2457     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 4;" << std::endl;
2458     }
2459     nb=tetra->get_triangle3()->get_lien_topologie()->get_nb_ccf();
2460     for (int k=0;k<nb;k++)
2461     {
2462     tetra->get_triangle3()->get_lien_topologie()->get_type_ccf(k,nom);
2463     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 1;" << std::endl;
2464     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 2;" << std::endl;
2465     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 3;" << std::endl;
2466     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 4;" << std::endl;
2467     }
2468     nb=tetra->get_triangle4()->get_lien_topologie()->get_nb_ccf();
2469     for (int k=0;k<nb;k++)
2470     {
2471     tetra->get_triangle4()->get_lien_topologie()->get_type_ccf(k,nom);
2472     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 1;" << std::endl;
2473     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 2;" << std::endl;
2474     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 3;" << std::endl;
2475     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 4;" << std::endl;
2476     }
2477     }
2478     }
2479    
2480     */
2481    
2482    
2483    
2484     void MG_MAILLAGE::exporter_giref(std::string& nomfic)
2485     {
2486     char chaine[500];
2487     sprintf(chaine,"%s.mail",nomfic.c_str());
2488     FILE *in=fopen(chaine,"wt");
2489     int lieu=0;
2490    
2491     fprintf(in,"8 Maillage\n");
2492     fprintf(in,"11 Version 1.0\n");
2493     fprintf(in,"%lu\n\n",get_id());
2494     int nb=get_nb_mg_noeud();
2495     fprintf(in,"%d\n",nb);
2496    
2497     LISTE_MG_NOEUD::iterator ind;
2498     MG_NOEUD* noeud=get_premier_noeud(ind);
2499     int i=0;
2500     while (noeud)
2501     {
2502     noeud->change_nouveau_numero(i++);
2503     MG_ELEMENT_TOPOLOGIQUE* topo=noeud->get_lien_topologie();
2504     if (topo->get_nouveau_numero()==-1)
2505     {
2506     topo->change_nouveau_numero(lieu);
2507     lieu++;
2508     }
2509     fprintf(in,"%.16e %.16e %.16e 0 %d \n",noeud->get_x(),noeud->get_y(),noeud->get_z(),topo->get_nouveau_numero());
2510     noeud=get_suivant_noeud(ind);
2511     }
2512    
2513    
2514     nb=get_nb_mg_segment();
2515     fprintf(in,"\n%d\n",nb);
2516    
2517     LISTE_MG_SEGMENT::iterator iseg;
2518     MG_SEGMENT* seg=get_premier_segment(iseg);
2519     i=0;
2520    
2521     while (seg)
2522     {
2523    
2524     seg->change_nouveau_numero(i);
2525     MG_ELEMENT_TOPOLOGIQUE* topo=seg->get_lien_topologie();
2526     if (topo->get_nouveau_numero()==-1)
2527     {
2528     topo->change_nouveau_numero(lieu);
2529     lieu++;
2530     }
2531     fprintf(in,"%d %d 0 %d \n",seg->get_noeud1()->get_nouveau_numero(),seg->get_noeud2()->get_nouveau_numero(),topo->get_nouveau_numero());
2532     seg = get_suivant_segment(iseg);
2533     }
2534     nb=get_nb_mg_triangle();
2535     fprintf(in,"\n%d\n",nb);
2536     for (int i=0;i<nb;i++)
2537     {
2538     MG_TRIANGLE* tri=get_mg_triangle(i);
2539     tri->change_nouveau_numero(i);
2540     MG_ELEMENT_TOPOLOGIQUE* topo=tri->get_lien_topologie();
2541     if (topo->get_nouveau_numero()==-1)
2542     {
2543     topo->change_nouveau_numero(lieu);
2544     lieu++;
2545     }
2546     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());
2547     }
2548     nb=get_nb_mg_tetra();
2549     fprintf(in,"\n0\n\n0\n\n0\n\n%d\n",nb);
2550     for (int i=0;i<nb;i++)
2551     {
2552     MG_TETRA* tet=get_mg_tetra(i);
2553     tet->change_nouveau_numero(i);
2554     MG_ELEMENT_TOPOLOGIQUE* topo=tet->get_lien_topologie();
2555     if (topo->get_nouveau_numero()==-1)
2556     {
2557     topo->change_nouveau_numero(lieu);
2558     lieu++;
2559     }
2560     TPL_MAP_ENTITE<MG_SEGMENT*> lst_segment;
2561     lst_segment.ajouter(tet->get_triangle1()->get_segment1());
2562     lst_segment.ajouter(tet->get_triangle1()->get_segment2());
2563     lst_segment.ajouter(tet->get_triangle1()->get_segment3());
2564     lst_segment.ajouter(tet->get_triangle2()->get_segment1());
2565     lst_segment.ajouter(tet->get_triangle2()->get_segment2());
2566     lst_segment.ajouter(tet->get_triangle2()->get_segment3());
2567     lst_segment.ajouter(tet->get_triangle3()->get_segment1());
2568     lst_segment.ajouter(tet->get_triangle3()->get_segment2());
2569     lst_segment.ajouter(tet->get_triangle3()->get_segment3());
2570     lst_segment.ajouter(tet->get_triangle4()->get_segment1());
2571     lst_segment.ajouter(tet->get_triangle4()->get_segment2());
2572     lst_segment.ajouter(tet->get_triangle4()->get_segment3());
2573     int tab[6];
2574     for (int j=0;j<6;j++)
2575     {
2576     MG_SEGMENT* seg=lst_segment.get(j);
2577     if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud2())) tab[0]=j;
2578     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud1())) tab[0]=j;
2579     else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud3())) tab[1]=j;
2580     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud1())) tab[1]=j;
2581     else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud4())) tab[2]=j;
2582     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud1())) tab[2]=j;
2583     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud3())) tab[3]=j;
2584     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud2())) tab[3]=j;
2585     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud4())) tab[4]=j;
2586     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud2())) tab[4]=j;
2587     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud4())) tab[5]=j;
2588     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud3())) tab[5]=j;
2589     }
2590     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());
2591     }
2592    
2593 francois 660 fprintf(in,"\n0\n\n0\n\n8 Maillage\n");
2594 francois 283 fclose(in);
2595     }
2596    
2597    
2598     std::ostream& operator << (std::ostream& o,MG_MAILLAGE& maillage)
2599     {
2600 francois 763 maillage.enregistrer(o,VERSIONFICHIER);
2601 francois 283 return o;
2602     }
2603    
2604    
2605     MG_SOLUTION* MG_MAILLAGE::calculer_carte_taille_reelle(char* nomfichier)
2606     {
2607     int nb_noeud=get_nb_mg_noeud();
2608     std::string nomsol="Carte de taille reelle";
2609     MG_SOLUTION* mgsol=new MG_SOLUTION(this,1,nomfichier,nb_noeud,nomsol);
2610     mgsol->change_legende(0,"F(x,y,z)");
2611     for (int j=0;j<nb_noeud;j++)
2612     {
2613     MG_NOEUD* noeud=get_mg_noeud(j);
2614     int nb_segment=noeud->get_lien_segment()->get_nb();
2615     double ec=0.;
2616     int nbr=0;
2617     for (int k=0;k<nb_segment;k++)
2618     {
2619     MG_SEGMENT* seg=noeud->get_lien_segment()->get(k);
2620     MG_SEGMENT* segtmp=get_mg_segmentid(seg->get_id());
2621     if (segtmp!=NULL)
2622     {
2623     nbr++;
2624     ec=ec+seg->get_longueur();
2625     }
2626     }
2627     ec=ec/nbr;
2628 francois 377 mgsol->ecrire(ec,j,0,0,0);
2629 francois 283 }
2630     return mgsol;
2631     }
2632    
2633    
2634     MG_GESTIONNAIRE* MG_MAILLAGE::get_gestionnaire(void)
2635     {
2636     return gest;
2637     }
2638    
2639 francois 465 void MG_MAILLAGE::change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp)
2640     {
2641     boite_englobante=btmp;
2642     nx=nxtmp;
2643     ny=nytmp;
2644     nz=nztmp;
2645     est_structure=true;
2646     }
2647    
2648     bool MG_MAILLAGE::get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp)
2649     {
2650     if (est_structure==true)
2651     {
2652     btmp=boite_englobante;
2653     nxtmp=nx;
2654     nytmp=ny;
2655     nztmp=nz;
2656     return true;
2657     }
2658     return false;
2659     }
2660    
2661    
2662     bool MG_MAILLAGE::get_est_structure(void)
2663     {
2664     return est_structure;
2665     }
2666