mirror of https://github.com/CGAL/cgal
remove the early exit as we could miss the fact that some operations might be impossible
This commit is contained in:
parent
4945181599
commit
cb3a1e03d4
|
|
@ -1052,7 +1052,9 @@ public:
|
||||||
previous_bitvalue[2] = is_patch_inside_tm1.test(patch_id_q1);
|
previous_bitvalue[2] = is_patch_inside_tm1.test(patch_id_q1);
|
||||||
previous_bitvalue[3] = is_patch_inside_tm1.test(patch_id_q2);
|
previous_bitvalue[3] = is_patch_inside_tm1.test(patch_id_q2);
|
||||||
|
|
||||||
#ifndef CGAL_NDEBUG
|
/*
|
||||||
|
// Note that this code is commented as impossible_operation flag could be set thanks to
|
||||||
|
// another polyline and such a `continue` would make us miss it.
|
||||||
if (is_tm1_closed && is_tm2_closed)
|
if (is_tm1_closed && is_tm2_closed)
|
||||||
{
|
{
|
||||||
if (!patch_status_was_not_already_set[0] &&
|
if (!patch_status_was_not_already_set[0] &&
|
||||||
|
|
@ -1061,7 +1063,7 @@ public:
|
||||||
!patch_status_was_not_already_set[3])
|
!patch_status_was_not_already_set[3])
|
||||||
continue; // all patches were already classified, no need to redo it
|
continue; // all patches were already classified, no need to redo it
|
||||||
}
|
}
|
||||||
#endif
|
*/
|
||||||
|
|
||||||
// check incompatibility of patch classifications
|
// check incompatibility of patch classifications
|
||||||
auto inconsistent_classification = [&]()
|
auto inconsistent_classification = [&]()
|
||||||
|
|
@ -1085,6 +1087,25 @@ public:
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
#ifndef CGAL_NDEBUG
|
||||||
|
auto debug_check_consistency = [&]()
|
||||||
|
{
|
||||||
|
if (!used_to_clip_a_surface && !used_to_classify_patches)
|
||||||
|
{
|
||||||
|
CGAL_assertion( patch_status_was_not_already_set[0] || (previous_bitvalue[0]==is_patch_inside_tm2[patch_id_p1]) );
|
||||||
|
CGAL_assertion( patch_status_was_not_already_set[1] || (previous_bitvalue[1]==is_patch_inside_tm2[patch_id_p2]) );
|
||||||
|
CGAL_assertion( patch_status_was_not_already_set[2] || (previous_bitvalue[2]==is_patch_inside_tm1[patch_id_q1]) );
|
||||||
|
CGAL_assertion( patch_status_was_not_already_set[3] || (previous_bitvalue[3]==is_patch_inside_tm1[patch_id_q2]) );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
is_patch_inside_tm2.reset(patch_id_p1);
|
||||||
|
is_patch_inside_tm2.reset(patch_id_p2);
|
||||||
|
is_patch_inside_tm1.reset(patch_id_q1);
|
||||||
|
is_patch_inside_tm1.reset(patch_id_q2);
|
||||||
|
#else
|
||||||
|
auto debug_check_consistency = [&](){};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
//indicates that patch status will be updated
|
//indicates that patch status will be updated
|
||||||
patch_status_not_set_tm1.reset(patch_id_p1);
|
patch_status_not_set_tm1.reset(patch_id_p1);
|
||||||
|
|
@ -1141,6 +1162,7 @@ public:
|
||||||
if ( q2_is_between_p1p2 ) is_patch_inside_tm1.set(patch_id_q2); //case 1
|
if ( q2_is_between_p1p2 ) is_patch_inside_tm1.set(patch_id_q2); //case 1
|
||||||
else is_patch_inside_tm2.set(patch_id_p2); //case 2
|
else is_patch_inside_tm2.set(patch_id_p2); //case 2
|
||||||
if (inconsistent_classification()) return;
|
if (inconsistent_classification()) return;
|
||||||
|
debug_check_consistency();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
@ -1172,6 +1194,7 @@ public:
|
||||||
is_patch_inside_tm2.set(patch_id_p2);
|
is_patch_inside_tm2.set(patch_id_p2);
|
||||||
} //else case 4
|
} //else case 4
|
||||||
if (inconsistent_classification()) return;
|
if (inconsistent_classification()) return;
|
||||||
|
debug_check_consistency();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1203,6 +1226,7 @@ public:
|
||||||
is_patch_inside_tm2.set(patch_id_p1);
|
is_patch_inside_tm2.set(patch_id_p1);
|
||||||
} // else case 6
|
} // else case 6
|
||||||
if (inconsistent_classification()) return;
|
if (inconsistent_classification()) return;
|
||||||
|
debug_check_consistency();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
@ -1232,6 +1256,7 @@ public:
|
||||||
if ( q1_is_between_p1p2 ) is_patch_inside_tm1.set(patch_id_q1); //case 7
|
if ( q1_is_between_p1p2 ) is_patch_inside_tm1.set(patch_id_q1); //case 7
|
||||||
else is_patch_inside_tm2.set(patch_id_p1); //case 8
|
else is_patch_inside_tm2.set(patch_id_p1); //case 8
|
||||||
if (inconsistent_classification()) return;
|
if (inconsistent_classification()) return;
|
||||||
|
debug_check_consistency();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1394,13 +1419,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (inconsistent_classification()) return;
|
if (inconsistent_classification()) return;
|
||||||
if (!used_to_clip_a_surface && !used_to_classify_patches)
|
debug_check_consistency();
|
||||||
{
|
|
||||||
CGAL_assertion( patch_status_was_not_already_set[0] || previous_bitvalue[0]==is_patch_inside_tm2[patch_id_p1] );
|
|
||||||
CGAL_assertion( patch_status_was_not_already_set[1] || previous_bitvalue[1]==is_patch_inside_tm2[patch_id_p2] );
|
|
||||||
CGAL_assertion( patch_status_was_not_already_set[2] || previous_bitvalue[2]==is_patch_inside_tm1[patch_id_q1] );
|
|
||||||
CGAL_assertion( patch_status_was_not_already_set[3] || previous_bitvalue[3]==is_patch_inside_tm1[patch_id_q2] );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue