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

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'xs/src/libslic3r/ExPolygonCollection.cpp')
-rw-r--r--xs/src/libslic3r/ExPolygonCollection.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/xs/src/libslic3r/ExPolygonCollection.cpp b/xs/src/libslic3r/ExPolygonCollection.cpp
new file mode 100644
index 000000000..3de86e7c6
--- /dev/null
+++ b/xs/src/libslic3r/ExPolygonCollection.cpp
@@ -0,0 +1,90 @@
+#include "ExPolygonCollection.hpp"
+#include "Geometry.hpp"
+
+namespace Slic3r {
+
+ExPolygonCollection::operator Points() const
+{
+ Points points;
+ Polygons pp = *this;
+ for (Polygons::const_iterator poly = pp.begin(); poly != pp.end(); ++poly) {
+ for (Points::const_iterator point = poly->points.begin(); point != poly->points.end(); ++point)
+ points.push_back(*point);
+ }
+ return points;
+}
+
+ExPolygonCollection::operator Polygons() const
+{
+ Polygons polygons;
+ for (ExPolygons::const_iterator it = this->expolygons.begin(); it != this->expolygons.end(); ++it) {
+ polygons.push_back(it->contour);
+ for (Polygons::const_iterator ith = it->holes.begin(); ith != it->holes.end(); ++ith) {
+ polygons.push_back(*ith);
+ }
+ }
+ return polygons;
+}
+
+ExPolygonCollection::operator ExPolygons&()
+{
+ return this->expolygons;
+}
+
+void
+ExPolygonCollection::scale(double factor)
+{
+ for (ExPolygons::iterator it = expolygons.begin(); it != expolygons.end(); ++it) {
+ (*it).scale(factor);
+ }
+}
+
+void
+ExPolygonCollection::translate(double x, double y)
+{
+ for (ExPolygons::iterator it = expolygons.begin(); it != expolygons.end(); ++it) {
+ (*it).translate(x, y);
+ }
+}
+
+void
+ExPolygonCollection::rotate(double angle, const Point &center)
+{
+ for (ExPolygons::iterator it = expolygons.begin(); it != expolygons.end(); ++it) {
+ (*it).rotate(angle, center);
+ }
+}
+
+bool
+ExPolygonCollection::contains_point(const Point &point) const
+{
+ for (ExPolygons::const_iterator it = this->expolygons.begin(); it != this->expolygons.end(); ++it) {
+ if (it->contains_point(point)) return true;
+ }
+ return false;
+}
+
+void
+ExPolygonCollection::simplify(double tolerance)
+{
+ ExPolygons expp;
+ for (ExPolygons::const_iterator it = this->expolygons.begin(); it != this->expolygons.end(); ++it) {
+ it->simplify(tolerance, expp);
+ }
+ this->expolygons = expp;
+}
+
+void
+ExPolygonCollection::convex_hull(Polygon* hull) const
+{
+ Points pp;
+ for (ExPolygons::const_iterator it = this->expolygons.begin(); it != this->expolygons.end(); ++it)
+ pp.insert(pp.end(), it->contour.points.begin(), it->contour.points.end());
+ Slic3r::Geometry::convex_hull(pp, hull);
+}
+
+#ifdef SLIC3RXS
+REGISTER_CLASS(ExPolygonCollection, "ExPolygon::Collection");
+#endif
+
+}