From 817df5348095ba583b8147e34e41036a8d429a1d Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 13 Dec 2024 10:16:24 +0100 Subject: [PATCH] Fix missing update of preview: The problem was that when one print preview was loaded, second print was in progress and someone switched to the first bed in 3D view and then switched to preview, the preview was not updated. GCodeViewer remembers last preview it loaded, so it thought that no action is needed. For now, let's just place this ugly patch to make sure that no other functionality is broken. --- src/libslic3r/MultipleBeds.cpp | 1 + src/libslic3r/MultipleBeds.hpp | 1 + src/slic3r/GUI/GCodeViewer.cpp | 3 ++- src/slic3r/GUI/GLCanvas3D.cpp | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/MultipleBeds.cpp b/src/libslic3r/MultipleBeds.cpp index 6ff38a95cf..7ab96dd0a0 100644 --- a/src/libslic3r/MultipleBeds.cpp +++ b/src/libslic3r/MultipleBeds.cpp @@ -12,6 +12,7 @@ namespace Slic3r { MultipleBeds s_multiple_beds; bool s_reload_preview_after_switching_beds = false; bool s_beds_just_switched = false; +bool s_beds_switched_since_last_gcode_load = false; bool is_sliceable(const PrintStatus status) { if (status == PrintStatus::empty) { diff --git a/src/libslic3r/MultipleBeds.hpp b/src/libslic3r/MultipleBeds.hpp index 28679ca665..8f58e98f3a 100644 --- a/src/libslic3r/MultipleBeds.hpp +++ b/src/libslic3r/MultipleBeds.hpp @@ -17,6 +17,7 @@ class Print; extern bool s_reload_preview_after_switching_beds; extern bool s_beds_just_switched; +extern bool s_beds_switched_since_last_gcode_load; namespace BedsGrid { using GridCoords = Vec2crd; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 158f2b39fe..e61360c777 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -870,7 +870,7 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const m_viewer.toggle_top_layer_only_view_range(); // avoid processing if called with the same gcode_result - if (m_last_result_id == gcode_result.id && wxGetApp().is_editor() && ! s_reload_preview_after_switching_beds) { + if (m_last_result_id == gcode_result.id && ! s_beds_switched_since_last_gcode_load && wxGetApp().is_editor() && ! s_reload_preview_after_switching_beds) { // collect tool colors libvgcode::Palette tools_colors; tools_colors.reserve(str_tool_colors.size()); @@ -890,6 +890,7 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const } m_last_result_id = gcode_result.id; + s_beds_switched_since_last_gcode_load = false; // release gpu memory, if used reset(); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 8dc8c56c8b..ee87df4a7d 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -135,6 +135,7 @@ void GLCanvas3D::select_bed(int i, bool triggered_by_user) wxYield(); s_multiple_beds.set_active_bed(i); s_beds_just_switched = true; + s_beds_switched_since_last_gcode_load = true; if (wxGetApp().plater()->is_preview_shown()) { s_reload_preview_after_switching_beds = true; wxPostEvent(wxGetApp().plater(), SimpleEvent(EVT_GLVIEWTOOLBAR_PREVIEW));