Fix extrusion without snapping not registering some offset points

This commit is contained in:
Mael Rouxel-Labbé 2025-03-07 16:27:56 +01:00
parent bb81d8581e
commit c61639cfd7
1 changed files with 10 additions and 11 deletions

View File

@ -86,8 +86,8 @@ inline constexpr FT default_extrusion_height()
}
// @todo Maybe this postprocessing is not really necessary? Do users really care if the point
// is not perfectly above the input contour edge (it generally cannot be anyway if the kernel is not exact except for some
// specific cases)?
// is not perfectly above the input contour edge (it generally cannot be anyway if the kernel
// is not exact except for some specific cases)?
#define CGAL_SLS_SNAP_TO_VERTICAL_SLABS
#ifdef CGAL_SLS_SNAP_TO_VERTICAL_SLABS
@ -205,17 +205,19 @@ public:
}
// can't modify the position yet because we need arrange_polygons() to still work properly
//
// @fixme on paper one could create a polygon thin-enough w.r.t. the max weight value
// such thatthere is a skeleton vertex that wants to be snapped to two different sides...
void on_offset_point(const Point_2& op,
SS_Halfedge_const_handle hook) const
{
CGAL_assertion(hook->is_bisector());
#ifdef CGAL_SLS_SNAP_TO_VERTICAL_SLABS
// @fixme on paper one could create a polygon thin-enough w.r.t. the max weight value such that
// there is a skeleton vertex that wants to be snapped to two different sides...
CGAL_assertion(m_snapped_positions.count(op) == 0);
CGAL_precondition(hook->is_bisector());
HDS_Halfedge_const_handle canonical_hook = (hook < hook->opposite()) ? hook : hook->opposite();
m_offset_points[canonical_hook] = op;
#ifdef CGAL_SLS_SNAP_TO_VERTICAL_SLABS
CGAL_precondition(m_snapped_positions.count(op) == 0);
SS_Halfedge_const_handle contour_h1 = hook->defining_contour_edge();
CGAL_assertion(contour_h1->opposite()->is_border());
@ -225,9 +227,6 @@ public:
const bool is_h1_vertical = (contour_h1->weight() == m_vertical_weight);
const bool is_h2_vertical = (contour_h2->weight() == m_vertical_weight);
// this can happen when the offset is passing through vertices
m_offset_points[canonical_hook] = op;
// if both are vertical, it's the common vertex (which has to exist)
if(is_h1_vertical && is_h2_vertical)
{