Refactoring

This commit is contained in:
enricoturri1966 2023-12-15 14:21:11 +01:00 committed by Lukas Matena
parent 137495dd88
commit f11fdf4432
17 changed files with 261 additions and 276 deletions

View File

@ -1176,9 +1176,9 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const
m_viewer.load(std::move(data)); m_viewer.load(std::move(data));
#if ENABLE_NEW_GCODE_VIEWER_NO_COG_AND_TOOL_MARKERS #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(); 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); const libvgcode::PathVertex& curr = m_viewer.get_vertex_at(i);
if (curr.type == libvgcode::EMoveType::Extrude && if (curr.type == libvgcode::EMoveType::Extrude &&
curr.role != libvgcode::EGCodeExtrusionRole::Skirt && curr.role != libvgcode::EGCodeExtrusionRole::Skirt &&
@ -1539,9 +1539,10 @@ void GCodeViewer::render()
if (m_viewer.get_layers_count() > 0) { if (m_viewer.get_layers_count() > 0) {
render_legend(legend_height); render_legend(legend_height);
if (m_viewer.get_view_enabled_range()[1] != m_viewer.get_view_visible_range()[1]) { 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.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 #else
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ -1611,7 +1612,7 @@ bool GCodeViewer::can_export_toolpaths() const
{ {
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
const std::array<uint32_t, 2>& 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) { for (size_t i = visible_range[0]; i <= visible_range[1]; ++i) {
if (m_viewer.get_vertex_at(i).is_extrusion()) if (m_viewer.get_vertex_at(i).is_extrusion())
return true; return true;
@ -1630,7 +1631,7 @@ void GCodeViewer::update_sequential_view_current(unsigned int first, unsigned in
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
m_viewer.set_view_visible_range(static_cast<uint32_t>(first), static_cast<uint32_t>(last)); m_viewer.set_view_visible_range(static_cast<uint32_t>(first), static_cast<uint32_t>(last));
const std::array<uint32_t, 2>& 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]); wxGetApp().plater()->enable_preview_moves_slider(enabled_range[1] > enabled_range[0]);
#else #else
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ -1798,7 +1799,7 @@ public:
fprintf(f_mat.f, "# G-Code Toolpaths Materials\n"); 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); fprintf(f_mat.f, "# Generated by %s-%s based on Slic3r\n", SLIC3R_APP_NAME, SLIC3R_VERSION);
const std::array<uint32_t, 2>& 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) { 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& curr = m_viewer.get_vertex_at(i);
const libvgcode::PathVertex& next = m_viewer.get_vertex_at(i + 1); const libvgcode::PathVertex& next = m_viewer.get_vertex_at(i + 1);
@ -3989,7 +3990,7 @@ void GCodeViewer::render_new_toolpaths()
ImGui::TableSetColumnIndex(0); ImGui::TableSetColumnIndex(0);
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "# enabled lines"); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "# enabled lines");
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
const std::array<uint32_t, 2>& 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]) + 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]) + "]"); "-" + std::to_string(enabled_segments_range[1]) + "]");
@ -3997,7 +3998,7 @@ void GCodeViewer::render_new_toolpaths()
ImGui::TableSetColumnIndex(0); ImGui::TableSetColumnIndex(0);
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "# enabled options"); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "# enabled options");
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
const std::array<uint32_t, 2>& 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]) + 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]) + "]"); "-" + std::to_string(enabled_options_range[1]) + "]");
@ -4007,14 +4008,14 @@ void GCodeViewer::render_new_toolpaths()
ImGui::TableSetColumnIndex(0); ImGui::TableSetColumnIndex(0);
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "layers range"); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "layers range");
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
const std::array<uint32_t, 2>& 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.text(std::to_string(layers_range[0]) + " - " + std::to_string(layers_range[1]));
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0); ImGui::TableSetColumnIndex(0);
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (full)"); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (full)");
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
const std::array<uint32_t, 2>& 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]) + " | " + 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[0]).gcode_id) + " - " +
std::to_string(m_viewer.get_vertex_at(full_view_range[1]).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::TableSetColumnIndex(0);
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (enabled)"); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (enabled)");
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
const std::array<uint32_t, 2>& 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]) + " | " + 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[0]).gcode_id) + " - " +
std::to_string(m_viewer.get_vertex_at(enabled_view_range[1]).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::TableSetColumnIndex(0);
imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (visible)"); imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, "view range (visible)");
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
const std::array<uint32_t, 2>& 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]) + " | " + 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[0]).gcode_id) + " - " +
std::to_string(m_viewer.get_vertex_at(visible_view_range[1]).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], 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], visible, times[i], percents[i], max_time_percent, offsets, used_filaments_m[i], used_filaments_g[i],
[this, role]() { [this, role]() {
const std::array<uint32_t, 2> view_visible_range = m_viewer.get_view_visible_range(); const libvgcode::Interval view_visible_range = m_viewer.get_view_visible_range();
const std::array<uint32_t, 2> view_enabled_range = m_viewer.get_view_enabled_range(); const libvgcode::Interval view_enabled_range = m_viewer.get_view_enabled_range();
m_viewer.toggle_extrusion_role_visibility((libvgcode::EGCodeExtrusionRole)role); m_viewer.toggle_extrusion_role_visibility((libvgcode::EGCodeExtrusionRole)role);
std::optional<int> view_visible_range_min; std::optional<int> view_visible_range_min;
std::optional<int> view_visible_range_max; std::optional<int> 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 (imgui.draw_radio_button(name, 1.5f * icon_size, active, draw_callback)) {
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
const std::array<uint32_t, 2> view_visible_range = m_viewer.get_view_visible_range(); const libvgcode::Interval& view_visible_range = m_viewer.get_view_visible_range();
const std::array<uint32_t, 2> view_enabled_range = m_viewer.get_view_enabled_range(); const libvgcode::Interval& view_enabled_range = m_viewer.get_view_enabled_range();
bool keep_visible_range = false; bool keep_visible_range = false;
#if ENABLE_NEW_GCODE_VIEWER_NO_COG_AND_TOOL_MARKERS #if ENABLE_NEW_GCODE_VIEWER_NO_COG_AND_TOOL_MARKERS
switch (type) switch (type)

View File

@ -1053,21 +1053,21 @@ public:
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
const std::array<uint32_t, 2>& get_gcode_view_full_range() const { return m_viewer.get_view_full_range(); } const libvgcode::Interval& get_gcode_view_full_range() const { return m_viewer.get_view_full_range(); }
const std::array<uint32_t, 2>& get_gcode_view_enabled_range() const { return m_viewer.get_view_enabled_range(); } const libvgcode::Interval& get_gcode_view_enabled_range() const { return m_viewer.get_view_enabled_range(); }
const std::array<uint32_t, 2>& get_gcode_view_visible_range() const { return m_viewer.get_view_visible_range(); } const libvgcode::Interval& 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::PathVertex& get_gcode_vertex_at(size_t id) const { return m_viewer.get_vertex_at(id); }
#endif // ENABLE_NEW_GCODE_VIEWER #endif // ENABLE_NEW_GCODE_VIEWER
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
bool is_contained_in_bed() const { return m_contained_in_bed; } bool is_contained_in_bed() const { return m_contained_in_bed; }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
void set_view_type(libvgcode::EViewType type) { m_viewer.set_view_type(type); } 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(); } libvgcode::EViewType get_view_type() const { return m_viewer.get_view_type(); }
#else #else
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
EViewType get_view_type() const { return m_view_type; } EViewType get_view_type() const { return m_view_type; }
void set_view_type(EViewType type) { void set_view_type(EViewType type) {
if (type == EViewType::Count) if (type == EViewType::Count)
@ -1081,9 +1081,9 @@ public:
void set_toolpath_role_visibility_flags(unsigned int flags) { m_extrusions.role_visibility_flags = flags; } void set_toolpath_role_visibility_flags(unsigned int flags) { m_extrusions.role_visibility_flags = flags; }
unsigned int get_options_visibility_flags() const; unsigned int get_options_visibility_flags() const;
void set_options_visibility_from_flags(unsigned int flags); void set_options_visibility_from_flags(unsigned int flags);
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#endif // ENABLE_NEW_GCODE_VIEWER #endif // ENABLE_NEW_GCODE_VIEWER
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void set_layers_z_range(const std::array<unsigned int, 2>& layers_z_range); void set_layers_z_range(const std::array<unsigned int, 2>& layers_z_range);
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

View File

@ -744,10 +744,10 @@ public:
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#if ENABLE_NEW_GCODE_VIEWER #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); } void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); }
const std::array<uint32_t, 2>& get_gcode_view_full_range() const { return m_gcode_viewer.get_gcode_view_full_range(); } const libvgcode::Interval& get_gcode_view_full_range() const { return m_gcode_viewer.get_gcode_view_full_range(); }
const std::array<uint32_t, 2>& get_gcode_view_enabled_range() const { return m_gcode_viewer.get_gcode_view_enabled_range(); } const libvgcode::Interval& get_gcode_view_enabled_range() const { return m_gcode_viewer.get_gcode_view_enabled_range(); }
const std::array<uint32_t, 2>& get_gcode_view_visible_range() const { return m_gcode_viewer.get_gcode_view_visible_range(); } const libvgcode::Interval& 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::PathVertex& get_gcode_vertex_at(size_t id) const { return m_gcode_viewer.get_gcode_vertex_at(id); }
#else #else
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); }

View File

@ -733,10 +733,10 @@ void Preview::update_moves_slider()
if (m_gcode_result->moves.empty()) if (m_gcode_result->moves.empty())
return; return;
const std::array<uint32_t, 2>& range = m_canvas->get_gcode_view_enabled_range(); const libvgcode::Interval& range = m_canvas->get_gcode_view_enabled_range();
uint32_t last_gcode_id = m_canvas->get_gcode_vertex_at(static_cast<size_t>(range[0])).gcode_id; uint32_t last_gcode_id = m_canvas->get_gcode_vertex_at(range[0]).gcode_id;
const size_t range_size = static_cast<size_t>(range[1] - range[0] + 1); const size_t range_size = range[1] - range[0] + 1;
std::vector<double> values; std::vector<double> values;
values.reserve(range_size); values.reserve(range_size);
std::vector<double> alternate_values; std::vector<double> alternate_values;
@ -746,8 +746,8 @@ void Preview::update_moves_slider()
std::optional<uint32_t> visible_range_max_id; std::optional<uint32_t> visible_range_max_id;
uint32_t counter = 0; uint32_t counter = 0;
for (uint32_t i = range[0]; i <= range[1]; ++i) { for (size_t i = range[0]; i <= range[1]; ++i) {
const uint32_t gcode_id = m_canvas->get_gcode_vertex_at(static_cast<size_t>(i)).gcode_id; const uint32_t gcode_id = m_canvas->get_gcode_vertex_at(i).gcode_id;
if (i > range[0]) { if (i > range[0]) {
// skip consecutive moves with same gcode id (resulting from processing G2 and G3 lines) // skip consecutive moves with same gcode id (resulting from processing G2 and G3 lines)
if (last_gcode_id == gcode_id) { if (last_gcode_id == gcode_id) {

View File

@ -713,8 +713,7 @@ static void convert_objects_to_vertices(const Slic3r::SpanOfConstPtrs<Slic3r::Pr
layers.reserve(layers.size() + data.layers_zs.size()); layers.reserve(layers.size() + data.layers_zs.size());
std::copy(data.layers_zs.begin(), data.layers_zs.end(), std::back_inserter(layers)); std::copy(data.layers_zs.begin(), data.layers_zs.end(), std::back_inserter(layers));
} }
std::sort(layers.begin(), layers.end(), [](float z1, float z2) { return z1 < z2; }); Slic3r::sort_remove_duplicates(layers);
layers.erase(std::unique(layers.begin(), layers.end(), [](float z1, float z2) { return z1 == z2; }), layers.end());
// collect extracted vertices layer by layer // collect extracted vertices layer by layer
float min_z = 0.0f; float min_z = 0.0f;

View File

@ -22,7 +22,7 @@ struct PathVertex
// //
// Segment end position // Segment end position
// //
Vec3 position{ 0.0f, 0.0f, 0.0f }; Vec3 position{ FLT_MAX, FLT_MAX, FLT_MAX };
// //
// Segment height // Segment height
// //
@ -102,6 +102,8 @@ struct PathVertex
bool is_custom_gcode() const; bool is_custom_gcode() const;
}; };
static const PathVertex Dummy_Path_Vertex = PathVertex();
} // namespace libvgcode } // namespace libvgcode
//################################################################################################################################ //################################################################################################################################

View File

@ -54,6 +54,13 @@ using Color = std::array<uint8_t, 3>;
// //
using AABox = std::array<Vec3, 2>; using AABox = std::array<Vec3, 2>;
//
// One dimensional natural numbers interval
// [0] -> min
// [1] -> max
//
using Interval = std::array<size_t, 2>;
// //
// View types // View types
// //

View File

@ -40,9 +40,9 @@ public:
ETimeMode get_time_mode() const; ETimeMode get_time_mode() const;
void set_time_mode(ETimeMode mode); void set_time_mode(ETimeMode mode);
const std::array<uint32_t, 2>& get_layers_view_range() const; const Interval& get_layers_view_range() const;
void set_layers_view_range(const std::array<uint32_t, 2>& range); void set_layers_view_range(const Interval& range);
void set_layers_view_range(uint32_t min, uint32_t max); void set_layers_view_range(Interval::value_type min, Interval::value_type max);
bool is_top_layer_only_view_range() const; bool is_top_layer_only_view_range() const;
void set_top_layer_only_view_range(bool top_layer_only_view_range); 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; bool is_extrusion_role_visible(EGCodeExtrusionRole role) const;
void toggle_extrusion_role_visibility(EGCodeExtrusionRole role); void toggle_extrusion_role_visibility(EGCodeExtrusionRole role);
const std::array<uint32_t, 2>& get_view_full_range() const; const Interval& get_view_full_range() const;
const std::array<uint32_t, 2>& get_view_enabled_range() const; const Interval& get_view_enabled_range() const;
const std::array<uint32_t, 2>& get_view_visible_range() const; const Interval& get_view_visible_range() const;
// //
// min must be smaller than max // min must be smaller than max
@ -77,17 +77,17 @@ public:
// //
// Return the count of vertices used to render the toolpaths // 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 // 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 // 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; Color get_vertex_color(const PathVertex& vertex) const;
@ -96,14 +96,14 @@ public:
// //
size_t get_enabled_segments_count() const; size_t get_enabled_segments_count() const;
const std::array<uint32_t, 2>& get_enabled_segments_range() const; const Interval& get_enabled_segments_range() const;
// //
// Return the count of options enabled for rendering // Return the count of options enabled for rendering
// //
size_t get_enabled_options_count() const; size_t get_enabled_options_count() const;
const std::array<uint32_t, 2>& get_enabled_options_range() const; const Interval& get_enabled_options_range() const;
// //
// Return the count of detected extrusion roles // Return the count of detected extrusion roles

View File

@ -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 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 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); return std::distance(m_items.begin(), iter);
} }
const std::array<uint32_t, 2>& Layers::get_view_range() const const Interval& Layers::get_view_range() const
{ {
return m_view_range.get(); return m_view_range.get();
} }
void Layers::set_view_range(const std::array<uint32_t, 2>& range) void Layers::set_view_range(const Interval& range)
{ {
set_view_range(range[0], range[1]); 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); m_view_range.set(min, max);
} }

