From f0606c2a76da890dea359a9111825bbdb736a799 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Sat, 21 Nov 2020 14:10:10 +0100 Subject: [PATCH] Merge of https://github.com/prusa3d/PrusaSlicer/pull/2856 Add aligned rectilinear infill functionality by @m-schubert Implements [Feature Request] Aligned rectilinear infill #1938 --- src/libslic3r/Fill/FillBase.cpp | 1 + src/libslic3r/Fill/FillRectilinear.hpp | 11 +++++++++++ src/libslic3r/PrintConfig.cpp | 4 ++++ src/libslic3r/PrintConfig.hpp | 3 ++- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 4e714b570..326c1bd42 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -29,6 +29,7 @@ Fill* Fill::new_from_type(const InfillPattern type) case ip3DHoneycomb: return new Fill3DHoneycomb(); case ipGyroid: return new FillGyroid(); case ipRectilinear: return new FillRectilinear(); + case ipAlignedRectilinear: return new FillAlignedRectilinear(); case ipMonotonic: return new FillMonotonic(); case ipLine: return new FillLine(); case ipGrid: return new FillGrid(); diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp index 806b29be1..0686fa166 100644 --- a/src/libslic3r/Fill/FillRectilinear.hpp +++ b/src/libslic3r/Fill/FillRectilinear.hpp @@ -29,6 +29,17 @@ protected: bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list &sweep_params, Polylines &polylines_out); }; +class FillAlignedRectilinear : public FillRectilinear +{ +public: + Fill* clone() const override { return new FillAlignedRectilinear(*this); }; + ~FillAlignedRectilinear() override = default; + +protected: + // Always generate infill at the same angle. + virtual float _layer_angle(size_t idx) const { return 0.f; } +}; + class FillMonotonic : public FillRectilinear { public: diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 0ad48e6dd..5f29c15a8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -460,12 +460,14 @@ void PrintConfigDef::init_fff_params() def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("rectilinear"); def->enum_values.push_back("monotonic"); + def->enum_values.push_back("alignedrectilinear"); def->enum_values.push_back("concentric"); def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("octagramspiral"); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Monotonic")); + def->enum_labels.push_back(L("Aligned Rectilinear")); def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); @@ -881,6 +883,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Fill pattern for general low-density infill."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("rectilinear"); + def->enum_values.push_back("alignedrectilinear"); def->enum_values.push_back("grid"); def->enum_values.push_back("triangles"); def->enum_values.push_back("stars"); @@ -896,6 +899,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("adaptivecubic"); def->enum_values.push_back("supportcubic"); def->enum_labels.push_back(L("Rectilinear")); + def->enum_labels.push_back(L("Aligned Rectilinear")); def->enum_labels.push_back(L("Grid")); def->enum_labels.push_back(L("Triangles")); def->enum_labels.push_back(L("Stars")); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 4f887c7c0..5ca04a341 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -44,7 +44,7 @@ enum AuthorizationType { }; enum InfillPattern : int { - ipRectilinear, ipMonotonic, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, + ipRectilinear, ipMonotonic, ipAlignedRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb, ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipCount, }; @@ -145,6 +145,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum::g if (keys_map.empty()) { keys_map["rectilinear"] = ipRectilinear; keys_map["monotonic"] = ipMonotonic; + keys_map["alignedrectilinear"] = ipAlignedRectilinear; keys_map["grid"] = ipGrid; keys_map["triangles"] = ipTriangles; keys_map["stars"] = ipStars;