diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 4bbc90bb65..6c3ce7a786 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -5598,8 +5598,14 @@ void GCodeViewer::render_legend(float& legend_height) if (imgui.draw_radio_button(name, 1.5f * icon_size, active, draw_callback)) { #if ENABLE_NEW_GCODE_VIEWER - const libvgcode::Interval view_visible_range = m_viewer.get_view_visible_range(); + // check whether we need to keep the current visible range + libvgcode::Interval view_visible_range = m_viewer.get_view_visible_range(); const libvgcode::Interval view_enabled_range = m_viewer.get_view_enabled_range(); + // update visible range to take in account for skipped moves + const uint32_t view_first_visible_gcode_id = m_viewer.get_vertex_at(view_visible_range[0]).gcode_id; + while (view_visible_range[0] > view_enabled_range[0] && view_first_visible_gcode_id == m_viewer.get_vertex_at(view_visible_range[0] - 1).gcode_id) { + --view_visible_range[0]; + } const bool keep_visible_range = view_visible_range != view_enabled_range; #if ENABLE_COG_AND_TOOL_MARKERS if (type == Preview::OptionType::Shells) diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 51c39c850c..e205ca6a2e 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -768,19 +768,16 @@ void Preview::update_moves_slider() if (!skip) { values.emplace_back(static_cast(i + 1)); alternate_values.emplace_back(static_cast(gcode_id)); - } - - if (gcode_id_min.has_value() && alternate_values.back() == static_cast(*gcode_id_min)) - visible_range_min_id = counter; - else if (gcode_id_max.has_value() && alternate_values.back() == static_cast(*gcode_id_max)) - visible_range_max_id = counter; - - if (!skip) + if (gcode_id_min.has_value() && alternate_values.back() == static_cast(*gcode_id_min)) + visible_range_min_id = counter; + else if (gcode_id_max.has_value() && alternate_values.back() == static_cast(*gcode_id_max)) + visible_range_max_id = counter; ++counter; + } } - const int span_min_id = visible_range_min_id.has_value() ? std::max(0, static_cast(*visible_range_min_id) - 1) : 0; - const int span_max_id = visible_range_max_id.has_value() ? std::max(0, static_cast(*visible_range_max_id) - 1) : static_cast(values.size()) - 1; + const int span_min_id = visible_range_min_id.has_value() ? *visible_range_min_id : 0; + const int span_max_id = visible_range_max_id.has_value() ? *visible_range_max_id : static_cast(values.size()) - 1; m_moves_slider->SetSliderValues(values); m_moves_slider->SetSliderAlternateValues(alternate_values);