46 case CAS_FRONT_3: solution=traite_front_cas_front_3(__mcFace,ftp,ft,fts);
48 case CAS_FRONT_3X: solution=traite_front_cas_front_3x(__mcFace,ftp,ft,fts);
50 case CAS_FRONT_4: solution=traite_front_cas_front_4(__mcFace,ftp,ft,fts);
52 case CAS_FERME_CAVITE: solution=traite_front_cas_ferme_cavite(__mcFace,ftp,ft,fts);
54 case CAS_FERME_CAVITE_P: solution=traite_front_cas_ferme_cavite_p(__mcFace,ftp,ft,fts);
56 case CAS_FERME_CAVITE_S: solution=traite_front_cas_ferme_cavite_s(__mcFace,ftp,ft,fts);
58 case CAS_GENERAL: solution=traite_front_cas_general(__mcFace,ftp,ft,fts);
73 for (
int i=0;i<list_triangles->
get_nb();i++)
81 if (!triangle_est_dans_bon_sens(__mcFace,no1,no2,no3))
84 && !triangle_est_dans_bon_sens_front(ft, no3))
90 std::ostringstream out;
137 int solution = traite_front_cas_front_3(__mcFace,ft3_ftp,ft3_ft,ft3_fts);
173 if (noeud_est_dans_triangle(nos,nop,no1,no2))
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);
181 else if (noeud_est_dans_triangle(no2,nop,no1,nos))
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);
189 else if (noeud_est_dans_triangle(no1,nop,no2,nos))
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);
197 else if (noeud_est_dans_triangle(nop,no1,no2,nos))
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);
209 double crit11,crit12,crit21,crit22;
214 double crit1=std::min(crit11,crit12);
215 double crit2=std::min(crit21,crit22);
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;
225 crit1 *= critDiedralAngle1;
226 crit2 *= critDiedralAngle2;
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);
236 else if (crit2 >= crit1 )
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);
249 std::ostringstream out;
256 supprimer_front(ftp);
258 supprimer_front(fts);
274 double crit1=std::min(crit11,crit12);
275 double crit2=std::min(crit21,crit22);
280 int ierr=insere_segment(__mcFace,&mgsegment,nop,nos,
TOUS_SEGMENT);
286 ierr=insere_segment(__mcFace,&mgsegmentref,nop,no2,
TOUS_FRONT);
291 ierr=insere_segment(__mcFace,&mgsegmentref,no1,nos,
TOUS_FRONT);
297 ierr=insere_segment(__mcFace,&mgsegmentref,no1,nos,
TOUS_FRONT);
302 ierr=insere_segment(__mcFace,&mgsegmentref,nop,no2,
TOUS_FRONT);
307 supprime_segment(mgsegment);
312 MG_FRONT_2D *nv_ft=ajouter_front(front_courant,nop,nos,mgsegment);
318 supprimer_front(ftp);
319 supprimer_front(fts);
322 triangle1 = insere_triangle(__mcFace,no1,nop,no2);
323 triangle2 = insere_triangle(__mcFace,nop,nos,no2);
327 triangle1 = insere_triangle(__mcFace,no1,nos,no2);
328 triangle2 = insere_triangle(__mcFace,nop,nos,no1);
334 std::ostringstream out;
356 if ( noeud_est_dans_triangle(testNode,no1,nop,no2) )
359 int ierr=insere_segment(__mcFace,&mgsegment,nop,no2,
TOUS_SEGMENT, 1E-2);
362 MG_FRONT_2D *nv_ft=ajouter_front(front_courant,nop,no2,mgsegment);
367 triangle = insere_triangle(__mcFace,no1,nop,no2);
369 supprimer_front(ftp);
373 std::ostringstream out;
395 if ( noeud_est_dans_triangle(testNode,no1,nos,no2) )
399 int ierr=insere_segment(__mcFace,&mgsegment,no1,nos,
TOUS_SEGMENT, 1E-2);
402 MG_FRONT_2D *nv_ft=ajouter_front(front_courant,no1,nos,mgsegment);
407 triangle = insere_triangle(__mcFace,no1,nos,no2);
409 supprimer_front(fts);
412 std::ostringstream out;
431 int solution=genere_noeud(__mcFace,ft,&front_rencontre,&noeud_solution);
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);}
442 int ierr=insere_segment(__mcFace,&mgsegment,no1,noeud_solution,
TOUS_FRONT);
444 if (ierr) ierr2=insere_segment(__mcFace,&mgsegment2,noeud_solution,no2,
TOUS_FRONT);
447 mg_maillage->supprimer_mg_noeudid(noeud_solution->
get_id());
452 supprime_segment(mgsegment);
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);
465 triangle = insere_triangle(__mcFace,no1,noeud_solution,no2);
471 std::ostringstream out;
484 int ierr=insere_segment(__mcFace,&mgsegment,no1,noeud_solution,
TOUS_SEGMENT);
486 if (ierr) ierr2=insere_segment(__mcFace,&mgsegment2,noeud_solution,no2,
TOUS_SEGMENT);
490 supprime_segment(mgsegment);
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);
505 triangle = insere_triangle(__mcFace,no1,noeud_solution,no2);
511 std::ostringstream out;
521 void MAILLEUR2D::verifie_front()
523 for (FRONT::iterator itF1 = front_courant.begin();
524 itF1 != front_courant.end();
531 for (FRONT::iterator itF1 = front_attente.begin();
532 itF1 != front_attente.end();
539 for (FRONT::iterator itF1 = front_courant.begin();
540 itF1 != front_courant.end();
551 for (FRONT::iterator itF1 = front_attente.begin();
552 itF1 != front_attente.end();
563 for (FRONT::iterator itF1 = front_courant.begin();
564 itF1 != front_courant.end();
572 for (FRONT::iterator itF1 = front_attente.begin();
573 itF1 != front_attente.end();