From dde4779cbbe811f987031d7fe6cba3221eef15ee Mon Sep 17 00:00:00 2001 From: Joseph Lenox Date: Tue, 31 Jul 2018 23:19:44 -0500 Subject: [PATCH] added grow() method for Polyline; moved CLIPPER_OFFSET_SCALE to libslic3r to avoid include loops --- xs/src/libslic3r/ClipperUtils.hpp | 1 - xs/src/libslic3r/Polyline.cpp | 7 +++++++ xs/src/libslic3r/Polyline.hpp | 2 ++ xs/src/libslic3r/libslic3r.h | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/xs/src/libslic3r/ClipperUtils.hpp b/xs/src/libslic3r/ClipperUtils.hpp index ddd551ca2..4a5dcbf1c 100644 --- a/xs/src/libslic3r/ClipperUtils.hpp +++ b/xs/src/libslic3r/ClipperUtils.hpp @@ -19,7 +19,6 @@ namespace Slic3r { // How about 2^17=131072? // By the way, is the scalling needed at all? Cura runs all the computation with a fixed point precision of 1um, while Slic3r scales to 1nm, // further scaling by 10e5 brings us to -constexpr float CLIPPER_OFFSET_SCALE = 100000.0; constexpr auto MAX_COORD = ClipperLib::hiRange / CLIPPER_OFFSET_SCALE; //----------------------------------------------------------- diff --git a/xs/src/libslic3r/Polyline.cpp b/xs/src/libslic3r/Polyline.cpp index 3c371ae71..b80335073 100644 --- a/xs/src/libslic3r/Polyline.cpp +++ b/xs/src/libslic3r/Polyline.cpp @@ -3,6 +3,7 @@ #include "ExPolygonCollection.hpp" #include "Line.hpp" #include "Polygon.hpp" +#include "ClipperUtils.hpp" #include #include @@ -220,6 +221,12 @@ Polyline::wkt() const return wkt.str(); } +Polygons +Polyline::grow(double delta, double scale, ClipperLib::JoinType joinType, double miterLimit) const +{ + return offset(*this, delta, scale, joinType, miterLimit); +} + ThickLines ThickPolyline::thicklines() const { diff --git a/xs/src/libslic3r/Polyline.hpp b/xs/src/libslic3r/Polyline.hpp index dfd87fef7..49e261bdf 100644 --- a/xs/src/libslic3r/Polyline.hpp +++ b/xs/src/libslic3r/Polyline.hpp @@ -7,6 +7,7 @@ #include "Polygon.hpp" #include #include +#include "clipper.hpp" namespace Slic3r { @@ -32,6 +33,7 @@ class Polyline : public MultiPoint { void split_at(const Point &point, Polyline* p1, Polyline* p2) const; bool is_straight() const; std::string wkt() const; + Polygons grow(double delta, double scale = CLIPPER_OFFSET_SCALE, ClipperLib::JoinType joinType = ClipperLib::jtSquare, double miterLimit = 3.0) const; }; class ThickPolyline : public Polyline { diff --git a/xs/src/libslic3r/libslic3r.h b/xs/src/libslic3r/libslic3r.h index da6aaa7ce..18e1d0acd 100644 --- a/xs/src/libslic3r/libslic3r.h +++ b/xs/src/libslic3r/libslic3r.h @@ -81,6 +81,8 @@ constexpr coordf_t INSET_OVERLAP_TOLERANCE = 0.4; constexpr coordf_t EXTERNAL_INFILL_MARGIN = 3; constexpr coord_t SCALED_EXTERNAL_INFILL_MARGIN = scale_(EXTERNAL_INFILL_MARGIN); +constexpr float CLIPPER_OFFSET_SCALE = 100000.0; + enum Axis { X=0, Y, Z }; template