diff --git a/xs/src/libslic3r/ExPolygon.hpp b/xs/src/libslic3r/ExPolygon.hpp index 3f7774aabd..f3a6a99eb5 100644 --- a/xs/src/libslic3r/ExPolygon.hpp +++ b/xs/src/libslic3r/ExPolygon.hpp @@ -104,12 +104,12 @@ inline void polygons_append(Polygons &dst, const ExPolygons &src) } #if SLIC3R_CPPVER >= 11 -inline void polygons_append(Polygons &dst, ExPolygons &&src) +inline void polygons_append(Polygons &dst, ExPolygons &&src) { dst.reserve(dst.size() + number_polygons(src)); - for (ExPolygons::const_iterator it = expolys.begin(); it != expolys.end(); ++ it) { + for (ExPolygons::const_iterator it = src.begin(); it != src.end(); ++ it) { dst.push_back(std::move(it->contour)); - std::move(std::begin(it->contour), std::end(it->contour), std::back_inserter(dst)); + std::move(std::begin(it->holes), std::end(it->holes), std::back_inserter(dst)); } } #endif diff --git a/xs/src/libslic3r/Surface.hpp b/xs/src/libslic3r/Surface.hpp index df6f07d3ab..09bc3e5f50 100644 --- a/xs/src/libslic3r/Surface.hpp +++ b/xs/src/libslic3r/Surface.hpp @@ -99,11 +99,12 @@ inline Polygons to_polygons(const SurfacesPtr &src) #if SLIC3R_CPPVER >= 11 inline Polygons to_polygons(SurfacesPtr &&src) { + size_t num = 0; for (SurfacesPtr::const_iterator it = src.begin(); it != src.end(); ++it) num += (*it)->expolygon.holes.size() + 1; Polygons polygons; polygons.reserve(num); - for (ExPolygons::const_iterator it = src.begin(); it != src.end(); ++it) { + for (SurfacesPtr::const_iterator it = src.begin(); it != src.end(); ++it) { polygons.push_back(std::move((*it)->expolygon.contour)); for (Polygons::const_iterator ith = (*it)->expolygon.holes.begin(); ith != (*it)->expolygon.holes.end(); ++ith) { polygons.push_back(std::move(*ith)); @@ -146,7 +147,7 @@ inline void polygons_append(Polygons &dst, Surfaces &&src) dst.reserve(dst.size() + number_polygons(src)); for (Surfaces::const_iterator it = src.begin(); it != src.end(); ++ it) { dst.push_back(std::move(it->expolygon.contour)); - std::move(std::begin(it->expolygon.contour), std::end(it->expolygon.contour), std::back_inserter(dst)); + std::move(std::begin(it->expolygon.holes), std::end(it->expolygon.holes), std::back_inserter(dst)); } } #endif @@ -167,7 +168,7 @@ inline void polygons_append(Polygons &dst, SurfacesPtr &&src) dst.reserve(dst.size() + number_polygons(src)); for (SurfacesPtr::const_iterator it = src.begin(); it != src.end(); ++ it) { dst.push_back(std::move((*it)->expolygon.contour)); - std::move(std::begin((*it)->expolygon.contour), std::end((*it)->expolygon.contour), std::back_inserter(dst)); + std::move(std::begin((*it)->expolygon.holes), std::end((*it)->expolygon.holes), std::back_inserter(dst)); } } #endif