View File

@ -10,7 +10,6 @@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
//################################################################################################################################ //################################################################################################################################
#include "../include/Types.hpp"
#include "Range.hpp" #include "Range.hpp"
namespace libvgcode { namespace libvgcode {
@ -20,36 +19,36 @@ struct PathVertex;
class Layers class Layers
{ {
public: public:
void update(const PathVertex& vertex, uint32_t vertex_id); void update(const PathVertex& vertex, uint32_t vertex_id);
void reset(); void reset();
bool empty() const; bool empty() const;
size_t count() const; size_t count() const;
std::vector<float> get_times(ETimeMode mode) const; std::vector<float> get_times(ETimeMode mode) const;
std::vector<float> get_zs() const; std::vector<float> get_zs() const;
float get_layer_time(ETimeMode mode, size_t layer_id) const; float get_layer_time(ETimeMode mode, size_t layer_id) const;
float get_layer_z(size_t layer_id) const; float get_layer_z(size_t layer_id) const;
size_t get_layer_id_at(float z) const; size_t get_layer_id_at(float z) const;
const std::array<uint32_t, 2>& get_view_range() const; const Interval& get_view_range() const;
void set_view_range(const std::array<uint32_t, 2>& range); void set_view_range(const Interval& range);
void set_view_range(uint32_t min, uint32_t max); void set_view_range(Interval::value_type min, Interval::value_type max);
bool layer_contains_colorprint_options(size_t layer_id) const; bool layer_contains_colorprint_options(size_t layer_id) const;
private: private:
struct Item struct Item
{ {
float z{ 0.0f }; float z{ 0.0f };
Range range; Range range;
std::array<float, Time_Modes_Count> times{ 0.0f, 0.0f }; std::array<float, Time_Modes_Count> times{ 0.0f, 0.0f };
bool contains_colorprint_options{ false }; bool contains_colorprint_options{ false };
}; };
std::vector<Item> m_items; std::vector<Item> m_items;
Range m_view_range; Range m_view_range;
}; };
} // namespace libvgcode } // namespace libvgcode

View File

@ -18,68 +18,68 @@
namespace libvgcode { namespace libvgcode {
const std::array<uint32_t, 2>& Range::get() const const Interval& Range::get() const
{ {
return m_range; return m_range;
} }
void Range::set(const Range& other) void Range::set(const Range& other)
{ {
m_range = other.m_range; m_range = other.m_range;
} }
void Range::set(const std::array<uint32_t, 2>& 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) if (max < min)
std::swap(min, max); std::swap(min, max);
m_range[0] = min; m_range[0] = min;
m_range[1] = max; 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) void Range::clamp(Range& other)
{ {
other.m_range[0] = std::clamp(other.m_range[0], 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]); other.m_range[1] = std::clamp(other.m_range[1], m_range[0], m_range[1]);
} }
void Range::reset() void Range::reset()
{ {
m_range = { 0, 0 }; m_range = { 0, 0 };
} }
bool Range::operator == (const Range& other) const 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 bool Range::operator != (const Range& other) const
{ {
return m_range != other.m_range; return m_range != other.m_range;
} }
} // namespace libvgcode } // namespace libvgcode

