diff options
author | bubnikv <bubnikv@gmail.com> | 2016-12-13 23:30:56 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2016-12-13 23:30:56 +0300 |
commit | 852b542913a32866d0ca6ce76cb2a9221175b4f9 (patch) | |
tree | f2ce39f1c6f4c213b30a94a69c6515292ae2179d /xs/src/libslic3r/ClipperUtils.cpp | |
parent | ddea33d93a972ee639b8f9311277c88bad6438b8 (diff) |
Had troubles with the template instantiation on OSX, so I reverted
them to overloaded functions. This is certainly easier to read and
work with anyway.
Diffstat (limited to 'xs/src/libslic3r/ClipperUtils.cpp')
-rw-r--r-- | xs/src/libslic3r/ClipperUtils.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/xs/src/libslic3r/ClipperUtils.cpp b/xs/src/libslic3r/ClipperUtils.cpp index 4b6eb77ad..99df3b7d1 100644 --- a/xs/src/libslic3r/ClipperUtils.cpp +++ b/xs/src/libslic3r/ClipperUtils.cpp @@ -133,13 +133,21 @@ ClipperPath_to_Slic3rMultiPoint(const ClipperLib::Path &input) return retval; } -template <class T> -T -ClipperPaths_to_Slic3rMultiPoints(const ClipperLib::Paths &input) +Slic3r::Polygons ClipperPaths_to_Slic3rPolygons(const ClipperLib::Paths &input) { - T retval; + Slic3r::Polygons retval; + retval.reserve(input.size()); + for (ClipperLib::Paths::const_iterator it = input.begin(); it != input.end(); ++it) + retval.push_back(ClipperPath_to_Slic3rMultiPoint<Slic3r::Polygon>(*it)); + return retval; +} + +Slic3r::Polylines ClipperPaths_to_Slic3rPolylines(const ClipperLib::Paths &input) +{ + Slic3r::Polylines retval; + retval.reserve(input.size()); for (ClipperLib::Paths::const_iterator it = input.begin(); it != input.end(); ++it) - retval.push_back(ClipperPath_to_Slic3rMultiPoint<typename T::value_type>(*it)); + retval.push_back(ClipperPath_to_Slic3rMultiPoint<Slic3r::Polyline>(*it)); return retval; } @@ -178,12 +186,18 @@ Slic3rMultiPoint_to_ClipperPath_reversed(const Slic3r::MultiPoint &input) return output; } -template <class T> -ClipperLib::Paths -Slic3rMultiPoints_to_ClipperPaths(const T &input) +ClipperLib::Paths Slic3rMultiPoints_to_ClipperPaths(const Polygons &input) +{ + ClipperLib::Paths retval; + for (Polygons::const_iterator it = input.begin(); it != input.end(); ++it) + retval.push_back(Slic3rMultiPoint_to_ClipperPath(*it)); + return retval; +} + +ClipperLib::Paths Slic3rMultiPoints_to_ClipperPaths(const Polylines &input) { ClipperLib::Paths retval; - for (typename T::const_iterator it = input.begin(); it != input.end(); ++it) + for (Polylines::const_iterator it = input.begin(); it != input.end(); ++it) retval.push_back(Slic3rMultiPoint_to_ClipperPath(*it)); return retval; } @@ -380,7 +394,7 @@ offset2(const Polygons &polygons, const float delta1, const float delta2, ClipperLib::Paths output = _offset2(polygons, delta1, delta2, joinType, miterLimit); // convert into ExPolygons - return ClipperPaths_to_Slic3rMultiPoints<Polygons>(output); + return ClipperPaths_to_Slic3rPolygons(output); } ExPolygons @@ -456,7 +470,7 @@ Polygons _clipper(ClipperLib::ClipType clipType, const Polygons &subject, const Polygons &clip, bool safety_offset_) { - return ClipperPaths_to_Slic3rMultiPoints<Polygons>(_clipper_do<ClipperLib::Paths>(clipType, subject, clip, ClipperLib::pftNonZero, safety_offset_)); + return ClipperPaths_to_Slic3rPolygons(_clipper_do<ClipperLib::Paths>(clipType, subject, clip, ClipperLib::pftNonZero, safety_offset_)); } ExPolygons @@ -473,7 +487,7 @@ _clipper_pl(ClipperLib::ClipType clipType, const Polylines &subject, { ClipperLib::Paths output; ClipperLib::PolyTreeToPaths(_clipper_do(clipType, subject, clip, ClipperLib::pftNonZero, safety_offset_), output); - return ClipperPaths_to_Slic3rMultiPoints<Polylines>(output); + return ClipperPaths_to_Slic3rPolylines(output); } Polylines @@ -609,7 +623,7 @@ simplify_polygons(const Polygons &subject, bool preserve_collinear) } // convert into Slic3r polygons - return ClipperPaths_to_Slic3rMultiPoints<Polygons>(output); + return ClipperPaths_to_Slic3rPolygons(output); } ExPolygons |