From b2070342e55c4a3361a7a77ad11d0a020bdb2649 Mon Sep 17 00:00:00 2001 From: supermerill Date: Fri, 29 Dec 2023 00:12:34 +0100 Subject: [PATCH] fix monotonic supermerill/SuperSlicer#3770 --- src/libslic3r/Fill/FillBase.cpp | 7 +++++-- src/libslic3r/Fill/FillRectilinear.cpp | 3 ++- src/libslic3r/Fill/FillRectilinear.hpp | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index a6fff4aae49..08daf3c2222 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -211,7 +211,7 @@ void Fill::fill_surface_extrusion(const Surface *surface, const FillParams ¶ good_role, used_flow, used_flow.scaled_width() / 8, - true); + !params.monotonic); // compute the path of the nozzle -> extruded volume for (const ExtrusionEntity* entity : entities) { extruded_volume += entity->total_volume(); @@ -219,6 +219,8 @@ void Fill::fill_surface_extrusion(const Surface *surface, const FillParams ¶ //append (move so the pointers are reused, and won't need to be deleted) all_new_paths->append(std::move(entities)); } + if(params.monotonic) + all_new_paths->set_can_sort_reverse(false, false); thick_polylines.clear(); @@ -305,7 +307,8 @@ void Fill::fill_surface_extrusion(const Surface *surface, const FillParams ¶ good_role, params.flow.mm3_per_mm()* params.flow_mult * mult_flow, (float)(params.flow.width()* params.flow_mult * mult_flow), - (float)params.flow.height()); + (float)params.flow.height(), + !params.monotonic); } } catch (InfillFailedException&) { } diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 74e74a70fe5..b171db95122 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -3532,7 +3532,8 @@ FillRectilinearWGapFill::fill_surface_extrusion(const Surface *surface, const Fi good_role, params.flow.mm3_per_mm() * params.flow_mult * flow_mult_exact_volume, params.flow.width() * params.flow_mult * float(flow_mult_exact_volume), - params.flow.height()); + params.flow.height(), + !is_monotonic()); coll_nosort->append(ExtrusionEntitiesPtr{ eec }); diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp index d9151dab8b0..dae36dc6ca7 100644 --- a/src/libslic3r/Fill/FillRectilinear.hpp +++ b/src/libslic3r/Fill/FillRectilinear.hpp @@ -50,6 +50,12 @@ class FillMonotonic : public FillRectilinear public: Fill* clone() const override { return new FillMonotonic(*this); } ~FillMonotonic() override = default; + //apply monotonic + void fill_surface_extrusion(const Surface *surface, const FillParams ¶ms, ExtrusionEntitiesPtr &out) const override { + FillParams monotonic_params = params; + monotonic_params.monotonic = true; + FillRectilinear::fill_surface_extrusion(surface, monotonic_params, out); + } Polylines fill_surface(const Surface* surface, const FillParams& params) const override; bool no_sort() const override { return true; } };