From 2ec5a0d46ceac9c26876becef60e1a1f6e65db68 Mon Sep 17 00:00:00 2001
From: enricoturri1966 <enricoturri@seznam.cz>
Date: Thu, 5 Nov 2020 11:00:04 +0100
Subject: [PATCH] Fixed visualization of gcode toolpaths for spiral vase mode

---
 src/slic3r/GUI/GCodeViewer.cpp | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index ed5431d19..2de21e7b4 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -112,16 +112,14 @@ bool GCodeViewer::Path::matches(const GCodeProcessor::MoveVertex& move) const
     case EMoveType::Custom_GCode:
     case EMoveType::Retract:
     case EMoveType::Unretract:
-    case EMoveType::Extrude:
-    {
+    case EMoveType::Extrude: {
         // use rounding to reduce the number of generated paths
-        return type == move.type && role == move.extrusion_role && height == round_to_nearest(move.height, 2) &&
+        return type == move.type && move.position[2] <= first.position[2] && role == move.extrusion_role && height == round_to_nearest(move.height, 2) &&
             width == round_to_nearest(move.width, 2) && feedrate == move.feedrate && fan_speed == move.fan_speed &&
             volumetric_rate == round_to_nearest(move.volumetric_rate(), 2) && extruder_id == move.extruder_id &&
             cp_color_id == move.cp_color_id;
     }
-    case EMoveType::Travel:
-    {
+    case EMoveType::Travel: {
         return type == move.type && feedrate == move.feedrate && extruder_id == move.extruder_id && cp_color_id == move.cp_color_id;
     }
     default: { return false; }
@@ -1531,14 +1529,15 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result)
     // dismiss indices data, no more needed
     std::vector<MultiIndexBuffer>().swap(indices);
 
-    // layers zs / roles / extruder ids / cp color ids -> extract from result
+    // layers zs -> extract from result
+    for (const Path& path : m_buffers[buffer_id(EMoveType::Extrude)].paths) {
+        m_layers_zs.emplace_back(static_cast<double>(path.first.position[2]));
+//        m_layers_zs.emplace_back(static_cast<double>(path.last.position[2]));
+    }
+    // roles / extruder ids / cp color ids -> extract from result
     for (size_t i = 0; i < m_moves_count; ++i) {
         const GCodeProcessor::MoveVertex& move = gcode_result.moves[i];
-        if (move.type == EMoveType::Extrude)
-            m_layers_zs.emplace_back(static_cast<double>(move.position[2]));
-
         m_extruder_ids.emplace_back(move.extruder_id);
-
         if (i > 0)
             m_roles.emplace_back(move.extrusion_role);
     }