View File

@ -10,38 +10,33 @@
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
//################################################################################################################################ //################################################################################################################################
#include <array> #include "../include/Types.hpp"
#include <cstdint>
namespace libvgcode { namespace libvgcode {
class Range class Range
{ {
public: public:
const std::array<uint32_t, 2>& get() const; const Interval& get() const;
void set(const Range& other); void set(const Range& other);
void set(const std::array<uint32_t, 2>& range); void set(const Interval& range);
void set(uint32_t min, uint32_t max); void set(Interval::value_type min, Interval::value_type max);
uint32_t get_min() const; Interval::value_type get_min() const;
void set_min(uint32_t min); void set_min(Interval::value_type min);
uint32_t get_max() const; Interval::value_type get_max() const;
void set_max(uint32_t max); void set_max(Interval::value_type max);
// clamp the given range to stay inside this range // clamp the given range to stay inside this range
void clamp(Range& other); void clamp(Range& other);
void reset(); void reset();
bool operator == (const Range& other) const; bool operator == (const Range& other) const;
bool operator != (const Range& other) const; bool operator != (const Range& other) const;
private: private:
// Interval m_range{ 0, 0 };
// [0] = min
// [1] = max
//
std::array<uint32_t, 2> m_range{ 0, 0 };
}; };
} // namespace libvgcode } // namespace libvgcode

View File

@ -16,89 +16,89 @@
namespace libvgcode { namespace libvgcode {
const std::array<uint32_t, 2>& 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) void ViewRange::set_full(const Range& other)
{ {
set_full(other.get()); set_full(other.get());
} }
void ViewRange::set_full(const std::array<uint32_t, 2>& 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 ? // is the full range being extended ?
const bool new_max = max > m_full.get_max(); const bool new_max = max > m_full.get_max();
m_full.set(min, max); m_full.set(min, max);
// force the enabled range to stay inside the modified full range // force the enabled range to stay inside the modified full range
m_full.clamp(m_enabled); m_full.clamp(m_enabled);
// force the visible range to stay inside the modified enabled range // force the visible range to stay inside the modified enabled range
m_enabled.clamp(m_visible); m_enabled.clamp(m_visible);
if (new_max) if (new_max)
// force the enabled range to fill the extended full range // force the enabled range to fill the extended full range
m_enabled.set_max(max); m_enabled.set_max(max);
} }
const std::array<uint32_t, 2>& 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) void ViewRange::set_enabled(const Range& other)
{ {
set_enabled(other.get()); set_enabled(other.get());
} }
void ViewRange::set_enabled(const std::array<uint32_t, 2>& 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 ? // is the enabled range being extended ?
const bool new_max = max > m_enabled.get_max(); const bool new_max = max > m_enabled.get_max();
m_enabled.set(min, max); m_enabled.set(min, max);
// force the visible range to stay inside the modified enabled range // force the visible range to stay inside the modified enabled range
m_enabled.clamp(m_visible); m_enabled.clamp(m_visible);
if (new_max) if (new_max)
// force the visible range to fill the extended enabled range // force the visible range to fill the extended enabled range
m_visible.set_max(max); m_visible.set_max(max);
} }
const std::array<uint32_t, 2>& 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) void ViewRange::set_visible(const Range& other)
{ {
set_visible(other.get()); set_visible(other.get());
} }
void ViewRange::set_visible(const std::array<uint32_t, 2>& 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); m_visible.set(min, max);
// force the visible range to stay inside the enabled range // force the visible range to stay inside the enabled range
m_enabled.clamp(m_visible); m_enabled.clamp(m_visible);
} }
void ViewRange::reset() void ViewRange::reset()
{ {
m_full.reset(); m_full.reset();
m_enabled.reset(); m_enabled.reset();
m_visible.reset(); m_visible.reset();
} }
} // namespace libvgcode } // namespace libvgcode

