diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 8b7df5e680..01d7d6bbd5 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1176,9 +1176,9 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const m_viewer.load(std::move(data)); #if ENABLE_NEW_GCODE_VIEWER_NO_COG_AND_TOOL_MARKERS - const uint32_t vertices_count = m_viewer.get_vertices_count(); + const size_t vertices_count = m_viewer.get_vertices_count(); m_cog.reset(); - for (uint32_t i = 1; i < vertices_count; ++i) { + for (size_t i = 1; i < vertices_count; ++i) { const libvgcode::PathVertex& curr = m_viewer.get_vertex_at(i); if (curr.type == libvgcode::EMoveType::Extrude && curr.role != libvgcode::EGCodeExtrusionRole::Skirt && @@ -1539,9 +1539,10 @@ void GCodeViewer::render() if (m_viewer.get_layers_count() > 0) { render_legend(legend_height); if (m_viewer.get_view_enabled_range()[1] != m_viewer.get_view_visible_range()[1]) { - m_sequential_view.marker.set_world_position(libvgcode::convert(m_viewer.get_current_vertex().position)); + const libvgcode::PathVertex& curr_vertex = m_viewer.get_current_vertex(); + m_sequential_view.marker.set_world_position(libvgcode::convert(curr_vertex.position)); m_sequential_view.marker.set_z_offset(m_z_offset); - m_sequential_view.render(legend_height, &m_viewer, m_viewer.get_current_vertex().gcode_id); + m_sequential_view.render(legend_height, &m_viewer, curr_vertex.gcode_id); } #else //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -1611,7 +1612,7 @@ bool GCodeViewer::can_export_toolpaths() const { //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NEW_GCODE_VIEWER - const std::array& visible_range = m_viewer.get_view_visible_range(); + const libvgcode::Interval& visible_range = m_viewer.get_view_visible_range(); for (size_t i = visible_range[0]; i <= visible_range[1]; ++i) { if (m_viewer.get_vertex_at(i).is_extrusion()) return true; @@ -1630,7 +1631,7 @@ void GCodeViewer::update_sequential_view_current(unsigned int first, unsigned in //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NEW_GCODE_VIEWER m_viewer.set_view_visible_range(static_cast(first), static_cast(last)); - const std::array& enabled_range = m_viewer.get_view_enabled_range(); + const libvgcode::Interval& enabled_range = m_viewer.get_view_enabled_range(); wxGetApp().plater()->enable_preview_moves_slider(enabled_range[1] > enabled_range[0]); #else //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -1798,7 +1799,7 @@ public: fprintf(f_mat.f, "# G-Code Toolpaths Materials\n"); fprintf(f_mat.f, "# Generated by %s-%s based on Slic3r\n", SLIC3R_APP_NAME, SLIC3R_VERSION); - const std::array& visible_range = m_viewer.get_view_visible_range(); + const libvgcode::Interval& visible_range = m_viewer.get_view_visible_range(); for (size_t i = visible_range[0]; i <= visible_range[1]; ++i) { const libvgcode::PathVertex& curr = m_viewer.get_vertex_at(i); const libvgcode::PathVertex& next = m_viewer.get_vertex_at(i + 1); @@ -3989,7 +3990,7 @@ void GCodeViewer::render_new_toolpaths() ImGui::TableSetColumnIndex(0); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "# enabled lines"); ImGui::TableSetColumnIndex(1); - const std::array& enabled_segments_range = m_viewer.get_enabled_segments_range(); + const libvgcode::Interval& enabled_segments_range = m_viewer.get_enabled_segments_range(); imgui.text(std::to_string(m_viewer.get_enabled_segments_count()) + " [" + std::to_string(enabled_segments_range[0]) + "-" + std::to_string(enabled_segments_range[1]) + "]"); @@ -3997,7 +3998,7 @@ void GCodeViewer::render_new_toolpaths() ImGui::TableSetColumnIndex(0); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "# enabled options"); ImGui::TableSetColumnIndex(1); - const std::array& enabled_options_range = m_viewer.get_enabled_options_range(); + const libvgcode::Interval& enabled_options_range = m_viewer.get_enabled_options_range(); imgui.text(std::to_string(m_viewer.get_enabled_options_count()) + " [" + std::to_string(enabled_options_range[0]) + "-" + std::to_string(enabled_options_range[1]) + "]"); @@ -4007,14 +4008,14 @@ void GCodeViewer::render_new_toolpaths() ImGui::TableSetColumnIndex(0); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "layers range"); ImGui::TableSetColumnIndex(1); - const std::array& layers_range = m_viewer.get_layers_view_range(); + const libvgcode::Interval& layers_range = m_viewer.get_layers_view_range(); imgui.text(std::to_string(layers_range[0]) + " - " + std::to_string(layers_range[1])); ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (full)"); ImGui::TableSetColumnIndex(1); - const std::array& full_view_range = m_viewer.get_view_full_range(); + const libvgcode::Interval& full_view_range = m_viewer.get_view_full_range(); imgui.text(std::to_string(full_view_range[0]) + " - " + std::to_string(full_view_range[1]) + " | " + std::to_string(m_viewer.get_vertex_at(full_view_range[0]).gcode_id) + " - " + std::to_string(m_viewer.get_vertex_at(full_view_range[1]).gcode_id)); @@ -4023,7 +4024,7 @@ void GCodeViewer::render_new_toolpaths() ImGui::TableSetColumnIndex(0); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (enabled)"); ImGui::TableSetColumnIndex(1); - const std::array& enabled_view_range = m_viewer.get_view_enabled_range(); + const libvgcode::Interval& enabled_view_range = m_viewer.get_view_enabled_range(); imgui.text(std::to_string(enabled_view_range[0]) + " - " + std::to_string(enabled_view_range[1]) + " | " + std::to_string(m_viewer.get_vertex_at(enabled_view_range[0]).gcode_id) + " - " + std::to_string(m_viewer.get_vertex_at(enabled_view_range[1]).gcode_id)); @@ -4032,7 +4033,7 @@ void GCodeViewer::render_new_toolpaths() ImGui::TableSetColumnIndex(0); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (visible)"); ImGui::TableSetColumnIndex(1); - const std::array& visible_view_range = m_viewer.get_view_visible_range(); + const libvgcode::Interval& visible_view_range = m_viewer.get_view_visible_range(); imgui.text(std::to_string(visible_view_range[0]) + " - " + std::to_string(visible_view_range[1]) + " | " + std::to_string(m_viewer.get_vertex_at(visible_view_range[0]).gcode_id) + " - " + std::to_string(m_viewer.get_vertex_at(visible_view_range[1]).gcode_id)); @@ -5152,8 +5153,8 @@ void GCodeViewer::render_legend(float& legend_height) append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_extrusion_role_color(role)), labels[i], visible, times[i], percents[i], max_time_percent, offsets, used_filaments_m[i], used_filaments_g[i], [this, role]() { - const std::array view_visible_range = m_viewer.get_view_visible_range(); - const std::array view_enabled_range = m_viewer.get_view_enabled_range(); + const libvgcode::Interval view_visible_range = m_viewer.get_view_visible_range(); + const libvgcode::Interval view_enabled_range = m_viewer.get_view_enabled_range(); m_viewer.toggle_extrusion_role_visibility((libvgcode::EGCodeExtrusionRole)role); std::optional view_visible_range_min; std::optional view_visible_range_max; @@ -5884,8 +5885,8 @@ 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 std::array view_visible_range = m_viewer.get_view_visible_range(); - const std::array view_enabled_range = m_viewer.get_view_enabled_range(); + const libvgcode::Interval& view_visible_range = m_viewer.get_view_visible_range(); + const libvgcode::Interval& view_enabled_range = m_viewer.get_view_enabled_range(); bool keep_visible_range = false; #if ENABLE_NEW_GCODE_VIEWER_NO_COG_AND_TOOL_MARKERS switch (type) diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 81db74aeca..c3e8f212c2 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -1053,21 +1053,21 @@ public: //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NEW_GCODE_VIEWER - const std::array& get_gcode_view_full_range() const { return m_viewer.get_view_full_range(); } - const std::array& get_gcode_view_enabled_range() const { return m_viewer.get_view_enabled_range(); } - const std::array& get_gcode_view_visible_range() const { return m_viewer.get_view_visible_range(); } - libvgcode::PathVertex get_gcode_vertex_at(size_t id) const { return m_viewer.get_vertex_at(id); } + const libvgcode::Interval& get_gcode_view_full_range() const { return m_viewer.get_view_full_range(); } + const libvgcode::Interval& get_gcode_view_enabled_range() const { return m_viewer.get_view_enabled_range(); } + const libvgcode::Interval& get_gcode_view_visible_range() const { return m_viewer.get_view_visible_range(); } + const libvgcode::PathVertex& get_gcode_vertex_at(size_t id) const { return m_viewer.get_vertex_at(id); } #endif // ENABLE_NEW_GCODE_VIEWER //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool is_contained_in_bed() const { return m_contained_in_bed; } -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NEW_GCODE_VIEWER void set_view_type(libvgcode::EViewType type) { m_viewer.set_view_type(type); } libvgcode::EViewType get_view_type() const { return m_viewer.get_view_type(); } #else -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ EViewType get_view_type() const { return m_view_type; } void set_view_type(EViewType type) { if (type == EViewType::Count) @@ -1081,9 +1081,9 @@ public: void set_toolpath_role_visibility_flags(unsigned int flags) { m_extrusions.role_visibility_flags = flags; } unsigned int get_options_visibility_flags() const; void set_options_visibility_from_flags(unsigned int flags); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #endif // ENABLE_NEW_GCODE_VIEWER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ void set_layers_z_range(const std::array& layers_z_range); //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 81f5d4023d..8fdcab0dc9 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -744,10 +744,10 @@ public: //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NEW_GCODE_VIEWER void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } - const std::array& get_gcode_view_full_range() const { return m_gcode_viewer.get_gcode_view_full_range(); } - const std::array& get_gcode_view_enabled_range() const { return m_gcode_viewer.get_gcode_view_enabled_range(); } - const std::array& get_gcode_view_visible_range() const { return m_gcode_viewer.get_gcode_view_visible_range(); } - libvgcode::PathVertex get_gcode_vertex_at(size_t id) const { return m_gcode_viewer.get_gcode_vertex_at(id); } + const libvgcode::Interval& get_gcode_view_full_range() const { return m_gcode_viewer.get_gcode_view_full_range(); } + const libvgcode::Interval& get_gcode_view_enabled_range() const { return m_gcode_viewer.get_gcode_view_enabled_range(); } + const libvgcode::Interval& get_gcode_view_visible_range() const { return m_gcode_viewer.get_gcode_view_visible_range(); } + const libvgcode::PathVertex& get_gcode_vertex_at(size_t id) const { return m_gcode_viewer.get_gcode_vertex_at(id); } #else //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 24abcd2e13..c7197ee8ea 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -733,10 +733,10 @@ void Preview::update_moves_slider() if (m_gcode_result->moves.empty()) return; - const std::array& range = m_canvas->get_gcode_view_enabled_range(); - uint32_t last_gcode_id = m_canvas->get_gcode_vertex_at(static_cast(range[0])).gcode_id; + const libvgcode::Interval& range = m_canvas->get_gcode_view_enabled_range(); + uint32_t last_gcode_id = m_canvas->get_gcode_vertex_at(range[0]).gcode_id; - const size_t range_size = static_cast(range[1] - range[0] + 1); + const size_t range_size = range[1] - range[0] + 1; std::vector values; values.reserve(range_size); std::vector alternate_values; @@ -746,8 +746,8 @@ void Preview::update_moves_slider() std::optional visible_range_max_id; uint32_t counter = 0; - for (uint32_t i = range[0]; i <= range[1]; ++i) { - const uint32_t gcode_id = m_canvas->get_gcode_vertex_at(static_cast(i)).gcode_id; + for (size_t i = range[0]; i <= range[1]; ++i) { + const uint32_t gcode_id = m_canvas->get_gcode_vertex_at(i).gcode_id; if (i > range[0]) { // skip consecutive moves with same gcode id (resulting from processing G2 and G3 lines) if (last_gcode_id == gcode_id) { diff --git a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp index 2c63af75a8..768c4b2d39 100644 --- a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp +++ b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp @@ -713,8 +713,7 @@ static void convert_objects_to_vertices(const Slic3r::SpanOfConstPtrs; // using AABox = std::array; +// +// One dimensional natural numbers interval +// [0] -> min +// [1] -> max +// +using Interval = std::array; + // // View types // diff --git a/src/slic3r/GUI/LibVGCode/include/Viewer.hpp b/src/slic3r/GUI/LibVGCode/include/Viewer.hpp index e89182e75a..fcc8b17d93 100644 --- a/src/slic3r/GUI/LibVGCode/include/Viewer.hpp +++ b/src/slic3r/GUI/LibVGCode/include/Viewer.hpp @@ -40,9 +40,9 @@ public: ETimeMode get_time_mode() const; void set_time_mode(ETimeMode mode); - const std::array& get_layers_view_range() const; - void set_layers_view_range(const std::array& range); - void set_layers_view_range(uint32_t min, uint32_t max); + const Interval& get_layers_view_range() const; + void set_layers_view_range(const Interval& range); + void set_layers_view_range(Interval::value_type min, Interval::value_type max); bool is_top_layer_only_view_range() const; void set_top_layer_only_view_range(bool top_layer_only_view_range); @@ -64,9 +64,9 @@ public: bool is_extrusion_role_visible(EGCodeExtrusionRole role) const; void toggle_extrusion_role_visibility(EGCodeExtrusionRole role); - const std::array& get_view_full_range() const; - const std::array& get_view_enabled_range() const; - const std::array& get_view_visible_range() const; + const Interval& get_view_full_range() const; + const Interval& get_view_enabled_range() const; + const Interval& get_view_visible_range() const; // // min must be smaller than max @@ -77,17 +77,17 @@ public: // // Return the count of vertices used to render the toolpaths // - uint32_t get_vertices_count() const; + size_t get_vertices_count() const; // // Return the vertex pointed by the max value of the view current range // - PathVertex get_current_vertex() const; + const PathVertex& get_current_vertex() const; // // Return the vertex at the given index // - PathVertex get_vertex_at(uint32_t id) const; + const PathVertex& get_vertex_at(size_t id) const; Color get_vertex_color(const PathVertex& vertex) const; @@ -96,14 +96,14 @@ public: // size_t get_enabled_segments_count() const; - const std::array& get_enabled_segments_range() const; + const Interval& get_enabled_segments_range() const; // // Return the count of options enabled for rendering // size_t get_enabled_options_count() const; - const std::array& get_enabled_options_range() const; + const Interval& get_enabled_options_range() const; // // Return the count of detected extrusion roles diff --git a/src/slic3r/GUI/LibVGCode/src/Layers.cpp b/src/slic3r/GUI/LibVGCode/src/Layers.cpp index 498fbcfbff..7783f4dfb4 100644 --- a/src/slic3r/GUI/LibVGCode/src/Layers.cpp +++ b/src/slic3r/GUI/LibVGCode/src/Layers.cpp @@ -94,7 +94,7 @@ float Layers::get_layer_time(ETimeMode mode, size_t layer_id) const float Layers::get_layer_z(size_t layer_id) const { - return (layer_id < m_items.size()) ? m_items[layer_id].z : 0.0f; + return (layer_id < m_items.size()) ? m_items[layer_id].z : 0.0f; } size_t Layers::get_layer_id_at(float z) const @@ -103,17 +103,17 @@ size_t Layers::get_layer_id_at(float z) const return std::distance(m_items.begin(), iter); } -const std::array& Layers::get_view_range() const +const Interval& Layers::get_view_range() const { return m_view_range.get(); } -void Layers::set_view_range(const std::array& range) +void Layers::set_view_range(const Interval& range) { set_view_range(range[0], range[1]); } -void Layers::set_view_range(uint32_t min, uint32_t max) +void Layers::set_view_range(Interval::value_type min, Interval::value_type max) { m_view_range.set(min, max); } diff --git a/src/slic3r/GUI/LibVGCode/src/Layers.hpp b/src/slic3r/GUI/LibVGCode/src/Layers.hpp index 800f332365..3b6a37b1f8 100644 --- a/src/slic3r/GUI/LibVGCode/src/Layers.hpp +++ b/src/slic3r/GUI/LibVGCode/src/Layers.hpp @@ -10,7 +10,6 @@ #if ENABLE_NEW_GCODE_VIEWER //################################################################################################################################ -#include "../include/Types.hpp" #include "Range.hpp" namespace libvgcode { @@ -20,36 +19,36 @@ struct PathVertex; class Layers { public: - void update(const PathVertex& vertex, uint32_t vertex_id); - void reset(); - - bool empty() const; - size_t count() const; - - std::vector get_times(ETimeMode mode) const; - std::vector get_zs() const; - - float get_layer_time(ETimeMode mode, size_t layer_id) const; - float get_layer_z(size_t layer_id) const; - size_t get_layer_id_at(float z) const; - - const std::array& get_view_range() const; - void set_view_range(const std::array& range); - void set_view_range(uint32_t min, uint32_t max); - - bool layer_contains_colorprint_options(size_t layer_id) const; + void update(const PathVertex& vertex, uint32_t vertex_id); + void reset(); + + bool empty() const; + size_t count() const; + + std::vector get_times(ETimeMode mode) const; + std::vector get_zs() const; + + float get_layer_time(ETimeMode mode, size_t layer_id) const; + float get_layer_z(size_t layer_id) const; + size_t get_layer_id_at(float z) const; + + const Interval& get_view_range() const; + void set_view_range(const Interval& range); + void set_view_range(Interval::value_type min, Interval::value_type max); + + bool layer_contains_colorprint_options(size_t layer_id) const; private: - struct Item - { - float z{ 0.0f }; - Range range; - std::array times{ 0.0f, 0.0f }; - bool contains_colorprint_options{ false }; - }; - - std::vector m_items; - Range m_view_range; + struct Item + { + float z{ 0.0f }; + Range range; + std::array times{ 0.0f, 0.0f }; + bool contains_colorprint_options{ false }; + }; + + std::vector m_items; + Range m_view_range; }; } // namespace libvgcode diff --git a/src/slic3r/GUI/LibVGCode/src/Range.cpp b/src/slic3r/GUI/LibVGCode/src/Range.cpp index 2236ecb9fd..8342303809 100644 --- a/src/slic3r/GUI/LibVGCode/src/Range.cpp +++ b/src/slic3r/GUI/LibVGCode/src/Range.cpp @@ -18,68 +18,68 @@ namespace libvgcode { -const std::array& Range::get() const +const Interval& Range::get() const { - return m_range; + return m_range; } void Range::set(const Range& other) { - m_range = other.m_range; + m_range = other.m_range; } -void Range::set(const std::array& range) +void Range::set(const Interval& range) { - set(range[0], range[1]); + set(range[0], range[1]); } -void Range::set(uint32_t min, uint32_t max) +void Range::set(Interval::value_type min, Interval::value_type max) { - if (max < min) - std::swap(min, max); - m_range[0] = min; - m_range[1] = max; + if (max < min) + std::swap(min, max); + m_range[0] = min; + m_range[1] = max; } -uint32_t Range::get_min() const +Interval::value_type Range::get_min() const { - return m_range[0]; + return m_range[0]; } -void Range::set_min(uint32_t min) +void Range::set_min(Interval::value_type min) { - set(min, m_range[1]); + set(min, m_range[1]); } -uint32_t Range::get_max() const +Interval::value_type Range::get_max() const { - return m_range[1]; + return m_range[1]; } -void Range::set_max(uint32_t max) +void Range::set_max(Interval::value_type max) { - set(m_range[0], max); + set(m_range[0], max); } void Range::clamp(Range& other) { - other.m_range[0] = std::clamp(other.m_range[0], m_range[0], m_range[1]); - other.m_range[1] = std::clamp(other.m_range[1], m_range[0], m_range[1]); + other.m_range[0] = std::clamp(other.m_range[0], m_range[0], m_range[1]); + other.m_range[1] = std::clamp(other.m_range[1], m_range[0], m_range[1]); } void Range::reset() { - m_range = { 0, 0 }; + m_range = { 0, 0 }; } bool Range::operator == (const Range& other) const { - return m_range == other.m_range; + return m_range == other.m_range; } bool Range::operator != (const Range& other) const { - return m_range != other.m_range; + return m_range != other.m_range; } } // namespace libvgcode diff --git a/src/slic3r/GUI/LibVGCode/src/Range.hpp b/src/slic3r/GUI/LibVGCode/src/Range.hpp index 973d443c46..187611543a 100644 --- a/src/slic3r/GUI/LibVGCode/src/Range.hpp +++ b/src/slic3r/GUI/LibVGCode/src/Range.hpp @@ -10,38 +10,33 @@ #if ENABLE_NEW_GCODE_VIEWER //################################################################################################################################ -#include -#include +#include "../include/Types.hpp" namespace libvgcode { class Range { public: - const std::array& get() const; - void set(const Range& other); - void set(const std::array& range); - void set(uint32_t min, uint32_t max); - - uint32_t get_min() const; - void set_min(uint32_t min); - - uint32_t get_max() const; - void set_max(uint32_t max); - - // clamp the given range to stay inside this range - void clamp(Range& other); - void reset(); - - bool operator == (const Range& other) const; - bool operator != (const Range& other) const; + const Interval& get() const; + void set(const Range& other); + void set(const Interval& range); + void set(Interval::value_type min, Interval::value_type max); + + Interval::value_type get_min() const; + void set_min(Interval::value_type min); + + Interval::value_type get_max() const; + void set_max(Interval::value_type max); + + // clamp the given range to stay inside this range + void clamp(Range& other); + void reset(); + + bool operator == (const Range& other) const; + bool operator != (const Range& other) const; private: - // - // [0] = min - // [1] = max - // - std::array m_range{ 0, 0 }; + Interval m_range{ 0, 0 }; }; } // namespace libvgcode diff --git a/src/slic3r/GUI/LibVGCode/src/ViewRange.cpp b/src/slic3r/GUI/LibVGCode/src/ViewRange.cpp index 70fac55987..06a13ee5f3 100644 --- a/src/slic3r/GUI/LibVGCode/src/ViewRange.cpp +++ b/src/slic3r/GUI/LibVGCode/src/ViewRange.cpp @@ -16,89 +16,89 @@ namespace libvgcode { -const std::array& ViewRange::get_full() const +const Interval& ViewRange::get_full() const { - return m_full.get(); + return m_full.get(); } void ViewRange::set_full(const Range& other) { - set_full(other.get()); + set_full(other.get()); } -void ViewRange::set_full(const std::array& range) +void ViewRange::set_full(const Interval& range) { - set_full(range[0], range[1]); + set_full(range[0], range[1]); } -void ViewRange::set_full(uint32_t min, uint32_t max) +void ViewRange::set_full(Interval::value_type min, Interval::value_type max) { - // is the full range being extended ? - const bool new_max = max > m_full.get_max(); - m_full.set(min, max); - // force the enabled range to stay inside the modified full range - m_full.clamp(m_enabled); - // force the visible range to stay inside the modified enabled range - m_enabled.clamp(m_visible); - if (new_max) - // force the enabled range to fill the extended full range - m_enabled.set_max(max); + // is the full range being extended ? + const bool new_max = max > m_full.get_max(); + m_full.set(min, max); + // force the enabled range to stay inside the modified full range + m_full.clamp(m_enabled); + // force the visible range to stay inside the modified enabled range + m_enabled.clamp(m_visible); + if (new_max) + // force the enabled range to fill the extended full range + m_enabled.set_max(max); } -const std::array& ViewRange::get_enabled() const +const Interval& ViewRange::get_enabled() const { - return m_enabled.get(); + return m_enabled.get(); } void ViewRange::set_enabled(const Range& other) { - set_enabled(other.get()); + set_enabled(other.get()); } -void ViewRange::set_enabled(const std::array& range) +void ViewRange::set_enabled(const Interval& range) { - set_enabled(range[0], range[1]); + set_enabled(range[0], range[1]); } -void ViewRange::set_enabled(uint32_t min, uint32_t max) +void ViewRange::set_enabled(Interval::value_type min, Interval::value_type max) { - // is the enabled range being extended ? - const bool new_max = max > m_enabled.get_max(); - m_enabled.set(min, max); - // force the visible range to stay inside the modified enabled range - m_enabled.clamp(m_visible); - if (new_max) - // force the visible range to fill the extended enabled range - m_visible.set_max(max); + // is the enabled range being extended ? + const bool new_max = max > m_enabled.get_max(); + m_enabled.set(min, max); + // force the visible range to stay inside the modified enabled range + m_enabled.clamp(m_visible); + if (new_max) + // force the visible range to fill the extended enabled range + m_visible.set_max(max); } -const std::array& ViewRange::get_visible() const +const Interval& ViewRange::get_visible() const { - return m_visible.get(); + return m_visible.get(); } void ViewRange::set_visible(const Range& other) { - set_visible(other.get()); + set_visible(other.get()); } -void ViewRange::set_visible(const std::array& range) +void ViewRange::set_visible(const Interval& range) { - set_visible(range[0], range[1]); + set_visible(range[0], range[1]); } -void ViewRange::set_visible(uint32_t min, uint32_t max) +void ViewRange::set_visible(Interval::value_type min, Interval::value_type max) { - m_visible.set(min, max); - // force the visible range to stay inside the enabled range - m_enabled.clamp(m_visible); + m_visible.set(min, max); + // force the visible range to stay inside the enabled range + m_enabled.clamp(m_visible); } void ViewRange::reset() { - m_full.reset(); - m_enabled.reset(); - m_visible.reset(); + m_full.reset(); + m_enabled.reset(); + m_visible.reset(); } } // namespace libvgcode diff --git a/src/slic3r/GUI/LibVGCode/src/ViewRange.hpp b/src/slic3r/GUI/LibVGCode/src/ViewRange.hpp index 2603c82a12..210d6a5557 100644 --- a/src/slic3r/GUI/LibVGCode/src/ViewRange.hpp +++ b/src/slic3r/GUI/LibVGCode/src/ViewRange.hpp @@ -17,43 +17,43 @@ namespace libvgcode { class ViewRange { public: - const std::array& get_full() const; - void set_full(const Range& other); - void set_full(const std::array& range); - void set_full(uint32_t min, uint32_t max); + const Interval& get_full() const; + void set_full(const Range& other); + void set_full(const Interval& range); + void set_full(Interval::value_type min, Interval::value_type max); - const std::array& get_enabled() const; - void set_enabled(const Range& other); - void set_enabled(const std::array& range); - void set_enabled(uint32_t min, uint32_t max); + const Interval& get_enabled() const; + void set_enabled(const Range& other); + void set_enabled(const Interval& range); + void set_enabled(Interval::value_type min, Interval::value_type max); - const std::array& get_visible() const; + const Interval& get_visible() const; void set_visible(const Range& other); - void set_visible(const std::array& range); - void set_visible(uint32_t min, uint32_t max); + void set_visible(const Interval& range); + void set_visible(Interval::value_type min, Interval::value_type max); - void reset(); + void reset(); private: - // - // Full range - // The range of moves that could potentially be visible. - // It is usually equal to the enabled range, unless Settings::top_layer_only_view_range is set to true. - // - Range m_full; + // + // Full range + // The range of moves that could potentially be visible. + // It is usually equal to the enabled range, unless Settings::top_layer_only_view_range is set to true. + // + Range m_full; - // - // Enabled range - // The range of moves that are enabled for visualization. - // It is usually equal to the full range, unless Settings::top_layer_only_view_range is set to true. - // - Range m_enabled; + // + // Enabled range + // The range of moves that are enabled for visualization. + // It is usually equal to the full range, unless Settings::top_layer_only_view_range is set to true. + // + Range m_enabled; - // - // Visible range - // The range of moves that are currently rendered. - // - Range m_visible; + // + // Visible range + // The range of moves that are currently rendered. + // + Range m_visible; }; } // namespace libvgcode diff --git a/src/slic3r/GUI/LibVGCode/src/Viewer.cpp b/src/slic3r/GUI/LibVGCode/src/Viewer.cpp index 6663f129d5..d545f3be33 100644 --- a/src/slic3r/GUI/LibVGCode/src/Viewer.cpp +++ b/src/slic3r/GUI/LibVGCode/src/Viewer.cpp @@ -67,17 +67,17 @@ void Viewer::set_time_mode(ETimeMode mode) m_impl->set_time_mode(mode); } -const std::array& Viewer::get_layers_view_range() const +const Interval& Viewer::get_layers_view_range() const { return m_impl->get_layers_view_range(); } -void Viewer::set_layers_view_range(const std::array& range) +void Viewer::set_layers_view_range(const Interval& range) { m_impl->set_layers_view_range(range); } -void Viewer::set_layers_view_range(uint32_t min, uint32_t max) +void Viewer::set_layers_view_range(Interval::value_type min, Interval::value_type max) { m_impl->set_layers_view_range(min, max); } @@ -147,17 +147,17 @@ void Viewer::toggle_extrusion_role_visibility(EGCodeExtrusionRole role) m_impl->toggle_extrusion_role_visibility(role); } -const std::array& Viewer::get_view_full_range() const +const Interval& Viewer::get_view_full_range() const { return m_impl->get_view_full_range(); } -const std::array& Viewer::get_view_enabled_range() const +const Interval& Viewer::get_view_enabled_range() const { return m_impl->get_view_enabled_range(); } -const std::array& Viewer::get_view_visible_range() const +const Interval& Viewer::get_view_visible_range() const { return m_impl->get_view_visible_range(); } @@ -167,17 +167,17 @@ void Viewer::set_view_visible_range(uint32_t min, uint32_t max) m_impl->set_view_visible_range(min, max); } -uint32_t Viewer::get_vertices_count() const +size_t Viewer::get_vertices_count() const { return m_impl->get_vertices_count(); } -PathVertex Viewer::get_current_vertex() const +const PathVertex& Viewer::get_current_vertex() const { return m_impl->get_current_vertex(); } -PathVertex Viewer::get_vertex_at(uint32_t id) const +const PathVertex& Viewer::get_vertex_at(size_t id) const { return m_impl->get_vertex_at(id); } @@ -192,7 +192,7 @@ size_t Viewer::get_enabled_segments_count() const return m_impl->get_enabled_segments_count(); } -const std::array& Viewer::get_enabled_segments_range() const +const Interval& Viewer::get_enabled_segments_range() const { return m_impl->get_enabled_segments_range(); } @@ -202,7 +202,7 @@ size_t Viewer::get_enabled_options_count() const return m_impl->get_enabled_options_count(); } -const std::array& Viewer::get_enabled_options_range() const +const Interval& Viewer::get_enabled_options_range() const { return m_impl->get_enabled_options_range(); } diff --git a/src/slic3r/GUI/LibVGCode/src/ViewerImpl.cpp b/src/slic3r/GUI/LibVGCode/src/ViewerImpl.cpp index b28ea83489..6e7cf984ff 100644 --- a/src/slic3r/GUI/LibVGCode/src/ViewerImpl.cpp +++ b/src/slic3r/GUI/LibVGCode/src/ViewerImpl.cpp @@ -603,7 +603,7 @@ void ViewerImpl::update_enabled_entities() { std::vector enabled_segments; std::vector enabled_options; - std::array range = m_view_range.get_visible(); + Interval range = m_view_range.get_visible(); // when top layer only visualization is enabled, we need to render // all the toolpaths in the other layers as grayed, so extend the range @@ -617,7 +617,7 @@ void ViewerImpl::update_enabled_entities() if (m_settings.spiral_vase_mode) { // when spiral vase mode is enabled and only one layer is shown, extend the range by one step - const std::array& layers_range = m_layers.get_view_range(); + const Interval& layers_range = m_layers.get_view_range(); if (layers_range[0] > 0 && layers_range[0] == layers_range[1]) --range[0]; } @@ -765,17 +765,17 @@ void ViewerImpl::set_time_mode(ETimeMode mode) m_settings.update_colors = true; } -const std::array& ViewerImpl::get_layers_view_range() const +const Interval& ViewerImpl::get_layers_view_range() const { return m_layers.get_view_range(); } -void ViewerImpl::set_layers_view_range(const std::array& range) +void ViewerImpl::set_layers_view_range(const Interval& range) { set_layers_view_range(range[0], range[1]); } -void ViewerImpl::set_layers_view_range(uint32_t min, uint32_t max) +void ViewerImpl::set_layers_view_range(Interval::value_type min, Interval::value_type max) { m_layers.set_view_range(min, max); // force immediate update of the full range @@ -847,63 +847,49 @@ AABox ViewerImpl::get_bounding_box(EBBoxType type) const bool ViewerImpl::is_option_visible(EOptionType type) const { - try { - return m_settings.options_visibility.at(type); - } - catch (...) { - return false; - } + const auto it = m_settings.options_visibility.find(type); + return (it == m_settings.options_visibility.end()) ? false : it->second; } void ViewerImpl::toggle_option_visibility(EOptionType type) { - try { - bool& value = m_settings.options_visibility.at(type); - value = !value; + auto it = m_settings.options_visibility.find(type); + if (it != m_settings.options_visibility.end()) { + it->second = !it->second; update_view_full_range(); m_settings.update_enabled_entities = true; m_settings.update_colors = true; } - catch (...) { - // do nothing; - } } bool ViewerImpl::is_extrusion_role_visible(EGCodeExtrusionRole role) const { - try { - return m_settings.extrusion_roles_visibility.at(role); - } - catch (...) { - return false; - } + const auto it = m_settings.extrusion_roles_visibility.find(role); + return (it == m_settings.extrusion_roles_visibility.end()) ? false : it->second; } void ViewerImpl::toggle_extrusion_role_visibility(EGCodeExtrusionRole role) { - try { - bool& value = m_settings.extrusion_roles_visibility.at(role); - value = !value; + auto it = m_settings.extrusion_roles_visibility.find(role); + if (it != m_settings.extrusion_roles_visibility.end()) { + it->second = !it->second; update_view_full_range(); m_settings.update_enabled_entities = true; m_settings.update_colors = true; } - catch (...) { - // do nothing; - } } -const std::array& ViewerImpl::get_view_full_range() const +const Interval& ViewerImpl::get_view_full_range() const { return m_view_range.get_full(); } -const std::array& ViewerImpl::get_view_enabled_range() const +const Interval& ViewerImpl::get_view_enabled_range() const { return m_view_range.get_enabled(); } -const std::array& ViewerImpl::get_view_visible_range() const +const Interval& ViewerImpl::get_view_visible_range() const { return m_view_range.get_visible(); } @@ -923,14 +909,14 @@ size_t ViewerImpl::get_vertices_count() const return m_vertices.size(); } -PathVertex ViewerImpl::get_current_vertex() const +const PathVertex& ViewerImpl::get_current_vertex() const { - return m_vertices[m_view_range.get_visible()[1]]; + return get_vertex_at(m_view_range.get_visible()[1]); } -PathVertex ViewerImpl::get_vertex_at(size_t id) const +const PathVertex& ViewerImpl::get_vertex_at(size_t id) const { - return (id < m_vertices.size()) ? m_vertices[id] : PathVertex(); + return (id < m_vertices.size()) ? m_vertices[id] : Dummy_Path_Vertex; } Color ViewerImpl::get_vertex_color(const PathVertex& v) const @@ -942,7 +928,7 @@ Color ViewerImpl::get_vertex_color(const PathVertex& v) const return Wipe_Color; if (v.is_option()) - return get_option_color(type_to_option(v.type)); + return get_option_color(type_to_option(v.type)); switch (m_settings.view_type) { @@ -1005,7 +991,7 @@ size_t ViewerImpl::get_enabled_segments_count() const return m_enabled_segments_count; } -const std::array& ViewerImpl::get_enabled_segments_range() const +const Interval& ViewerImpl::get_enabled_segments_range() const { return m_enabled_segments_range.get(); } @@ -1015,7 +1001,7 @@ size_t ViewerImpl::get_enabled_options_count() const return m_enabled_options_count; } -const std::array& ViewerImpl::get_enabled_options_range() const +const Interval& ViewerImpl::get_enabled_options_range() const { return m_enabled_options_range.get(); } @@ -1078,15 +1064,15 @@ void ViewerImpl::set_tool_colors(const std::vector& colors) const Color& ViewerImpl::get_extrusion_role_color(EGCodeExtrusionRole role) const { - auto it = m_extrusion_roles_colors.find(role); - return (it != m_extrusion_roles_colors.end()) ? m_extrusion_roles_colors.at(role) : Dummy_Color; + const auto it = m_extrusion_roles_colors.find(role); + return (it == m_extrusion_roles_colors.end()) ? Dummy_Color : it->second; } void ViewerImpl::set_extrusion_role_color(EGCodeExtrusionRole role, const Color& color) { auto it = m_extrusion_roles_colors.find(role); if (it != m_extrusion_roles_colors.end()) - m_extrusion_roles_colors[role] = color; + it->second = color; } void ViewerImpl::reset_default_extrusion_roles_colors() @@ -1096,15 +1082,15 @@ void ViewerImpl::reset_default_extrusion_roles_colors() const Color& ViewerImpl::get_option_color(EOptionType type) const { - auto it = m_options_colors.find(type); - return (it != m_options_colors.end()) ? m_options_colors.at(type) : Dummy_Color; + const auto it = m_options_colors.find(type); + return (it == m_options_colors.end()) ? Dummy_Color : it->second; } void ViewerImpl::set_option_color(EOptionType type, const Color& color) { auto it = m_options_colors.find(type); if (it != m_options_colors.end()) - m_options_colors[type] = color; + it->second = color; } void ViewerImpl::reset_default_options_colors() @@ -1114,15 +1100,15 @@ void ViewerImpl::reset_default_options_colors() const Color& ViewerImpl::get_travel_move_color(ETravelMoveType type) const { - auto it = m_travel_moves_colors.find(type); - return (it != m_travel_moves_colors.end()) ? m_travel_moves_colors.at(type) : Dummy_Color; + const auto it = m_travel_moves_colors.find(type); + return (it == m_travel_moves_colors.end()) ? Dummy_Color : it->second; } void ViewerImpl::set_travel_move_color(ETravelMoveType type, const Color& color) { auto it = m_travel_moves_colors.find(type); if (it != m_travel_moves_colors.end()) - m_travel_moves_colors[type] = color; + it->second = color; } void ViewerImpl::reset_default_travel_moves_colors() @@ -1162,12 +1148,8 @@ const ColorRange& ViewerImpl::get_volumetric_rate_range() const const ColorRange& ViewerImpl::get_layer_time_range(EColorRangeType type) const { - try { - return m_layer_time_range[static_cast(type)]; - } - catch (...) { - return ColorRange::Dummy_Color_Range; - } + return (static_cast(type) < m_layer_time_range.size()) ? + m_layer_time_range[static_cast(type)] : ColorRange::Dummy_Color_Range; } float ViewerImpl::get_travels_radius() const @@ -1290,7 +1272,7 @@ static bool is_visible(const PathVertex& v, const Settings& settings) void ViewerImpl::update_view_full_range() { - const std::array& layers_range = m_layers.get_view_range(); + const Interval& layers_range = m_layers.get_view_range(); const bool travels_visible = m_settings.options_visibility.at(EOptionType::Travels); const bool wipes_visible = m_settings.options_visibility.at(EOptionType::Wipes); @@ -1355,7 +1337,7 @@ void ViewerImpl::update_view_full_range() m_view_range.set_full(Range()); if (m_settings.top_layer_only_view_range) { - const std::array& full_range = m_view_range.get_full(); + const Interval& full_range = m_view_range.get_full(); auto top_first_it = m_vertices.begin() + full_range[0]; bool shortened = false; while (top_first_it != m_vertices.end() && (top_first_it->layer_id < layers_range[1] || !is_visible(*top_first_it, m_settings))) { diff --git a/src/slic3r/GUI/LibVGCode/src/ViewerImpl.hpp b/src/slic3r/GUI/LibVGCode/src/ViewerImpl.hpp index 1d62a8bf5a..b7a7de3a59 100644 --- a/src/slic3r/GUI/LibVGCode/src/ViewerImpl.hpp +++ b/src/slic3r/GUI/LibVGCode/src/ViewerImpl.hpp @@ -77,9 +77,9 @@ public: ETimeMode get_time_mode() const; void set_time_mode(ETimeMode mode); - const std::array& get_layers_view_range() const; - void set_layers_view_range(const std::array& range); - void set_layers_view_range(uint32_t min, uint32_t max); + const Interval& get_layers_view_range() const; + void set_layers_view_range(const Interval& range); + void set_layers_view_range(Interval::value_type min, Interval::value_type max); bool is_top_layer_only_view_range() const; void set_top_layer_only_view_range(bool top_layer_only_view_range); @@ -101,21 +101,21 @@ public: bool is_extrusion_role_visible(EGCodeExtrusionRole role) const; void toggle_extrusion_role_visibility(EGCodeExtrusionRole role); - const std::array& get_view_full_range() const; - const std::array& get_view_enabled_range() const; - const std::array& get_view_visible_range() const; + const Interval& get_view_full_range() const; + const Interval& get_view_enabled_range() const; + const Interval& get_view_visible_range() const; void set_view_visible_range(uint32_t min, uint32_t max); size_t get_vertices_count() const; - PathVertex get_current_vertex() const; - PathVertex get_vertex_at(size_t id) const; + const PathVertex& get_current_vertex() const; + const PathVertex& get_vertex_at(size_t id) const; Color get_vertex_color(const PathVertex& vertex) const; size_t get_enabled_segments_count() const; - const std::array& get_enabled_segments_range() const; + const Interval& get_enabled_segments_range() const; size_t get_enabled_options_count() const; - const std::array& get_enabled_options_range() const; + const Interval& get_enabled_options_range() const; size_t get_extrusion_roles_count() const; std::vector get_extrusion_roles() const;