From 7b9c8ca06c01f94d0ce6828605ebf25cdff3bc79 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Thu, 29 Nov 2018 12:53:56 +0100 Subject: [PATCH] Fix for empty zip when the object is moved after slicing --- src/libslic3r/SLAPrint.cpp | 14 +------------- src/libslic3r/SLAPrint.hpp | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index ba490e422..c4abc583e 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -567,19 +567,7 @@ void SLAPrint::process() } }; - using Layer = sla::ExPolygons; - using LayerCopies = std::vector; - struct LayerRef { - std::reference_wrapper lref; - std::reference_wrapper copies; - LayerRef(const Layer& lyr, const LayerCopies& cp) : - lref(std::cref(lyr)), copies(std::cref(cp)) {} - }; - - using LevelID = long long; - using LayerRefs = std::vector; - // layers according to quantized height levels - std::map levels; + auto& levels = m_printer_input; // We have the layer polygon collection but we need to unite them into // an index where the key is the height level in discrete levels (clipper) diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp index 93b88a7df..2d6eb49c2 100644 --- a/src/libslic3r/SLAPrint.hpp +++ b/src/libslic3r/SLAPrint.hpp @@ -200,7 +200,31 @@ private: PrintObjects m_objects; std::vector m_stepmask; - SLAPrinterPtr m_printer; + + // Definition of the print input map. It consists of the slices indexed + // with scaled (clipper) Z coordinates. Also contains the instance + // transformations in scaled and filtered version. This is enough for the + // rasterizer to be able to draw every layer in the right position + using Layer = ExPolygons; + using LayerCopies = std::vector; + struct LayerRef { + std::reference_wrapper lref; + std::reference_wrapper copies; + LayerRef(const Layer& lyr, const LayerCopies& cp) : + lref(std::cref(lyr)), copies(std::cref(cp)) {} + }; + + // Layers according to quantized height levels. This will be consumed by + // the printer (rasterizer) in the SLAPrint class. + using LevelID = long long; + + // One level may contain multiple slices from multiple objects and their + // supports + using LayerRefs = std::vector; + std::map m_printer_input; + + // The printer itself + SLAPrinterPtr m_printer; friend SLAPrintObject; };