From 13c67db5a18aeb7d397d2b6e868cad62e40fd95e Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Thu, 11 Jan 2024 14:55:24 +0100 Subject: [PATCH] New gcode visualization integration - Toggling of top layer only view state --- src/libvgcode/include/Viewer.hpp | 6 +++++- src/libvgcode/src/Viewer.cpp | 4 ++-- src/libvgcode/src/ViewerImpl.cpp | 7 +++++-- src/libvgcode/src/ViewerImpl.hpp | 2 +- src/slic3r/GUI/GCodeViewer.cpp | 5 ++++- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/libvgcode/include/Viewer.hpp b/src/libvgcode/include/Viewer.hpp index 5dec41ddc1..5c2852c187 100644 --- a/src/libvgcode/include/Viewer.hpp +++ b/src/libvgcode/include/Viewer.hpp @@ -76,7 +76,11 @@ public: // Whether or not the visible range is limited to the current top layer only. // bool is_top_layer_only_view_range() const; - void set_top_layer_only_view_range(bool top_layer_only); + // + // Toggle the top layer only state. + // + void toggle_top_layer_only_view_range(); + // // Spiral vase mode // Whether or not the gcode was generated with spiral vase mode enabled. diff --git a/src/libvgcode/src/Viewer.cpp b/src/libvgcode/src/Viewer.cpp index e9b02c3b75..267a2c4aab 100644 --- a/src/libvgcode/src/Viewer.cpp +++ b/src/libvgcode/src/Viewer.cpp @@ -67,9 +67,9 @@ bool Viewer::is_top_layer_only_view_range() const return m_impl->is_top_layer_only_view_range(); } -void Viewer::set_top_layer_only_view_range(bool top_layer_only) +void Viewer::toggle_top_layer_only_view_range() { - m_impl->set_top_layer_only_view_range(top_layer_only); + m_impl->toggle_top_layer_only_view_range(); } bool Viewer::is_spiral_vase_mode() const diff --git a/src/libvgcode/src/ViewerImpl.cpp b/src/libvgcode/src/ViewerImpl.cpp index 5309538825..043233329c 100644 --- a/src/libvgcode/src/ViewerImpl.cpp +++ b/src/libvgcode/src/ViewerImpl.cpp @@ -789,9 +789,12 @@ void ViewerImpl::set_layers_view_range(Interval::value_type min, Interval::value m_settings.update_colors = true; } -void ViewerImpl::set_top_layer_only_view_range(bool top_layer_only_view_range) +void ViewerImpl::toggle_top_layer_only_view_range() { - m_settings.top_layer_only_view_range = top_layer_only_view_range; + m_settings.top_layer_only_view_range = !m_settings.top_layer_only_view_range; + update_view_full_range(); + m_view_range.set_visible(m_view_range.get_enabled()); + m_settings.update_enabled_entities = true; m_settings.update_colors = true; } diff --git a/src/libvgcode/src/ViewerImpl.hpp b/src/libvgcode/src/ViewerImpl.hpp index 71fc047e99..4a339213c4 100644 --- a/src/libvgcode/src/ViewerImpl.hpp +++ b/src/libvgcode/src/ViewerImpl.hpp @@ -81,7 +81,7 @@ public: void set_layers_view_range(Interval::value_type min, Interval::value_type max); bool is_top_layer_only_view_range() const { return m_settings.top_layer_only_view_range; } - void set_top_layer_only_view_range(bool top_layer_only_view_range); + void toggle_top_layer_only_view_range(); bool is_spiral_vase_mode() const { return m_settings.spiral_vase_mode; } diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 4c9584f875..c196d924fe 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1108,7 +1108,10 @@ void GCodeViewer::init() #if ENABLE_NEW_GCODE_VIEWER void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const Print& print, const std::vector& str_tool_colors) { - m_viewer.set_top_layer_only_view_range(get_app_config()->get_bool("seq_top_layer_only")); + const bool current_top_layer_only = m_viewer.is_top_layer_only_view_range(); + const bool required_top_layer_only = get_app_config()->get_bool("seq_top_layer_only"); + if (current_top_layer_only != required_top_layer_only) + m_viewer.toggle_top_layer_only_view_range(); std::vector tool_colors; if (m_viewer.get_view_type() == libvgcode::EViewType::Tool && !gcode_result.extruder_colors.empty())