Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsupermerill <merill@free.fr>2021-11-06 05:24:20 +0300
committersupermerill <merill@free.fr>2021-11-06 23:19:49 +0300
commitcaa27d3598902a8113852a6689e9882271285d4c (patch)
treef6e6d7a82badcf52682c9c208b4cf300e9e98e8b /src
parent37a3596b3a18b056f2354fd6a6aaeddee4ef23fd (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.cpp1
-rw-r--r--src/libslic3r/Fill/FillBase.cpp8
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;