From 3614033fdc7e9b440f15e4e4e6848db7ec9a4e9d Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Fri, 11 Oct 2024 15:22:58 +0800 Subject: [PATCH] ENH: crash on clipper while open fuzziy skin Jira: 8412 Signed-off-by: qing.zhang Change-Id: I27d06f07baf91dd0f5947ebc2925df59f219a0c6 (cherry picked from commit a0a40462acdc52f22a1e49104e40b303a59b2f32) --- src/libslic3r/PerimeterGenerator.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 068fd672c..903507f90 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -525,6 +525,22 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime bool detect_overhang_degree = perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None; + //BBS: fuzziy skin may generate a line that approximates a point, which can cause the clipper to get empty results + if (loop.fuzzify && remain_polines.empty() && inside_polines.empty()) { + bool inside_contour = false; + for (const Polygon cliped_polygon : lower_polygons_series_clipped) { + if (cliped_polygon.contains(polygon.first_point())) { + inside_contour = true; + break; + } + } + + if (inside_contour) + inside_polines.push_back(to_polyline(polygon)); + else + remain_polines.push_back(to_polyline(polygon)); + } + if (!detect_overhang_degree) { if (!inside_polines.empty()) extrusion_paths_append(