From 2c342875c267bc091e4194811f5450a435724f85 Mon Sep 17 00:00:00 2001 From: Andrew Sun Date: Mon, 15 Sep 2025 21:01:54 -0400 Subject: [PATCH] Expose actual speed/actual volumetric speed view modes, misc fixes --- src/slic3r/GUI/GCodeViewer.cpp | 44 ++++++++++++++++++++++------------ src/slic3r/GUI/GCodeViewer.hpp | 10 -------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 230a8aa5d3..faa54aa979 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -972,9 +972,11 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode) view_type_items.push_back(libvgcode::EViewType::FeatureType); view_type_items.push_back(libvgcode::EViewType::ColorPrint); view_type_items.push_back(libvgcode::EViewType::Speed); + view_type_items.push_back(libvgcode::EViewType::ActualSpeed); view_type_items.push_back(libvgcode::EViewType::Height); view_type_items.push_back(libvgcode::EViewType::Width); view_type_items.push_back(libvgcode::EViewType::VolumetricFlowRate); + view_type_items.push_back(libvgcode::EViewType::ActualVolumetricFlowRate); view_type_items.push_back(libvgcode::EViewType::LayerTimeLinear); view_type_items.push_back(libvgcode::EViewType::LayerTimeLogarithmic); view_type_items.push_back(libvgcode::EViewType::FanSpeed); @@ -1361,8 +1363,6 @@ void GCodeViewer::reset() m_paths_bounding_box = BoundingBoxf3(); m_max_bounding_box = BoundingBoxf3(); m_max_print_height = 0.0f; - m_tools.m_tool_colors = std::vector(); // TODO - m_tools.m_tool_visibles = std::vector(); m_extruders_count = 0; // TODO // m_extruder_ids = std::vector(); // TODO m_filament_diameters = std::vector(); @@ -3309,7 +3309,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv if (ImGui::BBLSelectable(view_type_items_str[i].c_str(), is_selected)) { m_fold = false; m_view_type_sel = i; + enable_view_type_cache_load(false); set_view_type(view_type_items[m_view_type_sel]); + enable_view_type_cache_load(true); reset_visible(view_type_items[m_view_type_sel]); update_moves_slider(); wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); @@ -3596,7 +3598,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_option_item_with_type(type, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Wipes)), _u8L("Wipe"), visible); }; - const libvgcode::EViewType new_view_type = m_viewer.get_view_type(); + const libvgcode::EViewType new_view_type = curr_view_type; // TODO: m_viewer.get_view_type(); // extrusion paths section -> items switch (new_view_type) @@ -3617,9 +3619,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({used_filaments_weight[i], offsets[4]}); append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_extrusion_role_color(role)), columns_offsets, true, offsets.back(), visible, [this, role, visible]() { - if (m_viewer.is_extrusion_role_visible(role) != visible) { - m_viewer.toggle_extrusion_role_visibility(role); - } + m_viewer.toggle_extrusion_role_visibility(role); update_moves_slider(); wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); }); @@ -3665,7 +3665,24 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::PopStyleVar(1); break; } - case libvgcode::EViewType::ActualSpeed: { append_range(m_viewer.get_color_range(libvgcode::EViewType::ActualSpeed), 0); break; } // TODO + case libvgcode::EViewType::ActualSpeed: { + append_range(m_viewer.get_color_range(libvgcode::EViewType::ActualSpeed), 0); + ImGui::Spacing(); + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + offsets = calculate_offsets({ { _u8L("Options"), { _u8L("Travel")}}, { _u8L("Display"), {""}} }, icon_size); + append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); + const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); + // refresh(*m_gcode_result, wxGetApp().plater()->get_extruder_colors_from_plater_config(m_gcode_result)); + update_moves_slider(); + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + }); + ImGui::PopStyleVar(1); + break; + } case libvgcode::EViewType::FanSpeed: { append_range(m_viewer.get_color_range(libvgcode::EViewType::FanSpeed), 0); break; } case libvgcode::EViewType::Temperature: { append_range(m_viewer.get_color_range(libvgcode::EViewType::Temperature), 0); break; } case libvgcode::EViewType::LayerTimeLinear: { append_range(m_viewer.get_color_range(libvgcode::EViewType::LayerTimeLinear), true); break; } @@ -3706,8 +3723,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv // shows only extruders actually used size_t i = 0; const std::vector& used_extruders_ids = m_viewer.get_used_extruders_ids(); - for (auto extruder_idx : used_extruders_ids) { // TODO - const bool filament_visible = m_tools.m_tool_visibles[extruder_idx]; + auto tool_colors = m_viewer.get_tool_colors(); + for (auto extruder_idx : used_extruders_ids) { if (i < model_used_filaments_m.size() && i < model_used_filaments_g.size()) { std::vector> columns_offsets; columns_offsets.push_back({ std::to_string(extruder_idx + 1), color_print_offsets[_u8L("Filament")]}); @@ -3748,11 +3765,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } float checkbox_pos = std::max(predictable_icon_pos, color_print_offsets[_u8L("Display")]); // ORCA prefer predictable_icon_pos when header not reacing end - append_item(EItemType::Rect, m_tools.m_tool_colors[extruder_idx], columns_offsets, true, checkbox_pos/*ORCA*/, filament_visible, [this, extruder_idx]() { - m_tools.m_tool_visibles[extruder_idx] = !m_tools.m_tool_visibles[extruder_idx]; - update_moves_slider(); - wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); - }); + append_item(EItemType::Rect, libvgcode::convert(tool_colors[extruder_idx]), columns_offsets, false, checkbox_pos/*ORCA*/, true, [this, extruder_idx]() {}); } i++; } @@ -3796,7 +3809,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv (total_model_used_filament_g + total_support_used_filament_g + total_flushed_filament_g + total_wipe_tower_used_filament_g) / unit_conver); columns_offsets.push_back({ buf, color_print_offsets[_u8L("Total")] }); } - append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets); + append_item(EItemType::None, libvgcode::convert(tool_colors[0]), columns_offsets); } //BBS display filament change times @@ -4001,6 +4014,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv switch (m_viewer.get_view_type()) { case libvgcode::EViewType::Speed: + case libvgcode::EViewType::ActualSpeed: case libvgcode::EViewType::Tool: case libvgcode::EViewType::ColorPrint: { break; diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index f73ee4a627..978177491f 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -168,12 +168,6 @@ public: void render(const bool has_render_path, float legend_height, const libvgcode::Viewer* viewer, uint32_t gcode_id, int canvas_width, int canvas_height, int right_margin, const libvgcode::EViewType& view_type); }; - struct ETools - { - std::vector m_tool_colors; - std::vector m_tool_visibles; - }; - //BBS ConflictResultOpt m_conflict_result; private: @@ -194,8 +188,6 @@ private: BoundingBoxf3 m_shell_bounding_box; float m_max_print_height{ 0.0f }; - //BBS save m_tools_color and m_tools_visible - ETools m_tools; ConfigOptionMode m_user_mode; bool m_fold = {false}; @@ -330,8 +322,6 @@ public: m_viewer.toggle_extrusion_role_visibility(role); } } - } else if (type == libvgcode::EViewType::ColorPrint){ - for(auto item: m_tools.m_tool_visibles) item = true; } }