View File

@ -17,43 +17,43 @@ namespace libvgcode {
class ViewRange class ViewRange
{ {
public: public:
const std::array<uint32_t, 2>& get_full() const; const Interval& get_full() const;
void set_full(const Range& other); void set_full(const Range& other);
void set_full(const std::array<uint32_t, 2>& range); void set_full(const Interval& range);
void set_full(uint32_t min, uint32_t max); void set_full(Interval::value_type min, Interval::value_type max);
const std::array<uint32_t, 2>& get_enabled() const; const Interval& get_enabled() const;
void set_enabled(const Range& other); void set_enabled(const Range& other);
void set_enabled(const std::array<uint32_t, 2>& range); void set_enabled(const Interval& range);
void set_enabled(uint32_t min, uint32_t max); void set_enabled(Interval::value_type min, Interval::value_type max);
const std::array<uint32_t, 2>& get_visible() const; const Interval& get_visible() const;
void set_visible(const Range& other); void set_visible(const Range& other);
void set_visible(const std::array<uint32_t, 2>& range); void set_visible(const Interval& range);
void set_visible(uint32_t min, uint32_t max); void set_visible(Interval::value_type min, Interval::value_type max);
void reset(); void reset();
private: private:
// //
// Full range // Full range
// The range of moves that could potentially be visible. // 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. // It is usually equal to the enabled range, unless Settings::top_layer_only_view_range is set to true.
// //
Range m_full; Range m_full;
// //
// Enabled range // Enabled range
// The range of moves that are enabled for visualization. // 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. // It is usually equal to the full range, unless Settings::top_layer_only_view_range is set to true.
// //
Range m_enabled; Range m_enabled;
// //
// Visible range // Visible range
// The range of moves that are currently rendered. // The range of moves that are currently rendered.
// //
Range m_visible; Range m_visible;
}; };
} // namespace libvgcode } // namespace libvgcode

