Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2016-11-23 17:51:47 +0300
committerbubnikv <bubnikv@gmail.com>2016-11-23 17:51:47 +0300
commitd8be4de6cf8be3fba78570e51b0db276bc1669c2 (patch)
treeda699a61f7e9cb3d7ba8f3abcaa88146e2053477 /xs/src/libslic3r/ClipperUtils.cpp
parent1a1eaa0810151f38b6a63c0f947ee2d3d8fc3aa3 (diff)
One step further to the C++ Supports.
Diffstat (limited to 'xs/src/libslic3r/ClipperUtils.cpp')
-rw-r--r--xs/src/libslic3r/ClipperUtils.cpp21
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