ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_maillage.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/geometrie/geometrie/src/mg_maillage.cpp
File size: 55075 byte(s)
Log Message:

File Contents

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