View File

@ -67,17 +67,17 @@ void Viewer::set_time_mode(ETimeMode mode)
m_impl->set_time_mode(mode); m_impl->set_time_mode(mode);
} }
const std::array<uint32_t, 2>& Viewer::get_layers_view_range() const const Interval& Viewer::get_layers_view_range() const
{ {
return m_impl->get_layers_view_range(); return m_impl->get_layers_view_range();
} }
void Viewer::set_layers_view_range(const std::array<uint32_t, 2>& range) void Viewer::set_layers_view_range(const Interval& range)
{ {
m_impl->set_layers_view_range(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); 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); m_impl->toggle_extrusion_role_visibility(role);
} }
const std::array<uint32_t, 2>& Viewer::get_view_full_range() const const Interval& Viewer::get_view_full_range() const
{ {
return m_impl->get_view_full_range(); return m_impl->get_view_full_range();
} }
const std::array<uint32_t, 2>& Viewer::get_view_enabled_range() const const Interval& Viewer::get_view_enabled_range() const
{ {
return m_impl->get_view_enabled_range(); return m_impl->get_view_enabled_range();
} }
const std::array<uint32_t, 2>& Viewer::get_view_visible_range() const const Interval& Viewer::get_view_visible_range() const
{ {
return m_impl->get_view_visible_range(); 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); 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(); 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(); 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); 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(); return m_impl->get_enabled_segments_count();
} }
const std::array<uint32_t, 2>& Viewer::get_enabled_segments_range() const const Interval& Viewer::get_enabled_segments_range() const
{ {
return m_impl->get_enabled_segments_range(); 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(); return m_impl->get_enabled_options_count();
} }
const std::array<uint32_t, 2>& Viewer::get_enabled_options_range() const const Interval& Viewer::get_enabled_options_range() const
{ {
return m_impl->get_enabled_options_range(); return m_impl->get_enabled_options_range();
} }

