mirror of https://github.com/CGAL/cgal
Prevent infinite loop in Advancing front surface reconstruction. In some cases K can become really large but doesn't get to infinity and instead gets into a situation where K + epsilon == K and the the while loop never exits. So we check for the case where K stops changing and exits.
This commit is contained in:
parent
e32637fa7c
commit
cf4a809457
|
|
@ -2005,6 +2005,7 @@ namespace CGAL {
|
||||||
{
|
{
|
||||||
// initilisation de la variable globale K: qualite d'echantillonnage requise
|
// initilisation de la variable globale K: qualite d'echantillonnage requise
|
||||||
K = K_init; // valeur d'initialisation de K pour commencer prudemment...
|
K = K_init; // valeur d'initialisation de K pour commencer prudemment...
|
||||||
|
coord_type K_prev = K;
|
||||||
|
|
||||||
Vertex_handle v1, v2;
|
Vertex_handle v1, v2;
|
||||||
if (_ordered_border.empty()){
|
if (_ordered_border.empty()){
|
||||||
|
|
@ -2069,12 +2070,12 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
while((!_ordered_border.empty())&&
|
while((!_ordered_border.empty())&&
|
||||||
(_ordered_border.begin()->first < STANDBY_CANDIDATE_BIS));
|
(_ordered_border.begin()->first < STANDBY_CANDIDATE_BIS));
|
||||||
|
K_prev = K;
|
||||||
K += (std::max)(K_step, min_K - K + eps);
|
K += (std::max)(K_step, min_K - K + eps);
|
||||||
// on augmente progressivement le K mais on a deja rempli sans
|
// on augmente progressivement le K mais on a deja rempli sans
|
||||||
// faire des betises auparavant...
|
// faire des betises auparavant...
|
||||||
}
|
}
|
||||||
while((!_ordered_border.empty())&&(K <= K)&&(min_K != infinity()));
|
while((!_ordered_border.empty())&&(K <= K)&&(min_K != infinity())&&(K!=K_prev));
|
||||||
|
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
if ((min_K < infinity())&&(!_ordered_border.empty())) {
|
if ((min_K < infinity())&&(!_ordered_border.empty())) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue