From dc576b0511bcc6b0dbdc5bd8d516cb0a6a9d64c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Tue, 23 Feb 2021 20:43:34 +0100 Subject: [PATCH] Fixed inner offset in the avoid crossing perimeters. Minimum contour width was used incorrectly, which could lead to breaking contour to more disconnected polygons. --- src/libslic3r/GCode/AvoidCrossingPerimeters.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index 853dc722be..8801f5b3ba 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -729,10 +729,11 @@ static std::vector contour_distance(const EdgeGrid::Grid &grid, // Polygon offset which ensures that if a polygon breaks up into several separate parts, the original polygon will be used in these places. // ExPolygons are handled one by one so returned ExPolygons could intersect. -static ExPolygons inner_offset(const ExPolygons &ex_polygons, double offset, double min_contour_width = scale_(0.001)) +static ExPolygons inner_offset(const ExPolygons &ex_polygons, double offset) { - double search_radius = 2. * (offset + min_contour_width); - ExPolygons ex_poly_result = ex_polygons; + double min_contour_width = 2. * offset + SCALED_EPSILON; + double search_radius = 2. * (offset + min_contour_width); + ExPolygons ex_poly_result = ex_polygons; resample_expolygons(ex_poly_result, offset / 2); for (ExPolygon &ex_poly : ex_poly_result) {