From 9c59169b1d48e69e1f8ff60e84336b80ab74d37c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 24 Apr 2024 12:05:01 +0200 Subject: [PATCH] remove a possible filter failure, when the target is a vertex --- .../internal/Triangulation_segment_traverser_3_impl.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Triangulation_3/include/CGAL/Triangulation_3/internal/Triangulation_segment_traverser_3_impl.h b/Triangulation_3/include/CGAL/Triangulation_3/internal/Triangulation_segment_traverser_3_impl.h index f5e6c7016a8..2f75230ebbd 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3/internal/Triangulation_segment_traverser_3_impl.h +++ b/Triangulation_3/include/CGAL/Triangulation_3/internal/Triangulation_segment_traverser_3_impl.h @@ -505,9 +505,15 @@ Triangulation_segment_cell_iterator_3::walk_to_next_3(const Simplex& pre continue; } const Point* const backup_vert_li = std::exchange(vert[li], &_target); - + bool op_li_is_null = false; + if(_t_vertex != Vertex_handle()) { + for(int i = 0; i < 4; ++i) { + if(li == i) continue; + if(cur_cell->vertex(i) == _t_vertex) op_li_is_null = true; + } + } // Check if the target is on the opposite side of the supporting plane. - op[li] = _tr->orientation(*vert[0], *vert[1], *vert[2], *vert[3]); + op[li] = op_li_is_null ? ZERO : _tr->orientation(*vert[0], *vert[1], *vert[2], *vert[3]); if(op[li] == POSITIVE) pos += li; if(op[li] != NEGATIVE) {