View File

@ -603,7 +603,7 @@ void ViewerImpl::update_enabled_entities()
{ {
std::vector<uint32_t> enabled_segments; std::vector<uint32_t> enabled_segments;
std::vector<uint32_t> enabled_options; std::vector<uint32_t> enabled_options;
std::array<uint32_t, 2> range = m_view_range.get_visible(); Interval range = m_view_range.get_visible();
// when top layer only visualization is enabled, we need to render // when top layer only visualization is enabled, we need to render
// all the toolpaths in the other layers as grayed, so extend the range // 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) { if (m_settings.spiral_vase_mode) {
// when spiral vase mode is enabled and only one layer is shown, extend the range by one step // when spiral vase mode is enabled and only one layer is shown, extend the range by one step
const std::array<uint32_t, 2>& 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]) if (layers_range[0] > 0 && layers_range[0] == layers_range[1])
--range[0]; --range[0];
} }
@ -765,17 +765,17 @@ void ViewerImpl::set_time_mode(ETimeMode mode)
m_settings.update_colors = true; m_settings.update_colors = true;
} }
const std::array<uint32_t, 2>& ViewerImpl::get_layers_view_range() const const Interval& ViewerImpl::get_layers_view_range() const
{ {
return m_layers.get_view_range(); return m_layers.get_view_range();
} }
void ViewerImpl::set_layers_view_range(const std::array<uint32_t, 2>& range) void ViewerImpl::set_layers_view_range(const Interval& range)
{ {
set_layers_view_range(range[0], range[1]); 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); m_layers.set_view_range(min, max);
// force immediate update of the full range // 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 bool ViewerImpl::is_option_visible(EOptionType type) const
{ {
try { const auto it = m_settings.options_visibility.find(type);
return m_settings.options_visibility.at(type); return (it == m_settings.options_visibility.end()) ? false : it->second;
}
catch (...) {
return false;
}
} }
void ViewerImpl::toggle_option_visibility(EOptionType type) void ViewerImpl::toggle_option_visibility(EOptionType type)
{ {
try { auto it = m_settings.options_visibility.find(type);
bool& value = m_settings.options_visibility.at(type); if (it != m_settings.options_visibility.end()) {
value = !value; it->second = !it->second;
update_view_full_range(); update_view_full_range();
m_settings.update_enabled_entities = true; m_settings.update_enabled_entities = true;
m_settings.update_colors = true; m_settings.update_colors = true;
} }
catch (...) {
// do nothing;
}
} }
bool ViewerImpl::is_extrusion_role_visible(EGCodeExtrusionRole role) const bool ViewerImpl::is_extrusion_role_visible(EGCodeExtrusionRole role) const
{ {
try { const auto it = m_settings.extrusion_roles_visibility.find(role);
return m_settings.extrusion_roles_visibility.at(role); return (it == m_settings.extrusion_roles_visibility.end()) ? false : it->second;
}
catch (...) {
return false;
}
} }
void ViewerImpl::toggle_extrusion_role_visibility(EGCodeExtrusionRole role) void ViewerImpl::toggle_extrusion_role_visibility(EGCodeExtrusionRole role)
{ {
try { auto it = m_settings.extrusion_roles_visibility.find(role);
bool& value = m_settings.extrusion_roles_visibility.at(role); if (it != m_settings.extrusion_roles_visibility.end()) {
value = !value; it->second = !it->second;
update_view_full_range(); update_view_full_range();
m_settings.update_enabled_entities = true; m_settings.update_enabled_entities = true;
m_settings.update_colors = true; m_settings.update_colors = true;
} }
catch (...) {
// do nothing;
}
} }
const std::array<uint32_t, 2>& ViewerImpl::get_view_full_range() const const Interval& ViewerImpl::get_view_full_range() const
{ {
return m_view_range.get_full(); return m_view_range.get_full();
} }
const std::array<uint32_t, 2>& ViewerImpl::get_view_enabled_range() const const Interval& ViewerImpl::get_view_enabled_range() const
{ {
return m_view_range.get_enabled(); return m_view_range.get_enabled();
} }
const std::array<uint32_t, 2>& ViewerImpl::get_view_visible_range() const const Interval& ViewerImpl::get_view_visible_range() const
{ {
return m_view_range.get_visible(); return m_view_range.get_visible();
} }
@ -923,14 +909,14 @@ size_t ViewerImpl::get_vertices_count() const
return m_vertices.size(); 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 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; return Wipe_Color;
if (v.is_option()) 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) switch (m_settings.view_type)
{ {
@ -1005,7 +991,7 @@ size_t ViewerImpl::get_enabled_segments_count() const
return m_enabled_segments_count; return m_enabled_segments_count;
} }
const std::array<uint32_t, 2>& ViewerImpl::get_enabled_segments_range() const const Interval& ViewerImpl::get_enabled_segments_range() const
{ {
return m_enabled_segments_range.get(); return m_enabled_segments_range.get();
} }
@ -1015,7 +1001,7 @@ size_t ViewerImpl::get_enabled_options_count() const
return m_enabled_options_count; return m_enabled_options_count;
} }
const std::array<uint32_t, 2>& ViewerImpl::get_enabled_options_range() const const Interval& ViewerImpl::get_enabled_options_range() const
{ {
return m_enabled_options_range.get(); return m_enabled_options_range.get();
} }
@ -1078,15 +1064,15 @@ void ViewerImpl::set_tool_colors(const std::vector<Color>& colors)
const Color& ViewerImpl::get_extrusion_role_color(EGCodeExtrusionRole role) const const Color& ViewerImpl::get_extrusion_role_color(EGCodeExtrusionRole role) const
{ {
auto it = m_extrusion_roles_colors.find(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; return (it == m_extrusion_roles_colors.end()) ? Dummy_Color : it->second;
} }
void ViewerImpl::set_extrusion_role_color(EGCodeExtrusionRole role, const Color& color) void ViewerImpl::set_extrusion_role_color(EGCodeExtrusionRole role, const Color& color)
{ {
auto it = m_extrusion_roles_colors.find(role); auto it = m_extrusion_roles_colors.find(role);
if (it != m_extrusion_roles_colors.end()) if (it != m_extrusion_roles_colors.end())
m_extrusion_roles_colors[role] = color; it->second = color;
} }
void ViewerImpl::reset_default_extrusion_roles_colors() 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 const Color& ViewerImpl::get_option_color(EOptionType type) const
{ {
auto it = m_options_colors.find(type); const auto it = m_options_colors.find(type);
return (it != m_options_colors.end()) ? m_options_colors.at(type) : Dummy_Color; return (it == m_options_colors.end()) ? Dummy_Color : it->second;
} }
void ViewerImpl::set_option_color(EOptionType type, const Color& color) void ViewerImpl::set_option_color(EOptionType type, const Color& color)
{ {
auto it = m_options_colors.find(type); auto it = m_options_colors.find(type);
if (it != m_options_colors.end()) if (it != m_options_colors.end())
m_options_colors[type] = color; it->second = color;
} }
void ViewerImpl::reset_default_options_colors() 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 const Color& ViewerImpl::get_travel_move_color(ETravelMoveType type) const
{ {
auto it = m_travel_moves_colors.find(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; return (it == m_travel_moves_colors.end()) ? Dummy_Color : it->second;
} }
void ViewerImpl::set_travel_move_color(ETravelMoveType type, const Color& color) void ViewerImpl::set_travel_move_color(ETravelMoveType type, const Color& color)
{ {
auto it = m_travel_moves_colors.find(type); auto it = m_travel_moves_colors.find(type);
if (it != m_travel_moves_colors.end()) if (it != m_travel_moves_colors.end())
m_travel_moves_colors[type] = color; it->second = color;
} }
void ViewerImpl::reset_default_travel_moves_colors() 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 const ColorRange& ViewerImpl::get_layer_time_range(EColorRangeType type) const
{ {
try { return (static_cast<size_t>(type) < m_layer_time_range.size()) ?
return m_layer_time_range[static_cast<size_t>(type)]; m_layer_time_range[static_cast<size_t>(type)] : ColorRange::Dummy_Color_Range;
}
catch (...) {
return ColorRange::Dummy_Color_Range;
}
} }
float ViewerImpl::get_travels_radius() const 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() void ViewerImpl::update_view_full_range()
{ {
const std::array<uint32_t, 2>& 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 travels_visible = m_settings.options_visibility.at(EOptionType::Travels);
const bool wipes_visible = m_settings.options_visibility.at(EOptionType::Wipes); 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()); m_view_range.set_full(Range());
if (m_settings.top_layer_only_view_range) { if (m_settings.top_layer_only_view_range) {
const std::array<uint32_t, 2>& 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]; auto top_first_it = m_vertices.begin() + full_range[0];
bool shortened = false; 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))) { while (top_first_it != m_vertices.end() && (top_first_it->layer_id < layers_range[1] || !is_visible(*top_first_it, m_settings))) {

View File

@ -77,9 +77,9 @@ public:
ETimeMode get_time_mode() const; ETimeMode get_time_mode() const;
void set_time_mode(ETimeMode mode); void set_time_mode(ETimeMode mode);
const std::array<uint32_t, 2>& get_layers_view_range() const; const Interval& get_layers_view_range() const;
void set_layers_view_range(const std::array<uint32_t, 2>& range); void set_layers_view_range(const Interval& range);
void set_layers_view_range(uint32_t min, uint32_t max); void set_layers_view_range(Interval::value_type min, Interval::value_type max);
bool is_top_layer_only_view_range() const; bool is_top_layer_only_view_range() const;
void set_top_layer_only_view_range(bool top_layer_only_view_range); 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; bool is_extrusion_role_visible(EGCodeExtrusionRole role) const;
void toggle_extrusion_role_visibility(EGCodeExtrusionRole role); void toggle_extrusion_role_visibility(EGCodeExtrusionRole role);
const std::array<uint32_t, 2>& get_view_full_range() const; const Interval& get_view_full_range() const;
const std::array<uint32_t, 2>& get_view_enabled_range() const; const Interval& get_view_enabled_range() const;
const std::array<uint32_t, 2>& get_view_visible_range() const; const Interval& get_view_visible_range() const;
void set_view_visible_range(uint32_t min, uint32_t max); void set_view_visible_range(uint32_t min, uint32_t max);
size_t get_vertices_count() const; size_t get_vertices_count() const;
PathVertex get_current_vertex() const; const PathVertex& get_current_vertex() const;
PathVertex get_vertex_at(size_t id) const; const PathVertex& get_vertex_at(size_t id) const;
Color get_vertex_color(const PathVertex& vertex) const; Color get_vertex_color(const PathVertex& vertex) const;
size_t get_enabled_segments_count() const; size_t get_enabled_segments_count() const;
const std::array<uint32_t, 2>& get_enabled_segments_range() const; const Interval& get_enabled_segments_range() const;
size_t get_enabled_options_count() const; size_t get_enabled_options_count() const;
const std::array<uint32_t, 2>& get_enabled_options_range() const; const Interval& get_enabled_options_range() const;
size_t get_extrusion_roles_count() const; size_t get_extrusion_roles_count() const;
std::vector<EGCodeExtrusionRole> get_extrusion_roles() const; std::vector<EGCodeExtrusionRole> get_extrusion_roles() const;