diff options
author | bubnikv <bubnikv@gmail.com> | 2016-11-23 17:51:47 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2016-11-23 17:51:47 +0300 |
commit | d8be4de6cf8be3fba78570e51b0db276bc1669c2 (patch) | |
tree | da699a61f7e9cb3d7ba8f3abcaa88146e2053477 /xs/src/libslic3r/ClipperUtils.cpp | |
parent | 1a1eaa0810151f38b6a63c0f947ee2d3d8fc3aa3 (diff) |
One step further to the C++ Supports.
Diffstat (limited to 'xs/src/libslic3r/ClipperUtils.cpp')
-rw-r--r-- | xs/src/libslic3r/ClipperUtils.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/xs/src/libslic3r/ClipperUtils.cpp b/xs/src/libslic3r/ClipperUtils.cpp index f5e98b724..f2cc7eb38 100644 --- a/xs/src/libslic3r/ClipperUtils.cpp +++ b/xs/src/libslic3r/ClipperUtils.cpp @@ -1004,4 +1004,25 @@ void safety_offset(ClipperLib::Paths* paths) scaleClipperPolygons(*paths, 1.0/CLIPPER_OFFSET_SCALE); } +Polygons top_level_islands(const Slic3r::Polygons &polygons) +{ + ClipperLib::Paths input; + Slic3rMultiPoints_to_ClipperPaths(polygons, &input); + // init Clipper + ClipperLib::Clipper clipper; + clipper.Clear(); + // perform union + clipper.AddPaths(input, ClipperLib::ptSubject, true); + ClipperLib::PolyTree polytree; + clipper.Execute(ClipperLib::ctUnion, polytree, ClipperLib::pftEvenOdd, ClipperLib::pftEvenOdd); + // Convert only the top level islands to the output. + Polygons out; + out.reserve(polytree.ChildCount()); + for (int i = 0; i < polytree.ChildCount(); ++i) { + out.push_back(Polygon()); + ClipperPath_to_Slic3rMultiPoint(polytree.Childs[i]->Contour, &out.back()); + } + return out; } + +} // namespace Slic3r
\ No newline at end of file |