From 092f7771c12e6c7170a75ac0f11efb17ab8f3658 Mon Sep 17 00:00:00 2001 From: supermerill Date: Sun, 26 Sep 2021 18:27:00 +0200 Subject: [PATCH] fix weird interior brim when inside an hole (inside island) supermerill/SuperSlicer#1526 --- src/libslic3r/Print.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index ab46f5cf9..a750d32bc 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2620,15 +2620,20 @@ void Print::_make_brim_interior(const Flow &flow, const PrintObjectPtrs &objects for (size_t i = 0; i < num_loops; ++i) { this->throw_if_canceled(); loops.emplace_back(); - islands_to_loops = offset(islands_to_loops, double(-flow.scaled_spacing()), jtSquare); - for (Polygon &poly : islands_to_loops) { - poly.points.push_back(poly.points.front()); - Points p = MultiPoint::_douglas_peucker(poly.points, SCALED_RESOLUTION); - p.pop_back(); - poly.points = std::move(p); + Polygons islands_to_loops_offseted; + for (Polygon& poly : islands_to_loops) { + Polygons temp = offset(poly, double(-flow.scaled_spacing()), jtSquare); + for (Polygon& poly : temp) { + poly.points.push_back(poly.points.front()); + Points p = MultiPoint::_douglas_peucker(poly.points, SCALED_RESOLUTION); + p.pop_back(); + poly.points = std::move(p); + } + for (Polygon& poly : offset(temp, 0.5f * double(flow.scaled_spacing()))) + loops[i].emplace_back(poly); + islands_to_loops_offseted.insert(islands_to_loops_offseted.end(), temp.begin(), temp.end()); } - for (Polygon& poly : offset(islands_to_loops, 0.5f * double(flow.scaled_spacing()))) - loops[i].emplace_back(poly); + islands_to_loops = islands_to_loops_offseted; } //loops = union_pt_chained_outside_in(loops, false); std::reverse(loops.begin(), loops.end());