ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_maillage.cpp
Revision: 27
Committed: Thu Jul 5 15:26:40 2007 UTC (17 years, 10 months ago) by foucault
Original Path: magic/lib/geometrie/geometrie/src/mg_maillage.cpp
File size: 54419 byte(s)
Log Message:

File Contents

# User Rev Content
1 foucault 27 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuillière et Vincent FRANCOIS
5     // Département de Génie Mécanique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du département
8     // de génie mécanique de l'Université du Québec à
9     // Trois Rivières
10     // Les librairies ne peuvent être utilisées sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_maillage.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 à 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include <fstream>
27     #include <iostream>
28    
29    
30     #include "mg_maillage.h"
31     #include "mg_gestionnaire.h"
32     #include "mt_gestionnaire.h"
33     #include "mt_propriete.h"
34     #include "mt_materiau.h"
35     #include "tpl_map_entite.h"
36     //#include "message.h"
37    
38    
39    
40    
41    
42    
43     MG_MAILLAGE::MG_MAILLAGE(MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(),mg_geometrie(geo)
44     {
45     }
46    
47     MG_MAILLAGE::MG_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo):MG_IDENTIFICATEUR(num),mg_geometrie(geo)
48     {
49     }
50    
51     MG_MAILLAGE* MG_MAILLAGE::dupliquer(MG_GESTIONNAIRE* gest)
52     {
53     MG_MAILLAGE* mgmai=new MG_MAILLAGE(this->get_mg_geometrie());
54     gest->ajouter_mg_maillage(mgmai);
55     long decalage=mgmai->get_id()-this->get_id();
56     LISTE_ENTITE::const_iterator i;
57     // D'abord les noeuds (les segments en dependent)
58     LISTE_MG_NOEUD::iterator itNo;
59     for (MG_NOEUD * noeud = get_premier_noeud(itNo); noeud; noeud=get_suivant_noeud(itNo))
60     noeud->dupliquer(mgmai,decalage);
61     // Ensuite les segments (les triangles en dependent)
62     LISTE_MG_SEGMENT::iterator itSeg;
63     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
64     segment->dupliquer(mgmai,decalage);
65     // Ensuite les triangles (les tetra en dependent)
66     LISTE_MG_TRIANGLE::iterator itTri;
67     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
68     triangle->dupliquer(mgmai,decalage);
69     // Pour finir les tetra
70     LISTE_MG_TETRA::iterator itTetra;
71     for (MG_TETRA * tetra = get_premier_tetra(itTetra); tetra; tetra=get_suivant_tetra(itTetra))
72     tetra->dupliquer(mgmai,decalage);
73     /* bug quand l'identificateur d'un triangle précède celui de ses segments
74     for (i=lst_entite.begin();i!=lst_entite.end();i++)
75     {
76     MG_ELEMENT_MAILLAGE& ele=(MG_ELEMENT_MAILLAGE&)(*(*i));
77     ele.dupliquer(mgmai,decalage);
78     }*/
79     int nb_segment = get_nb_mg_segment();
80     int nb_triangle = get_nb_mg_triangle();
81     int nb_tetra = get_nb_mg_tetra();
82    
83     for (MG_TRIANGLE * triangle = get_premier_triangle(itTri); triangle; triangle=get_suivant_triangle(itTri))
84     {
85     MG_TRIANGLE * triangle2 = mgmai->get_mg_triangleid(triangle->get_id()+decalage);
86    
87     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra = triangle->get_lien_tetra();
88     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra2 = triangle2->get_lien_tetra();
89     for (int it_tetra = 0; it_tetra != lst_lien_tetra->get_nb(); it_tetra++)
90     {
91     MG_TETRA * t = lst_lien_tetra->get(it_tetra);
92     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
93    
94     lst_lien_tetra2->ajouter ( t2 );
95     }
96     }
97    
98     for (MG_SEGMENT * segment = get_premier_segment(itSeg); segment; segment=get_suivant_segment(itSeg))
99     {
100     MG_SEGMENT * segment2 = mgmai->get_mg_segmentid(segment->get_id()+decalage);
101    
102     TPL_LISTE_ENTITE<MG_TRIANGLE*> * lst_lien_triangle = segment->get_lien_triangle();
103     TPL_LISTE_ENTITE<MG_TRIANGLE*> * lst_lien_triangle2 = segment2->get_lien_triangle();
104     for (int it_triang = 0; it_triang != lst_lien_triangle->get_nb(); it_triang++)
105     {
106     MG_TRIANGLE * t = lst_lien_triangle->get(it_triang);
107     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
108    
109     lst_lien_triangle2->ajouter ( t2 );
110     }
111     }
112    
113     for (MG_NOEUD * n = get_premier_noeud(itNo); n; n=get_suivant_noeud(itNo))
114     {
115     MG_NOEUD * n2 = mgmai->get_mg_noeudid(n->get_id()+decalage);
116    
117     if (nb_segment != 0)
118     {
119     TPL_LISTE_ENTITE<MG_SEGMENT*> * lst_lien_segment = n->get_lien_segment();
120     TPL_LISTE_ENTITE<MG_SEGMENT*> * lst_lien_segment2 = n2->get_lien_segment();
121     for (int it_seg = 0; it_seg != lst_lien_segment->get_nb(); it_seg++)
122     {
123     MG_SEGMENT * seg = lst_lien_segment->get(it_seg);
124     MG_SEGMENT * seg2 = mgmai->get_mg_segmentid( seg->get_id() + decalage );
125    
126     lst_lien_segment2->ajouter ( seg2 );
127     }
128    
129     TPL_LISTE_ENTITE< MG_SEGMENT*> * lst_lien_petit_segment = n->get_lien_petit_segment();
130     TPL_LISTE_ENTITE< MG_SEGMENT*> * lst_lien_petit_segment2 = n2->get_lien_petit_segment();
131     for (int it_seg = 0; it_seg != lst_lien_petit_segment->get_nb(); it_seg++)
132     {
133     MG_SEGMENT * seg = lst_lien_petit_segment->get(it_seg);
134     MG_SEGMENT * seg2 = mgmai->get_mg_segmentid( seg->get_id() + decalage );
135    
136     lst_lien_petit_segment2->ajouter ( seg2 );
137     }
138     }
139    
140     if (nb_triangle != 0)
141     {
142     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_triangle = n->get_lien_triangle();
143     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_triangle2 = n2->get_lien_triangle();
144     for (int it_triang = 0; it_triang != lst_lien_triangle->get_nb(); it_triang++)
145     {
146     MG_TRIANGLE * t = lst_lien_triangle->get(it_triang);
147     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
148    
149     lst_lien_triangle2->ajouter ( t2 );
150     }
151    
152     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_petit_triangle = n->get_lien_petit_triangle();
153     TPL_LISTE_ENTITE< MG_TRIANGLE*> * lst_lien_petit_triangle2 = n2->get_lien_petit_triangle();
154     for (int it_triang = 0; it_triang != lst_lien_petit_triangle->get_nb(); it_triang++)
155     {
156     MG_TRIANGLE * t = lst_lien_petit_triangle->get(it_triang);
157     MG_TRIANGLE * t2 = mgmai->get_mg_triangleid( t->get_id() + decalage );
158    
159     lst_lien_petit_triangle2->ajouter ( t2 );
160     }
161     }
162    
163     if (nb_tetra != 0)
164     {
165     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra = n->get_lien_tetra();
166     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_tetra2 = n2->get_lien_tetra();
167     for (int it_tetra = 0; it_tetra != lst_lien_tetra->get_nb(); it_tetra++)
168     {
169     MG_TETRA * t = lst_lien_tetra->get(it_tetra);
170     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
171    
172     lst_lien_tetra2->ajouter ( t2 );
173     }
174    
175     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_petit_tetra = n->get_lien_petit_tetra();
176     TPL_LISTE_ENTITE< MG_TETRA*> * lst_lien_petit_tetra2 = n2->get_lien_petit_tetra();
177     for (int it_tetra = 0; it_tetra != lst_lien_petit_tetra->get_nb(); it_tetra++)
178     {
179     MG_TETRA * t = lst_lien_petit_tetra->get(it_tetra);
180     MG_TETRA * t2 = mgmai->get_mg_tetraid( t->get_id() + decalage );
181    
182     lst_lien_petit_tetra2->ajouter ( t2 );
183     }
184     }
185    
186     }
187    
188     return mgmai;
189     }
190    
191    
192     MG_MAILLAGE::~MG_MAILLAGE()
193     {
194     supprimer_tout_mg_tetra();
195     supprimer_tout_mg_triangle();
196     supprimer_tout_mg_segment();
197     supprimer_tout_mg_noeud();
198     }
199    
200     MG_GEOMETRIE* MG_MAILLAGE::get_mg_geometrie(void)
201     {
202     return mg_geometrie;
203     }
204    
205    
206     void MG_MAILLAGE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
207     {
208     gest=mggest;
209     }
210    
211     // ENTITE MG_NOEUD
212     MG_NOEUD* MG_MAILLAGE::ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE* topo,double xx,double yy,double zz,unsigned long num)
213     {
214     MG_NOEUD* mgnoeud;
215     if (num==0) mgnoeud=new MG_NOEUD(topo,xx,yy,zz); else mgnoeud=new MG_NOEUD(num,topo,xx,yy,zz);
216     int resultat = ajouter_mg_noeud(mgnoeud);
217     if (resultat==FAIL)
218     {
219     delete mgnoeud;
220     return NULL;
221     }
222     return mgnoeud;
223     }
224    
225     int MG_MAILLAGE::ajouter_mg_noeud(MG_NOEUD *mgnoeud)
226     {
227     gest->recherche_bonid(*mgnoeud);
228     MG_IDENTIFICATEUR *id=mgnoeud;
229     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
230     if (!p.second)
231     {
232     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
233     return FAIL;
234     }
235    
236     std::pair<const unsigned long,MG_NOEUD*> tmp(mgnoeud->get_id(),mgnoeud);
237     lst_mg_noeud.insert(tmp);
238     return OK;
239     }
240    
241    
242     MG_NOEUD* MG_MAILLAGE::get_mg_noeudid(unsigned long num)
243     {
244     LISTE_MG_NOEUD::iterator i=lst_mg_noeud.find(num);
245     if (i==lst_mg_noeud.end())
246     {
247     // afficheur << INEXISTE << enderr;
248     return NULL;
249     }
250     return ((*i).second);
251     }
252    
253    
254    
255     MG_NOEUD* MG_MAILLAGE::get_mg_noeud(unsigned int num)
256     {
257     if (!(num<lst_mg_noeud.size()))
258     {
259     // afficheur << INEXISTE << enderr;
260     return NULL;
261     }
262     LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();
263     for (unsigned long j=0;j<num;j++) i++;
264     return ((*i).second);
265     }
266    
267    
268    
269     unsigned int MG_MAILLAGE::get_nb_mg_noeud(void)
270     {
271     return lst_mg_noeud.size();
272     }
273    
274    
275     int MG_MAILLAGE::supprimer_mg_noeudid(unsigned long num)
276     {
277     MG_NOEUD* mgnoeud=get_mg_noeudid(num);
278     if (mgnoeud==NULL)
279     {
280     // afficheur << INEXISTE2 << enderr;
281     return FAIL;
282     }
283     if (mgnoeud->get_lien_segment()->get_nb())
284     {
285     // afficheur << ERRNOEUDSEGMENT << mgnoeud->get_id() << enderr;
286     return FAIL;
287     }
288     if (mgnoeud->get_lien_triangle()->get_nb())
289     {
290     // afficheur << ERRNOEUDTRIANGLE << mgnoeud->get_id() << enderr;
291     return FAIL;
292     }
293     MG_IDENTIFICATEUR* id=mgnoeud;
294     LISTE_ENTITE::iterator i=lst_entite.find(id);
295     lst_entite.erase(i);
296     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.find(num);
297     lst_mg_noeud.erase(j);
298     delete mgnoeud;
299     return OK;
300     }
301    
302    
303     int MG_MAILLAGE::supprimer_mg_noeud(unsigned int num)
304     {
305     MG_NOEUD* mgnoeud=get_mg_noeud(num);
306     if (mgnoeud==NULL)
307     {
308     // afficheur << INEXISTE2 << enderr;
309     return FAIL;
310     }
311     if (mgnoeud->get_lien_segment()->get_nb())
312     {
313     // afficheur << ERRNOEUDSEGMENT << mgnoeud->get_id() << enderr;
314     return FAIL;
315     }
316     if (mgnoeud->get_lien_triangle()->get_nb())
317     {
318     // afficheur << ERRNOEUDTRIANGLE << mgnoeud->get_id() << enderr;
319     return FAIL;
320     }
321     MG_IDENTIFICATEUR* id=mgnoeud;
322     LISTE_ENTITE::iterator i=lst_entite.find(id);
323     lst_entite.erase(i);
324     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.begin();
325     for (unsigned int k=0;k<num;k++) j++;
326     lst_mg_noeud.erase(j);
327     delete mgnoeud;
328     return OK;
329     }
330    
331    
332     void MG_MAILLAGE::supprimer_tout_mg_noeud(void)
333     {
334     while (get_nb_mg_noeud()!=0)
335     {
336     LISTE_MG_NOEUD::iterator j=lst_mg_noeud.begin();
337     MG_NOEUD* mgnoeud=(*j).second;
338     MG_IDENTIFICATEUR* id=mgnoeud;
339     LISTE_ENTITE::iterator i=lst_entite.find(id);
340     lst_entite.erase(i);
341     lst_mg_noeud.erase(j);
342     delete mgnoeud;
343     }
344     }
345    
346    
347     MG_NOEUD* MG_MAILLAGE::get_premier_noeud(LISTE_MG_NOEUD::iterator & it)
348     {
349     it = lst_mg_noeud.begin();
350     if (it == lst_mg_noeud.end())
351     return NULL;
352     return it->second;
353     }
354    
355     MG_NOEUD* MG_MAILLAGE::get_suivant_noeud(LISTE_MG_NOEUD::iterator & it)
356     {
357     it++;
358     if (it == lst_mg_noeud.end())
359     return NULL;
360     return it->second;
361     }
362    
363    
364     // ENTITE MG_SEGMENT
365     MG_SEGMENT* MG_MAILLAGE::ajouter_mg_segment(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,double longue,unsigned long num)
366     {
367     MG_SEGMENT* mgsegment;
368     if (num==0) mgsegment=new MG_SEGMENT(topo,mgnoeud1,mgnoeud2,longue); else mgsegment=new MG_SEGMENT(num,topo,mgnoeud1,mgnoeud2,longue);
369     int resultat=ajouter_mg_segment(mgsegment);
370     if (resultat==FAIL)
371     {
372     delete mgsegment;
373     return NULL;
374     }
375     return mgsegment;
376     }
377    
378     int MG_MAILLAGE::ajouter_mg_segment(MG_SEGMENT *mgsegment)
379     {
380     gest->recherche_bonid(*mgsegment);
381     MG_IDENTIFICATEUR *id=mgsegment;
382     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
383     if (!p.second)
384     {
385     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
386     return FAIL;
387     }
388    
389     std::pair<const unsigned long,MG_SEGMENT*> tmp(mgsegment->get_id(),mgsegment);
390     lst_mg_segment.insert(tmp);
391     return OK;
392     }
393    
394    
395     MG_SEGMENT* MG_MAILLAGE::get_mg_segmentid(unsigned long num)
396     {
397     LISTE_MG_SEGMENT::iterator i=lst_mg_segment.find(num);
398     if (i==lst_mg_segment.end())
399     {
400     // afficheur << INEXISTE << enderr;
401     return NULL;
402     }
403     return ((*i).second);
404     }
405    
406     MG_SEGMENT* MG_MAILLAGE::get_mg_segment(unsigned long noeud1id,unsigned long noeud2id)
407     {
408     unsigned long id=std::min(noeud1id,noeud2id);
409     MG_NOEUD* noeud=get_mg_noeudid(id);
410     int nb_segment=noeud->get_lien_petit_segment()->get_nb();
411     for (int i=0;i<nb_segment;i++)
412     {
413     MG_SEGMENT* mgsegment=noeud->get_lien_petit_segment()->get(i);
414     if ( (mgsegment->get_noeud1()->get_id()==noeud1id) && (mgsegment->get_noeud2()->get_id()==noeud2id) ) return mgsegment;
415     if ( (mgsegment->get_noeud2()->get_id()==noeud1id) && (mgsegment->get_noeud1()->get_id()==noeud2id) ) return mgsegment;
416     }
417     return NULL;
418     }
419    
420     MG_SEGMENT* MG_MAILLAGE::get_mg_segment(unsigned int num)
421     {
422     if (!(num<lst_mg_segment.size()))
423     {
424     // afficheur << INEXISTE << enderr;
425     return NULL;
426     }
427     LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();
428     //for (unsigned long j=0;j<num;j++) i++;
429     std::advance(i,num);
430     return ((*i).second);
431     }
432    
433     MG_SEGMENT* MG_MAILLAGE::get_premier_segment(LISTE_MG_SEGMENT::iterator & it)
434     {
435     it = lst_mg_segment.begin();
436     if (it == lst_mg_segment.end())
437     return NULL;
438     return it->second;
439     }
440    
441     MG_SEGMENT* MG_MAILLAGE::get_suivant_segment(LISTE_MG_SEGMENT::iterator & it)
442     {
443     it++;
444     if (it == lst_mg_segment.end())
445     return NULL;
446     return it->second;
447     }
448    
449     unsigned int MG_MAILLAGE::get_nb_mg_segment(void)
450     {
451     return lst_mg_segment.size();
452     }
453    
454    
455     int MG_MAILLAGE::supprimer_mg_segmentid(unsigned long num)
456     {
457     MG_SEGMENT* mgsegment=get_mg_segmentid(num);
458     if (mgsegment==NULL)
459     {
460     // afficheur << INEXISTE2 << enderr;
461     return FAIL;
462     }
463     MG_IDENTIFICATEUR* id=mgsegment;
464     LISTE_ENTITE::iterator i=lst_entite.find(id);
465     lst_entite.erase(i);
466     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.find(num);
467     lst_mg_segment.erase(j);
468     MG_NOEUD* noeud1=mgsegment->get_noeud1();
469     MG_NOEUD* noeud2=mgsegment->get_noeud2();
470     delete mgsegment;
471     if ((noeud1->get_nb_reference()==0) && (noeud1->get_lien_topologie()->get_dimension()>0)) supprimer_mg_noeudid(noeud1->get_id());
472     if ((noeud2->get_nb_reference()==0) && (noeud2->get_lien_topologie()->get_dimension()>0)) supprimer_mg_noeudid(noeud2->get_id());
473     return OK;
474     }
475    
476    
477     int MG_MAILLAGE::supprimer_mg_segment(unsigned int num)
478     {
479     MG_SEGMENT* mgsegment=get_mg_segment(num);
480     if (mgsegment==NULL)
481     {
482     // afficheur << INEXISTE2 << enderr;
483     return FAIL;
484     }
485     MG_IDENTIFICATEUR* id=mgsegment;
486     LISTE_ENTITE::iterator i=lst_entite.find(id);
487     lst_entite.erase(i);
488     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.begin();
489     for (unsigned int k=0;k<num;k++) j++;
490     lst_mg_segment.erase(j);
491     MG_NOEUD* noeud1=mgsegment->get_noeud1();
492     MG_NOEUD* noeud2=mgsegment->get_noeud2();
493     delete mgsegment;
494     if ((noeud1->get_nb_reference()==0) && (noeud1->get_lien_topologie()->get_dimension()>0)) supprimer_mg_noeudid(noeud1->get_id());
495     if ((noeud2->get_nb_reference()==0) && (noeud2->get_lien_topologie()->get_dimension()>0)) supprimer_mg_noeudid(noeud2->get_id());
496     return OK;
497     }
498    
499    
500     void MG_MAILLAGE::supprimer_tout_mg_segment(void)
501     {
502     while (get_nb_mg_segment()!=0)
503     {
504     LISTE_MG_SEGMENT::iterator j=lst_mg_segment.begin();
505     MG_SEGMENT* mgsegment=(*j).second;
506     MG_IDENTIFICATEUR* id=mgsegment;
507     LISTE_ENTITE::iterator i=lst_entite.find(id);
508     lst_entite.erase(i);
509     lst_mg_segment.erase(j);
510     delete mgsegment;
511     }
512    
513     }
514    
515     // ENTITE MG_TRIANGLE
516    
517     MG_TRIANGLE* MG_MAILLAGE::ajouter_mg_triangle(MG_ELEMENT_TOPOLOGIQUE* topo,class MG_NOEUD *mgnoeud1,class MG_NOEUD *mgnoeud2,class MG_NOEUD *mgnoeud3,unsigned long num)
518     {
519     MG_SEGMENT* mgsegment1=get_mg_segment(mgnoeud1->get_id(),mgnoeud2->get_id());
520     MG_SEGMENT* mgsegment2=get_mg_segment(mgnoeud2->get_id(),mgnoeud3->get_id());
521     MG_SEGMENT* mgsegment3=get_mg_segment(mgnoeud3->get_id(),mgnoeud1->get_id());
522     if (mgsegment1==NULL) mgsegment1=ajouter_mg_segment(topo,mgnoeud1,mgnoeud2);
523     if (mgsegment2==NULL) mgsegment2=ajouter_mg_segment(topo,mgnoeud2,mgnoeud3);
524     if (mgsegment3==NULL) mgsegment3=ajouter_mg_segment(topo,mgnoeud3,mgnoeud1);
525     MG_TRIANGLE* mgtriangle;
526     if (num==0) mgtriangle=new MG_TRIANGLE(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3);
527     else mgtriangle=new MG_TRIANGLE(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgsegment1,mgsegment2,mgsegment3);
528     int resultat=ajouter_mg_triangle(mgtriangle);
529     if (resultat==FAIL)
530     {
531     delete mgtriangle;
532     return NULL;
533     }
534     return mgtriangle;
535     }
536    
537    
538     int MG_MAILLAGE::ajouter_mg_triangle(MG_TRIANGLE *mgtriangle)
539     {
540     gest->recherche_bonid(*mgtriangle);
541     MG_IDENTIFICATEUR *id=mgtriangle;
542     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
543     if (!p.second)
544     {
545     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
546     return FAIL;
547     }
548    
549     std::pair<const unsigned long,MG_TRIANGLE*> tmp(mgtriangle->get_id(),mgtriangle);
550     lst_mg_triangle.insert(tmp);
551     return OK;
552     }
553    
554    
555     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangleid(unsigned long num)
556     {
557     LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.find(num);
558     if (i==lst_mg_triangle.end())
559     {
560     // afficheur << INEXISTE << enderr;
561     return NULL;
562     }
563     return ((*i).second);
564     }
565    
566    
567    
568     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned int num)
569     {
570     if (!(num<lst_mg_triangle.size()))
571     {
572     // afficheur << INEXISTE << enderr;
573     return NULL;
574     }
575     LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();
576     for (unsigned long j=0;j<num;j++) i++;
577     return ((*i).second);
578     }
579    
580     MG_TRIANGLE* MG_MAILLAGE::get_mg_triangle(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id)
581     {
582     unsigned long id=std::min(noeud1id,noeud2id);
583     id=std::min(id,noeud3id);
584     MG_NOEUD* noeud=get_mg_noeudid(id);
585     int nb_triangle=noeud->get_lien_petit_triangle()->get_nb();
586     for (int i=0;i<nb_triangle;i++)
587     {
588     MG_TRIANGLE* mgtriangle=noeud->get_lien_petit_triangle()->get(i);
589     if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
590     if ( (mgtriangle->get_noeud1()->get_id()==noeud1id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
591     if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud3id) ) return mgtriangle;
592     if ( (mgtriangle->get_noeud1()->get_id()==noeud2id) && (mgtriangle->get_noeud2()->get_id()==noeud3id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
593     if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud1id) && (mgtriangle->get_noeud3()->get_id()==noeud2id) ) return mgtriangle;
594     if ( (mgtriangle->get_noeud1()->get_id()==noeud3id) && (mgtriangle->get_noeud2()->get_id()==noeud2id) && (mgtriangle->get_noeud3()->get_id()==noeud1id) ) return mgtriangle;
595     }
596     return NULL;
597     }
598    
599     unsigned int MG_MAILLAGE::get_nb_mg_triangle(void)
600     {
601     return lst_mg_triangle.size();
602     }
603    
604    
605     int MG_MAILLAGE::supprimer_mg_triangleid(unsigned long num)
606     {
607     MG_TRIANGLE* mgtriangle=get_mg_triangleid(num);
608     if (mgtriangle==NULL)
609     {
610     // afficheur << INEXISTE2 << enderr;
611     return FAIL;
612     }
613     MG_IDENTIFICATEUR* id=mgtriangle;
614     LISTE_ENTITE::iterator i=lst_entite.find(id);
615     lst_entite.erase(i);
616     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.find(num);
617     lst_mg_triangle.erase(j);
618     MG_SEGMENT* segment1=mgtriangle->get_segment1();
619     MG_SEGMENT* segment2=mgtriangle->get_segment2();
620     MG_SEGMENT* segment3=mgtriangle->get_segment3();
621     delete mgtriangle;
622     if ((segment1->get_nb_reference()==0) && (segment1->get_lien_topologie()->get_dimension()>1)) supprimer_mg_segmentid(segment1->get_id());
623     if ((segment2->get_nb_reference()==0) && (segment2->get_lien_topologie()->get_dimension()>1)) supprimer_mg_segmentid(segment2->get_id());
624     if ((segment3->get_nb_reference()==0) && (segment3->get_lien_topologie()->get_dimension()>1)) supprimer_mg_segmentid(segment3->get_id());
625     return OK;
626     }
627    
628    
629     int MG_MAILLAGE::supprimer_mg_triangle(unsigned int num)
630     {
631     MG_TRIANGLE* mgtriangle=get_mg_triangle(num);
632     if (mgtriangle==NULL)
633     {
634     // afficheur << INEXISTE2 << enderr;
635     return FAIL;
636     }
637     MG_IDENTIFICATEUR* id=mgtriangle;
638     LISTE_ENTITE::iterator i=lst_entite.find(id);
639     lst_entite.erase(i);
640     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
641     for (unsigned int k=0;k<num;k++) j++;
642     lst_mg_triangle.erase(j);
643     MG_SEGMENT* segment1=mgtriangle->get_segment1();
644     MG_SEGMENT* segment2=mgtriangle->get_segment2();
645     MG_SEGMENT* segment3=mgtriangle->get_segment3();
646     delete mgtriangle;
647     if ((segment1->get_nb_reference()==0) && (segment1->get_lien_topologie()->get_dimension()>1)) supprimer_mg_segmentid(segment1->get_id());
648     if ((segment2->get_nb_reference()==0) && (segment2->get_lien_topologie()->get_dimension()>1)) supprimer_mg_segmentid(segment2->get_id());
649     if ((segment3->get_nb_reference()==0) && (segment3->get_lien_topologie()->get_dimension()>1)) supprimer_mg_segmentid(segment3->get_id());
650    
651    
652     return OK;
653     }
654    
655    
656     void MG_MAILLAGE::supprimer_tout_mg_triangle(void)
657     {
658     while (get_nb_mg_triangle()!=0)
659     {
660     LISTE_MG_TRIANGLE::iterator j=lst_mg_triangle.begin();
661     MG_TRIANGLE* mgtriangle=(*j).second;
662     MG_IDENTIFICATEUR* id=mgtriangle;
663     LISTE_ENTITE::iterator i=lst_entite.find(id);
664     lst_entite.erase(i);
665     lst_mg_triangle.erase(j);
666     delete mgtriangle;
667     }
668     }
669    
670    
671     MG_TRIANGLE* MG_MAILLAGE::get_premier_triangle(LISTE_MG_TRIANGLE::iterator & it)
672     {
673     it = lst_mg_triangle.begin();
674     if (it == lst_mg_triangle.end())
675     return NULL;
676     return it->second;
677     }
678    
679     MG_TRIANGLE* MG_MAILLAGE::get_suivant_triangle(LISTE_MG_TRIANGLE::iterator & it)
680     {
681     it++;
682     if (it == lst_mg_triangle.end())
683     return NULL;
684     return it->second;
685     }
686    
687     // ENTITE MG_TETRA
688    
689     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,unsigned long num)
690     {
691     MG_TRIANGLE* mgtriangle1=get_mg_triangle(mgnoeud1->get_id(),mgnoeud3->get_id(),mgnoeud2->get_id());
692     MG_TRIANGLE* mgtriangle2=get_mg_triangle(mgnoeud1->get_id(),mgnoeud2->get_id(),mgnoeud4->get_id());
693     MG_TRIANGLE* mgtriangle3=get_mg_triangle(mgnoeud2->get_id(),mgnoeud3->get_id(),mgnoeud4->get_id());
694     MG_TRIANGLE* mgtriangle4=get_mg_triangle(mgnoeud1->get_id(),mgnoeud4->get_id(),mgnoeud3->get_id());
695     if (mgtriangle1==NULL) mgtriangle1=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud3,mgnoeud2);
696     if (mgtriangle2==NULL) mgtriangle2=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud2,mgnoeud4);
697     if (mgtriangle3==NULL) mgtriangle3=ajouter_mg_triangle(topo,mgnoeud2,mgnoeud3,mgnoeud4);
698     if (mgtriangle4==NULL) mgtriangle4=ajouter_mg_triangle(topo,mgnoeud1,mgnoeud4,mgnoeud3);
699     MG_TETRA* mgtetra;
700     if (num==0) mgtetra=new MG_TETRA(topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4);
701     else mgtetra=new MG_TETRA(num,topo,mgnoeud1,mgnoeud2,mgnoeud3,mgnoeud4,mgtriangle1,mgtriangle2,mgtriangle3,mgtriangle4);
702     int resultat=ajouter_mg_tetra(mgtetra);
703     if (resultat==FAIL)
704     {
705     delete mgtetra;
706     return NULL;
707     }
708     return mgtetra;
709     }
710    
711    
712     int MG_MAILLAGE::ajouter_mg_tetra(MG_TETRA *mgtetra)
713     {
714     gest->recherche_bonid(*mgtetra);
715     MG_IDENTIFICATEUR *id=mgtetra;
716     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
717     if (!p.second)
718     {
719     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
720     return FAIL;
721     }
722    
723     std::pair<const unsigned long,MG_TETRA*> tmp(mgtetra->get_id(),mgtetra);
724     lst_mg_tetra.insert(tmp);
725     return OK;
726     }
727    
728    
729     MG_TETRA* MG_MAILLAGE::get_mg_tetraid(unsigned long num)
730     {
731     LISTE_MG_TETRA::iterator i=lst_mg_tetra.find(num);
732     if (i==lst_mg_tetra.end())
733     {
734     // afficheur << INEXISTE << enderr;
735     return NULL;
736     }
737     return ((*i).second);
738     }
739    
740    
741    
742     MG_TETRA* MG_MAILLAGE::get_mg_tetra(unsigned int num)
743     {
744     if (!(num<lst_mg_tetra.size()))
745     {
746     // afficheur << INEXISTE << enderr;
747     return NULL;
748     }
749     LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();
750     for (unsigned long j=0;j<num;j++) i++;
751     return ((*i).second);
752     }
753    
754     MG_TETRA* MG_MAILLAGE::get_mg_tetra(unsigned long noeud1id,unsigned long noeud2id,unsigned long noeud3id,unsigned long noeud4id)
755     {
756     unsigned long id=std::min(noeud1id,noeud2id);
757     id=std::min(id,noeud3id);
758     id=std::min(id,noeud4id);
759     MG_NOEUD* noeud=get_mg_noeudid(id);
760     int nb_tetra=noeud->get_lien_petit_tetra()->get_nb();
761     for (int i=0;i<nb_tetra;i++)
762     {
763     MG_TETRA* mgtetra=noeud->get_lien_petit_tetra()->get(i);
764     if ( (mgtetra->get_noeud1()->get_id()==noeud1id) && (mgtetra->get_noeud2()->get_id()==noeud2id) && (mgtetra->get_noeud3()->get_id()==noeud3id) && (mgtetra->get_noeud4()->get_id()==noeud4id) ) return mgtetra;
765     if ( (mgtetra->get_noeud1()->get_id()==noeud1id) && (mgtetra->get_noeud2()->get_id()==noeud2id) && (mgtetra->get_noeud3()->get_id()==noeud4id) && (mgtetra->get_noeud4()->get_id()==noeud3id) ) return mgtetra;
766     if ( (mgtetra->get_noeud1()->get_id()==noeud1id) && (mgtetra->get_noeud2()->get_id()==noeud3id) && (mgtetra->get_noeud3()->get_id()==noeud2id) && (mgtetra->get_noeud4()->get_id()==noeud4id) ) return mgtetra;
767     if ( (mgtetra->get_noeud1()->get_id()==noeud1id) && (mgtetra->get_noeud2()->get_id()==noeud3id) && (mgtetra->get_noeud3()->get_id()==noeud4id) && (mgtetra->get_noeud4()->get_id()==noeud2id) ) return mgtetra;
768     if ( (mgtetra->get_noeud1()->get_id()==noeud1id) && (mgtetra->get_noeud2()->get_id()==noeud4id) && (mgtetra->get_noeud3()->get_id()==noeud2id) && (mgtetra->get_noeud4()->get_id()==noeud3id) ) return mgtetra;
769     if ( (mgtetra->get_noeud1()->get_id()==noeud1id) && (mgtetra->get_noeud2()->get_id()==noeud4id) && (mgtetra->get_noeud3()->get_id()==noeud3id) && (mgtetra->get_noeud4()->get_id()==noeud2id) ) return mgtetra;
770     if ( (mgtetra->get_noeud1()->get_id()==noeud2id) && (mgtetra->get_noeud2()->get_id()==noeud1id) && (mgtetra->get_noeud3()->get_id()==noeud3id) && (mgtetra->get_noeud4()->get_id()==noeud4id) ) return mgtetra;
771     if ( (mgtetra->get_noeud1()->get_id()==noeud2id) && (mgtetra->get_noeud2()->get_id()==noeud1id) && (mgtetra->get_noeud3()->get_id()==noeud4id) && (mgtetra->get_noeud4()->get_id()==noeud3id) ) return mgtetra;
772     if ( (mgtetra->get_noeud1()->get_id()==noeud2id) && (mgtetra->get_noeud2()->get_id()==noeud3id) && (mgtetra->get_noeud3()->get_id()==noeud1id) && (mgtetra->get_noeud4()->get_id()==noeud4id) ) return mgtetra;
773     if ( (mgtetra->get_noeud1()->get_id()==noeud2id) && (mgtetra->get_noeud2()->get_id()==noeud3id) && (mgtetra->get_noeud3()->get_id()==noeud4id) && (mgtetra->get_noeud4()->get_id()==noeud1id) ) return mgtetra;
774     if ( (mgtetra->get_noeud1()->get_id()==noeud2id) && (mgtetra->get_noeud2()->get_id()==noeud4id) && (mgtetra->get_noeud3()->get_id()==noeud1id) && (mgtetra->get_noeud4()->get_id()==noeud3id) ) return mgtetra;
775     if ( (mgtetra->get_noeud1()->get_id()==noeud2id) && (mgtetra->get_noeud2()->get_id()==noeud4id) && (mgtetra->get_noeud3()->get_id()==noeud3id) && (mgtetra->get_noeud4()->get_id()==noeud1id) ) return mgtetra;
776     if ( (mgtetra->get_noeud1()->get_id()==noeud3id) && (mgtetra->get_noeud2()->get_id()==noeud1id) && (mgtetra->get_noeud3()->get_id()==noeud2id) && (mgtetra->get_noeud4()->get_id()==noeud4id) ) return mgtetra;
777     if ( (mgtetra->get_noeud1()->get_id()==noeud3id) && (mgtetra->get_noeud2()->get_id()==noeud1id) && (mgtetra->get_noeud3()->get_id()==noeud4id) && (mgtetra->get_noeud4()->get_id()==noeud2id) ) return mgtetra;
778     if ( (mgtetra->get_noeud1()->get_id()==noeud3id) && (mgtetra->get_noeud2()->get_id()==noeud2id) && (mgtetra->get_noeud3()->get_id()==noeud1id) && (mgtetra->get_noeud4()->get_id()==noeud4id) ) return mgtetra;
779     if ( (mgtetra->get_noeud1()->get_id()==noeud3id) && (mgtetra->get_noeud2()->get_id()==noeud2id) && (mgtetra->get_noeud3()->get_id()==noeud4id) && (mgtetra->get_noeud4()->get_id()==noeud1id) ) return mgtetra;
780     if ( (mgtetra->get_noeud1()->get_id()==noeud3id) && (mgtetra->get_noeud2()->get_id()==noeud4id) && (mgtetra->get_noeud3()->get_id()==noeud1id) && (mgtetra->get_noeud4()->get_id()==noeud2id) ) return mgtetra;
781     if ( (mgtetra->get_noeud1()->get_id()==noeud3id) && (mgtetra->get_noeud2()->get_id()==noeud4id) && (mgtetra->get_noeud3()->get_id()==noeud2id) && (mgtetra->get_noeud4()->get_id()==noeud1id) ) return mgtetra;
782     if ( (mgtetra->get_noeud1()->get_id()==noeud4id) && (mgtetra->get_noeud2()->get_id()==noeud1id) && (mgtetra->get_noeud3()->get_id()==noeud2id) && (mgtetra->get_noeud4()->get_id()==noeud3id) ) return mgtetra;
783     if ( (mgtetra->get_noeud1()->get_id()==noeud4id) && (mgtetra->get_noeud2()->get_id()==noeud1id) && (mgtetra->get_noeud3()->get_id()==noeud3id) && (mgtetra->get_noeud4()->get_id()==noeud2id) ) return mgtetra;
784     if ( (mgtetra->get_noeud1()->get_id()==noeud4id) && (mgtetra->get_noeud2()->get_id()==noeud2id) && (mgtetra->get_noeud3()->get_id()==noeud1id) && (mgtetra->get_noeud4()->get_id()==noeud3id) ) return mgtetra;
785     if ( (mgtetra->get_noeud1()->get_id()==noeud4id) && (mgtetra->get_noeud2()->get_id()==noeud2id) && (mgtetra->get_noeud3()->get_id()==noeud3id) && (mgtetra->get_noeud4()->get_id()==noeud1id) ) return mgtetra;
786     if ( (mgtetra->get_noeud1()->get_id()==noeud4id) && (mgtetra->get_noeud2()->get_id()==noeud3id) && (mgtetra->get_noeud3()->get_id()==noeud1id) && (mgtetra->get_noeud4()->get_id()==noeud2id) ) return mgtetra;
787     if ( (mgtetra->get_noeud1()->get_id()==noeud4id) && (mgtetra->get_noeud2()->get_id()==noeud3id) && (mgtetra->get_noeud3()->get_id()==noeud2id) && (mgtetra->get_noeud4()->get_id()==noeud1id) ) return mgtetra;
788     }
789     return NULL;
790     }
791    
792     unsigned int MG_MAILLAGE::get_nb_mg_tetra(void)
793     {
794     return lst_mg_tetra.size();
795     }
796    
797    
798     int MG_MAILLAGE::supprimer_mg_tetraid(unsigned long num)
799     {
800     MG_TETRA* mgtetra=get_mg_tetraid(num);
801     if (mgtetra==NULL)
802     {
803     // afficheur << INEXISTE2 << enderr;
804     return FAIL;
805     }
806     MG_IDENTIFICATEUR* id=mgtetra;
807     LISTE_ENTITE::iterator i=lst_entite.find(id);
808     lst_entite.erase(i);
809     LISTE_MG_TETRA::iterator j=lst_mg_tetra.find(num);
810     lst_mg_tetra.erase(j);
811     MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
812     MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
813     MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
814     MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
815     delete mgtetra;
816     if ((triangle1->get_nb_reference()==0) && (triangle1->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle1->get_id());
817     if ((triangle2->get_nb_reference()==0) && (triangle2->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle2->get_id());
818     if ((triangle3->get_nb_reference()==0) && (triangle3->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle3->get_id());
819     if ((triangle4->get_nb_reference()==0) && (triangle4->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle4->get_id());
820     return OK;
821     }
822    
823    
824     int MG_MAILLAGE::supprimer_mg_tetra(unsigned int num)
825     {
826     MG_TETRA* mgtetra=get_mg_tetra(num);
827     if (mgtetra==NULL)
828     {
829     // afficheur << INEXISTE2 << enderr;
830     return FAIL;
831     }
832     MG_IDENTIFICATEUR* id=mgtetra;
833     LISTE_ENTITE::iterator i=lst_entite.find(id);
834     lst_entite.erase(i);
835     LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
836     for (unsigned int k=0;k<num;k++) j++;
837     lst_mg_tetra.erase(j);
838     MG_TRIANGLE* triangle1=mgtetra->get_triangle1();
839     MG_TRIANGLE* triangle2=mgtetra->get_triangle2();
840     MG_TRIANGLE* triangle3=mgtetra->get_triangle3();
841     MG_TRIANGLE* triangle4=mgtetra->get_triangle4();
842     delete mgtetra;
843     if ((triangle1->get_nb_reference()==0) && (triangle1->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle1->get_id());
844     if ((triangle2->get_nb_reference()==0) && (triangle2->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle2->get_id());
845     if ((triangle3->get_nb_reference()==0) && (triangle3->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle3->get_id());
846     if ((triangle4->get_nb_reference()==0) && (triangle4->get_lien_topologie()->get_dimension()>2)) supprimer_mg_triangleid(triangle4->get_id());
847     return OK;
848     }
849    
850    
851     void MG_MAILLAGE::supprimer_tout_mg_tetra(void)
852     {
853     while (get_nb_mg_tetra()!=0)
854     {
855     LISTE_MG_TETRA::iterator j=lst_mg_tetra.begin();
856     MG_TETRA* mgtetra=(*j).second;
857     MG_IDENTIFICATEUR* id=mgtetra;
858     LISTE_ENTITE::iterator i=lst_entite.find(id);
859     lst_entite.erase(i);
860     lst_mg_tetra.erase(j);
861     delete mgtetra;
862     }
863     }
864    
865    
866     MG_TETRA* MG_MAILLAGE::get_premier_tetra(LISTE_MG_TETRA::iterator & it)
867     {
868     it = lst_mg_tetra.begin();
869     if (it == lst_mg_tetra.end())
870     return NULL;
871     return it->second;
872     }
873    
874     MG_TETRA* MG_MAILLAGE::get_suivant_tetra(LISTE_MG_TETRA::iterator & it)
875     {
876     it++;
877     if (it == lst_mg_tetra.end())
878     return NULL;
879     return it->second;
880     }
881    
882    
883    
884    
885     bool MG_MAILLAGE::contient ( MG_IDENTIFICATEUR * id )
886     {
887     return ( lst_entite.find ( id ) != lst_entite.end() );
888     }
889    
890     void MG_MAILLAGE::enregistrer(std::ostream& o)
891     {
892    
893     if (mg_geometrie==NULL) o << "%" << get_id() << "=MAILLAGE(NULL);" << std::endl;
894     else o << "%" << get_id() << "=MAILLAGE($" << mg_geometrie->get_id() <<");" << std::endl;
895     LISTE_ENTITE::const_iterator i;
896     for (i=lst_entite.begin();i!=lst_entite.end();i++)
897     {
898     MG_IDENTIFICATEUR* entite = *i;
899     entite->enregistrer(o);
900     }
901     }
902    
903     void MG_MAILLAGE::enregistrer_sous_mesh_1D(std::ostream& o)
904     {
905    
906     int nb_noeud=0;
907     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
908     {
909     MG_NOEUD* noeud=((*i).second);
910     if (noeud->get_lien_topologie()->get_dimension()<2) nb_noeud++;
911     }
912    
913     int nb_seg=0;
914     for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
915     {
916     MG_SEGMENT* seg=((*i).second);
917     if (seg->get_lien_topologie()->get_dimension()<2) nb_seg++;
918     }
919    
920     o << nb_noeud << " " << nb_seg << std::endl;
921     int ii=0;
922     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
923     {
924     MG_NOEUD* noeud=((*i).second);
925     if (noeud->get_lien_topologie()->get_dimension()<2)
926     {
927     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
928     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
929     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
930     o << noeud->get_lien_topologie()->get_id() << " " << noeud->get_id() << std::endl;
931     noeud->change_nouveau_numero(ii+1);
932     ii++;
933     }
934     }
935    
936     for (LISTE_MG_SEGMENT::iterator i=lst_mg_segment.begin();i!=lst_mg_segment.end();i++)
937     {
938     MG_SEGMENT* seg=((*i).second);
939     if (seg->get_lien_topologie()->get_dimension()<2)
940     {
941     o << "2 " << seg->get_noeud1()->get_nouveau_numero() << " " << seg->get_noeud2()->get_nouveau_numero() << " " ;
942     if (seg->get_lien_topologie()->get_dimension()==0) o << "vertex ";
943     if (seg->get_lien_topologie()->get_dimension()==1) o << "edge ";
944     o << seg->get_lien_topologie()->get_id() << std::endl;
945     }
946     }
947    
948     }
949    
950     void MG_MAILLAGE::enregistrer_sous_mesh_2D
951     (std::ostream& o)
952     {
953     int nb_noeud=0;
954     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
955     {
956     MG_NOEUD* noeud=((*i).second);
957     if (noeud->get_lien_topologie()->get_dimension()<3) nb_noeud++;
958     }
959    
960     int nb_tri=0;
961     for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
962     {
963     MG_TRIANGLE* triangle=((*i).second);
964     if (triangle->get_lien_topologie()->get_dimension()<3) nb_tri++;
965     }
966    
967     o << nb_noeud << " " << nb_tri << std::endl;
968     int ii=0;
969     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
970     {
971     MG_NOEUD* noeud=((*i).second);
972     if (noeud->get_lien_topologie()->get_dimension()<3)
973     {
974     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
975     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
976     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
977     if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
978     o << noeud->get_lien_topologie()->get_id() << std::endl;
979     noeud->change_nouveau_numero(ii+1);
980     ii++;
981     }
982     }
983    
984     int compteur=0;
985     for (LISTE_MG_TRIANGLE::iterator i=lst_mg_triangle.begin();i!=lst_mg_triangle.end();i++)
986     {
987     MG_TRIANGLE* triangle=((*i).second);
988     if (triangle->get_lien_topologie()->get_dimension()<3)
989     {
990     o << "3 " << triangle->get_noeud1()->get_nouveau_numero() << " " << triangle->get_noeud2()->get_nouveau_numero() << " " << triangle->get_noeud3()->get_nouveau_numero() << " " ;
991     if (triangle->get_lien_topologie()->get_dimension()==0) o << "vertex ";
992     if (triangle->get_lien_topologie()->get_dimension()==1) o << "edge ";
993     if (triangle->get_lien_topologie()->get_dimension()==2) o << "face ";
994     if (triangle->get_lien_topologie()->get_dimension()==3) o << "body ";
995     o << triangle->get_lien_topologie()->get_id() << std::endl;
996     compteur++;
997     }
998     }
999    
1000     }
1001    
1002     void MG_MAILLAGE::enregistrer_sous_mesh_3D(std::ostream& o)
1003     {
1004     o << get_nb_mg_noeud() << " " << get_nb_mg_tetra() << std::endl;
1005     int ii=0;
1006     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1007     {
1008     MG_NOEUD* noeud=((*i).second);
1009     o << (ii+1) << " " << noeud->get_x() << " " << noeud->get_y() << " " << noeud->get_z() << " " ;
1010     if (noeud->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1011     if (noeud->get_lien_topologie()->get_dimension()==1) o << "edge ";
1012     if (noeud->get_lien_topologie()->get_dimension()==2) o << "face ";
1013     if (noeud->get_lien_topologie()->get_dimension()==3) o << "body ";
1014     o << noeud->get_lien_topologie()->get_id() << std::endl;
1015     noeud->change_nouveau_numero(ii+1);
1016     ii++;
1017     }
1018    
1019    
1020     for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
1021     {
1022     MG_TETRA* tetra=((*i).second);
1023     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() << " " ;
1024     if (tetra->get_lien_topologie()->get_dimension()==0) o << "vertex ";
1025     if (tetra->get_lien_topologie()->get_dimension()==1) o << "edge ";
1026     if (tetra->get_lien_topologie()->get_dimension()==2) o << "face ";
1027     if (tetra->get_lien_topologie()->get_dimension()==3) o << "body ";
1028     o << tetra->get_lien_topologie()->get_id() << std::endl;
1029     }
1030    
1031     }
1032    
1033     void MG_MAILLAGE::exporter_mesh(std::string& nomfic)
1034     {
1035     char chaine[500];
1036     sprintf(chaine,"%s_1D.mai",nomfic.c_str());
1037     std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
1038     of1.precision(16);
1039     of1.setf(std::ios::showpoint);
1040     enregistrer_sous_mesh_1D(of1);
1041     sprintf(chaine,"%s_2D.mai",nomfic.c_str());
1042     std::ofstream of2(chaine,std::ios::out|std::ios::trunc);
1043     of2.precision(16);
1044     of2.setf(std::ios::showpoint);
1045     enregistrer_sous_mesh_2D(of2);
1046     sprintf(chaine,"%s_3D.mai",nomfic.c_str());
1047     std::ofstream of3(chaine,std::ios::out|std::ios::trunc);
1048     of3.precision(16);
1049     of3.setf(std::ios::showpoint);
1050     enregistrer_sous_mesh_3D(of3);
1051     }
1052    
1053     /*
1054     void MG_MAILLAGE::exporter_cosmos(std::string& nomfic)
1055     {
1056     char chaine[500];
1057     sprintf(chaine,"%s.ses",nomfic.c_str());
1058     std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
1059     of1.precision(16);
1060     of1.setf(std::ios::showpoint);
1061     of1 << "TITLE, " << chaine << " : Fichier de maillage MAGiC" << std::endl;
1062     of1 << "EGROUP,1,TETRA4,0,0,0,0,0,0,0,0;" << std::endl;
1063     int nb_volume=mg_geometrie->get_nb_mg_volume();
1064     for (int i=0;i<nb_volume;i++)
1065     {
1066     MG_VOLUME *mgvol=mg_geometrie->get_mg_volume(i);
1067     if (mgvol->get_num_materiau()>=0)
1068     {
1069     MT_GESTIONNAIRE mtgest(mg_geometrie->get_gest_materiau());
1070     MT_MATERIAU* mat=mtgest.get_materiau(mgvol->get_num_materiau());
1071     MT_PROPRIETE* prop=mat->get_propriete("EX");
1072     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", EX, " << prop->get_valeur(2) << ";" << std::endl;
1073     prop=mat->get_propriete("NUXY");
1074     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", NUXY, " << prop->get_valeur(2) << ";" << std::endl;
1075     prop=mat->get_propriete("GXY");
1076     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", GXY, " << prop->get_valeur(2) << ";" << std::endl;
1077     prop=mat->get_propriete("DENS");
1078     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", DENS, " << prop->get_valeur(2) << ";" << std::endl;
1079     prop=mat->get_propriete("SIGXT");
1080     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGXT, " << prop->get_valeur(2) << ";" << std::endl;
1081     prop=mat->get_propriete("SIGYLD");
1082     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGYLD, " << prop->get_valeur(2) << ";" << std::endl;
1083     prop=mat->get_propriete("ALPX");
1084     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", ALPX, " << prop->get_valeur(2) << ";" << std::endl;
1085     prop=mat->get_propriete("KX");
1086     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", KX, " << prop->get_valeur(2) << ";" << std::endl;
1087     prop=mat->get_propriete("C");
1088     of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", C, " << prop->get_valeur(2) << ";" << std::endl;
1089     }
1090     }
1091     of1 << "ACTSET,CS,0;" << std::endl;
1092     of1 << "ACTSET,EG,1;" << std::endl;
1093     int ii=0;
1094     double valeurunite=mg_geometrie->get_valeur_unite();
1095     for (LISTE_MG_NOEUD::iterator i=lst_mg_noeud.begin();i!=lst_mg_noeud.end();i++)
1096     {
1097     MG_NOEUD* noeud=((*i).second);
1098     of1 << "ND, " << (ii+1) << ", " << noeud->get_x()*valeurunite << ", " << noeud->get_y()*valeurunite << ", " << noeud->get_z()*valeurunite << ";" << std::endl;
1099     char nom[3];
1100     int nb=noeud->get_lien_topologie()->get_nb_ccf();
1101     for (int k=0;k<nb;k++)
1102     {
1103     noeud->get_lien_topologie()->get_type_ccf(k,nom);
1104     if (strcmp(nom,"Da")==0) of1 << "DND , " << ii+1 << ", AL, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1105     if (strcmp(nom,"Dx")==0) of1 << "DND , " << ii+1 << ", UX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1106     if (strcmp(nom,"Dy")==0) of1 << "DND , " << ii+1 << ", UY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1107     if (strcmp(nom,"Dz")==0) of1 << "DND , " << ii+1 << ", UZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1108     if (strcmp(nom,"Fx")==0) of1 << "FND , " << ii+1 << ", FX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1109     if (strcmp(nom,"Fy")==0) of1 << "FND , " << ii+1 << ", FY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1110     if (strcmp(nom,"Fz")==0) of1 << "FND , " << ii+1 << ", FZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << ii+1 << ", 1;" << std::endl;
1111     }
1112     ii++;
1113     noeud->change_nouveau_numero(ii);
1114     }
1115     ii=0;
1116     int nummat=-10;
1117     for (LISTE_MG_TETRA::iterator i=lst_mg_tetra.begin();i!=lst_mg_tetra.end();i++)
1118     {
1119     MG_TETRA* tetra=((*i).second);
1120     MG_VOLUME* vol=(MG_VOLUME*)tetra->get_lien_topologie();
1121     int nummatac=vol->get_num_materiau();
1122     if (nummatac!=nummat)
1123     {
1124     nummat=nummatac;
1125     of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
1126     }
1127     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() << ", " ;
1128     ii++;
1129     if (tetra->get_triangle1()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
1130     if (tetra->get_triangle2()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
1131     if (tetra->get_triangle3()->get_lien_topologie()->get_dimension()!=3) of1 << "1, "; else of1 << "0, ";
1132     if (tetra->get_triangle4()->get_lien_topologie()->get_dimension()!=3) of1 << "1;" << std::endl ; else of1 << "0;" << std::endl;
1133     char nom[3];
1134     int nb=tetra->get_triangle1()->get_lien_topologie()->get_nb_ccf();
1135     for (int k=0;k<nb;k++)
1136     {
1137     tetra->get_triangle1()->get_lien_topologie()->get_type_ccf(k,nom);
1138     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 1;" << std::endl;
1139     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 2;" << std::endl;
1140     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 3;" << std::endl;
1141     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 4;" << std::endl;
1142     }
1143     nb=tetra->get_triangle2()->get_lien_topologie()->get_nb_ccf();
1144     for (int k=0;k<nb;k++)
1145     {
1146     tetra->get_triangle2()->get_lien_topologie()->get_type_ccf(k,nom);
1147     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 1;" << std::endl;
1148     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 2;" << std::endl;
1149     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 3;" << std::endl;
1150     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 4;" << std::endl;
1151     }
1152     nb=tetra->get_triangle3()->get_lien_topologie()->get_nb_ccf();
1153     for (int k=0;k<nb;k++)
1154     {
1155     tetra->get_triangle3()->get_lien_topologie()->get_type_ccf(k,nom);
1156     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 1;" << std::endl;
1157     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 2;" << std::endl;
1158     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 3;" << std::endl;
1159     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 4;" << std::endl;
1160     }
1161     nb=tetra->get_triangle4()->get_lien_topologie()->get_nb_ccf();
1162     for (int k=0;k<nb;k++)
1163     {
1164     tetra->get_triangle4()->get_lien_topologie()->get_type_ccf(k,nom);
1165     if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 1;" << std::endl;
1166     if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 2;" << std::endl;
1167     if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 3;" << std::endl;
1168     if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tetra->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 4;" << std::endl;
1169     }
1170     }
1171     }
1172    
1173     */
1174    
1175    
1176    
1177     void MG_MAILLAGE::exporter_giref(std::string& nomfic)
1178     {
1179     char chaine[500];
1180     sprintf(chaine,"%s.mail",nomfic.c_str());
1181     FILE *in=fopen(chaine,"wt");
1182     int lieu=0;
1183    
1184     fprintf(in,"8 Maillage\n");
1185     fprintf(in,"11 Version 1.0\n");
1186     fprintf(in,"%lu\n\n",get_id());
1187     int nb=get_nb_mg_noeud();
1188     fprintf(in,"%d\n",nb);
1189    
1190     LISTE_MG_NOEUD::iterator ind;
1191     MG_NOEUD* noeud=get_premier_noeud(ind);
1192     int i=0;
1193     while (noeud)
1194     {
1195     noeud->change_nouveau_numero(i++);
1196     MG_ELEMENT_TOPOLOGIQUE* topo=noeud->get_lien_topologie();
1197     if (topo->get_nouveau_numero()==-1)
1198     {
1199     topo->change_nouveau_numero(lieu);
1200     lieu++;
1201     }
1202     fprintf(in,"%.16e %.16e %.16e 0 %d \n",noeud->get_x(),noeud->get_y(),noeud->get_z(),topo->get_nouveau_numero());
1203     noeud=get_suivant_noeud(ind);
1204     }
1205    
1206    
1207     nb=get_nb_mg_segment();
1208     fprintf(in,"\n%d\n",nb);
1209    
1210     LISTE_MG_SEGMENT::iterator iseg;
1211     MG_SEGMENT* seg=get_premier_segment(iseg);
1212     i=0;
1213    
1214     while(seg)
1215     {
1216    
1217     seg->change_nouveau_numero(i);
1218     MG_ELEMENT_TOPOLOGIQUE* topo=seg->get_lien_topologie();
1219     if (topo->get_nouveau_numero()==-1)
1220     {
1221     topo->change_nouveau_numero(lieu);
1222     lieu++;
1223     }
1224     fprintf(in,"%d %d 0 %d \n",seg->get_noeud1()->get_nouveau_numero(),seg->get_noeud2()->get_nouveau_numero(),topo->get_nouveau_numero());
1225     seg = get_suivant_segment(iseg);
1226     }
1227     nb=get_nb_mg_triangle();
1228     fprintf(in,"\n%d\n",nb);
1229     for (int i=0;i<nb;i++)
1230     {
1231     MG_TRIANGLE* tri=get_mg_triangle(i);
1232     tri->change_nouveau_numero(i);
1233     MG_ELEMENT_TOPOLOGIQUE* topo=tri->get_lien_topologie();
1234     if (topo->get_nouveau_numero()==-1)
1235     {
1236     topo->change_nouveau_numero(lieu);
1237     lieu++;
1238     }
1239     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());
1240     }
1241     nb=get_nb_mg_tetra();
1242     fprintf(in,"\n0\n\n0\n\n0\n\n%d\n",nb);
1243     for (int i=0;i<nb;i++)
1244     {
1245     MG_TETRA* tet=get_mg_tetra(i);
1246     tet->change_nouveau_numero(i);
1247     MG_ELEMENT_TOPOLOGIQUE* topo=tet->get_lien_topologie();
1248     if (topo->get_nouveau_numero()==-1)
1249     {
1250     topo->change_nouveau_numero(lieu);
1251     lieu++;
1252     }
1253     TPL_MAP_ENTITE<MG_SEGMENT*> lst_segment;
1254     lst_segment.ajouter(tet->get_triangle1()->get_segment1());
1255     lst_segment.ajouter(tet->get_triangle1()->get_segment2());
1256     lst_segment.ajouter(tet->get_triangle1()->get_segment3());
1257     lst_segment.ajouter(tet->get_triangle2()->get_segment1());
1258     lst_segment.ajouter(tet->get_triangle2()->get_segment2());
1259     lst_segment.ajouter(tet->get_triangle2()->get_segment3());
1260     lst_segment.ajouter(tet->get_triangle3()->get_segment1());
1261     lst_segment.ajouter(tet->get_triangle3()->get_segment2());
1262     lst_segment.ajouter(tet->get_triangle3()->get_segment3());
1263     lst_segment.ajouter(tet->get_triangle4()->get_segment1());
1264     lst_segment.ajouter(tet->get_triangle4()->get_segment2());
1265     lst_segment.ajouter(tet->get_triangle4()->get_segment3());
1266     int tab[6];
1267     for (int j=0;j<6;j++)
1268     {
1269     MG_SEGMENT* seg=lst_segment.get(j);
1270     if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud2())) tab[0]=j;
1271     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud1())) tab[0]=j;
1272     else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud3())) tab[1]=j;
1273     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud1())) tab[1]=j;
1274     else if ((seg->get_noeud1()==tet->get_noeud1()) && (seg->get_noeud2()==tet->get_noeud4())) tab[2]=j;
1275     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud1())) tab[2]=j;
1276     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud3())) tab[3]=j;
1277     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud2())) tab[3]=j;
1278     else if ((seg->get_noeud1()==tet->get_noeud2()) && (seg->get_noeud2()==tet->get_noeud4())) tab[4]=j;
1279     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud2())) tab[4]=j;
1280     else if ((seg->get_noeud1()==tet->get_noeud3()) && (seg->get_noeud2()==tet->get_noeud4())) tab[5]=j;
1281     else if ((seg->get_noeud1()==tet->get_noeud4()) && (seg->get_noeud2()==tet->get_noeud3())) tab[5]=j;
1282     }
1283     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());
1284     }
1285    
1286     fprintf(in,"\n0\n\n0\n\n8 Maillage\n",nb);
1287     fclose(in);
1288     }
1289    
1290    
1291     std::ostream& operator << (std::ostream& o,MG_MAILLAGE& maillage)
1292     {
1293     maillage.enregistrer(o);
1294     return o;
1295     }
1296    
1297    
1298    
1299    
1300