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) {