diff options
author | supermerill <merill@free.fr> | 2021-11-06 05:24:20 +0300 |
---|---|---|
committer | supermerill <merill@free.fr> | 2021-11-06 23:19:49 +0300 |
commit | caa27d3598902a8113852a6689e9882271285d4c (patch) | |
tree | f6e6d7a82badcf52682c9c208b4cf300e9e98e8b /src | |
parent | 37a3596b3a18b056f2354fd6a6aaeddee4ef23fd (diff) |
Fix fill_exactly when multiple surface and no infill_overlap
Was overextruding by 30%.
supermerill/SuperSlicer#820
Diffstat (limited to 'src')
-rw-r--r-- | src/libslic3r/Fill/Fill.cpp | 1 | ||||
-rw-r--r-- | src/libslic3r/Fill/FillBase.cpp | 8 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 60c34db7c..9f0030fa3 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -492,6 +492,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: for (ExPolygon &expoly : surface_fill.expolygons) { //set overlap polygons + f->no_overlap_expolygons.clear(); if (surface_fill.params.config->perimeters > 0) { f->overlap = surface_fill.params.config->infill_overlap.get_abs_value((perimeter_spacing + (f->get_spacing())) / 2); if (f->overlap != 0) { diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 998d91170..08bcc9d9f 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -150,14 +150,14 @@ std::pair<float, Point> Fill::_infill_direction(const Surface *surface) const double Fill::compute_unscaled_volume_to_fill(const Surface* surface, const FillParams& params) const { double polyline_volume = 0; - for (auto poly = this->no_overlap_expolygons.begin(); poly != this->no_overlap_expolygons.end(); ++poly) { - polyline_volume += params.flow.height * unscaled(unscaled(poly->area())); + for (const ExPolygon& poly : this->no_overlap_expolygons) { + polyline_volume += params.flow.height * unscaled(unscaled(poly.area())); double perimeter_gap_usage = params.config->perimeter_overlap.get_abs_value(1); // add external "perimeter gap" - double perimeter_round_gap = unscaled(poly->contour.length()) * params.flow.height * (1 - 0.25 * PI) * 0.5; + double perimeter_round_gap = unscaled(poly.contour.length()) * params.flow.height * (1 - 0.25 * PI) * 0.5; // add holes "perimeter gaps" double holes_gaps = 0; - for (auto hole = poly->holes.begin(); hole != poly->holes.end(); ++hole) { + for (auto hole = poly.holes.begin(); hole != poly.holes.end(); ++hole) { holes_gaps += unscaled(hole->length()) * params.flow.height * (1 - 0.25 * PI) * 0.5; } polyline_volume += (perimeter_round_gap + holes_gaps) * perimeter_gap_usage; |