MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_maillage.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
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 
23 
24 #include "gestionversion.h"
25 #include <fstream>
26 #include <iostream>
27 
28 
29 #include "mg_maillage.h"
30 #include "mg_gestionnaire.h"
31 #include "mc_gestionnaire.h"
32 #include "mc_propriete.h"
33 #include "mc_materiau.h"
34 #include "tpl_map_entite.h"
35 
36 
37 
39 
40 
41 MG_MAILLAGE::MG_MAILLAGE(MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(),mg_geometrie(geo),est_structure(false)
42 {
43 }
44 
45 MG_MAILLAGE::MG_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(num),mg_geometrie(geo),est_structure(false)
46 {
47 }
48 
49 
50 MG_MAILLAGE::MG_MAILLAGE(FEM_MAILLAGE* fem,double coef):MG_IDENTIFICATEUR(),mg_geometrie(fem->get_mg_geometrie()),est_structure(false)
51 {
52  {
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  if (no->get_mg_element_maillage()==NULL) continue;
59  double x=no->get_x(coef);
60  double y=no->get_y(coef);
61  double z=no->get_z(coef);
62  MG_NOEUD *newno=new MG_NOEUD(no->get_lien_topologie(),x,y,z,MAGIC::ORIGINE::DEFORME);
63  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  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  }
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  ajouter_mg_triangle(ele->get_lien_topologie(),no1,no2,no3,MAGIC::ORIGINE::DEFORME);
94  }
95  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  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  ajouter_mg_quadrangle(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
109  }
110  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  }
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  ajouter_mg_tetra(ele->get_lien_topologie(),no1,no2,no3,no4,MAGIC::ORIGINE::DEFORME);
129  }
130  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  if (ele->get_nb_fem_noeud()==8)
139  {
140  MG_NOEUD* no1=get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
141  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  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  ajouter_mg_hexa(ele->get_lien_topologie(),no1,no2,no3,no4,no5,no6,no7,no8,MAGIC::ORIGINE::DEFORME);
161  }
162  }
163 
164  }
165 }
166 
168 {
170 if (topo!=NULL)
171  {
172  topo->get_topologie_sousjacente(&lst);
173  lst.ajouter(topo);
174  }
175 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  if ((noeud->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
181  if (lst.existe(noeud->get_lien_topologie())==false) continue;
182  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  if ((segment->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
193  if (lst.existe(segment->get_lien_topologie())==false) continue;
194  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  if ((triangle->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
203  if (lst.existe(triangle->get_lien_topologie())==false) continue;
204  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  if ((quad->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
213  if (lst.existe(quad->get_lien_topologie())==false) continue;
214  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  if ((tet->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
224  if (lst.existe(tet->get_lien_topologie())==false) continue;
225  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  if ((hex->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
235  if (lst.existe(hex->get_lien_topologie())==false) continue;
236  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 LISTE_MG_PENTA::iterator itpen;
247 for (MG_PENTA *pen = get_premier_penta(itpen); pen; pen=get_suivant_penta(itpen))
248  {
249  if ((pen->get_lien_topologie()!=NULL) && (lst.get_nb()!=0))
250  if (lst.existe(pen->get_lien_topologie())==false) continue;
251  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 return mgmai;
260 }
261 
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 /* int nb_segment = get_nb_mg_segment();
287  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  }*/
394 
395  return mgmai;
396 }
397 
398 
400 {
408 }
409 
411 {
412  return mg_geometrie;
413 }
414 
415 
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 
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 
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 
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 
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 
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 
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 
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 
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 
647 {
648  return lst_mg_segment.size();
649 }
650 
651 
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 
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 
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_ELEMENT_TOPOLOGIQUE* toposousjacente=topo;
734  if (topo!=NULL)
735  if (topo->est_une_topo_element())
736  toposousjacente=NULL;
737  MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
738  MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
739  MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud1->get_id());
740  if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(toposousjacente,mgnoeud1,mgnoeud2,origine);
741  if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(toposousjacente,mgnoeud2,mgnoeud3,origine);
742  if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(toposousjacente,mgnoeud3,mgnoeud1,origine);
743  MG_TRIANGLE* mgtriangle;
744  if (num==0) mgtriangle=new MG_TRIANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
745  else mgtriangle=new MG_TRIANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3,origine);
746  int resultat=ajouter_mg_triangle(mgtriangle);
747  if (resultat==FAIL)
748  {
749  delete mgtriangle;
750  return NULL;
751  }
752  return mgtriangle;
753 }
754 
755 
757 {
758  gest->recherche_bonid(*mgtriangle);
759  MG_IDENTIFICATEUR *id=mgtriangle;
760  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
761  if (!p.second)
762  {
763  return FAIL;
764  }
765 
766  std::pair<const unsigned long,MG_TRIANGLE*> tmp(mgtriangle->get_id(),mgtriangle);
767  lst_mg_triangle.insert(tmp);
768  return OK;
769 }
770 
771 
773 {
774  LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.find(num);
775  if (i==lst_mg_triangle.end())
776  {
777  return NULL;
778  }
779  return ((*i).second);
780 }
781 
782 
783 
785 {
786  if (!(num<lst_mg_triangle.size()))
787  {
788  return NULL;
789  }
790  LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();
791  for (unsigned long j=0;j<num;j++) i++;
792  return ((*i).second);
793 }
794 
795 MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id)
796 {
797  unsigned long id=std::min(noeud1id,noeud2id);
798  id=std::min(id,noeud3id);
799  MG_NOEUD* noeud=get_mg_noeudid(id);
800  int nb_triangle=noeud->get_lien_petit_triangle()->get_nb();
801  for (int i=0;i<nb_triangle;i++)
802  {
803  MG_TRIANGLE* mgtriangle=noeud->get_lien_petit_triangle()->get(i);
804  if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
805  if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
806  if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
807  if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
808  if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
809  if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
810  }
811  return NULL;
812 }
813 
815 {
816  return lst_mg_triangle.size();
817 }
818 
819 
821 {
822  MG_TRIANGLE* mgtriangle=get_mg_triangleid(num);
823  if (mgtriangle==NULL)
824  {
825  return FAIL;
826  }
827  MG_IDENTIFICATEUR* id=mgtriangle;
828  LISTE_ENTITE::iterator i=lst_entite.find(id);
829  lst_entite.erase(i);
830  LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.find(num);
831  lst_mg_triangle.erase(j);
832  MG_SEGMENT* segment1=mgtriangle->get_segment1();
833  MG_SEGMENT* segment2=mgtriangle->get_segment2();
834  MG_SEGMENT* segment3=mgtriangle->get_segment3();
835  delete mgtriangle;
836  if (segment1->get_nb_reference()==0)
837  if (segment1->get_lien_topologie()!=NULL)
838  {
839  if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
840  }
841  else supprimer_mg_segmentid(segment1->get_id());
842  if (segment2->get_nb_reference()==0)
843  if (segment2->get_lien_topologie()!=NULL)
844  {
845  if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
846  }
847  else supprimer_mg_segmentid(segment2->get_id());
848  if (segment3->get_nb_reference()==0)
849  if (segment3->get_lien_topologie()!=NULL)
850  {
851  if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
852  }
853  else supprimer_mg_segmentid(segment3->get_id());
854  return OK;
855 }
856 
857 
859 {
860  MG_TRIANGLE* mgtriangle=get_mg_triangle(num);
861  if (mgtriangle==NULL)
862  {
863  return FAIL;
864  }
865  MG_IDENTIFICATEUR* id=mgtriangle;
866  LISTE_ENTITE::iterator i=lst_entite.find(id);
867  lst_entite.erase(i);
868  LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
869  for (unsigned int k=0;k<num;k++) j++;
870  lst_mg_triangle.erase(j);
871  MG_SEGMENT* segment1=mgtriangle->get_segment1();
872  MG_SEGMENT* segment2=mgtriangle->get_segment2();
873  MG_SEGMENT* segment3=mgtriangle->get_segment3();
874  delete mgtriangle;
875  if (segment1->get_nb_reference()==0)
876  if (segment1->get_lien_topologie()!=NULL)
877  {
878  if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
879  }
880  else supprimer_mg_segmentid(segment1->get_id());
881  if (segment2->get_nb_reference()==0)
882  if (segment2->get_lien_topologie()!=NULL)
883  {
884  if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
885  }
886  else supprimer_mg_segmentid(segment2->get_id());
887  if (segment3->get_nb_reference()==0)
888  if (segment3->get_lien_topologie()!=NULL)
889  {
890  if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
891  }
892  else supprimer_mg_segmentid(segment3->get_id());
893  return OK;
894 }
895 
896 
898 {
899  while (get_nb_mg_triangle()!=0)
900  {
901  LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
902  MG_TRIANGLE* mgtriangle=(*j).second;
903  MG_IDENTIFICATEUR* id=mgtriangle;
904  LISTE_ENTITE::iterator i=lst_entite.find(id);
905  lst_entite.erase(i);
906  lst_mg_triangle.erase(j);
907  delete mgtriangle;
908  }
909 }
910 
911 
912 MG_TRIANGLE* MG_MAILLAGE::get_premier_triangle(LISTE_MG_TRIANGLE::iterator & it)
913 {
914  it = lst_mg_triangle.begin();
915  if (it == lst_mg_triangle.end())
916  return NULL;
917  return it->second;
918 }
919 
920 MG_TRIANGLE* MG_MAILLAGE::get_suivant_triangle(LISTE_MG_TRIANGLE::iterator & it)
921 {
922  it++;
923  if (it == lst_mg_triangle.end())
924  return NULL;
925  return it->second;
926 }
927 
928 
929 
930 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)
931 {
932  MG_ELEMENT_TOPOLOGIQUE* toposousjacente=topo;
933  if (topo!=NULL)
934  if (topo->est_une_topo_element())
935  toposousjacente=NULL;
936  MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
937  MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
938  MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud4->get_id());
939  MG_SEGMENT* mgsegment4=get_mg_segment(mgnoeud4->get_id(),mgnoeud1->get_id());
940  if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(toposousjacente,mgnoeud1,mgnoeud2,origine);
941  if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(toposousjacente,mgnoeud2,mgnoeud3,origine);
942  if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(toposousjacente,mgnoeud3,mgnoeud4,origine);
943  if (mgsegment4==NULL) mgsegment4=ajouter_mg_segment(toposousjacente,mgnoeud4,mgnoeud1,origine);
944  MG_QUADRANGLE* mgquadrangle;
945  if (num==0) mgquadrangle=new MG_QUADRANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
946  else mgquadrangle=new MG_QUADRANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgsegment1,mgsegment2,mgsegment3,mgsegment4,origine);
947  int resultat=ajouter_mg_quadrangle(mgquadrangle);
948  if (resultat==FAIL)
949  {
950  delete mgquadrangle;
951  return NULL;
952  }
953  return mgquadrangle;
954 }
955 
956 
958 {
959  gest->recherche_bonid(*mgquadrangle);
960  MG_IDENTIFICATEUR *id=mgquadrangle;
961  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
962  if (!p.second)
963  {
964  return FAIL;
965  }
966 
967  std::pair<const unsigned long,MG_QUADRANGLE*> tmp(mgquadrangle->get_id(),mgquadrangle);
968  lst_mg_quadrangle.insert(tmp);
969  return OK;
970 }
971 
972 
974 {
975  LISTE_MG_QUADRANGLE::iterator i=lst_mg_quadrangle.find(num);
976  if (i==lst_mg_quadrangle.end())
977  {
978  return NULL;
979  }
980  return ((*i).second);
981 }
982 
983 
984 
986 {
987  if (!(num<lst_mg_quadrangle.size()))
988  {
989  return NULL;
990  }
991  LISTE_MG_QUADRANGLE::iterator i=lst_mg_quadrangle.begin();
992  for (unsigned long j=0;j<num;j++) i++;
993  return ((*i).second);
994 }
995 
996 MG_QUADRANGLE* MG_MAILLAGE::get_mg_quadrangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id,unsigned long noeud4id)
997 {
998  unsigned long id=std::min(noeud1id,noeud2id);
999  id=std::min(id,noeud3id);
1000  id=std::min(id,noeud4id);
1001  std::map<unsigned long,unsigned long> map1;
1002  map1[noeud1id]=noeud1id;
1003  map1[noeud2id]=noeud2id;
1004  map1[noeud3id]=noeud3id;
1005  map1[noeud4id]=noeud4id;
1006  MG_NOEUD* noeud=get_mg_noeudid(id);
1007  int nb_quadrangle=noeud->get_lien_petit_quadrangle()->get_nb();
1008  for (int i=0;i<nb_quadrangle;i++)
1009  {
1010  MG_QUADRANGLE* mgquadrangle=noeud->get_lien_petit_quadrangle()->get(i);
1011  std::map<unsigned long,unsigned long> map2;
1012  map2[mgquadrangle->get_noeud1()->get_id()]=mgquadrangle->get_noeud1()->get_id();
1013  map2[mgquadrangle->get_noeud2()->get_id()]=mgquadrangle->get_noeud2()->get_id();
1014  map2[mgquadrangle->get_noeud3()->get_id()]=mgquadrangle->get_noeud3()->get_id();
1015  map2[mgquadrangle->get_noeud4()->get_id()]=mgquadrangle->get_noeud4()->get_id();
1016  std::map<unsigned long,unsigned long>::iterator it1,it2;
1017  it1=map1.begin();it2=map2.begin();
1018  int ok=1;
1019  while (it1!=map1.end())
1020  {
1021  if ((*it1).first!=(*it2).first) {ok=0;break;}
1022  it1++;
1023  it2++;
1024  }
1025  if (ok) return mgquadrangle;
1026  }
1027  return NULL;
1028 }
1029 
1031 {
1032  return lst_mg_quadrangle.size();
1033 }
1034 
1035 
1037 {
1038  MG_QUADRANGLE* mgquadrangle=get_mg_quadrangleid(num);
1039  if (mgquadrangle==NULL)
1040  {
1041  return FAIL;
1042  }
1043  MG_IDENTIFICATEUR* id=mgquadrangle;
1044  LISTE_ENTITE::iterator i=lst_entite.find(id);
1045  lst_entite.erase(i);
1046  LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.find(num);
1047  lst_mg_quadrangle.erase(j);
1048  MG_SEGMENT* segment1=mgquadrangle->get_segment1();
1049  MG_SEGMENT* segment2=mgquadrangle->get_segment2();
1050  MG_SEGMENT* segment3=mgquadrangle->get_segment3();
1051  MG_SEGMENT* segment4=mgquadrangle->get_segment4();
1052  delete mgquadrangle;
1053  if (segment1->get_nb_reference()==0)
1054  if (segment1->get_lien_topologie()!=NULL)
1055  {
1056  if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
1057  }
1058  else supprimer_mg_segmentid(segment1->get_id());
1059  if (segment2->get_nb_reference()==0)
1060  if (segment2->get_lien_topologie()!=NULL)
1061  {
1062  if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
1063  }
1064  else supprimer_mg_segmentid(segment2->get_id());
1065  if (segment3->get_nb_reference()==0)
1066  if (segment3->get_lien_topologie()!=NULL)
1067  {
1068  if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
1069  }
1070  else supprimer_mg_segmentid(segment3->get_id());
1071  if (segment4->get_nb_reference()==0)
1072  if (segment4->get_lien_topologie()!=NULL)
1073  {
1074  if (segment4->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment4->get_id());
1075  }
1076  else supprimer_mg_segmentid(segment4->get_id());
1077  return OK;
1078 }
1079 
1080 
1082 {
1083  MG_QUADRANGLE* mgquadrangle=get_mg_quadrangle(num);
1084  if (mgquadrangle==NULL)
1085  {
1086  return FAIL;
1087  }
1088  MG_IDENTIFICATEUR* id=mgquadrangle;
1089  LISTE_ENTITE::iterator i=lst_entite.find(id);
1090  lst_entite.erase(i);
1091  LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.begin();
1092  for (unsigned int k=0;k<num;k++) j++;
1093  lst_mg_quadrangle.erase(j);
1094  MG_SEGMENT* segment1=mgquadrangle->get_segment1();
1095  MG_SEGMENT* segment2=mgquadrangle->get_segment2();
1096  MG_SEGMENT* segment3=mgquadrangle->get_segment3();
1097  MG_SEGMENT* segment4=mgquadrangle->get_segment4();
1098  delete mgquadrangle;
1099  if (segment1->get_nb_reference()==0)
1100  if (segment1->get_lien_topologie()!=NULL)
1101  {
1102  if (segment1->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment1->get_id());
1103  }
1104  else supprimer_mg_segmentid(segment1->get_id());
1105  if (segment2->get_nb_reference()==0)
1106  if (segment2->get_lien_topologie()!=NULL)
1107  {
1108  if (segment2->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment2->get_id());
1109  }
1110  else supprimer_mg_segmentid(segment2->get_id());
1111  if (segment3->get_nb_reference()==0)
1112  if (segment3->get_lien_topologie()!=NULL)
1113  {
1114  if (segment3->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment3->get_id());
1115  }
1116  else supprimer_mg_segmentid(segment3->get_id());
1117  if (segment4->get_nb_reference()==0)
1118  if (segment4->get_lien_topologie()!=NULL)
1119  {
1120  if (segment4->get_lien_topologie()->get_dimension()>1) supprimer_mg_segmentid(segment4->get_id());
1121  }
1122  else supprimer_mg_segmentid(segment4->get_id());
1123  return OK;
1124 }
1125 
1126 
1128 {
1129  while (get_nb_mg_quadrangle()!=0)
1130  {
1131  LISTE_MG_QUADRANGLE::iterator j=lst_mg_quadrangle.begin();
1132  MG_QUADRANGLE* mgquadrangle=(*j).second;
1133  MG_IDENTIFICATEUR* id=mgquadrangle;
1134  LISTE_ENTITE::iterator i=lst_entite.find(id);
1135  lst_entite.erase(i);
1136  lst_mg_quadrangle.erase(j);
1137  delete mgquadrangle;
1138  }
1139 }
1140 
1141 
1142 MG_QUADRANGLE* MG_MAILLAGE::get_premier_quadrangle(LISTE_MG_QUADRANGLE::iterator & it)
1143 {
1144  it = lst_mg_quadrangle.begin();
1145  if (it == lst_mg_quadrangle.end())
1146  return NULL;
1147  return it->second;
1148 }
1149 
1150 MG_QUADRANGLE* MG_MAILLAGE::get_suivant_quadrangle(LISTE_MG_QUADRANGLE::iterator & it)
1151 {
1152  it++;
1153  if (it == lst_mg_quadrangle.end())
1154  return NULL;
1155  return it->second;
1156 }
1157 
1158 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)
1159 {
1160  MG_ELEMENT_TOPOLOGIQUE* toposousjacente=topo;
1161  if (topo!=NULL)
1162  if (topo->est_une_topo_element())
1163  toposousjacente=NULL;
1164  MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
1165  MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud4->get_id());
1166  MG_TRIANGLE* mgtriangle3=get_mg_triangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud4->get_id());
1167  MG_TRIANGLE* mgtriangle4=get_mg_triangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id());
1168  if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud3,mgnoeud2,origine);
1169  if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud4,origine);
1170  if (mgtriangle3==NULL) mgtriangle3=ajouter_mg_triangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud4,origine);
1171  if (mgtriangle4==NULL) mgtriangle4=ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud4,mgnoeud3,origine);
1172  MG_TETRA* mgtetra;
1173  if (num==0) mgtetra=new MG_TETRA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1174  else mgtetra=new MG_TETRA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,origine);
1175  int resultat=ajouter_mg_tetra(mgtetra);
1176  if (resultat==FAIL)
1177  {
1178  delete mgtetra;
1179  return NULL;
1180  }
1181  return mgtetra;
1182 }
1183 
1184 
1186 {
1187  gest->recherche_bonid(*mgtetra);
1188  MG_IDENTIFICATEUR *id=mgtetra;
1189  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1190  if (!p.second)
1191  {
1192  return FAIL;
1193  }
1194 
1195  std::pair<const unsigned long,MG_TETRA*> tmp(mgtetra->get_id(),mgtetra);
1196  lst_mg_tetra.insert(tmp);
1197  return OK;
1198 }
1199 
1200 
1202 {
1203  LISTE_MG_TETRA::iterator i=lst_mg_tetra.find(num);
1204  if (i==lst_mg_tetra.end())
1205  {
1206  return NULL;
1207  }
1208  return ((*i).second);
1209 }
1210 
1211 
1212 
1214 {
1215  if (!(num<lst_mg_tetra.size()))
1216  {
1217  return NULL;
1218  }
1219  LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();
1220  for (unsigned long j=0;j<num;j++) i++;
1221  return ((*i).second);
1222 }
1223 
1225 {
1226  MG_NOEUD* noeud=noeud1;
1227  if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1228  if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1229  if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1230  int nb_tetra=noeud->get_lien_petit_tetra()->get_nb();
1231  for (int i=0;i<nb_tetra;i++)
1232  {
1233  MG_TETRA* mgtetra=noeud->get_lien_petit_tetra()->get(i);
1234  if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1235  if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1236  if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1237  if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1238  if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1239  if ( (mgtetra->get_noeud1()==noeud1) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1240  if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1241  if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1242  if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1243  if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1244  if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1245  if ( (mgtetra->get_noeud1()==noeud2) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1246  if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1247  if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1248  if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud4) ) return mgtetra;
1249  if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud4) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1250  if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1251  if ( (mgtetra->get_noeud1()==noeud3) && (mgtetra->get_noeud2()==noeud4) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1252  if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1253  if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud1) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1254  if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud3) ) return mgtetra;
1255  if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud2) && (mgtetra->get_noeud3()==noeud3) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1256  if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud1) && (mgtetra->get_noeud4()==noeud2) ) return mgtetra;
1257  if ( (mgtetra->get_noeud1()==noeud4) && (mgtetra->get_noeud2()==noeud3) && (mgtetra->get_noeud3()==noeud2) && (mgtetra->get_noeud4()==noeud1) ) return mgtetra;
1258  }
1259  return NULL;
1260 }
1261 
1263 {
1264  return lst_mg_tetra.size();
1265 }
1266 
1267 
1269 {
1270  MG_TETRA* mgtetra=get_mg_tetraid(num);
1271  if (mgtetra==NULL)
1272  {
1273  return FAIL;
1274  }
1275  MG_IDENTIFICATEUR* id=mgtetra;
1276  LISTE_ENTITE::iterator i=lst_entite.find(id);
1277  lst_entite.erase(i);
1278  LISTE_MG_TETRA::iterator j=lst_mg_tetra.find(num);
1279  lst_mg_tetra.erase(j);
1280  MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
1281  MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
1282  MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
1283  MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
1284  delete mgtetra;
1285  if (triangle1->get_nb_reference()==0)
1286  if (triangle1->get_lien_topologie()!=NULL)
1287  {
1288  if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1289  }
1290  else if (triangle1->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle1->get_id());
1291  if (triangle2->get_nb_reference()==0)
1292  if (triangle2->get_lien_topologie()!=NULL)
1293  {
1294  if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1295  }
1296  else if (triangle2->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle2->get_id());
1297  if (triangle3->get_nb_reference()==0)
1298  if (triangle3->get_lien_topologie()!=NULL)
1299  {
1300  if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
1301  }
1302  else if (triangle3->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle3->get_id());
1303  if (triangle4->get_nb_reference()==0)
1304  if (triangle4->get_lien_topologie()!=NULL)
1305  {
1306  if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
1307  }
1308  else if (triangle4->get_origine()==MAGIC::ORIGINE::MAILLEUR_AUTO) supprimer_mg_triangleid(triangle4->get_id());
1309  return OK;
1310 }
1311 
1312 
1313 int MG_MAILLAGE::supprimer_mg_tetra(unsigned int num)
1314 {
1315  MG_TETRA* mgtetra=get_mg_tetra(num);
1316  if (mgtetra==NULL)
1317  {
1318  return FAIL;
1319  }
1320  MG_IDENTIFICATEUR* id=mgtetra;
1321  LISTE_ENTITE::iterator i=lst_entite.find(id);
1322  lst_entite.erase(i);
1323  LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
1324  for (unsigned int k=0;k<num;k++) j++;
1325  lst_mg_tetra.erase(j);
1326  MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
1327  MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
1328  MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
1329  MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
1330  delete mgtetra;
1331  if (triangle1->get_nb_reference()==0)
1332  if (triangle1->get_lien_topologie()!=NULL)
1333  {
1334  if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1335  }
1336  else supprimer_mg_triangleid(triangle1->get_id());
1337  if (triangle2->get_nb_reference()==0)
1338  if (triangle2->get_lien_topologie()!=NULL)
1339  {
1340  if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1341  }
1342  else supprimer_mg_triangleid(triangle2->get_id());
1343  if (triangle3->get_nb_reference()==0)
1344  if (triangle3->get_lien_topologie()!=NULL)
1345  {
1346  if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
1347  }
1348  else supprimer_mg_triangleid(triangle3->get_id());
1349  if (triangle4->get_nb_reference()==0)
1350  if (triangle4->get_lien_topologie()!=NULL)
1351  {
1352  if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
1353  }
1354  else supprimer_mg_triangleid(triangle4->get_id());
1355  return OK;
1356 }
1357 
1358 
1360 {
1361  while (get_nb_mg_tetra()!=0)
1362  {
1363  LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
1364  MG_TETRA* mgtetra=(*j).second;
1365  MG_IDENTIFICATEUR* id=mgtetra;
1366  LISTE_ENTITE::iterator i=lst_entite.find(id);
1367  lst_entite.erase(i);
1368  lst_mg_tetra.erase(j);
1369  delete mgtetra;
1370  }
1371 }
1372 
1373 
1374 MG_TETRA* MG_MAILLAGE::get_premier_tetra(LISTE_MG_TETRA::iterator & it)
1375 {
1376  it = lst_mg_tetra.begin();
1377  if (it == lst_mg_tetra.end())
1378  return NULL;
1379  return it->second;
1380 }
1381 
1382 MG_TETRA* MG_MAILLAGE::get_suivant_tetra(LISTE_MG_TETRA::iterator & it)
1383 {
1384  it++;
1385  if (it == lst_mg_tetra.end())
1386  return NULL;
1387  return it->second;
1388 }
1389 
1390 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)
1391 {
1392  MG_ELEMENT_TOPOLOGIQUE* toposousjacente=topo;
1393  if (topo!=NULL)
1394  if (topo->est_une_topo_element())
1395  toposousjacente=NULL;
1396  MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud6->get_id(),mgnoeud5->get_id());
1397  MG_QUADRANGLE* mgquadrangle2=get_mg_quadrangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud7->get_id(),mgnoeud6->get_id());
1398  MG_QUADRANGLE* mgquadrangle3=get_mg_quadrangle(mgnoeud3->get_id(),mgnoeud4->get_id(),mgnoeud8->get_id(),mgnoeud7->get_id());
1399  MG_QUADRANGLE* mgquadrangle4=get_mg_quadrangle(mgnoeud4->get_id(),mgnoeud1->get_id(),mgnoeud5->get_id(),mgnoeud8->get_id());
1400  MG_QUADRANGLE* mgquadrangle5=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
1401  MG_QUADRANGLE* mgquadrangle6=get_mg_quadrangle(mgnoeud5->get_id(),mgnoeud6->get_id(),mgnoeud7->get_id(),mgnoeud8->get_id());
1402  if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud6,mgnoeud5,origine);
1403  if (mgquadrangle2==NULL) mgquadrangle2=ajouter_mg_quadrangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud7,mgnoeud6,origine);
1404  if (mgquadrangle3==NULL) mgquadrangle3=ajouter_mg_quadrangle(toposousjacente,mgnoeud3,mgnoeud4,mgnoeud8,mgnoeud7,origine);
1405  if (mgquadrangle4==NULL) mgquadrangle4=ajouter_mg_quadrangle(toposousjacente,mgnoeud4,mgnoeud1,mgnoeud5,mgnoeud8,origine);
1406  if (mgquadrangle5==NULL) mgquadrangle5=ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud4,mgnoeud3,mgnoeud2,origine);
1407  if (mgquadrangle6==NULL) mgquadrangle6=ajouter_mg_quadrangle(toposousjacente,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,origine);
1408  MG_HEXA* mghexa;
1409  if (num==0) mghexa=new MG_HEXA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1410  else mghexa=new MG_HEXA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgnoeud7,mgnoeud8,mgquadrangle1,mgquadrangle2,mgquadrangle3,mgquadrangle4,mgquadrangle5,mgquadrangle6,origine);
1411  int resultat=ajouter_mg_hexa(mghexa);
1412  if (resultat==FAIL)
1413  {
1414  delete mghexa;
1415  return NULL;
1416  }
1417  return mghexa;
1418 }
1419 
1420 
1422 {
1423  gest->recherche_bonid(*mghexa);
1424  MG_IDENTIFICATEUR *id=mghexa;
1425  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1426  if (!p.second)
1427  {
1428  return FAIL;
1429  }
1430 
1431  std::pair<const unsigned long,MG_HEXA*> tmp(mghexa->get_id(),mghexa);
1432  lst_mg_hexa.insert(tmp);
1433  return OK;
1434 }
1435 
1436 
1438 {
1439  LISTE_MG_HEXA::iterator i=lst_mg_hexa.find(num);
1440  if (i==lst_mg_hexa.end())
1441  {
1442  return NULL;
1443  }
1444  return ((*i).second);
1445 }
1446 
1447 
1448 
1450 {
1451  if (!(num<lst_mg_hexa.size()))
1452  {
1453  return NULL;
1454  }
1455  LISTE_MG_HEXA::iterator i=lst_mg_hexa.begin();
1456  for (unsigned long j=0;j<num;j++) i++;
1457  return ((*i).second);
1458 }
1459 
1460 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)
1461 {
1462  MG_NOEUD* noeud=noeud1;
1463  if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1464  if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1465  if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1466  if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
1467  if (noeud6->get_id()<noeud->get_id()) noeud=noeud6;
1468  if (noeud7->get_id()<noeud->get_id()) noeud=noeud7;
1469  if (noeud8->get_id()<noeud->get_id()) noeud=noeud8;
1470 
1471 
1472  std::map<unsigned long,unsigned long> map1;
1473  map1[noeud1->get_id()]=noeud1->get_id();
1474  map1[noeud2->get_id()]=noeud2->get_id();
1475  map1[noeud3->get_id()]=noeud3->get_id();
1476  map1[noeud4->get_id()]=noeud4->get_id();
1477  map1[noeud5->get_id()]=noeud5->get_id();
1478  map1[noeud6->get_id()]=noeud6->get_id();
1479  map1[noeud7->get_id()]=noeud7->get_id();
1480  map1[noeud8->get_id()]=noeud8->get_id();
1481  int nb_hexa=noeud->get_lien_petit_hexa()->get_nb();
1482  for (int i=0;i<nb_hexa;i++)
1483  {
1484  MG_HEXA* mghexa=noeud->get_lien_petit_hexa()->get(i);
1485  std::map<unsigned long,unsigned long> map2;
1486  map2[mghexa->get_noeud1()->get_id()]=mghexa->get_noeud1()->get_id();
1487  map2[mghexa->get_noeud2()->get_id()]=mghexa->get_noeud2()->get_id();
1488  map2[mghexa->get_noeud3()->get_id()]=mghexa->get_noeud3()->get_id();
1489  map2[mghexa->get_noeud4()->get_id()]=mghexa->get_noeud4()->get_id();
1490  map2[mghexa->get_noeud5()->get_id()]=mghexa->get_noeud5()->get_id();
1491  map2[mghexa->get_noeud6()->get_id()]=mghexa->get_noeud6()->get_id();
1492  map2[mghexa->get_noeud7()->get_id()]=mghexa->get_noeud7()->get_id();
1493  map2[mghexa->get_noeud8()->get_id()]=mghexa->get_noeud8()->get_id();
1494  std::map<unsigned long,unsigned long>::iterator it1,it2;
1495  it1=map1.begin();it2=map2.begin();
1496  int ok=1;
1497  while (it1!=map1.end())
1498  {
1499  if ((*it1).first!=(*it2).first) {ok=0;break;}
1500  it1++;
1501  it2++;
1502  }
1503  if (ok) return mghexa;
1504  }
1505  return NULL;
1506 
1507 
1508 
1509 
1510 }
1511 
1513 {
1514  return lst_mg_hexa.size();
1515 }
1516 
1517 
1518 int MG_MAILLAGE::supprimer_mg_hexaid(unsigned long num)
1519 {
1520  MG_HEXA* mghexa=get_mg_hexaid(num);
1521  if (mghexa==NULL)
1522  {
1523  return FAIL;
1524  }
1525  MG_IDENTIFICATEUR* id=mghexa;
1526  LISTE_ENTITE::iterator i=lst_entite.find(id);
1527  lst_entite.erase(i);
1528  LISTE_MG_HEXA::iterator j=lst_mg_hexa.find(num);
1529  lst_mg_hexa.erase(j);
1530  MG_QUADRANGLE* quadrangle1=mghexa->get_quadrangle1();
1531  MG_QUADRANGLE* quadrangle2=mghexa->get_quadrangle2();
1532  MG_QUADRANGLE* quadrangle3=mghexa->get_quadrangle3();
1533  MG_QUADRANGLE* quadrangle4=mghexa->get_quadrangle4();
1534  MG_QUADRANGLE* quadrangle5=mghexa->get_quadrangle5();
1535  MG_QUADRANGLE* quadrangle6=mghexa->get_quadrangle6();
1536  delete mghexa;
1537  if (quadrangle1->get_nb_reference()==0)
1538  if (quadrangle1->get_lien_topologie()!=NULL)
1539  {
1540  if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1541  }
1542  else supprimer_mg_quadrangleid(quadrangle1->get_id());
1543  if (quadrangle2->get_nb_reference()==0)
1544  if (quadrangle2->get_lien_topologie()!=NULL)
1545  {
1546  if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1547  }
1548  else supprimer_mg_quadrangleid(quadrangle2->get_id());
1549  if (quadrangle3->get_nb_reference()==0)
1550  if (quadrangle3->get_lien_topologie()!=NULL)
1551  {
1552  if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1553  }
1554  else supprimer_mg_quadrangleid(quadrangle3->get_id());
1555  if (quadrangle4->get_nb_reference()==0)
1556  if (quadrangle4->get_lien_topologie()!=NULL)
1557  {
1558  if (quadrangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle4->get_id());
1559  }
1560  else supprimer_mg_quadrangleid(quadrangle4->get_id());
1561  if (quadrangle5->get_nb_reference()==0)
1562  if (quadrangle5->get_lien_topologie()!=NULL)
1563  {
1564  if (quadrangle5->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle5->get_id());
1565  }
1566  else supprimer_mg_quadrangleid(quadrangle5->get_id());
1567  if (quadrangle6->get_nb_reference()==0)
1568  if (quadrangle6->get_lien_topologie()!=NULL)
1569  {
1570  if (quadrangle6->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle6->get_id());
1571  }
1572  else supprimer_mg_quadrangleid(quadrangle6->get_id());
1573  return OK;
1574 }
1575 
1576 
1577 int MG_MAILLAGE::supprimer_mg_hexa(unsigned int num)
1578 {
1579  MG_HEXA* mghexa=get_mg_hexa(num);
1580  if (mghexa==NULL)
1581  {
1582  return FAIL;
1583  }
1584  MG_IDENTIFICATEUR* id=mghexa;
1585  LISTE_ENTITE::iterator i=lst_entite.find(id);
1586  lst_entite.erase(i);
1587  LISTE_MG_HEXA::iterator j=lst_mg_hexa.begin();
1588  for (unsigned int k=0;k<num;k++) j++;
1589  lst_mg_hexa.erase(j);
1590  MG_QUADRANGLE* quadrangle1=mghexa->get_quadrangle1();
1591  MG_QUADRANGLE* quadrangle2=mghexa->get_quadrangle2();
1592  MG_QUADRANGLE* quadrangle3=mghexa->get_quadrangle3();
1593  MG_QUADRANGLE* quadrangle4=mghexa->get_quadrangle4();
1594  MG_QUADRANGLE* quadrangle5=mghexa->get_quadrangle5();
1595  MG_QUADRANGLE* quadrangle6=mghexa->get_quadrangle6();
1596  delete mghexa;
1597  if (quadrangle1->get_nb_reference()==0)
1598  if (quadrangle1->get_lien_topologie()!=NULL)
1599  {
1600  if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1601  }
1602  else supprimer_mg_quadrangleid(quadrangle1->get_id());
1603  if (quadrangle2->get_nb_reference()==0)
1604  if (quadrangle2->get_lien_topologie()!=NULL)
1605  {
1606  if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1607  }
1608  else supprimer_mg_quadrangleid(quadrangle2->get_id());
1609  if (quadrangle3->get_nb_reference()==0)
1610  if (quadrangle3->get_lien_topologie()!=NULL)
1611  {
1612  if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1613  }
1614  else supprimer_mg_quadrangleid(quadrangle3->get_id());
1615  if (quadrangle4->get_nb_reference()==0)
1616  if (quadrangle4->get_lien_topologie()!=NULL)
1617  {
1618  if (quadrangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle4->get_id());
1619  }
1620  else supprimer_mg_quadrangleid(quadrangle4->get_id());
1621  if (quadrangle5->get_nb_reference()==0)
1622  if (quadrangle5->get_lien_topologie()!=NULL)
1623  {
1624  if (quadrangle5->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle5->get_id());
1625  }
1626  else supprimer_mg_quadrangleid(quadrangle5->get_id());
1627  if (quadrangle6->get_nb_reference()==0)
1628  if (quadrangle6->get_lien_topologie()!=NULL)
1629  {
1630  if (quadrangle6->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle6->get_id());
1631  }
1632  else supprimer_mg_quadrangleid(quadrangle6->get_id());
1633  return OK;
1634 }
1635 
1636 
1638 {
1639  while (get_nb_mg_hexa()!=0)
1640  {
1641  LISTE_MG_HEXA::iterator j=lst_mg_hexa.begin();
1642  MG_HEXA* mghexa=(*j).second;
1643  MG_IDENTIFICATEUR* id=mghexa;
1644  LISTE_ENTITE::iterator i=lst_entite.find(id);
1645  lst_entite.erase(i);
1646  lst_mg_hexa.erase(j);
1647  delete mghexa;
1648  }
1649 }
1650 
1651 
1652 MG_HEXA* MG_MAILLAGE::get_premier_hexa(LISTE_MG_HEXA::iterator & it)
1653 {
1654  it = lst_mg_hexa.begin();
1655  if (it == lst_mg_hexa.end())
1656  return NULL;
1657  return it->second;
1658 }
1659 
1660 MG_HEXA* MG_MAILLAGE::get_suivant_hexa(LISTE_MG_HEXA::iterator & it)
1661 {
1662  it++;
1663  if (it == lst_mg_hexa.end())
1664  return NULL;
1665  return it->second;
1666 }
1667 
1668 
1669 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)
1670 {
1671  MG_ELEMENT_TOPOLOGIQUE* toposousjacente=topo;
1672  if (topo!=NULL)
1673  if (topo->est_une_topo_element())
1674  toposousjacente=NULL;
1675  MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud5->get_id(),mgnoeud4->get_id());
1676  MG_QUADRANGLE* mgquadrangle2=get_mg_quadrangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud6->get_id(),mgnoeud5->get_id());
1677  MG_QUADRANGLE* mgquadrangle3=get_mg_quadrangle(mgnoeud3->get_id(),mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud6->get_id());
1678  MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud3->get_id());
1679  MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud4->get_id(),mgnoeud5->get_id(),mgnoeud6->get_id());
1680  if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud5,mgnoeud4,origine);
1681  if (mgquadrangle2==NULL) mgquadrangle2=ajouter_mg_quadrangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud6,mgnoeud5,origine);
1682  if (mgquadrangle3==NULL) mgquadrangle3=ajouter_mg_quadrangle(toposousjacente,mgnoeud3,mgnoeud1,mgnoeud4,mgnoeud6,origine);
1683  if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud3,origine);
1684  if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(toposousjacente,mgnoeud4,mgnoeud5,mgnoeud6,origine);
1685  MG_PENTA* mgpenta;
1686  if (num==0) mgpenta=new MG_PENTA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgtriangle1,mgtriangle2,mgquadrangle1,mgquadrangle2,mgquadrangle3,origine);
1687  else mgpenta=new MG_PENTA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgnoeud6,mgtriangle1,mgtriangle2,mgquadrangle1,mgquadrangle2,mgquadrangle3,origine);
1688  int resultat=ajouter_mg_penta(mgpenta);
1689  if (resultat==FAIL)
1690  {
1691  delete mgpenta;
1692  return NULL;
1693  }
1694  return mgpenta;
1695 }
1696 
1697 
1699 {
1700  gest->recherche_bonid(*mgpenta);
1701  MG_IDENTIFICATEUR *id=mgpenta;
1702  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1703  if (!p.second)
1704  {
1705  return FAIL;
1706  }
1707 
1708  std::pair<const unsigned long,MG_PENTA*> tmp(mgpenta->get_id(),mgpenta);
1709  lst_mg_penta.insert(tmp);
1710  return OK;
1711 }
1712 
1713 
1715 {
1716  LISTE_MG_PENTA::iterator i=lst_mg_penta.find(num);
1717  if (i==lst_mg_penta.end())
1718  {
1719  return NULL;
1720  }
1721  return ((*i).second);
1722 }
1723 
1724 
1725 
1727 {
1728  if (!(num<lst_mg_penta.size()))
1729  {
1730  return NULL;
1731  }
1732  LISTE_MG_PENTA::iterator i=lst_mg_penta.begin();
1733  for (unsigned long j=0;j<num;j++) i++;
1734  return ((*i).second);
1735 }
1736 
1737 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)
1738 {
1739  MG_NOEUD* noeud=noeud1;
1740  if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1741  if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1742  if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
1743  if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
1744  if (noeud6->get_id()<noeud->get_id()) noeud=noeud6;
1745 
1746 
1747  std::map<unsigned long,unsigned long> map1;
1748  map1[noeud1->get_id()]=noeud1->get_id();
1749  map1[noeud2->get_id()]=noeud2->get_id();
1750  map1[noeud3->get_id()]=noeud3->get_id();
1751  map1[noeud4->get_id()]=noeud4->get_id();
1752  map1[noeud5->get_id()]=noeud5->get_id();
1753  map1[noeud6->get_id()]=noeud6->get_id();
1754  int nb_penta=noeud->get_lien_petit_penta()->get_nb();
1755  for (int i=0;i<nb_penta;i++)
1756  {
1757  MG_PENTA* mgpenta=noeud->get_lien_petit_penta()->get(i);
1758  std::map<unsigned long,unsigned long> map2;
1759  map2[mgpenta->get_noeud1()->get_id()]=mgpenta->get_noeud1()->get_id();
1760  map2[mgpenta->get_noeud2()->get_id()]=mgpenta->get_noeud2()->get_id();
1761  map2[mgpenta->get_noeud3()->get_id()]=mgpenta->get_noeud3()->get_id();
1762  map2[mgpenta->get_noeud4()->get_id()]=mgpenta->get_noeud4()->get_id();
1763  map2[mgpenta->get_noeud5()->get_id()]=mgpenta->get_noeud5()->get_id();
1764  map2[mgpenta->get_noeud6()->get_id()]=mgpenta->get_noeud6()->get_id();
1765  std::map<unsigned long,unsigned long>::iterator it1,it2;
1766  it1=map1.begin();it2=map2.begin();
1767  int ok=1;
1768  while (it1!=map1.end())
1769  {
1770  if ((*it1).first!=(*it2).first) {ok=0;break;}
1771  it1++;
1772  it2++;
1773  }
1774  if (ok) return mgpenta;
1775  }
1776  return NULL;
1777 
1778 
1779 
1780 
1781 }
1782 
1784 {
1785  return lst_mg_penta.size();
1786 }
1787 
1788 
1790 {
1791  MG_PENTA* mgpenta=get_mg_pentaid(num);
1792  if (mgpenta==NULL)
1793  {
1794  return FAIL;
1795  }
1796  MG_IDENTIFICATEUR* id=mgpenta;
1797  LISTE_ENTITE::iterator i=lst_entite.find(id);
1798  lst_entite.erase(i);
1799  LISTE_MG_PENTA::iterator j=lst_mg_penta.find(num);
1800  lst_mg_penta.erase(j);
1801  MG_QUADRANGLE* quadrangle1=mgpenta->get_quadrangle1();
1802  MG_QUADRANGLE* quadrangle2=mgpenta->get_quadrangle2();
1803  MG_QUADRANGLE* quadrangle3=mgpenta->get_quadrangle3();
1804  MG_TRIANGLE* triangle1=mgpenta->get_triangle1();
1805  MG_TRIANGLE* triangle2=mgpenta->get_triangle2();
1806  delete mgpenta;
1807  if (quadrangle1->get_nb_reference()==0)
1808  if (quadrangle1->get_lien_topologie()!=NULL)
1809  {
1810  if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1811  }
1812  else supprimer_mg_quadrangleid(quadrangle1->get_id());
1813  if (quadrangle2->get_nb_reference()==0)
1814  if (quadrangle2->get_lien_topologie()!=NULL)
1815  {
1816  if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1817  }
1818  else supprimer_mg_quadrangleid(quadrangle2->get_id());
1819  if (quadrangle3->get_nb_reference()==0)
1820  if (quadrangle3->get_lien_topologie()!=NULL)
1821  {
1822  if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1823  }
1824  else supprimer_mg_quadrangleid(quadrangle3->get_id());
1825  if (triangle1->get_nb_reference()==0)
1826  if (triangle1->get_lien_topologie()!=NULL)
1827  {
1828  if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1829  }
1830  else supprimer_mg_triangleid(triangle1->get_id());
1831  if (triangle2->get_nb_reference()==0)
1832  if (triangle2->get_lien_topologie()!=NULL)
1833  {
1834  if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1835  }
1836  else supprimer_mg_triangleid(triangle2->get_id());
1837  return OK;
1838 }
1839 
1840 
1841 int MG_MAILLAGE::supprimer_mg_penta(unsigned int num)
1842 {
1843  MG_PENTA* mgpenta=get_mg_penta(num);
1844  if (mgpenta==NULL)
1845  {
1846  return FAIL;
1847  }
1848  MG_IDENTIFICATEUR* id=mgpenta;
1849  LISTE_ENTITE::iterator i=lst_entite.find(id);
1850  lst_entite.erase(i);
1851  LISTE_MG_PENTA::iterator j=lst_mg_penta.begin();
1852  for (unsigned int k=0;k<num;k++) j++;
1853  lst_mg_penta.erase(j);
1854  MG_QUADRANGLE* quadrangle1=mgpenta->get_quadrangle1();
1855  MG_QUADRANGLE* quadrangle2=mgpenta->get_quadrangle2();
1856  MG_QUADRANGLE* quadrangle3=mgpenta->get_quadrangle3();
1857  MG_TRIANGLE* triangle1=mgpenta->get_triangle1();
1858  MG_TRIANGLE* triangle2=mgpenta->get_triangle2();
1859  delete mgpenta;
1860  if (quadrangle1->get_nb_reference()==0)
1861  if (quadrangle1->get_lien_topologie()!=NULL)
1862  {
1863  if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
1864  }
1865  else supprimer_mg_quadrangleid(quadrangle1->get_id());
1866  if (quadrangle2->get_nb_reference()==0)
1867  if (quadrangle2->get_lien_topologie()!=NULL)
1868  {
1869  if (quadrangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle2->get_id());
1870  }
1871  else supprimer_mg_quadrangleid(quadrangle2->get_id());
1872  if (quadrangle3->get_nb_reference()==0)
1873  if (quadrangle3->get_lien_topologie()!=NULL)
1874  {
1875  if (quadrangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle3->get_id());
1876  }
1877  else supprimer_mg_quadrangleid(quadrangle3->get_id());
1878  if (triangle1->get_nb_reference()==0)
1879  if (triangle1->get_lien_topologie()!=NULL)
1880  {
1881  if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
1882  }
1883  else supprimer_mg_triangleid(triangle1->get_id());
1884  if (triangle2->get_nb_reference()==0)
1885  if (triangle2->get_lien_topologie()!=NULL)
1886  {
1887  if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
1888  }
1889  else supprimer_mg_triangleid(triangle2->get_id());
1890  return OK;
1891 }
1892 
1893 
1895 {
1896  while (get_nb_mg_penta()!=0)
1897  {
1898  LISTE_MG_PENTA::iterator j=lst_mg_penta.begin();
1899  MG_PENTA* mgpenta=(*j).second;
1900  MG_IDENTIFICATEUR* id=mgpenta;
1901  LISTE_ENTITE::iterator i=lst_entite.find(id);
1902  lst_entite.erase(i);
1903  lst_mg_penta.erase(j);
1904  delete mgpenta;
1905  }
1906 }
1907 
1908 
1909 MG_PENTA* MG_MAILLAGE::get_premier_penta(LISTE_MG_PENTA::iterator & it)
1910 {
1911  it = lst_mg_penta.begin();
1912  if (it == lst_mg_penta.end())
1913  return NULL;
1914  return it->second;
1915 }
1916 
1917 MG_PENTA* MG_MAILLAGE::get_suivant_penta(LISTE_MG_PENTA::iterator & it)
1918 {
1919  it++;
1920  if (it == lst_mg_penta.end())
1921  return NULL;
1922  return it->second;
1923 }
1924 
1925 
1926 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)
1927 {
1928  MG_ELEMENT_TOPOLOGIQUE* toposousjacente=topo;
1929  if (topo!=NULL)
1930  if (topo->est_une_topo_element())
1931  toposousjacente=NULL;
1932  MG_QUADRANGLE* mgquadrangle1=get_mg_quadrangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud4->get_id());
1933  MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud5->get_id());
1934  MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud5->get_id());
1935  MG_TRIANGLE* mgtriangle3=get_mg_triangle(mgnoeud3->get_id(),mgnoeud4->get_id(),mgnoeud5->get_id());
1936  MG_TRIANGLE* mgtriangle4=get_mg_triangle(mgnoeud4->get_id(),mgnoeud1->get_id(),mgnoeud5->get_id());
1937  if (mgquadrangle1==NULL) mgquadrangle1=ajouter_mg_quadrangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud5,mgnoeud4,origine);
1938  if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(toposousjacente,mgnoeud1,mgnoeud2,mgnoeud5,origine);
1939  if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(toposousjacente,mgnoeud2,mgnoeud3,mgnoeud5,origine);
1940  if (mgtriangle3==NULL) mgtriangle3=ajouter_mg_triangle(toposousjacente,mgnoeud3,mgnoeud4,mgnoeud5,origine);
1941  if (mgtriangle4==NULL) mgtriangle4=ajouter_mg_triangle(toposousjacente,mgnoeud4,mgnoeud1,mgnoeud5,origine);
1942  MG_PYRAMIDE* mgpyramide;
1943  if (num==0) mgpyramide=new MG_PYRAMIDE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,mgquadrangle1,origine);
1944  else mgpyramide=new MG_PYRAMIDE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgnoeud5,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4,mgquadrangle1,origine);
1945  int resultat=ajouter_mg_pyramide(mgpyramide);
1946  if (resultat==FAIL)
1947  {
1948  delete mgpyramide;
1949  return NULL;
1950  }
1951  return mgpyramide;
1952 }
1953 
1954 
1956 {
1957  gest->recherche_bonid(*mgpyramide);
1958  MG_IDENTIFICATEUR *id=mgpyramide;
1959  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1960  if (!p.second)
1961  {
1962  return FAIL;
1963  }
1964 
1965  std::pair<const unsigned long,MG_PYRAMIDE*> tmp(mgpyramide->get_id(),mgpyramide);
1966  lst_mg_pyramide.insert(tmp);
1967  return OK;
1968 }
1969 
1970 
1972 {
1973  LISTE_MG_PYRAMIDE::iterator i=lst_mg_pyramide.find(num);
1974  if (i==lst_mg_pyramide.end())
1975  {
1976  return NULL;
1977  }
1978  return ((*i).second);
1979 }
1980 
1981 
1982 
1984 {
1985  if (!(num<lst_mg_pyramide.size()))
1986  {
1987  return NULL;
1988  }
1989  LISTE_MG_PYRAMIDE::iterator i=lst_mg_pyramide.begin();
1990  for (unsigned long j=0;j<num;j++) i++;
1991  return ((*i).second);
1992 }
1993 
1995 {
1996  MG_NOEUD* noeud=noeud1;
1997  if (noeud2->get_id()<noeud->get_id()) noeud=noeud2;
1998  if (noeud3->get_id()<noeud->get_id()) noeud=noeud3;
1999  if (noeud4->get_id()<noeud->get_id()) noeud=noeud4;
2000  if (noeud5->get_id()<noeud->get_id()) noeud=noeud5;
2001 
2002 
2003  std::map<unsigned long,unsigned long> map1;
2004  map1[noeud1->get_id()]=noeud1->get_id();
2005  map1[noeud2->get_id()]=noeud2->get_id();
2006  map1[noeud3->get_id()]=noeud3->get_id();
2007  map1[noeud4->get_id()]=noeud4->get_id();
2008  map1[noeud5->get_id()]=noeud5->get_id();
2009  int nb_pyr=noeud->get_lien_petit_pyramide()->get_nb();
2010  for (int i=0;i<nb_pyr;i++)
2011  {
2012  MG_PYRAMIDE* mgpyramide=noeud->get_lien_petit_pyramide()->get(i);
2013  std::map<unsigned long,unsigned long> map2;
2014  map2[mgpyramide->get_noeud1()->get_id()]=mgpyramide->get_noeud1()->get_id();
2015  map2[mgpyramide->get_noeud2()->get_id()]=mgpyramide->get_noeud2()->get_id();
2016  map2[mgpyramide->get_noeud3()->get_id()]=mgpyramide->get_noeud3()->get_id();
2017  map2[mgpyramide->get_noeud4()->get_id()]=mgpyramide->get_noeud4()->get_id();
2018  map2[mgpyramide->get_noeud5()->get_id()]=mgpyramide->get_noeud5()->get_id();
2019  std::map<unsigned long,unsigned long>::iterator it1,it2;
2020  it1=map1.begin();it2=map2.begin();
2021  int ok=1;
2022  while (it1!=map1.end())
2023  {
2024  if ((*it1).first!=(*it2).first) {ok=0;break;}
2025  it1++;
2026  it2++;
2027  }
2028  if (ok) return mgpyramide;
2029  }
2030  return NULL;
2031 
2032 
2033 
2034 
2035 }
2036 
2038 {
2039  return lst_mg_pyramide.size();
2040 }
2041 
2042 
2044 {
2045  MG_PYRAMIDE* mgpyr=get_mg_pyramideid(num);
2046  if (mgpyr==NULL)
2047  {
2048  return FAIL;
2049  }
2050  MG_IDENTIFICATEUR* id=mgpyr;
2051  LISTE_ENTITE::iterator i=lst_entite.find(id);
2052  lst_entite.erase(i);
2053  LISTE_MG_PYRAMIDE::iterator j=lst_mg_pyramide.find(num);
2054  lst_mg_pyramide.erase(j);
2055  MG_QUADRANGLE* quadrangle1=mgpyr->get_quadrangle1();
2056  MG_TRIANGLE* triangle1=mgpyr->get_triangle1();
2057  MG_TRIANGLE* triangle2=mgpyr->get_triangle2();
2058  MG_TRIANGLE* triangle3=mgpyr->get_triangle3();
2059  MG_TRIANGLE* triangle4=mgpyr->get_triangle4();
2060  delete mgpyr;
2061  if (quadrangle1->get_nb_reference()==0)
2062  if (quadrangle1->get_lien_topologie()!=NULL)
2063  {
2064  if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
2065  }
2066  else supprimer_mg_quadrangleid(quadrangle1->get_id());
2067  if (triangle1->get_nb_reference()==0)
2068  if (triangle1->get_lien_topologie()!=NULL)
2069  {
2070  if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
2071  }
2072  else supprimer_mg_triangleid(triangle1->get_id());
2073  if (triangle2->get_nb_reference()==0)
2074  if (triangle2->get_lien_topologie()!=NULL)
2075  {
2076  if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
2077  }
2078  else supprimer_mg_triangleid(triangle2->get_id());
2079  if (triangle3->get_nb_reference()==0)
2080  if (triangle3->get_lien_topologie()!=NULL)
2081  {
2082  if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
2083  }
2084  else supprimer_mg_triangleid(triangle3->get_id());
2085  if (triangle4->get_nb_reference()==0)
2086  if (triangle4->get_lien_topologie()!=NULL)
2087  {
2088  if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
2089  }
2090  else supprimer_mg_triangleid(triangle4->get_id());
2091  return OK;
2092 }
2093 
2094 
2096 {
2097  MG_PYRAMIDE* mgpyr=get_mg_pyramide(num);
2098  if (mgpyr==NULL)
2099  {
2100  return FAIL;
2101  }
2102  MG_IDENTIFICATEUR* id=mgpyr;
2103  LISTE_ENTITE::iterator i=lst_entite.find(id);
2104  lst_entite.erase(i);
2105  LISTE_MG_PYRAMIDE::iterator j=lst_mg_pyramide.begin();
2106  for (unsigned int k=0;k<num;k++) j++;
2107  lst_mg_pyramide.erase(j);
2108  MG_QUADRANGLE* quadrangle1=mgpyr->get_quadrangle1();
2109  MG_TRIANGLE* triangle1=mgpyr->get_triangle1();
2110  MG_TRIANGLE* triangle2=mgpyr->get_triangle2();
2111  MG_TRIANGLE* triangle3=mgpyr->get_triangle3();
2112  MG_TRIANGLE* triangle4=mgpyr->get_triangle4();
2113  delete mgpyr;
2114  if (quadrangle1->get_nb_reference()==0)
2115  if (quadrangle1->get_lien_topologie()!=NULL)
2116  {
2117  if (quadrangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_quadrangleid(quadrangle1->get_id());
2118  }
2119  else supprimer_mg_quadrangleid(quadrangle1->get_id());
2120  if (triangle1->get_nb_reference()==0)
2121  if (triangle1->get_lien_topologie()!=NULL)
2122  {
2123  if (triangle1->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle1->get_id());
2124  }
2125  else supprimer_mg_triangleid(triangle1->get_id());
2126  if (triangle2->get_nb_reference()==0)
2127  if (triangle2->get_lien_topologie()!=NULL)
2128  {
2129  if (triangle2->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle2->get_id());
2130  }
2131  else supprimer_mg_triangleid(triangle2->get_id());
2132  if (triangle3->get_nb_reference()==0)
2133  if (triangle3->get_lien_topologie()!=NULL)
2134  {
2135  if (triangle3->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle3->get_id());
2136  }
2137  else supprimer_mg_triangleid(triangle1->get_id());
2138  if (triangle4->get_nb_reference()==0)
2139  if (triangle4->get_lien_topologie()!=NULL)
2140  {
2141  if (triangle4->get_lien_topologie()->get_dimension()>2) supprimer_mg_triangleid(triangle4->get_id());
2142  }
2143  else supprimer_mg_triangleid(triangle4->get_id());
2144  return OK;
2145 }
2146 
2147 
2149 {
2150  while (get_nb_mg_pyramide()!=0)
2151  {
2152  LISTE_MG_PYRAMIDE::iterator j=lst_mg_pyramide.begin();
2153  MG_PYRAMIDE* mgpyr=(*j).second;
2154  MG_IDENTIFICATEUR* id=mgpyr;
2155  LISTE_ENTITE::iterator i=lst_entite.find(id);
2156  lst_entite.erase(i);
2157  lst_mg_pyramide.erase(j);
2158  delete mgpyr;
2159  }
2160 }
2161 
2162 
2163 MG_PYRAMIDE* MG_MAILLAGE::get_premier_pyramide(LISTE_MG_PYRAMIDE::iterator & it)
2164 {
2165  it = lst_mg_pyramide.begin();
2166  if (it == lst_mg_pyramide.end())
2167  return NULL;
2168  return it->second;
2169 }
2170 
2171 MG_PYRAMIDE* MG_MAILLAGE::get_suivant_pyramide(LISTE_MG_PYRAMIDE::iterator & it)
2172 {
2173  it++;
2174  if (it == lst_mg_pyramide.end())
2175  return NULL;
2176  return it->second;
2177 }
2178 
2179 
2181 {
2182  return ( lst_entite.find ( id ) != lst_entite.end() );
2183 }
2184 
2185 void MG_MAILLAGE::enregistrer(std::ostream& o,double version)
2186 {
2187  int recherchedim=0;
2188  if (mg_geometrie==NULL) recherchedim=1;
2189  if (mg_geometrie!=NULL)
2190  if (strcmp(mg_geometrie->get_type_geometrie(),"VIRTUEL")==0) recherchedim=1;
2191  if (recherchedim==1)
2192  {
2199  }
2200  if (est_structure==true)
2201  {
2202  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;
2203  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;
2204  }
2205  else
2206  {
2207  if (mg_geometrie==NULL) o << "%" << get_id() << "=MAILLAGE(NULL);" << std::endl;
2208  else o << "%" << get_id() << "=MAILLAGE($" << mg_geometrie->get_id() << ");" << std::endl;
2209  }
2210  LISTE_ENTITE::const_iterator i;
2211  for (i=lst_entite.begin();i!=lst_entite.end();i++)
2212  {
2213  MG_IDENTIFICATEUR* entite = *i;
2214  entite->enregistrer(o,version);
2215  }
2216 }
2217 
2218 
2219 void MG_MAILLAGE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
2220 {
2221  LISTE_ENTITE::const_iterator i;
2222  for (i=lst_entite.begin();i!=lst_entite.end();i++)
2223  (*i)->get_fichier_dependant(liste_fichier);
2224 }
2225 
2227 {
2228 
2229  int nb_noeud=0;
2230  for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2231  {
2232  MG_NOEUD* noeud=((*i).second);
2233  if (noeud->get_lien_topologie()->get_dimension()<2) nb_noeud++;
2234  }
2235 
2236  int nb_seg=0;
2237  for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
2238  {
2239  MG_SEGMENT* seg=((*i).second);
2240  if (seg->get_lien_topologie()->get_dimension()<2) nb_seg++;
2241  }
2242 
2243  o << nb_noeud << " " << nb_seg << std::endl;
2244  int ii=0;
2245  for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2246  {
2247  MG_NOEUD* noeud=((*i).second);
2248  if (noeud->get_lien_topologie()->get_dimension()<2)
2249  {
2250  o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
2251  if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2252  if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
2253  o << noeud->get_lien_topologie()->get_id() << " " << noeud->get_id() << std::endl;
2254  noeud->change_nouveau_numero(ii+1);
2255  ii++;
2256  }
2257  }
2258 
2259  for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
2260  {
2261  MG_SEGMENT* seg=((*i).second);
2262  if (seg->get_lien_topologie()->get_dimension()<2)
2263  {
2264  o << "2 " << seg->get_noeud1()->get_nouveau_numero() << " " << seg->get_noeud2()->get_nouveau_numero() << " " ;
2265  if (seg->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2266  if (seg->get_lien_topologie()->get_dimension()==1) o << "edge ";
2267  o << seg->get_lien_topologie()->get_id() << std::endl;
2268  }
2269  }
2270 
2271 }
2272 
2274 (std::ostream& o)
2275 {
2276  int nb_noeud=0;
2277  for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2278  {
2279  MG_NOEUD* noeud=((*i).second);
2280  if (noeud->get_lien_topologie()->get_dimension()<3) nb_noeud++;
2281  }
2282 
2283  int nb_tri=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) nb_tri++;
2288  }
2289 
2290  o << nb_noeud << " " << nb_tri << std::endl;
2291  int ii=0;
2292  for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2293  {
2294  MG_NOEUD* noeud=((*i).second);
2295  if (noeud->get_lien_topologie()->get_dimension()<3)
2296  {
2297  o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
2298  if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2299  if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
2300  if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
2301  o << noeud->get_lien_topologie()->get_id() << std::endl;
2302  noeud->change_nouveau_numero(ii+1);
2303  ii++;
2304  }
2305  }
2306 
2307  int compteur=0;
2308  for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
2309  {
2310  MG_TRIANGLE* triangle=((*i).second);
2311  if (triangle->get_lien_topologie()->get_dimension()<3)
2312  {
2313  o << "3 " << triangle->get_noeud1()->get_nouveau_numero() << " " << triangle->get_noeud2()->get_nouveau_numero() << " " << triangle->get_noeud3()->get_nouveau_numero() << " " ;
2314  if (triangle->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2315  if (triangle->get_lien_topologie()->get_dimension()==1) o << "edge ";
2316  if (triangle->get_lien_topologie()->get_dimension()==2) o << "face ";
2317  if (triangle->get_lien_topologie()->get_dimension()==3) o << "body ";
2318  o << triangle->get_lien_topologie()->get_id() << std::endl;
2319  compteur++;
2320  }
2321  }
2322 
2323 }
2324 
2326 {
2327  o << get_nb_mg_noeud() << " " << get_nb_mg_tetra() << std::endl;
2328  int ii=0;
2329  for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2330  {
2331  MG_NOEUD* noeud=((*i).second);
2332  o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
2333  if (noeud->get_lien_topologie()!=NULL)
2334  {
2335  if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2336  if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
2337  if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
2338  if (noeud->get_lien_topologie()->get_dimension()==3) o << "body ";
2339  o << noeud->get_lien_topologie()->get_id() ;
2340  }
2341  o << std::endl;
2342  noeud->change_nouveau_numero(ii+1);
2343  ii++;
2344  }
2345 
2346 
2347  for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
2348  {
2349  MG_TETRA* tetra=((*i).second);
2350  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() << " " ;
2351  if (tetra->get_lien_topologie()!=NULL)
2352  {
2353  if (tetra->get_lien_topologie()->get_dimension()==0) o << "vertex ";
2354  if (tetra->get_lien_topologie()->get_dimension()==1) o << "edge ";
2355  if (tetra->get_lien_topologie()->get_dimension()==2) o << "face ";
2356  if (tetra->get_lien_topologie()->get_dimension()==3) o << "body ";
2357  o << tetra->get_lien_topologie()->get_id() ;
2358  }
2359  o << std::endl;
2360  }
2361 
2362 }
2363 
2364 void MG_MAILLAGE::exporter_mesh(std::string& nomfic)
2365 {
2366  char chaine[500];
2367  sprintf(chaine,"%s_1D.mai",nomfic.c_str());
2368  std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
2369  of1.precision(16);
2370  of1.setf(std::ios::showpoint);
2372  sprintf(chaine,"%s_2D.mai",nomfic.c_str());
2373  std::ofstream of2(chaine,std::ios::out|std::ios::trunc);
2374  of2.precision(16);
2375  of2.setf(std::ios::showpoint);
2377  sprintf(chaine,"%s_3D.mai",nomfic.c_str());
2378  std::ofstream of3(chaine,std::ios::out|std::ios::trunc);
2379  of3.precision(16);
2380  of3.setf(std::ios::showpoint);
2382 }
2383 
2384 /*
2385 void MG_MAILLAGE::exporter_cosmos(std::string& nomfic)
2386 {
2387 char chaine[500];
2388 sprintf(chaine,"%s.ses",nomfic.c_str());
2389 std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
2390 of1.precision(16);
2391 of1.setf(std::ios::showpoint);
2392 of1 << "TITLE, " << chaine << " : Fichier de maillage MAGiC" << std::endl;
2393 of1 << "EGROUP,1,TETRA4,0,0,0,0,0,0,0,0;" << std::endl;
2394 int nb_volume=mg_geometrie->get_nb_mg_volume();
2395 for (int i=0;i<nb_volume;i++)
2396  {
2397  MG_VOLUME *mgvol=mg_geometrie->get_mg_volume(i);
2398  if (mgvol->get_num_materiau()>=0)
2399  {
2400  MT_GESTIONNAIRE mtgest(mg_geometrie->get_gest_materiau());
2401  MT_MATERIAU* mat=mtgest.get_materiau(mgvol->get_num_materiau());
2402  MT_PROPRIETE* prop=mat->get_propriete("EX");
2403  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", EX, " << prop->get_valeur(2) << ";" << std::endl;
2404  prop=mat->get_propriete("NUXY");
2405  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", NUXY, " << prop->get_valeur(2) << ";" << std::endl;
2406  prop=mat->get_propriete("GXY");
2407  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", GXY, " << prop->get_valeur(2) << ";" << std::endl;
2408  prop=mat->get_propriete("DENS");
2409  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", DENS, " << prop->get_valeur(2) << ";" << std::endl;
2410  prop=mat->get_propriete("SIGXT");
2411  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGXT, " << prop->get_valeur(2) << ";" << std::endl;
2412  prop=mat->get_propriete("SIGYLD");
2413  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGYLD, " << prop->get_valeur(2) << ";" << std::endl;
2414  prop=mat->get_propriete("ALPX");
2415  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", ALPX, " << prop->get_valeur(2) << ";" << std::endl;
2416  prop=mat->get_propriete("KX");
2417  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", KX, " << prop->get_valeur(2) << ";" << std::endl;
2418  prop=mat->get_propriete("C");
2419  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", C, " << prop->get_valeur(2) << ";" << std::endl;
2420  }
2421  }
2422 of1 << "ACTSET,CS,0;" << std::endl;
2423 of1 << "ACTSET,EG,1;" << std::endl;
2424 int ii=0;
2425 double valeurunite=mg_geometrie->get_valeur_unite();
2426 for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
2427  {
2428  MG_NOEUD* noeud=((*i).second);
2429  of1 << "ND, " << (ii+1) << ", " << noeud->get_x()*valeurunite << ", " << noeud->get_y()*valeurunite << ", " << noeud->get_z()*valeurunite << ";" << std::endl;
2430  char nom[3];
2431  int nb=noeud->get_lien_topologie()->get_nb_ccf();
2432  for (int k=0;k<nb;k++)
2433  {
2434  noeud->get_lien_topologie()->get_type_ccf(k,nom);
2435  if (strcmp(nom,"Da")==0) of1 << "DND , " << ii+1 << ", AL, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2436  if (strcmp(nom,"Dx")==0) of1 << "DND , " << ii+1 << ", UX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2437  if (strcmp(nom,"Dy")==0) of1 << "DND , " << ii+1 << ", UY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2438  if (strcmp(nom,"Dz")==0) of1 << "DND , " << ii+1 << ", UZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2439  if (strcmp(nom,"Fx")==0) of1 << "FND , " << ii+1 << ", FX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2440  if (strcmp(nom,"Fy")==0) of1 << "FND , " << ii+1 << ", FY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2441  if (strcmp(nom,"Fz")==0) of1 << "FND , " << ii+1 << ", FZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
2442  }
2443  ii++;
2444  noeud->change_nouveau_numero(ii);
2445  }
2446 ii=0;
2447 int nummat=-10;
2448 for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
2449  {
2450  MG_TETRA* tetra=((*i).second);
2451  MG_VOLUME* vol=(MG_VOLUME*)tetra->get_lien_topologie();
2452  int nummatac=vol->get_num_materiau();
2453  if (nummatac!=nummat)
2454  {
2455  nummat=nummatac;
2456  of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
2457  }
2458  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() << ", " ;
2459  ii++;
2460  if (tetra->get_triangle1()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
2461  if (tetra->get_triangle2()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
2462  if (tetra->get_triangle3()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
2463  if (tetra->get_triangle4()->get_lien_topologie()->get_dimension()!=3) of1 << "1;" << std::endl ; else of1 << "0;" << std::endl;
2464  char nom[3];
2465  int nb=tetra->get_triangle1()->get_lien_topologie()->get_nb_ccf();
2466  for (int k=0;k<nb;k++)
2467  {
2468  tetra->get_triangle1()->get_lien_topologie()->get_type_ccf(k,nom);
2469  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 1;" << std::endl;
2470  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 2;" << std::endl;
2471  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 3;" << std::endl;
2472  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 4;" << std::endl;
2473  }
2474  nb=tetra->get_triangle2()->get_lien_topologie()->get_nb_ccf();
2475  for (int k=0;k<nb;k++)
2476  {
2477  tetra->get_triangle2()->get_lien_topologie()->get_type_ccf(k,nom);
2478  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 1;" << std::endl;
2479  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 2;" << std::endl;
2480  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 3;" << std::endl;
2481  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 4;" << std::endl;
2482  }
2483  nb=tetra->get_triangle3()->get_lien_topologie()->get_nb_ccf();
2484  for (int k=0;k<nb;k++)
2485  {
2486  tetra->get_triangle3()->get_lien_topologie()->get_type_ccf(k,nom);
2487  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 1;" << std::endl;
2488  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 2;" << std::endl;
2489  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 3;" << std::endl;
2490  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 4;" << std::endl;
2491  }
2492  nb=tetra->get_triangle4()->get_lien_topologie()->get_nb_ccf();
2493  for (int k=0;k<nb;k++)
2494  {
2495  tetra->get_triangle4()->get_lien_topologie()->get_type_ccf(k,nom);
2496  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 1;" << std::endl;
2497  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 2;" << std::endl;
2498  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 3;" << std::endl;
2499  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 4;" << std::endl;
2500  }
2501  }
2502 }
2503 
2504  */
2505 
2506 
2507 
2508 void MG_MAILLAGE::exporter_giref(std::string& nomfic)
2509 {
2510  char chaine[500];
2511  sprintf(chaine,"%s.mail",nomfic.c_str());
2512  FILE *in=fopen(chaine,"wt");
2513  int lieu=0;
2514 
2515  fprintf(in,"8 Maillage\n");
2516  fprintf(in,"11 Version 1.0\n");
2517  fprintf(in,"%lu\n\n",get_id());
2518  int nb=get_nb_mg_noeud();
2519  fprintf(in,"%d\n",nb);
2520 
2521  LISTE_MG_NOEUD::iterator ind;
2522  MG_NOEUD* noeud=get_premier_noeud(ind);
2523  int i=0;
2524  while (noeud)
2525  {
2526  noeud->change_nouveau_numero(i++);
2528  if (topo->get_nouveau_numero()==-1)
2529  {
2530  topo->change_nouveau_numero(lieu);
2531  lieu++;
2532  }
2533  fprintf(in,"%.16e %.16e %.16e 0 %d \n",noeud->get_x(),noeud->get_y(),noeud->get_z(),topo->get_nouveau_numero());
2534  noeud=get_suivant_noeud(ind);
2535  }
2536 
2537 
2538  nb=get_nb_mg_segment();
2539  fprintf(in,"\n%d\n",nb);
2540 
2541  LISTE_MG_SEGMENT::iterator iseg;
2542  MG_SEGMENT* seg=get_premier_segment(iseg);
2543  i=0;
2544 
2545  while (seg)
2546  {
2547 
2548  seg->change_nouveau_numero(i);
2550  if (topo->get_nouveau_numero()==-1)
2551  {
2552  topo->change_nouveau_numero(lieu);
2553  lieu++;
2554  }
2555  fprintf(in,"%d %d 0 %d \n",seg->get_noeud1()->get_nouveau_numero(),seg->get_noeud2()->get_nouveau_numero(),topo->get_nouveau_numero());
2556  seg = get_suivant_segment(iseg);
2557  }
2558  nb=get_nb_mg_triangle();
2559  fprintf(in,"\n%d\n",nb);
2560  for (int i=0;i<nb;i++)
2561  {
2562  MG_TRIANGLE* tri=get_mg_triangle(i);
2563  tri->change_nouveau_numero(i);
2565  if (topo->get_nouveau_numero()==-1)
2566  {
2567  topo->change_nouveau_numero(lieu);
2568  lieu++;
2569  }
2570  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());
2571  }
2572  nb=get_nb_mg_tetra();
2573  fprintf(in,"\n0\n\n0\n\n0\n\n%d\n",nb);
2574  for (int i=0;i<nb;i++)
2575  {
2576  MG_TETRA* tet=get_mg_tetra(i);
2577  tet->change_nouveau_numero(i);
2579  if (topo->get_nouveau_numero()==-1)
2580  {
2581  topo->change_nouveau_numero(lieu);
2582  lieu++;
2583  }
2584  TPL_MAP_ENTITE<MG_SEGMENT*> lst_segment;
2585  lst_segment.ajouter(tet->get_triangle1()->get_segment1());
2586  lst_segment.ajouter(tet->get_triangle1()->get_segment2());
2587  lst_segment.ajouter(tet->get_triangle1()->get_segment3());
2588  lst_segment.ajouter(tet->get_triangle2()->get_segment1());
2589  lst_segment.ajouter(tet->get_triangle2()->get_segment2());
2590  lst_segment.ajouter(tet->get_triangle2()->get_segment3());
2591  lst_segment.ajouter(tet->get_triangle3()->get_segment1());
2592  lst_segment.ajouter(tet->get_triangle3()->get_segment2());
2593  lst_segment.ajouter(tet->get_triangle3()->get_segment3());
2594  lst_segment.ajouter(tet->get_triangle4()->get_segment1());
2595  lst_segment.ajouter(tet->get_triangle4()->get_segment2());
2596  lst_segment.ajouter(tet->get_triangle4()->get_segment3());
2597  int tab[6];
2598  for (int j=0;j<6;j++)
2599  {
2600  MG_SEGMENT* seg=lst_segment.get(j);
2601  if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud2())) tab[0]=j;
2602  else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud1())) tab[0]=j;
2603  else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud3())) tab[1]=j;
2604  else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud1())) tab[1]=j;
2605  else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud4())) tab[2]=j;
2606  else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud1())) tab[2]=j;
2607  else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud3())) tab[3]=j;
2608  else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud2())) tab[3]=j;
2609  else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud4())) tab[4]=j;
2610  else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud2())) tab[4]=j;
2611  else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud4())) tab[5]=j;
2612  else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud3())) tab[5]=j;
2613  }
2614  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());
2615  }
2616 
2617  fprintf(in,"\n0\n\n0\n\n8 Maillage\n");
2618  fclose(in);
2619 }
2620 
2621 
2622 std::ostream& operator << (std::ostream& o,MG_MAILLAGE& maillage)
2623 {
2625  return o;
2626 }
2627 
2628 
2630 {
2631  int nb_noeud=get_nb_mg_noeud();
2632  std::string nomsol="Carte de taille reelle";
2633  MG_SOLUTION* mgsol=new MG_SOLUTION(this,1,nomfichier,nb_noeud,nomsol);
2634  mgsol->change_legende(0,"F(x,y,z)");
2635  for (int j=0;j<nb_noeud;j++)
2636  {
2637  MG_NOEUD* noeud=get_mg_noeud(j);
2638  int nb_segment=noeud->get_lien_segment()->get_nb();
2639  double ec=0.;
2640  int nbr=0;
2641  for (int k=0;k<nb_segment;k++)
2642  {
2643  MG_SEGMENT* seg=noeud->get_lien_segment()->get(k);
2644  MG_SEGMENT* segtmp=get_mg_segmentid(seg->get_id());
2645  if (segtmp!=NULL)
2646  {
2647  nbr++;
2648  ec=ec+seg->get_longueur();
2649  }
2650  }
2651  ec=ec/nbr;
2652  mgsol->ecrire(ec,j,0,0,0);
2653  }
2654  return mgsol;
2655 }
2656 
2657 
2659 {
2660  return gest;
2661 }
2662 
2663 void MG_MAILLAGE::change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp)
2664 {
2665 boite_englobante=btmp;
2666 nx=nxtmp;
2667 ny=nytmp;
2668 nz=nztmp;
2669 est_structure=true;
2670 }
2671 
2672 bool MG_MAILLAGE::get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp)
2673 {
2674 if (est_structure==true)
2675  {
2676  btmp=boite_englobante;
2677  nxtmp=nx;
2678  nytmp=ny;
2679  nztmp=nz;
2680  return true;
2681  }
2682 return false;
2683 }
2684 
2685 
2687 {
2688 return est_structure;
2689 }
2690 
MG_MAILLAGE::supprimer_mg_pyramide
int supprimer_mg_pyramide(unsigned int num)
Definition: mg_maillage.cpp:2095
MG_MAILLAGE::MG_MAILLAGE
MG_MAILLAGE(MG_GEOMETRIE *geo)
Definition: mg_maillage.cpp:41
MG_MAILLAGE::get_premier_penta
MG_PENTA * get_premier_penta(LISTE_MG_PENTA::iterator &it)
Definition: mg_maillage.cpp:1909
MG_HEXA::get_quadrangle1
virtual MG_QUADRANGLE * get_quadrangle1(void)
Definition: mg_hexa.cpp:235
MG_MAILLAGE::ajouter_mg_tetra
MG_TETRA * 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=0)
Definition: mg_maillage.cpp:1158
MG_HEXA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_hexa.cpp:214
MG_TRIANGLE::get_segment1
virtual MG_SEGMENT * get_segment1(void)
Definition: mg_triangle.cpp:142
MG_SEGMENT
Definition: mg_segment.h:38
MG_MAILLAGE::lst_mg_segment
LISTE_MG_SEGMENT lst_mg_segment
Definition: mg_maillage.h:202
FEM_MAILLAGE::get_suivant_element3
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:680
MG_HEXA::get_quadrangle5
virtual MG_QUADRANGLE * get_quadrangle5(void)
Definition: mg_hexa.cpp:255
MG_TETRA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_tetra.cpp:148
MG_MAILLAGE::get_premier_noeud
MG_NOEUD * get_premier_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:548
gestionversion.h
MG_PENTA::get_noeud6
virtual MG_NOEUD * get_noeud6(void)
Definition: mg_penta.cpp:195
MG_MAILLAGE::supprimer_mg_noeud
int supprimer_mg_noeud(unsigned int num)
Definition: mg_maillage.cpp:507
MG_PENTA::get_quadrangle2
virtual MG_QUADRANGLE * get_quadrangle2(void)
Definition: mg_penta.cpp:205
MG_MAILLAGE::ajouter_mg_segment
MG_SEGMENT * ajouter_mg_segment(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, int origine, double longue=0.0, unsigned long num=0)
Definition: mg_maillage.cpp:565
TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * >
MG_PYRAMIDE::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_pyramide.cpp:193
FAIL
const int FAIL
Definition: mg_definition.h:39
MG_PENTA
Definition: mg_penta.h:37
MG_MAILLAGE::get_nb_mg_pyramide
unsigned int get_nb_mg_pyramide(void)
Definition: mg_maillage.cpp:2037
MG_MAILLAGE::supprimer_tout_mg_penta
void supprimer_tout_mg_penta(void)
Definition: mg_maillage.cpp:1894
MG_PYRAMIDE::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_pyramide.cpp:198
MG_MAILLAGE::get_mg_penta
MG_PENTA * get_mg_penta(unsigned int num)
Definition: mg_maillage.cpp:1726
BOITE_3D::get_xmin
double get_xmin(void)
Definition: ot_boite_3d.cpp:104
MG_MAILLAGE::lst_mg_penta
LISTE_MG_PENTA lst_mg_penta
Definition: mg_maillage.h:207
mg_gestionnaire.h
MG_SEGMENT::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_segment.cpp:113
MG_ELEMENT_TOPOLOGIQUE::get_nouveau_numero
virtual int get_nouveau_numero(void)
Definition: mg_element_topologique.cpp:84
MG_NOEUD::get_lien_petit_triangle
TPL_LISTE_ENTITE< class MG_TRIANGLE * > * get_lien_petit_triangle(void)
Definition: mg_noeud.cpp:159
MG_QUADRANGLE::get_segment1
virtual MG_SEGMENT * get_segment1(void)
Definition: mg_quadrangle.cpp:166
MG_NOEUD::get_z
virtual double get_z(void)
Definition: mg_noeud.cpp:87
MG_MAILLAGE::supprimer_tout_mg_quadrangle
void supprimer_tout_mg_quadrangle(void)
Definition: mg_maillage.cpp:1127
MG_NOEUD::get_lien_triangle
TPL_LISTE_ENTITE< class MG_TRIANGLE * > * get_lien_triangle(void)
Definition: mg_noeud.cpp:153
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_TETRA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_tetra.cpp:143
MG_MAILLAGE::change_param_structure
void change_param_structure(BOITE_3D btmp, int nxtmp, int nytmp, int nztmp)
Definition: mg_maillage.cpp:2663
MG_MAILLAGE::get_nb_mg_triangle
unsigned int get_nb_mg_triangle(void)
Definition: mg_maillage.cpp:814
MG_MAILLAGE::get_suivant_quadrangle
MG_QUADRANGLE * get_suivant_quadrangle(LISTE_MG_QUADRANGLE::iterator &it)
Definition: mg_maillage.cpp:1150
MG_MAILLAGE::lst_mg_quadrangle
LISTE_MG_QUADRANGLE lst_mg_quadrangle
Definition: mg_maillage.h:204
MG_PENTA::get_quadrangle1
virtual MG_QUADRANGLE * get_quadrangle1(void)
Definition: mg_penta.cpp:200
MG_MAILLAGE::supprimer_mg_quadrangleid
int supprimer_mg_quadrangleid(unsigned long num)
Definition: mg_maillage.cpp:1036
MG_MAILLAGE::get_premier_tetra
MG_TETRA * get_premier_tetra(LISTE_MG_TETRA::iterator &it)
Definition: mg_maillage.cpp:1374
MG_MAILLAGE::supprimer_mg_segment
int supprimer_mg_segment(unsigned int num)
Definition: mg_maillage.cpp:683
MG_QUADRANGLE::get_segment3
virtual MG_SEGMENT * get_segment3(void)
Definition: mg_quadrangle.cpp:176
MG_MAILLAGE::get_mg_segmentid
MG_SEGMENT * get_mg_segmentid(unsigned long num)
Definition: mg_maillage.cpp:595
MG_MAILLAGE::get_mg_quadrangle
MG_QUADRANGLE * get_mg_quadrangle(unsigned int num)
Definition: mg_maillage.cpp:985
MG_QUADRANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_quadrangle.cpp:150
MG_MAILLAGE::supprimer_mg_segmentid
int supprimer_mg_segmentid(unsigned long num)
Definition: mg_maillage.cpp:652
MG_TRIANGLE::get_segment2
virtual MG_SEGMENT * get_segment2(void)
Definition: mg_triangle.cpp:147
MG_MAILLAGE::nz
int nz
Definition: mg_maillage.h:215
MG_SOLUTION
Definition: mg_solution.h:46
FEM_ELEMENT3
Definition: fem_element3.h:34
MG_MAILLAGE::get_nb_mg_hexa
unsigned int get_nb_mg_hexa(void)
Definition: mg_maillage.cpp:1512
FEM_MAILLAGE::get_premier_noeud
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:174
operator<<
std::ostream & operator<<(std::ostream &o, MG_MAILLAGE &maillage)
Definition: mg_maillage.cpp:2622
MG_MAILLAGE::gest
MG_GESTIONNAIRE * gest
Definition: mg_maillage.h:211
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
TPL_MAP_ENTITE::existe
virtual int existe(X x)
Definition: tpl_map_entite.h:61
MG_PENTA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_penta.cpp:172
mc_materiau.h
OK
const int OK
Definition: mg_definition.h:38
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_MAILLAGE::get_mg_hexaid
MG_HEXA * get_mg_hexaid(unsigned long num)
Definition: mg_maillage.cpp:1437
MG_GESTIONNAIRE
Definition: mg_gestionnaire.h:57
MG_TRIANGLE::get_segment3
virtual MG_SEGMENT * get_segment3(void)
Definition: mg_triangle.cpp:152
MG_MAILLAGE::get_premier_segment
MG_SEGMENT * get_premier_segment(LISTE_MG_SEGMENT::iterator &)
Definition: mg_maillage.cpp:630
MG_MAILLAGE::supprimer_mg_quadrangle
int supprimer_mg_quadrangle(unsigned int num)
Definition: mg_maillage.cpp:1081
MG_TETRA
Definition: mg_tetra.h:37
MG_HEXA
Definition: mg_hexa.h:37
MG_MAILLAGE::exporter_giref
virtual void exporter_giref(std::string &nomfic)
Definition: mg_maillage.cpp:2508
MG_PENTA::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_penta.cpp:215
mc_gestionnaire.h
FEM_ELEMENT2
Definition: fem_element2.h:34
FEM_MAILLAGE::get_mg_maillage
MG_MAILLAGE * get_mg_maillage(void)
Definition: fem_maillage.cpp:93
MG_HEXA::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_hexa.cpp:218
MG_MAILLAGE::supprimer_tout_mg_tetra
void supprimer_tout_mg_tetra(void)
Definition: mg_maillage.cpp:1359
MG_QUADRANGLE
Definition: mg_quadrangle.h:39
MG_HEXA::get_noeud8
virtual MG_NOEUD * get_noeud8(void)
Definition: mg_hexa.cpp:230
MG_HEXA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_hexa.cpp:209
MG_PYRAMIDE::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_pyramide.cpp:178
MG_MAILLAGE::lst_mg_noeud
LISTE_MG_NOEUD lst_mg_noeud
Definition: mg_maillage.h:201
FEM_MAILLAGE::get_premier_element2
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:561
MG_MAILLAGE::get_suivant_tetra
MG_TETRA * get_suivant_tetra(LISTE_MG_TETRA::iterator &it)
Definition: mg_maillage.cpp:1382
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MAGIC_VERSION_FICHIER_DOUBLE
#define MAGIC_VERSION_FICHIER_DOUBLE
Definition: version.h:7
MG_MAILLAGE::supprimer_mg_hexaid
int supprimer_mg_hexaid(unsigned long num)
Definition: mg_maillage.cpp:1518
MG_SOLUTION::ecrire
void ecrire(double val, int i, int j, int coord=0, int num_no=0)
Definition: mg_solution.cpp:309
BOITE_3D::get_zmax
double get_zmax(void)
Definition: ot_boite_3d.cpp:129
BOITE_3D::get_ymin
double get_ymin(void)
Definition: ot_boite_3d.cpp:114
MG_MAILLAGE::get_mg_noeud
MG_NOEUD * get_mg_noeud(unsigned int num)
Definition: mg_maillage.cpp:463
MG_GESTIONNAIRE::ajouter_mg_maillage
int ajouter_mg_maillage(MG_MAILLAGE *mgmai)
Definition: mg_gestionnaire.cpp:521
MG_HEXA::get_quadrangle4
virtual MG_QUADRANGLE * get_quadrangle4(void)
Definition: mg_hexa.cpp:250
OT_REFERENCE::get_nb_reference
int get_nb_reference(void)
Definition: ot_reference.cpp:50
MG_MAILLAGE::calculer_carte_taille_reelle
class MG_SOLUTION * calculer_carte_taille_reelle(char *nomfichier)
Definition: mg_maillage.cpp:2629
MG_MAILLAGE::DIMENSIONMAILLAGESANSTOPO
static int DIMENSIONMAILLAGESANSTOPO
Definition: mg_maillage.h:177
MG_MAILLAGE::get_fichier_dependant
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
Definition: mg_maillage.cpp:2219
MG_ELEMENT_TOPOLOGIQUE::est_une_topo_element
virtual bool est_une_topo_element(void)=0
MG_NOEUD::get_lien_petit_quadrangle
TPL_LISTE_ENTITE< class MG_QUADRANGLE * > * get_lien_petit_quadrangle(void)
Definition: mg_noeud.cpp:170
MG_ELEMENT_MAILLAGE::get_nouveau_numero
virtual int get_nouveau_numero(void)
Definition: mg_element_maillage.cpp:81
MG_NOEUD::get_lien_petit_pyramide
TPL_LISTE_ENTITE< class MG_PYRAMIDE * > * get_lien_petit_pyramide(void)
Definition: mg_noeud.cpp:214
MG_MAILLAGE::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_maillage.cpp:2185
FEM_MAILLAGE::get_suivant_element1
FEM_ELEMENT1 * get_suivant_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:457
MAGIC::ORIGINE::DEFORME
@ DEFORME
Definition: mg_definition.h:79
MG_MAILLAGE::ajouter_mg_hexa
MG_HEXA * 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=0)
Definition: mg_maillage.cpp:1390
MG_HEXA::get_quadrangle6
virtual MG_QUADRANGLE * get_quadrangle6(void)
Definition: mg_hexa.cpp:260
MG_MAILLAGE::get_premier_pyramide
MG_PYRAMIDE * get_premier_pyramide(LISTE_MG_PYRAMIDE::iterator &it)
Definition: mg_maillage.cpp:2163
MG_MAILLAGE::ajouter_mg_pyramide
MG_PYRAMIDE * 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=0)
Definition: mg_maillage.cpp:1926
MG_MAILLAGE::get_mg_hexa
MG_HEXA * get_mg_hexa(unsigned int num)
Definition: mg_maillage.cpp:1449
MG_MAILLAGE::change_gestionnaire
void change_gestionnaire(class MG_GESTIONNAIRE *mggest)
Definition: mg_maillage.cpp:416
MG_MAILLAGE::get_premier_triangle
MG_TRIANGLE * get_premier_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:912
MG_MAILLAGE::supprimer_mg_tetraid
int supprimer_mg_tetraid(unsigned long num)
Definition: mg_maillage.cpp:1268
MG_HEXA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_hexa.cpp:204
mc_propriete.h
MG_MAILLAGE::ajouter_mg_triangle
MG_TRIANGLE * ajouter_mg_triangle(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:731
MG_SEGMENT::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_segment.cpp:108
BOITE_3D::get_xmax
double get_xmax(void)
Definition: ot_boite_3d.cpp:109
MG_PENTA::get_quadrangle3
virtual MG_QUADRANGLE * get_quadrangle3(void)
Definition: mg_penta.cpp:210
MG_NOEUD::get_lien_segment
TPL_LISTE_ENTITE< class MG_SEGMENT * > * get_lien_segment(void)
Definition: mg_noeud.cpp:141
FEM_MAILLAGE
Definition: fem_maillage.h:66
MG_MAILLAGE::supprimer_mg_triangleid
int supprimer_mg_triangleid(unsigned long num)
Definition: mg_maillage.cpp:820
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MG_MAILLAGE::supprimer_mg_pentaid
int supprimer_mg_pentaid(unsigned long num)
Definition: mg_maillage.cpp:1789
MG_NOEUD
Definition: mg_noeud.h:41
MG_PENTA::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_penta.cpp:191
MG_MAILLAGE::get_mg_pentaid
MG_PENTA * get_mg_pentaid(unsigned long num)
Definition: mg_maillage.cpp:1714
MG_PYRAMIDE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_pyramide.cpp:163
MG_MAILLAGE::supprimer_tout_mg_segment
void supprimer_tout_mg_segment(void)
Definition: mg_maillage.cpp:715
MG_MAILLAGE::get_suivant_segment
MG_SEGMENT * get_suivant_segment(LISTE_MG_SEGMENT::iterator &)
Definition: mg_maillage.cpp:638
FEM_ELEMENT1
Definition: fem_element1.h:34
MG_MAILLAGE::nx
int nx
Definition: mg_maillage.h:215
tpl_map_entite.h
MG_TETRA::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_tetra.cpp:163
MG_MAILLAGE::supprimer_tout_mg_noeud
void supprimer_tout_mg_noeud(void)
Definition: mg_maillage.cpp:533
MG_MAILLAGE::supprimer_mg_hexa
int supprimer_mg_hexa(unsigned int num)
Definition: mg_maillage.cpp:1577
MG_MAILLAGE::~MG_MAILLAGE
virtual ~MG_MAILLAGE()
Definition: mg_maillage.cpp:399
MG_PYRAMIDE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_pyramide.cpp:168
MG_MAILLAGE::supprimer_tout_mg_triangle
void supprimer_tout_mg_triangle(void)
Definition: mg_maillage.cpp:897
MG_MAILLAGE::get_mg_pyramide
MG_PYRAMIDE * get_mg_pyramide(unsigned int num)
Definition: mg_maillage.cpp:1983
MG_MAILLAGE::lst_mg_tetra
LISTE_MG_TETRA lst_mg_tetra
Definition: mg_maillage.h:205
MG_ELEMENT_MAILLAGE::change_nouveau_numero
virtual void change_nouveau_numero(int num)
Definition: mg_element_maillage.cpp:76
MG_PENTA::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_penta.cpp:177
MG_HEXA::get_noeud6
virtual MG_NOEUD * get_noeud6(void)
Definition: mg_hexa.cpp:222
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
FEM_MAILLAGE::get_suivant_element2
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:569
MG_MAILLAGE::lst_entite
LISTE_ENTITE lst_entite
Definition: mg_maillage.h:200
MG_PYRAMIDE::get_noeud5
virtual MG_NOEUD * get_noeud5(void)
Definition: mg_pyramide.cpp:182
MG_MAILLAGE::enregistrer_sous_mesh_2D
virtual void enregistrer_sous_mesh_2D(std::ostream &o)
Definition: mg_maillage.cpp:2274
MG_MAILLAGE::get_nb_mg_segment
unsigned int get_nb_mg_segment(void)
Definition: mg_maillage.cpp:646
MG_TRIANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_triangle.cpp:131
MG_MAILLAGE::lst_mg_pyramide
LISTE_MG_PYRAMIDE lst_mg_pyramide
Definition: mg_maillage.h:208
MG_MAILLAGE::get_suivant_hexa
MG_HEXA * get_suivant_hexa(LISTE_MG_HEXA::iterator &it)
Definition: mg_maillage.cpp:1660
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
MG_TETRA::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_tetra.cpp:168
BOITE_3D::get_ymax
double get_ymax(void)
Definition: ot_boite_3d.cpp:119
FEM_MAILLAGE::get_premier_element1
FEM_ELEMENT1 * get_premier_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:449
FEM_NOEUD
Definition: fem_noeud.h:35
MG_SOLUTION::change_legende
void change_legende(int num, std::string val)
Definition: mg_solution.cpp:328
MG_MAILLAGE::get_mg_noeudid
MG_NOEUD * get_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:451
MG_MAILLAGE::get_mg_tetra
MG_TETRA * get_mg_tetra(unsigned int num)
Definition: mg_maillage.cpp:1213
MG_MAILLAGE::enregistrer_sous_mesh_3D
virtual void enregistrer_sous_mesh_3D(std::ostream &o)
Definition: mg_maillage.cpp:2325
MG_NOEUD::get_x
virtual double get_x(void)
Definition: mg_noeud.cpp:77
MG_MAILLAGE::get_mg_segment
MG_SEGMENT * get_mg_segment(unsigned int num)
Definition: mg_maillage.cpp:619
TPL_MAP_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_map_entite.h:55
MG_MAILLAGE::mg_geometrie
MG_GEOMETRIE * mg_geometrie
Definition: mg_maillage.h:210
MG_MAILLAGE::get_mg_pyramideid
MG_PYRAMIDE * get_mg_pyramideid(unsigned long num)
Definition: mg_maillage.cpp:1971
MG_HEXA::get_quadrangle2
virtual MG_QUADRANGLE * get_quadrangle2(void)
Definition: mg_hexa.cpp:240
MG_ELEMENT_TOPOLOGIQUE::change_nouveau_numero
virtual void change_nouveau_numero(int num)
Definition: mg_element_topologique.cpp:79
MG_MAILLAGE::get_suivant_penta
MG_PENTA * get_suivant_penta(LISTE_MG_PENTA::iterator &it)
Definition: mg_maillage.cpp:1917
MG_TRIANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_triangle.cpp:126
BOITE_3D
Definition: ot_boite_3d.h:27
MG_MAILLAGE::get_param_structure
bool get_param_structure(BOITE_3D &btmp, int &nxtmp, int &nytmp, int &nztmp)
Definition: mg_maillage.cpp:2672
mg_maillage.h
MG_MAILLAGE::supprimer_mg_pyramideid
int supprimer_mg_pyramideid(unsigned long num)
Definition: mg_maillage.cpp:2043
MG_PENTA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_penta.cpp:182
MG_TETRA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_tetra.cpp:158
MG_MAILLAGE::get_mg_triangle
MG_TRIANGLE * get_mg_triangle(unsigned int num)
Definition: mg_maillage.cpp:784
MG_PYRAMIDE::get_triangle3
virtual MG_TRIANGLE * get_triangle3(void)
Definition: mg_pyramide.cpp:202
MG_MAILLAGE::get_gestionnaire
MG_GESTIONNAIRE * get_gestionnaire(void)
Definition: mg_maillage.cpp:2658
MG_NOEUD::get_lien_petit_segment
TPL_LISTE_ENTITE< class MG_SEGMENT * > * get_lien_petit_segment(void)
Definition: mg_noeud.cpp:147
MG_MAILLAGE::supprimer_mg_noeudid
int supprimer_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:482
MG_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: mg_maillage.cpp:410
MG_GESTIONNAIRE::recherche_bonid
void recherche_bonid(MG_IDENTIFICATEUR &ident)
Definition: mg_gestionnaire.cpp:69
MG_GEOMETRIE::get_type_geometrie
char * get_type_geometrie(void)
Definition: mg_geometrie.cpp:2583
MG_MAILLAGE::get_suivant_pyramide
MG_PYRAMIDE * get_suivant_pyramide(LISTE_MG_PYRAMIDE::iterator &it)
Definition: mg_maillage.cpp:2171
MG_PENTA::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_penta.cpp:220
MG_MAILLAGE::supprimer_mg_penta
int supprimer_mg_penta(unsigned int num)
Definition: mg_maillage.cpp:1841
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
MG_NOEUD::get_lien_petit_tetra
TPL_LISTE_ENTITE< class MG_TETRA * > * get_lien_petit_tetra(void)
Definition: mg_noeud.cpp:181
MG_MAILLAGE::supprimer_tout_mg_pyramide
void supprimer_tout_mg_pyramide(void)
Definition: mg_maillage.cpp:2148
MG_MAILLAGE::get_nb_mg_penta
unsigned int get_nb_mg_penta(void)
Definition: mg_maillage.cpp:1783
MG_NOEUD::get_lien_petit_hexa
TPL_LISTE_ENTITE< class MG_HEXA * > * get_lien_petit_hexa(void)
Definition: mg_noeud.cpp:192
MG_NOEUD::get_lien_petit_penta
TPL_LISTE_ENTITE< class MG_PENTA * > * get_lien_petit_penta(void)
Definition: mg_noeud.cpp:203
MG_MAILLAGE::lst_mg_triangle
LISTE_MG_TRIANGLE lst_mg_triangle
Definition: mg_maillage.h:203
TPL_MAP_ENTITE::get
virtual X get(int num)
Definition: tpl_map_entite.h:89
MG_TRIANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_triangle.cpp:137
MG_TETRA::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_tetra.cpp:153
BOITE_3D::get_zmin
double get_zmin(void)
Definition: ot_boite_3d.cpp:124
MG_MAILLAGE::get_nb_mg_noeud
unsigned int get_nb_mg_noeud(void)
Definition: mg_maillage.cpp:476
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_MAILLAGE::get_mg_tetraid
MG_TETRA * get_mg_tetraid(unsigned long num)
Definition: mg_maillage.cpp:1201
MG_MAILLAGE::get_suivant_triangle
MG_TRIANGLE * get_suivant_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:920
MG_MAILLAGE
Definition: mg_maillage.h:62
FEM_MAILLAGE::get_suivant_noeud
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:182
MG_MAILLAGE::supprimer_mg_triangle
int supprimer_mg_triangle(unsigned int num)
Definition: mg_maillage.cpp:858
MG_QUADRANGLE::get_segment4
virtual MG_SEGMENT * get_segment4(void)
Definition: mg_quadrangle.cpp:181
MG_QUADRANGLE::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_quadrangle.cpp:161
MG_QUADRANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_quadrangle.cpp:156
MG_SEGMENT::get_longueur
virtual double get_longueur(void)
Definition: mg_segment.cpp:125
MG_MAILLAGE::lst_mg_hexa
LISTE_MG_HEXA lst_mg_hexa
Definition: mg_maillage.h:206
MG_HEXA::get_noeud7
virtual MG_NOEUD * get_noeud7(void)
Definition: mg_hexa.cpp:226
MG_MAILLAGE::get_nb_mg_tetra
unsigned int get_nb_mg_tetra(void)
Definition: mg_maillage.cpp:1262
MG_MAILLAGE::exporter_mesh
virtual void exporter_mesh(std::string &nomfic)
Definition: mg_maillage.cpp:2364
MG_PYRAMIDE::get_quadrangle1
virtual MG_QUADRANGLE * get_quadrangle1(void)
Definition: mg_pyramide.cpp:188
MG_HEXA::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_hexa.cpp:199
MG_PYRAMIDE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_pyramide.cpp:173
MG_TETRA::get_triangle4
virtual MG_TRIANGLE * get_triangle4(void)
Definition: mg_tetra.cpp:178
MG_PYRAMIDE::get_triangle4
virtual MG_TRIANGLE * get_triangle4(void)
Definition: mg_pyramide.cpp:207
MG_MAILLAGE::enregistrer_sous_mesh_1D
virtual void enregistrer_sous_mesh_1D(std::ostream &o)
Definition: mg_maillage.cpp:2226
MG_MAILLAGE::get_nb_mg_quadrangle
unsigned int get_nb_mg_quadrangle(void)
Definition: mg_maillage.cpp:1030
MG_QUADRANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_quadrangle.cpp:145
MG_PENTA::get_noeud4
virtual MG_NOEUD * get_noeud4(void)
Definition: mg_penta.cpp:187
MG_ELEMENT_MAILLAGE::get_origine
virtual int get_origine(void)
Definition: mg_element_maillage.cpp:91
MG_MAILLAGE::get_mg_triangleid
MG_TRIANGLE * get_mg_triangleid(unsigned long num)
Definition: mg_maillage.cpp:772
MG_MAILLAGE::get_est_structure
bool get_est_structure(void)
Definition: mg_maillage.cpp:2686
MG_QUADRANGLE::get_segment2
virtual MG_SEGMENT * get_segment2(void)
Definition: mg_quadrangle.cpp:171
MG_IDENTIFICATEUR
Definition: mg_identificateur.h:34
MG_MAILLAGE::dupliquer
MG_MAILLAGE * dupliquer(MG_GESTIONNAIRE *gest)
Definition: mg_maillage.cpp:262
MG_IDENTIFICATEUR::enregistrer
virtual void enregistrer(std::ostream &o, double version)=0
MG_MAILLAGE::get_premier_quadrangle
MG_QUADRANGLE * get_premier_quadrangle(LISTE_MG_QUADRANGLE::iterator &it)
Definition: mg_maillage.cpp:1142
MG_MAILLAGE::get_mg_quadrangleid
MG_QUADRANGLE * get_mg_quadrangleid(unsigned long num)
Definition: mg_maillage.cpp:973
MG_MAILLAGE::boite_englobante
BOITE_3D boite_englobante
Definition: mg_maillage.h:214
MG_MAILLAGE::est_structure
bool est_structure
Definition: mg_maillage.h:216
MG_MAILLAGE::contient
bool contient(MG_IDENTIFICATEUR *id)
Definition: mg_maillage.cpp:2180
MAGIC::ORIGINE::MAILLEUR_AUTO
@ MAILLEUR_AUTO
Definition: mg_definition.h:79
MG_MAILLAGE::supprimer_mg_tetra
int supprimer_mg_tetra(unsigned int num)
Definition: mg_maillage.cpp:1313
MG_HEXA::get_quadrangle3
virtual MG_QUADRANGLE * get_quadrangle3(void)
Definition: mg_hexa.cpp:245
MG_MAILLAGE::get_suivant_noeud
MG_NOEUD * get_suivant_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:556
MG_MAILLAGE::ajouter_mg_quadrangle
MG_QUADRANGLE * 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=0)
Definition: mg_maillage.cpp:930
MG_MAILLAGE::supprimer_tout_mg_hexa
void supprimer_tout_mg_hexa(void)
Definition: mg_maillage.cpp:1637
MG_ELEMENT_TOPOLOGIQUE::get_topologie_sousjacente
virtual void get_topologie_sousjacente(TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lst)=0
MG_TETRA::get_triangle3
virtual MG_TRIANGLE * get_triangle3(void)
Definition: mg_tetra.cpp:173
MG_MAILLAGE::get_premier_hexa
MG_HEXA * get_premier_hexa(LISTE_MG_HEXA::iterator &it)
Definition: mg_maillage.cpp:1652
MG_MAILLAGE::ajouter_mg_penta
MG_PENTA * 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=0)
Definition: mg_maillage.cpp:1669
FEM_MAILLAGE::get_premier_element3
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:672
MG_PYRAMIDE
Definition: mg_pyramide.h:37
MG_NOEUD::get_y
virtual double get_y(void)
Definition: mg_noeud.cpp:82
MG_MAILLAGE::ajouter_mg_noeud
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:421
MG_MAILLAGE::detacher
MG_MAILLAGE * detacher(MG_GESTIONNAIRE *gest, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_maillage.cpp:167
MG_MAILLAGE::ny
int ny
Definition: mg_maillage.h:215