From 003a0dba071d6ef5e9b1c784ba5557987387b76e Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 26 Oct 2021 22:50:20 +0200 Subject: [PATCH] set the ironing pattern first pass to use filled monotonic instead of filled rectilinear. also allow half overlap for the first pass. supermerill/SuperSlicer#1708 --- src/libslic3r/Fill/FillBase.hpp | 4 ++-- src/libslic3r/Fill/FillSmooth.cpp | 5 ++++- src/libslic3r/Fill/FillSmooth.hpp | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 0fee1fe56..ab150c48c 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -88,9 +88,9 @@ public: // Index of the layer. size_t layer_id; // Z coordinate of the top print surface, in unscaled coordinates - coordf_t z; + double z; // infill / perimeter overlap, in unscaled coordinates - coordf_t overlap; + double overlap; ExPolygons no_overlap_expolygons; // in radians, ccw, 0 = East float angle; diff --git a/src/libslic3r/Fill/FillSmooth.cpp b/src/libslic3r/Fill/FillSmooth.cpp index 561c6a0f6..4f6276ee6 100644 --- a/src/libslic3r/Fill/FillSmooth.cpp +++ b/src/libslic3r/Fill/FillSmooth.cpp @@ -46,7 +46,10 @@ namespace Slic3r { } else{ Surface surfaceNoOverlap(srf_source); - for (const ExPolygon &poly : this->no_overlap_expolygons) { + //use half overlap instead of none. + ExPolygons half_overlap = offset_ex(this->no_overlap_expolygons, scale_(this->overlap / 2)); + half_overlap = intersection_ex({ srf_source.expolygon }, half_overlap); + for (const ExPolygon &poly : half_overlap) { if (poly.empty()) continue; surfaceNoOverlap.expolygon = poly; this->fill_expolygon(idx, *eec, surfaceNoOverlap, params_modifided, volume); diff --git a/src/libslic3r/Fill/FillSmooth.hpp b/src/libslic3r/Fill/FillSmooth.hpp index fa7a0b4b6..1c8a8fae7 100644 --- a/src/libslic3r/Fill/FillSmooth.hpp +++ b/src/libslic3r/Fill/FillSmooth.hpp @@ -15,7 +15,7 @@ public: anglePass[0] = 0; anglePass[1] = float(M_PI/2); anglePass[2] = 0; - fillPattern[0] = InfillPattern::ipRectilinearWGapFill; + fillPattern[0] = InfillPattern::ipMonotonicWGapFill;//ipRectilinearWGapFill; fillPattern[1] = InfillPattern::ipRectilinear; fillPattern[2] = InfillPattern::ipRectilinear; rolePass[0] = erNone;// erTopSolidInfill;