43{
46
47 using Slices = std::vector<ExPolygons>;
49
50 if (!sup_mesh.empty()) {
51 slices.emplace_back();
53 }
54
55 if (!pad_mesh.empty()) {
56 slices.emplace_back();
57
59 auto maxzit = std::upper_bound(
grid.begin(),
grid.end(), bb.max.z());
60
61 auto cap =
grid.end() - maxzit;
63 std::copy(
grid.begin(), maxzit, std::back_inserter(padgrid));
64
66 }
67
68 size_t len =
grid.size();
69 for (const Slices &slv : slices) { len = std::min(len, slv.size()); }
70
71
72 if (slices.empty()) return {};
73
74 Slices &mrg = slices.front();
75
76 for (auto it = std::next(slices.begin()); it != slices.end(); ++it) {
77 for (size_t i = 0; i < len; ++i) {
78 Slices &slv = *it;
79 std::copy(slv[i].
begin(), slv[i].
end(), std::back_inserter(mrg[i]));
80 slv[i] = {};
81 }
82 }
83
84 return mrg;
85}
T * begin(Slic3r::Mat< N, M, T > &mat)
Definition Point.hpp:838
T * end(Slic3r::Mat< N, M, T > &mat)
Definition Point.hpp:841
BoundingBoxf3 bounding_box(const TriangleMesh &m)
Definition TriangleMesh.hpp:391
IntegerOnly< I, std::vector< T, Args... > > reserve_vector(I capacity)
Definition libslic3r.h:370
std::vector< ArithmeticOnly< T > > grid(const T &start, const T &stop, const T &stride)
A set of equidistant values starting from 'start' (inclusive), ending in the closest multiple of 'str...
Definition MTUtils.hpp:127
std::vector< ExPolygons > slice_mesh_ex(const indexed_triangle_set &mesh, const std::vector< float > &zs, const MeshSlicingParamsEx ¶ms, std::function< void()> throw_on_cancel)
Definition TriangleMeshSlicer.cpp:2142