#ifndef slic3r_FillRectilinear_hpp_ #define slic3r_FillRectilinear_hpp_ #include "../libslic3r.h" #include "FillBase.hpp" namespace Slic3r { class Surface; class FillRectilinear : public Fill { public: Fill* clone() const override { return new FillRectilinear(*this); } ~FillRectilinear() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; protected: // Fill by single directional lines, interconnect the lines along perimeters. bool fill_surface_by_lines(const Surface *surface, const FillParams ¶ms, float angleBase, float pattern_shift, Polylines &polylines_out); // Fill by multiple sweeps of differing directions. struct SweepParams { float angle_base; float pattern_shift; }; 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 override { return 0.f; } }; class FillMonotonic : public FillRectilinear { public: Fill* clone() const override { return new FillMonotonic(*this); } ~FillMonotonic() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; bool no_sort() const override { return true; } }; class FillMonotonicLine : public FillRectilinear { public: Fill* clone() const override { return new FillMonotonicLine(*this); } ~FillMonotonicLine() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; bool no_sort() const override { return true; } }; class FillGrid : public FillRectilinear { public: Fill* clone() const override { return new FillGrid(*this); } ~FillGrid() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; protected: // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill. float _layer_angle(size_t idx) const override { return 0.f; } }; class FillTriangles : public FillRectilinear { public: Fill* clone() const override { return new FillTriangles(*this); } ~FillTriangles() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; protected: // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill. float _layer_angle(size_t idx) const override { return 0.f; } }; class FillStars : public FillRectilinear { public: Fill* clone() const override { return new FillStars(*this); } ~FillStars() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; protected: // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill. float _layer_angle(size_t idx) const override { return 0.f; } }; class FillCubic : public FillRectilinear { public: Fill* clone() const override { return new FillCubic(*this); } ~FillCubic() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; protected: // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill. float _layer_angle(size_t idx) const override { return 0.f; } }; class FillSupportBase : public FillRectilinear { public: Fill* clone() const override { return new FillSupportBase(*this); } ~FillSupportBase() override = default; Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override; protected: // The grid fill will keep the angle constant between the layers, see the implementation of Slic3r::Fill. float _layer_angle(size_t idx) const override { return 0.f; } }; class FillMonotonicLineWGapFill : public Fill { public: ~FillMonotonicLineWGapFill() override = default; void fill_surface_extrusion(const Surface *surface, const FillParams ¶ms, ExtrusionEntitiesPtr &out) override; protected: Fill* clone() const override { return new FillMonotonicLineWGapFill(*this); }; bool no_sort() const override { return true; } private: void fill_surface_by_lines(const Surface* surface, const FillParams& params, Polylines& polylines_out); }; Points sample_grid_pattern(const ExPolygon& expolygon, coord_t spacing, const BoundingBox& global_bounding_box); Points sample_grid_pattern(const ExPolygons& expolygons, coord_t spacing, const BoundingBox& global_bounding_box); Points sample_grid_pattern(const Polygons& polygons, coord_t spacing, const BoundingBox& global_bounding_box); } // namespace Slic3r #endif // slic3r_FillRectilinear_hpp_