From 27d41f89b8b72cc803389053c1a9eeaaa15f2103 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Wed, 30 Nov 2016 19:47:45 +0100 Subject: [PATCH] Implement clone() for Fill classes --- xs/MANIFEST | 1 + xs/src/libslic3r/Fill/Fill.hpp | 4 +++- xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp | 1 + xs/src/libslic3r/Fill/FillConcentric.hpp | 1 + xs/src/libslic3r/Fill/FillHoneycomb.hpp | 1 + xs/src/libslic3r/Fill/FillPlanePath.hpp | 3 +++ xs/src/libslic3r/Fill/FillRectilinear.hpp | 1 + xs/src/libslic3r/Fill/FillRectilinear2.hpp | 5 +++++ 8 files changed, 16 insertions(+), 1 deletion(-) diff --git a/xs/MANIFEST b/xs/MANIFEST index 9281abd93..963dde283 100644 --- a/xs/MANIFEST +++ b/xs/MANIFEST @@ -57,6 +57,7 @@ src/libslic3r/IO.hpp src/libslic3r/Layer.cpp src/libslic3r/Layer.hpp src/libslic3r/LayerRegion.cpp +src/libslic3r/LayerRegionFill.cpp src/libslic3r/libslic3r.h src/libslic3r/Line.cpp src/libslic3r/Line.hpp diff --git a/xs/src/libslic3r/Fill/Fill.hpp b/xs/src/libslic3r/Fill/Fill.hpp index 93b4b7e5f..df752b47d 100644 --- a/xs/src/libslic3r/Fill/Fill.hpp +++ b/xs/src/libslic3r/Fill/Fill.hpp @@ -62,7 +62,8 @@ public: static Fill* new_from_type(const InfillPattern type); static Fill* new_from_type(const std::string &type); static coord_t adjust_solid_spacing(const coord_t width, const coord_t distance); - + virtual Fill* clone() const = 0; + // Implementations can override the following virtual methods: // Use bridge flow for the fill? virtual bool use_bridge_flow() const { return false; } @@ -86,6 +87,7 @@ protected: dont_adjust(false), complete(false) {}; + virtual ~Fill(); // The expolygon may be modified by the method to avoid a copy. virtual void _fill_surface_single( diff --git a/xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp b/xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp index 550630596..82699397f 100644 --- a/xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp +++ b/xs/src/libslic3r/Fill/Fill3DHoneycomb.hpp @@ -12,6 +12,7 @@ namespace Slic3r { class Fill3DHoneycomb : public Fill { public: + virtual Fill* clone() const { return new Fill3DHoneycomb(*this); }; virtual ~Fill3DHoneycomb() {} // require bridge flow since most of this pattern hangs in air diff --git a/xs/src/libslic3r/Fill/FillConcentric.hpp b/xs/src/libslic3r/Fill/FillConcentric.hpp index 836107f4a..7bb7687f5 100644 --- a/xs/src/libslic3r/Fill/FillConcentric.hpp +++ b/xs/src/libslic3r/Fill/FillConcentric.hpp @@ -11,6 +11,7 @@ public: virtual ~FillConcentric() {} protected: + virtual Fill* clone() const { return new FillConcentric(*this); }; virtual void _fill_surface_single( unsigned int thickness_layers, const std::pair &direction, diff --git a/xs/src/libslic3r/Fill/FillHoneycomb.hpp b/xs/src/libslic3r/Fill/FillHoneycomb.hpp index 5d87e6138..8fdb00265 100644 --- a/xs/src/libslic3r/Fill/FillHoneycomb.hpp +++ b/xs/src/libslic3r/Fill/FillHoneycomb.hpp @@ -15,6 +15,7 @@ public: virtual ~FillHoneycomb() {} protected: + virtual Fill* clone() const { return new FillHoneycomb(*this); }; virtual void _fill_surface_single( unsigned int thickness_layers, const std::pair &direction, diff --git a/xs/src/libslic3r/Fill/FillPlanePath.hpp b/xs/src/libslic3r/Fill/FillPlanePath.hpp index 00c05fa9d..04fb225a8 100644 --- a/xs/src/libslic3r/Fill/FillPlanePath.hpp +++ b/xs/src/libslic3r/Fill/FillPlanePath.hpp @@ -33,6 +33,7 @@ protected: class FillArchimedeanChords : public FillPlanePath { public: + virtual Fill* clone() const { return new FillArchimedeanChords(*this); }; virtual ~FillArchimedeanChords() {} protected: @@ -43,6 +44,7 @@ protected: class FillHilbertCurve : public FillPlanePath { public: + virtual Fill* clone() const { return new FillHilbertCurve(*this); }; virtual ~FillHilbertCurve() {} protected: @@ -53,6 +55,7 @@ protected: class FillOctagramSpiral : public FillPlanePath { public: + virtual Fill* clone() const { return new FillOctagramSpiral(*this); }; virtual ~FillOctagramSpiral() {} protected: diff --git a/xs/src/libslic3r/Fill/FillRectilinear.hpp b/xs/src/libslic3r/Fill/FillRectilinear.hpp index 1606aeb3c..f6c633e3a 100644 --- a/xs/src/libslic3r/Fill/FillRectilinear.hpp +++ b/xs/src/libslic3r/Fill/FillRectilinear.hpp @@ -10,6 +10,7 @@ namespace Slic3r { class FillRectilinear : public Fill { public: + virtual Fill* clone() const { return new FillRectilinear(*this); }; virtual ~FillRectilinear() {} protected: diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.hpp b/xs/src/libslic3r/Fill/FillRectilinear2.hpp index 45368089f..50ecf6c38 100644 --- a/xs/src/libslic3r/Fill/FillRectilinear2.hpp +++ b/xs/src/libslic3r/Fill/FillRectilinear2.hpp @@ -12,6 +12,7 @@ class Surface; class FillRectilinear2 : public Fill { public: + virtual Fill* clone() const { return new FillRectilinear2(*this); }; virtual ~FillRectilinear2() {} virtual Polylines fill_surface(const Surface &surface); @@ -22,6 +23,7 @@ protected: class FillGrid2 : public FillRectilinear2 { public: + virtual Fill* clone() const { return new FillGrid2(*this); }; virtual ~FillGrid2() {} virtual Polylines fill_surface(const Surface &surface); @@ -33,6 +35,7 @@ protected: class FillTriangles : public FillRectilinear2 { public: + virtual Fill* clone() const { return new FillTriangles(*this); }; virtual ~FillTriangles() {} virtual Polylines fill_surface(const Surface &surface); @@ -44,6 +47,7 @@ protected: class FillStars : public FillRectilinear2 { public: + virtual Fill* clone() const { return new FillStars(*this); }; virtual ~FillStars() {} virtual Polylines fill_surface(const Surface &surface); @@ -55,6 +59,7 @@ protected: class FillCubic : public FillRectilinear2 { public: + virtual Fill* clone() const { return new FillCubic(*this); }; virtual ~FillCubic() {} virtual Polylines fill_surface(const Surface &surface);