From 6c11615d5942b7ec7044c57ac411c56f5b8aa0a9 Mon Sep 17 00:00:00 2001 From: Dima Buzdyk Date: Fri, 10 May 2024 16:40:59 +0500 Subject: [PATCH 1/2] preview: home/end to move to start/end step of the layer Add HOME and END key action to preview tab which moves horizontal slider position to a first and last position respectively --- src/slic3r/GUI/GLCanvas3D.cpp | 4 ++++ src/slic3r/GUI/KBShortcutsDialog.cpp | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f1bb13d2912..0702552dea1 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3646,6 +3646,10 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) m_moves_slider->SetHigherValue(new_pos); // BBS set as dirty, update in render_gcode() m_moves_slider->set_as_dirty(); + } else if (keyCode == WXK_HOME || keyCode == WXK_END) { + const int new_pos = keyCode == WXK_HOME ? m_moves_slider->GetMinValue() : m_moves_slider->GetMaxValue(); + m_moves_slider->SetHigherValue(new_pos); + m_moves_slider->set_as_dirty(); } m_dirty = true; } diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 7ad3e36cacf..357a628cc7b 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -313,8 +313,8 @@ void KBShortcutsDialog::fill_shortcuts() {L("Ctrl+Any arrow"), L("Move slider 5x faster")}, {L("Ctrl+Mouse wheel"), L("Move slider 5x faster")}, #endif - - + { L("Home"), L("Horizontal slider - Move to start position")}, + { L("End"), L("Horizontal slider - Move to last position")}, }; m_full_shortcuts.push_back({ { _L("Preview"), "" }, preview_shortcuts }); } From a5ae6141acb6557f442288241a7ea8f96b1e308e Mon Sep 17 00:00:00 2001 From: Dima Buzdyk Date: Sat, 11 May 2024 04:10:19 +0500 Subject: [PATCH 2/2] preview: cross-layer gcode inspection Automatically advance gcode preview to the next layer when pressing right at the last step of the layer. Same for the first step of the layer: pressing 'left' will switch preview to the previous layer --- src/slic3r/GUI/GCodeViewer.cpp | 4 ++- src/slic3r/GUI/GLCanvas3D.cpp | 60 ++++++++++++++-------------------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 235373db1d4..e2a4f00a56e 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1732,12 +1732,14 @@ void GCodeViewer::update_moves_slider(bool set_to_max) ++count; } + bool keep_min = m_moves_slider->GetActiveValue() == m_moves_slider->GetMinValue(); + m_moves_slider->SetSliderValues(values); m_moves_slider->SetSliderAlternateValues(alternate_values); m_moves_slider->SetMaxValue(view.endpoints.last - view.endpoints.first); m_moves_slider->SetSelectionSpan(view.current.first - view.endpoints.first, view.current.last - view.endpoints.first); if (set_to_max) - m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); + m_moves_slider->SetHigherValue(keep_min ? m_moves_slider->GetMinValue() : m_moves_slider->GetMaxValue()); } void GCodeViewer::update_layers_slider_mode() diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 0702552dea1..4645b1c023a 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2845,6 +2845,7 @@ void GLCanvas3D::load_gcode_preview(const GCodeProcessorResult& gcode_result, co m_gcode_viewer.init(wxGetApp().get_mode(), wxGetApp().preset_bundle); m_gcode_viewer.load(gcode_result, *this->fff_print(), wxGetApp().plater()->build_volume(), exclude_bounding_box, wxGetApp().get_mode(), only_gcode); + m_gcode_viewer.get_moves_slider()->SetHigherValue(m_gcode_viewer.get_moves_slider()->GetMaxValue()); if (wxGetApp().is_editor()) { //BBS: always load shell at preview, do this in load_shells @@ -3602,55 +3603,44 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) if (m_canvas_type == CanvasPreview) { IMSlider *m_layers_slider = get_gcode_viewer().get_layers_slider(); IMSlider *m_moves_slider = get_gcode_viewer().get_moves_slider(); - if (evt.CmdDown() || evt.ShiftDown()) { - if (evt.GetKeyCode() == 'G') { - m_layers_slider->show_go_to_layer(true); - } - IMSlider *m_layers_slider = get_gcode_viewer().get_layers_slider(); - IMSlider *m_moves_slider = get_gcode_viewer().get_moves_slider(); - if (keyCode == WXK_UP || keyCode == WXK_DOWN) { - int new_pos; - if (m_layers_slider->GetSelection() == ssHigher) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + 5 : m_layers_slider->GetHigherValue() - 5; - m_layers_slider->SetHigherValue(new_pos); - } - else if (m_layers_slider->GetSelection() == ssLower) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + 5 : m_layers_slider->GetLowerValue() - 5; - m_layers_slider->SetLowerValue(new_pos); - } - if (m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); - // BBS set as dirty, update in render_gcode() - m_layers_slider->set_as_dirty(); - } else if (keyCode == WXK_LEFT || keyCode == WXK_RIGHT) { - const int new_pos = keyCode == WXK_RIGHT ? m_moves_slider->GetHigherValue() + 5 : m_moves_slider->GetHigherValue() - 5; - m_moves_slider->SetHigherValue(new_pos); - // BBS set as dirty, update in render_gcode() - m_moves_slider->set_as_dirty(); - } + int increment = (evt.CmdDown() || evt.ShiftDown()) ? 5 : 1; + if ((evt.CmdDown() || evt.ShiftDown()) && evt.GetKeyCode() == 'G') { + m_layers_slider->show_go_to_layer(true); } else if (keyCode == WXK_UP || keyCode == WXK_DOWN) { int new_pos; if (m_layers_slider->GetSelection() == ssHigher) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1; + new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + increment : m_layers_slider->GetHigherValue() - increment; m_layers_slider->SetHigherValue(new_pos); + m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); } else if (m_layers_slider->GetSelection() == ssLower) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + 1 : m_layers_slider->GetLowerValue() - 1; + new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + increment : m_layers_slider->GetLowerValue() - increment; m_layers_slider->SetLowerValue(new_pos); } - if (m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); - // BBS set as dirty, update in render_gcode() - m_layers_slider->set_as_dirty(); - } else if (keyCode == WXK_LEFT || keyCode == WXK_RIGHT) { - const int new_pos = keyCode == WXK_RIGHT ? m_moves_slider->GetHigherValue() + 1 : m_moves_slider->GetHigherValue() - 1; - m_moves_slider->SetHigherValue(new_pos); - // BBS set as dirty, update in render_gcode() - m_moves_slider->set_as_dirty(); + } else if (keyCode == WXK_LEFT) { + if (m_moves_slider->GetHigherValue() == m_moves_slider->GetMinValue() && (m_layers_slider->GetHigherValue() > m_layers_slider->GetMinValue())) { + m_layers_slider->SetHigherValue(m_layers_slider->GetHigherValue() - 1); + m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); + } else { + m_moves_slider->SetHigherValue(m_moves_slider->GetHigherValue() - increment); + } + } else if (keyCode == WXK_RIGHT) { + if (m_moves_slider->GetHigherValue() == m_moves_slider->GetMaxValue() && (m_layers_slider->GetHigherValue() < m_layers_slider->GetMaxValue())) { + m_layers_slider->SetHigherValue(m_layers_slider->GetHigherValue() + 1); + m_moves_slider->SetHigherValue(m_moves_slider->GetMinValue()); + } else { + m_moves_slider->SetHigherValue(m_moves_slider->GetHigherValue() + increment); + } } else if (keyCode == WXK_HOME || keyCode == WXK_END) { const int new_pos = keyCode == WXK_HOME ? m_moves_slider->GetMinValue() : m_moves_slider->GetMaxValue(); m_moves_slider->SetHigherValue(new_pos); m_moves_slider->set_as_dirty(); } + + if (m_layers_slider->is_dirty() && m_layers_slider->is_one_layer()) + m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); + m_dirty = true; } }