From a4736245222c03c49e435acd199a9364f0bcbe2f Mon Sep 17 00:00:00 2001 From: supermerill Date: Fri, 18 Sep 2020 03:15:30 +0200 Subject: #448 less aggressive "perimeter removal for fake circles" update it from the new one from first perimeter one. Also restrict it a bit more to prevent over-extrusion. --- src/libslic3r/PerimeterGenerator.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 358cd2556..dd858250b 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -525,19 +525,19 @@ void PerimeterGenerator::process() +(float)(min_spacing / 2 - 1)); ExPolygons no_thin_onion = offset_ex(last, double(-good_spacing)); - float div = 2; - while (no_thin_onion.size() > 0 && next_onion.size() > no_thin_onion.size() && no_thin_onion.size() + next_onion.size() > 3) { - div -= 0.3; - if (div == 2) div -= 0.3; + std::vector divs { 1.8, 1.6 }; //don't over-extrude, so don't use divider >2 + size_t idx_div = 0; + while (next_onion.size() > no_thin_onion.size() && idx_div < divs.size()) { + float div = divs[idx_div]; //use a sightly bigger spacing to try to drastically improve the split, that can lead to very thick gapfill ExPolygons next_onion_secondTry = offset2_ex( last, - -(float)(good_spacing + min_spacing / div - 1), - +(float)(min_spacing / div - 1)); - if (next_onion.size() > next_onion_secondTry.size() * 1.1) { + -(float)(good_spacing + (min_spacing / div) - 1), + +(float)((min_spacing / div) - 1)); + if (next_onion.size() > next_onion_secondTry.size() * 1.2 && next_onion.size() > next_onion_secondTry.size() + 2) { next_onion = next_onion_secondTry; } - if (div > 3 || div < 1.2) break; + idx_div++; } } else { -- cgit v1.2.3