MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
CAD4FE_mailleur2d_traite_Front.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// CAD4FE_mailleur2d_traite_Front.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include <vector>
24 using namespace std;
25 #include "gestionversion.h"
26 #include "CAD4FE_mailleur2d.h"
27 #include "ot_mathematique.h"
29 #include "CAD4FE_MCTriangle.h"
32 #include <fstream>
33 #include "tpl_set.h"
36 #include "CAD4FE_Geometric_Tools.h"
37 
38 using namespace CAD4FE;
39 
40 int MAILLEUR2D::traite_front(int type_front,MCFace *__mcFace,MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts)
41 {
42 int solution;
43 
44 switch (type_front)
45  {
46  case CAS_FRONT_3: solution=traite_front_cas_front_3(__mcFace,ftp,ft,fts);
47  break;
48  case CAS_FRONT_3X: solution=traite_front_cas_front_3x(__mcFace,ftp,ft,fts);
49  break;
50  case CAS_FRONT_4: solution=traite_front_cas_front_4(__mcFace,ftp,ft,fts);
51  break;
52  case CAS_FERME_CAVITE: solution=traite_front_cas_ferme_cavite(__mcFace,ftp,ft,fts);
53  break;
54  case CAS_FERME_CAVITE_P: solution=traite_front_cas_ferme_cavite_p(__mcFace,ftp,ft,fts);
55  break;
56  case CAS_FERME_CAVITE_S: solution=traite_front_cas_ferme_cavite_s(__mcFace,ftp,ft,fts);
57  break;
58  case CAS_GENERAL: solution=traite_front_cas_general(__mcFace,ftp,ft,fts);
59  break;
60  }
61 
62 return solution;
63 }
64 
66 {
67 MCTriangle * triangle = 0;
68 MCNode* no1=ft->get_noeud1();
69 MCNode* no2=fts->get_noeud2();
70 MCNode* no3=ft->get_noeud2();
71 
73 for (int i=0;i<list_triangles->get_nb();i++)
74 {
75  MG_TRIANGLE * triangle = list_triangles->get(i);
76  if ( (triangle->get_noeud1()==no2||triangle->get_noeud2()==no2||triangle->get_noeud3()==no2)
77  &&(triangle->get_noeud1()==no3||triangle->get_noeud2()==no3||triangle->get_noeud3()==no3))
78  return PASTROUVE;
79 }
80 
81 if (!triangle_est_dans_bon_sens(__mcFace,no1,no2,no3))
82  return PASTROUVE;
83 if (ft->get_segment()->get_lien_topologie()->get_dimension() == 1
84  && !triangle_est_dans_bon_sens_front(ft, no3))
85  return PASTROUVE;
86 
87 triangle = insere_triangle(__mcFace,ft->get_noeud1(),fts->get_noeud2(),ft->get_noeud2());
88 if (debug) // Begin Log
89 {
90  std::ostringstream out;
91  out << "traite_front_cas_front_3: Triangle (" << triangle->get_id() <<") [ " << ft->get_noeud1()->get_id() << " - " << fts->get_noeud2()->get_id() << " - " << ft->get_noeud2()->get_id() << " ] ";
92  WriteLog(out.str());
93 } // End log
94 
95 supprimer_front(ftp);
96 supprimer_front(ft);
97 supprimer_front(fts);
98 
99 return TROUVE;
100 }
101 
102 int MAILLEUR2D::traite_front_cas_front_3x(MCFace *__mcFace, MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts)
103 {
104  MG_FRONT_2D *ft3_ftp=NULL;
105  MG_FRONT_2D *ft3_ft=NULL;
106  MG_FRONT_2D *ft3_fts=NULL;
107  MG_FRONT_2D * ftpp=ftp->get_front_precedent();
108  MG_FRONT_2D * ftss=fts->get_front_suivant();
109  MCNode *ftppn1=ftp->get_front_precedent()->get_noeud1();
110  MCNode *ftssn2=fts->get_front_suivant()->get_noeud2();
111  MCNode *ftpn1=ftp->get_noeud1();
112  MCNode *ftsn2=fts->get_noeud2();
113  MCNode *no1=ft->get_noeud1();
114  MCNode *no2=ft->get_noeud2();
115 
116  if (ftppn1==no2)
117  {
118  ft3_ftp=ftpp;
119  ft3_ft=ftp;
120  ft3_fts=ft;
121  }
122  if (ftssn2==no1)
123  {
124  ft3_ftp=ft;
125  ft3_ft=fts;
126  ft3_fts=ftss;
127  }
128  if (ftpn1==ftsn2)
129  {
130  ft3_ftp=ftp;
131  ft3_ft=ft;
132  ft3_fts=fts;
133  }
134 
135  MG_FRONT_2D * ft3_ftpp = ft3_ftp->get_front_precedent();
136  MG_FRONT_2D * ft3_ftss = ft3_fts->get_front_suivant();
137  int solution = traite_front_cas_front_3(__mcFace,ft3_ftp,ft3_ft,ft3_fts);
138  {
139  ft3_ftpp->changer_front_suivant(ft3_ftss);
140  ft3_ftss->changer_front_precedent(ft3_ftpp);
141  }
142  return solution;
143 }
144 
145 int MAILLEUR2D::identifie_front_cas_front_3x(MG_FRONT_2D* ftp,MG_FRONT_2D* ft,MG_FRONT_2D* fts)
146 {
147  MCNode *ftppn1=ftp->get_front_precedent()->get_noeud1();
148  MCNode *ftssn2=fts->get_front_suivant()->get_noeud2();
149  MCNode *ftpn1=ftp->get_noeud1();
150  MCNode *ftsn2=fts->get_noeud2();
151  MCNode *no1=ft->get_noeud1();
152  MCNode *no2=ft->get_noeud2();
153  if (ftppn1==no2)
154  return 1;
155  if (ftssn2==no1)
156  return 1;
157  if (ftpn1==ftsn2)
158  return 1;
159  return 0;
160 }
161 
162 
163 
165 {
166 MCNode* nop=ftp->get_noeud1();
167 MCNode* no1=ft->get_noeud1();
168 MCNode* no2=ft->get_noeud2();
169 MCNode* nos=fts->get_noeud2();
170 MCSegment* mgsegment;
171 MCTriangle * triangle1 = 0;
172 MCTriangle * triangle2 = 0;
173 if (noeud_est_dans_triangle(nos,nop,no1,no2))
174  {
175  if(!triangle_est_dans_bon_sens(__mcFace,no1,nos,no2)) return PASTROUVE;
176  if(!triangle_est_dans_bon_sens(__mcFace,nop,nos,no1)) return PASTROUVE;
177  insere_segment(__mcFace,&mgsegment,no1,nos,RIEN);
178  insere_triangle(__mcFace,no1,nos,no2);
179  insere_triangle(__mcFace,nop,nos,no1);
180  }
181 else if (noeud_est_dans_triangle(no2,nop,no1,nos))
182  {
183  if(!triangle_est_dans_bon_sens(__mcFace,no1,nop,no2)) return PASTROUVE;
184  if(!triangle_est_dans_bon_sens(__mcFace,nop,nos,no2)) return PASTROUVE;
185  insere_segment(__mcFace,&mgsegment,no2,nop,RIEN);
186  insere_triangle(__mcFace,no1,nop,no2);
187  insere_triangle(__mcFace,nop,nos,no2);
188  }
189 else if (noeud_est_dans_triangle(no1,nop,no2,nos))
190  {
191  if(!triangle_est_dans_bon_sens(__mcFace,no1,nos,no2)) return PASTROUVE;
192  if(!triangle_est_dans_bon_sens(__mcFace,nop,nos,no1)) return PASTROUVE;
193  insere_segment(__mcFace,&mgsegment,no1,nos,RIEN);
194  insere_triangle(__mcFace,no1,nos,no2);
195  insere_triangle(__mcFace,nop,nos,no1);
196  }
197 else if (noeud_est_dans_triangle(nop,no1,no2,nos))
198  {
199  if(!triangle_est_dans_bon_sens(__mcFace,no1,nop,no2)) return PASTROUVE;
200  if(!triangle_est_dans_bon_sens(__mcFace,nop,nos,no2)) return PASTROUVE;
201  insere_segment(__mcFace,&mgsegment,no2,nop,RIEN);
202  insere_triangle(__mcFace,no1,nop,no2);
203  insere_triangle(__mcFace,nop,nos,no2);
204  }
205 else
206  {
207  // pour trouver la diagonale optimale : voir le livre vert
208  // de Frey&George page 663 (ISBN 2-7462-0024-2)
209  double crit11,crit12,crit21,crit22;
210  crit11 = OPERATEUR::qualite_triangle(no1->get_coord(),no2->get_coord(),nop->get_coord());
211  crit12 = OPERATEUR::qualite_triangle(nop->get_coord(),no2->get_coord(),nos->get_coord());
212  crit21 = OPERATEUR::qualite_triangle(no1->get_coord(),no2->get_coord(),nos->get_coord());
213  crit22 = OPERATEUR::qualite_triangle(nop->get_coord(),no1->get_coord(),nos->get_coord());
214  double crit1=std::min(crit11,crit12);
215  double crit2=std::min(crit21,crit22);
216 
217  double maxDiedralAngle = 45*M_PI/180;
218  MG_NOEUD * triangles1[2][3]={{no1,nop,no2},{nop,nos,no2}};
219  MG_NOEUD * triangles2[2][3]={{no1,nos,no2},{nop,nos,no1}};
220  double diedralAngle1 = GeometricTools::ComputeDiedralAngle(triangles1);
221  double diedralAngle2 = GeometricTools::ComputeDiedralAngle(triangles2);
222  double critDiedralAngle1 = (diedralAngle1 < maxDiedralAngle) ? 1-diedralAngle1/maxDiedralAngle : -1;
223  double critDiedralAngle2 = (diedralAngle2 < maxDiedralAngle) ? 1-diedralAngle2/maxDiedralAngle : -1;
224 
225  crit1 *= critDiedralAngle1;
226  crit2 *= critDiedralAngle2;
227 
228  if (crit1 >= crit2 )
229  {
230  if(!triangle_est_dans_bon_sens(__mcFace,no1,nop,no2)) return PASTROUVE;
231  if(!triangle_est_dans_bon_sens(__mcFace,nop,nos,no2)) return PASTROUVE;
232  insere_segment(__mcFace,&mgsegment,nop,no2,RIEN);
233  triangle1 = insere_triangle(__mcFace,no1,nop,no2);
234  triangle2 = insere_triangle(__mcFace,nop,nos,no2);
235  }
236  else if (crit2 >= crit1 )
237  {
238  if(!triangle_est_dans_bon_sens(__mcFace,no1,nos,no2)) return PASTROUVE;
239  if(!triangle_est_dans_bon_sens(__mcFace,nop,nos,no1)) return PASTROUVE;
240  insere_segment(__mcFace,&mgsegment,no1,nos,RIEN);
241  triangle1 = insere_triangle(__mcFace,no1,nos,no2);
242  triangle2 = insere_triangle(__mcFace,nop,nos,no1);
243  }
244  }
245 
246 
247  if (debug) // Begin Log
248  {
249  std::ostringstream out;
250  if (triangle1) out << "traite_front_cas_front_4: Triangle1 (" << triangle1->get_id() <<")[ " << triangle1->get_noeud1()->get_id() << " - " << triangle1->get_noeud2()->get_id() << " - " << triangle1->get_noeud3()->get_id() << " ] ";
251  if (triangle2) out << "traite_front_cas_front_4: Triangle2 (" << triangle2->get_id() <<")[ " << triangle2->get_noeud1()->get_id() << " - " << triangle2->get_noeud2()->get_id() << " - " << triangle2->get_noeud3()->get_id() << " ] ";
252  WriteLog(out.str());
253  } // End log
254 
255 supprimer_front(fts->get_front_suivant());
256 supprimer_front(ftp);
257 supprimer_front(ft);
258 supprimer_front(fts);
259 return TROUVE;
260 }
261 
263 {
264 MCNode* nop=ftp->get_noeud1();
265 MCNode* no1=ft->get_noeud1();
266 MCNode* no2=ft->get_noeud2();
267 MCNode* nos=fts->get_noeud2();
268 MCTriangle * triangle1 = NULL;
269 MCTriangle * triangle2 = NULL;
270 double crit11=OPERATEUR::qualite_triangle(no1->get_coord(),no2->get_coord(),nop->get_coord());
271 double crit12=OPERATEUR::qualite_triangle(nop->get_coord(),no2->get_coord(),nos->get_coord());
272 double crit21=OPERATEUR::qualite_triangle(no1->get_coord(),no2->get_coord(),nos->get_coord());
273 double crit22=OPERATEUR::qualite_triangle(nop->get_coord(),no1->get_coord(),nos->get_coord());
274 double crit1=std::min(crit11,crit12);
275 double crit2=std::min(crit21,crit22);
276 MCSegment* mgsegment;
277 MCSegment* mgsegmentref;
278 if (nop==nos)
279  return(PASTROUVE);
280 int ierr=insere_segment(__mcFace,&mgsegment,nop,nos,TOUS_SEGMENT);
281 int solu;
282 if (ierr==1)
283  {
284  if (crit1>crit2)
285  {
286  ierr=insere_segment(__mcFace,&mgsegmentref,nop,no2,TOUS_FRONT);
287  solu=1;
288  }
289  else
290  {
291  ierr=insere_segment(__mcFace,&mgsegmentref,no1,nos,TOUS_FRONT);
292  solu=2;
293  }
294  if (ierr==0)
295  if (crit1>crit2)
296  {
297  ierr=insere_segment(__mcFace,&mgsegmentref,no1,nos,TOUS_FRONT);
298  solu=2;
299  }
300  else
301  {
302  ierr=insere_segment(__mcFace,&mgsegmentref,nop,no2,TOUS_FRONT);
303  solu=1;
304  }
305  if (ierr==0)
306  {
307  supprime_segment(mgsegment);
308  return(PASTROUVE);
309  }
310  else
311  {
312  MG_FRONT_2D *nv_ft=ajouter_front(front_courant,nop,nos,mgsegment);
317  supprimer_front(ft);
318  supprimer_front(ftp);
319  supprimer_front(fts);
320  if (solu==1)
321  {
322  triangle1 = insere_triangle(__mcFace,no1,nop,no2);
323  triangle2 = insere_triangle(__mcFace,nop,nos,no2);
324  }
325  else
326  {
327  triangle1 = insere_triangle(__mcFace,no1,nos,no2);
328  triangle2 = insere_triangle(__mcFace,nop,nos,no1);
329  }
330  }
331 
332  if (debug) // Begin Log
333  {
334  std::ostringstream out;
335  if (triangle1) out << "traite_front_cas_ferme_cavite: Triangle1 (" << triangle1->get_id() <<")[ " << triangle1->get_noeud1()->get_id() << " - " << triangle1->get_noeud2()->get_id() << " - " << triangle1->get_noeud3()->get_id() << " ] ";
336  if (triangle2) out << "traite_front_cas_ferme_cavite: Triangle2 (" << triangle2->get_id() <<")[ " << triangle2->get_noeud1()->get_id() << " - " << triangle2->get_noeud2()->get_id() << " - " << triangle2->get_noeud3()->get_id() << " ] ";
337  WriteLog(out.str());
338  } // End log
339  }
340 else return PASTROUVE;
341 return TROUVE;
342 }
343 
345 {
346 MCNode* nop=ftp->get_noeud1();
347 MCNode* no1=ft->get_noeud1();
348 MCNode* no2=ft->get_noeud2();
349 MCSegment* mgsegment;
350 MCTriangle * triangle = NULL;
351 
352 MG_FRONT_2D * ftpp=ftp->get_front_precedent();
353 MG_FRONT_2D * ftppp=ftpp->get_front_precedent();
354 MCNode * testNode=ftpp->get_noeud1();
355 if ( ftpp->get_segment()==ftppp->get_segment() )
356 if ( noeud_est_dans_triangle(testNode,no1,nop,no2) )
357  return PASTROUVE;
358 
359 int ierr=insere_segment(__mcFace,&mgsegment,nop,no2,TOUS_SEGMENT, 1E-2);
360 if (ierr==1)
361  {
362  MG_FRONT_2D *nv_ft=ajouter_front(front_courant,nop,no2,mgsegment);
364  nv_ft->changer_front_suivant(fts);
366  fts->changer_front_precedent(nv_ft);
367  triangle = insere_triangle(__mcFace,no1,nop,no2);
368  supprimer_front(ft);
369  supprimer_front(ftp);
370 
371  if (debug) // Begin Log
372  {
373  std::ostringstream out;
374  out << "traite_front_cas_ferme_cavite_p: Triangle (" << triangle->get_id() <<")(" << triangle->get_id() <<")[ " << triangle->get_noeud1()->get_id() << " - " << triangle->get_noeud2()->get_id() << " - " << triangle->get_noeud3()->get_id() << " ] ";
375  WriteLog(out.str());
376  } // End log
377 
378  return TROUVE;
379  }
380 return PASTROUVE;
381 }
382 
384 {
385 MCNode* no1=ft->get_noeud1();
386 MCNode* no2=ft->get_noeud2();
387 MCNode* nos=fts->get_noeud2();
388 MCSegment* mgsegment;
389 MCTriangle * triangle = NULL;
390 
391 MG_FRONT_2D * ftss=fts->get_front_suivant();
392 MG_FRONT_2D * ftsss=ftss->get_front_suivant();
393 MCNode * testNode=ftsss->get_noeud1();
394 if ( ftss->get_segment()==ftsss->get_segment() )
395 if ( noeud_est_dans_triangle(testNode,no1,nos,no2) )
396  return PASTROUVE;
397 
398 
399 int ierr=insere_segment(__mcFace,&mgsegment,no1,nos,TOUS_SEGMENT, 1E-2);
400 if (ierr==1)
401  {
402  MG_FRONT_2D *nv_ft=ajouter_front(front_courant,no1,nos,mgsegment);
403  nv_ft->changer_front_precedent(ftp);
405  ftp->changer_front_suivant(nv_ft);
407  triangle = insere_triangle(__mcFace,no1,nos,no2);
408  supprimer_front(ft);
409  supprimer_front(fts);
410  if (debug) // Begin Log
411  {
412  std::ostringstream out;
413  out << "traite_front_cas_ferme_cavite_s: Triangle (" << triangle->get_id() <<")[ " << triangle->get_noeud1()->get_id() << " - " << triangle->get_noeud2()->get_id() << " - " << triangle->get_noeud3()->get_id() << " ] ";
414  WriteLog(out.str());
415  } // End log
416  return TROUVE;
417  }
418 return PASTROUVE;
419 }
420 
422 {
423 MCNode* nop=ftp->get_noeud1();
424 MCNode* no1=ft->get_noeud1();
425 MCNode* no2=ft->get_noeud2();
426 MCNode* nos=fts->get_noeud2();
427 MG_FRONT_2D* front_rencontre;
428 MCNode* noeud_solution;
429 MCTriangle * triangle = NULL;
430 
431 int solution=genere_noeud(__mcFace,ft,&front_rencontre,&noeud_solution);
432 if (solution==FRONT_RENCONTRE)
433  {
434  if (noeud_solution==nos) {solution=traite_front_cas_ferme_cavite_s(__mcFace,ftp,ft,fts);}
435  if (noeud_solution==nop) {solution=traite_front_cas_ferme_cavite_p(__mcFace,ftp,ft,fts);}
436  if (solution == PASTROUVE && identifie_front_cas_front_3x(ftp,ft,fts) ) {solution=traite_front_cas_front_3x(__mcFace,ftp,ft,fts);}
437  }
438 if (solution==NOEUD_CREE)
439  {
440  MCSegment* mgsegment;
441  MCSegment* mgsegment2;
442  int ierr=insere_segment(__mcFace,&mgsegment,no1,noeud_solution,TOUS_FRONT);
443  int ierr2;
444  if (ierr) ierr2=insere_segment(__mcFace,&mgsegment2,noeud_solution,no2,TOUS_FRONT);
445  if ( ierr==0 )
446  {
447  mg_maillage->supprimer_mg_noeudid(noeud_solution->get_id());
448  solution=PASTROUVE;
449  }
450  else if ( ierr2==0 )
451  {
452  supprime_segment(mgsegment);
453  solution=PASTROUVE;
454  }
455  else
456  {
457  MG_FRONT_2D *nv_ft=ajouter_front(front_courant,no1,noeud_solution,mgsegment);
458  MG_FRONT_2D *nv_ft2=ajouter_front(front_courant,noeud_solution,no2,mgsegment2);
459  ftp->changer_front_suivant(nv_ft);
460  nv_ft->changer_front_precedent(ftp);
461  nv_ft->changer_front_suivant(nv_ft2);
462  nv_ft2->changer_front_precedent(nv_ft);
463  nv_ft2->changer_front_suivant(fts);
464  fts->changer_front_precedent(nv_ft2);
465  triangle = insere_triangle(__mcFace,no1,noeud_solution,no2);
466  supprimer_front(ft);
467  solution=TROUVE;
468 
469  if (debug) // Begin Log
470  {
471  std::ostringstream out;
472  out << "traite_front_cas_general: NOEUD_CREE Triangle (" << triangle->get_id() <<")[ " << triangle->get_noeud1()->get_id() << " - " << triangle->get_noeud2()->get_id() << " - " << triangle->get_noeud3()->get_id() << " ] ";
473  WriteLog(out.str());
474  } // End log
475 
476  return TROUVE;
477 
478  }
479  }
480 if (solution==FRONT_RENCONTRE)
481  {
482  MCSegment* mgsegment;
483  MCSegment* mgsegment2;
484  int ierr=insere_segment(__mcFace,&mgsegment,no1,noeud_solution,TOUS_SEGMENT);
485  int ierr2;
486  if (ierr) ierr2=insere_segment(__mcFace,&mgsegment2,noeud_solution,no2,TOUS_SEGMENT);
487  if (ierr==0) solution=PASTROUVE;
488  else if (ierr2==0)
489  {
490  supprime_segment(mgsegment);
491  solution=PASTROUVE;
492  }
493  else
494  {
495  MG_FRONT_2D *nv_ft=ajouter_front(front_courant,no1,noeud_solution,mgsegment);
496  MG_FRONT_2D *nv_ft2=ajouter_front(front_courant,noeud_solution,no2,mgsegment2);
497  ftp->changer_front_suivant(nv_ft);
498  nv_ft->changer_front_precedent(ftp);
499  nv_ft->changer_front_suivant(front_rencontre);
500  nv_ft2->changer_front_precedent(front_rencontre->get_front_precedent());
501  nv_ft2->changer_front_suivant(fts);
502  fts->changer_front_precedent(nv_ft2);
503  front_rencontre->get_front_precedent()->changer_front_suivant(nv_ft2);
504  front_rencontre->changer_front_precedent(nv_ft);
505  triangle = insere_triangle(__mcFace,no1,noeud_solution,no2);
506  supprimer_front(ft);
507  solution=TROUVE;
508 
509  if (debug) // Begin Log
510  {
511  std::ostringstream out;
512  out << "traite_front_cas_general: FRONT_RENCONTRE Triangle (" << triangle->get_id() <<")[ " << triangle->get_noeud1()->get_id() << " - " << triangle->get_noeud2()->get_id() << " - " << triangle->get_noeud3()->get_id() << " ] ";
513  WriteLog(out.str());
514  } // End log
515  }
516  }
517 if (solution==ERREUR) solution=PASTROUVE;
518 return solution;
519 }
520 
521 void MAILLEUR2D::verifie_front()
522 {
523  for (FRONT::iterator itF1 = front_courant.begin();
524  itF1 != front_courant.end();
525  itF1++)
526  {
527  MG_FRONT_2D *ft = itF1->second;
528  ft->nb_reference_suivant = 0;
529  ft->nb_reference_precedent = 0;
530  }
531  for (FRONT::iterator itF1 = front_attente.begin();
532  itF1 != front_attente.end();
533  itF1++)
534  {
535  MG_FRONT_2D *ft = itF1->second;
536  ft->nb_reference_suivant = 0;
537  ft->nb_reference_precedent = 0;
538  }
539  for (FRONT::iterator itF1 = front_courant.begin();
540  itF1 != front_courant.end();
541  itF1++)
542  {
543  MG_FRONT_2D *ft = itF1->second;
544  MG_FRONT_2D *fts = ft->get_front_suivant();
545  MG_FRONT_2D *ftp = ft->get_front_precedent();
546  fts->reference_suivant[fts->nb_reference_suivant++]=ft;
548  if (fts->nb_reference_suivant > 1) printf("le front id %lu est r�f�renc� %d fois comme front suivant !\n", fts->get_id(), fts->nb_reference_suivant);
549  if (ftp->nb_reference_precedent > 1)printf("le front id %lu est r�f�renc� %d fois comme front precedent !\n", ftp->get_id(), ftp->nb_reference_precedent);
550  }
551  for (FRONT::iterator itF1 = front_attente.begin();
552  itF1 != front_attente.end();
553  itF1++)
554  {
555  MG_FRONT_2D *ft = itF1->second;
556  MG_FRONT_2D *fts = ft->get_front_suivant();
557  MG_FRONT_2D *ftp = ft->get_front_precedent();
558  fts->reference_suivant[fts->nb_reference_suivant++]=ft;
560  if (fts->nb_reference_suivant > 1) printf("le front id %lu est r�f�renc� %d fois comme front suivant !\n", fts->get_id(), fts->nb_reference_suivant);
561  if (ftp->nb_reference_precedent > 1)printf("le front id %lu est r�f�renc� %d fois comme front precedent !\n", ftp->get_id(), ftp->nb_reference_precedent);
562  }
563  for (FRONT::iterator itF1 = front_courant.begin();
564  itF1 != front_courant.end();
565  itF1++)
566  {
567  MG_FRONT_2D *ft = itF1->second;
568  if (ft->nb_reference_suivant == 0) printf("le front id %lu est r�f�renc� %d fois comme front suivant !\n", ft->get_id(), ft->nb_reference_suivant);
569 
570  if (ft->nb_reference_precedent == 0) printf("le front id %lu est r�f�renc� %d fois comme front precedent !\n", ft->get_id(), ft->nb_reference_precedent);
571  }
572  for (FRONT::iterator itF1 = front_attente.begin();
573  itF1 != front_attente.end();
574  itF1++)
575  {
576  MG_FRONT_2D *ft = itF1->second;
577  if (ft->nb_reference_suivant == 0) printf("le front id %lu est r�f�renc� %d fois comme front suivant !\n", ft->get_id(), ft->nb_reference_suivant);
578 
579  if (ft->nb_reference_precedent == 0) printf("le front id %lu est r�f�renc� %d fois comme front precedent !\n", ft->get_id(), ft->nb_reference_precedent);
580  }
581 }
CAD4FE::MG_FRONT_2D::get_front_precedent
MG_FRONT_2D * get_front_precedent(void)
Definition: CAD4FE_mg_front_2D.cpp:60
MAILLEUR2D::traite_front
int traite_front(int type_front, MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:31
PASTROUVE
#define PASTROUVE
Definition: CAD4FE_mailleur2d.h:61
CAD4FE_InventorText_MG_MAILLAGE.h
gestionversion.h
CAD4FE::MG_FRONT_2D::get_noeud1
MCNode * get_noeud1(void)
Definition: CAD4FE_mg_front_2D.cpp:45
FRONT_RENCONTRE
#define FRONT_RENCONTRE
Definition: CAD4FE_mailleur2d.h:69
CAD4FE::MG_FRONT_2D::changer_front_precedent
void changer_front_precedent(MG_FRONT_2D *front)
Definition: CAD4FE_mg_front_2D.cpp:70
CAS_FRONT_3X
#define CAS_FRONT_3X
Definition: CAD4FE_mailleur2d.h:59
MG_NOEUD::get_lien_triangle
TPL_LISTE_ENTITE< class MG_TRIANGLE * > * get_lien_triangle(void)
Definition: mg_noeud.cpp:153
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
CAD4FE::MCSegment
Definition: CAD4FE_MCSegment.h:50
CAD4FE::MG_FRONT_2D::get_front_suivant
MG_FRONT_2D * get_front_suivant(void)
Definition: CAD4FE_mg_front_2D.cpp:65
CAD4FE_mailleur2d.h
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
MG_TRIANGLE
Definition: mg_triangle.h:38
CAD4FE::MG_FRONT_2D::get_noeud2
MCNode * get_noeud2(void)
Definition: CAD4FE_mg_front_2D.cpp:50
TOUS_SEGMENT
#define TOUS_SEGMENT
Definition: CAD4FE_mailleur2d.h:64
CAD4FE_MCTriangle_Quality.h
CAD4FE_MCTriangle.h
MAILLEUR2D::traite_front_cas_front_4
int traite_front_cas_front_4(MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:72
CAD4FE_InventorText_MCSegment.h
MAILLEUR2D::traite_front_cas_ferme_cavite_p
int traite_front_cas_ferme_cavite_p(MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:213
CAD4FE_MCSegment_Middle.h
CAD4FE::MG_FRONT_2D::reference_suivant
MG_FRONT_2D * reference_suivant[10]
Definition: CAD4FE_mg_front_2D.h:50
CAS_FERME_CAVITE_S
#define CAS_FERME_CAVITE_S
Definition: CAD4FE_mailleur2d.h:56
MAILLEUR2D::traite_front_cas_general
int traite_front_cas_general(MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:258
MG_NOEUD
Definition: mg_noeud.h:41
CAS_FERME_CAVITE_P
#define CAS_FERME_CAVITE_P
Definition: CAD4FE_mailleur2d.h:55
CAD4FE::MCTriangle
Definition: CAD4FE_MCTriangle.h:39
MAILLEUR2D::traite_front_cas_ferme_cavite_s
int traite_front_cas_ferme_cavite_s(MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:235
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
CAD4FE::MG_FRONT_2D::nb_reference_precedent
int nb_reference_precedent
Definition: CAD4FE_mg_front_2D.h:51
MAILLEUR2D::traite_front_cas_ferme_cavite
int traite_front_cas_ferme_cavite(MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:143
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
MG_TRIANGLE::get_noeud2
virtual MG_NOEUD * get_noeud2(void)
Definition: mg_triangle.cpp:131
tpl_set.h
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
CAD4FE::MG_FRONT_2D::nb_reference_suivant
int nb_reference_suivant
Definition: CAD4FE_mg_front_2D.h:49
ot_mathematique.h
TROUVE
#define TROUVE
Definition: CAD4FE_mailleur2d.h:62
MAILLEUR2D::traite_front_cas_front_3
int traite_front_cas_front_3(MG_FACE *mgface, MG_FRONT_2D *ftp, MG_FRONT_2D *ft, MG_FRONT_2D *fts)
Definition: mailleur2d_traite_front.cpp:57
MG_TRIANGLE::get_noeud1
virtual MG_NOEUD * get_noeud1(void)
Definition: mg_triangle.cpp:126
CAD4FE::MG_FRONT_2D::changer_front_suivant
void changer_front_suivant(MG_FRONT_2D *front)
Definition: CAD4FE_mg_front_2D.cpp:75
CAD4FE_Geometric_Tools.h
CAD4FE::MG_FRONT_2D::reference_precedent
MG_FRONT_2D * reference_precedent[10]
Definition: CAD4FE_mg_front_2D.h:52
ERREUR
#define ERREUR
Definition: parse.cpp:38
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
TOUS_FRONT
#define TOUS_FRONT
Definition: CAD4FE_mailleur2d.h:65
ot_algorithme_geometrique.h
RIEN
#define RIEN
Definition: CAD4FE_mailleur2d.h:66
OPERATEUR::qualite_triangle
static double qualite_triangle(double *noeud1, double *noeud2, double *noeud3)
Definition: ot_mathematique.cpp:1647
MG_TRIANGLE::get_noeud3
virtual MG_NOEUD * get_noeud3(void)
Definition: mg_triangle.cpp:137
CAS_GENERAL
#define CAS_GENERAL
Definition: CAD4FE_mailleur2d.h:58
CAS_FRONT_3
#define CAS_FRONT_3
Definition: CAD4FE_mailleur2d.h:53
CAD4FE
Definition: CAD4FE_ClosestPoint_Segment_MG_ARETE.h:34
TPL_LISTE_ENTITE< class MG_TRIANGLE * >
CAD4FE::MCNode
Definition: CAD4FE_MCNode.h:47
CAD4FE::MG_FRONT_2D::get_segment
MCSegment * get_segment(void)
Definition: CAD4FE_mg_front_2D.cpp:55
CAD4FE::MG_FRONT_2D::get_id
unsigned long get_id(void)
Definition: CAD4FE_mg_front_2D.cpp:80
CAD4FE::MG_FRONT_2D
Definition: CAD4FE_mg_front_2D.h:35
CAD4FE::MCFace
Definition: CAD4FE_MCFace.h:50
NOEUD_CREE
#define NOEUD_CREE
Definition: CAD4FE_mailleur2d.h:68
CAS_FERME_CAVITE
#define CAS_FERME_CAVITE
Definition: CAD4FE_mailleur2d.h:57
CAS_FRONT_4
#define CAS_FRONT_4
Definition: CAD4FE_mailleur2d.h:54