diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 0a6f368a13..31862863ed 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -65,6 +65,7 @@ // requires VGCODE_ENABLE_ET_SPE1872 set to 1 in libvgcode (Types.hpp) #define ENABLE_ET_SPE1872 (1 && ENABLE_NEW_GCODE_VIEWER) #define ENABLE_ET_SPE1872_FIRMWARE_BUDDY (1 && ENABLE_ET_SPE1872) +#define ENABLE_ET_SPE1872_DEBUG (1 && ENABLE_ET_SPE1872) // Enable G-Code viewer statistics imgui dialog #define ENABLE_GCODE_VIEWER_STATISTICS (0 && !ENABLE_NEW_GCODE_VIEWER) diff --git a/src/libvgcode/include/Types.hpp b/src/libvgcode/include/Types.hpp index e3bff5a273..6fd04e8c5f 100644 --- a/src/libvgcode/include/Types.hpp +++ b/src/libvgcode/include/Types.hpp @@ -7,6 +7,7 @@ #define VGCODE_ENABLE_COG_AND_TOOL_MARKERS 0 #define VGCODE_ENABLE_ET_SPE1872 1 +#define VGCODE_ENABLE_ET_SPE1872_DEBUG (1 && VGCODE_ENABLE_ET_SPE1872) #include #include diff --git a/src/libvgcode/include/Viewer.hpp b/src/libvgcode/include/Viewer.hpp index 761d15dfe7..bcc595d4d4 100644 --- a/src/libvgcode/include/Viewer.hpp +++ b/src/libvgcode/include/Viewer.hpp @@ -166,9 +166,15 @@ public: // EViewType::Height // EViewType::Width // EViewType::Speed +#if VGCODE_ENABLE_ET_SPE1872 + // EViewType::ActualSpeed +#endif // VGCODE_ENABLE_ET_SPE1872 // EViewType::FanSpeed // EViewType::Temperature // EViewType::VolumetricFlowRate +#if VGCODE_ENABLE_ET_SPE1872 + // EViewType::ActualVolumetricFlowRate +#endif // VGCODE_ENABLE_ET_SPE1872 // EViewType::LayerTimeLinear // EViewType::LayerTimeLogarithmic // @@ -180,9 +186,15 @@ public: // EViewType::Height // EViewType::Width // EViewType::Speed +#if VGCODE_ENABLE_ET_SPE1872 + // EViewType::ActualSpeed +#endif // VGCODE_ENABLE_ET_SPE1872 // EViewType::FanSpeed // EViewType::Temperature // EViewType::VolumetricFlowRate +#if VGCODE_ENABLE_ET_SPE1872 + // EViewType::ActualVolumetricFlowRate +#endif // VGCODE_ENABLE_ET_SPE1872 // EViewType::LayerTimeLinear // EViewType::LayerTimeLogarithmic // diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 090c458184..2e0a88b419 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -531,6 +531,18 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode text = _u8L("N/A"); imgui.text(text); }); +#if ENABLE_ET_SPE1872 + append_table_row(_u8L("Actual speed") + " (" + _u8L("mm/s") + ")", [&imgui, &vertex, &buff]() { + std::string text; + if (vertex.is_extrusion()) { + sprintf(buff, "%.1f", vertex.actual_feedrate); + text = std::string(buff); + } + else + text = _u8L("N/A"); + imgui.text(text); + }); +#endif // ENABLE_ET_SPE1872 append_table_row(_u8L("Fan speed") + " (" + _u8L("%") + ")", [&imgui, &vertex, &buff]() { std::string text; if (vertex.is_extrusion()) { @@ -554,6 +566,36 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode ImGui::EndTable(); } + +#if ENABLE_ET_SPE1872_DEBUG + if (vertex.is_extrusion() || vertex.is_travel() || vertex.is_wipe()) { + const std::array& interval = viewer->get_color_range(libvgcode::EViewType::ActualSpeed).get_range(); + const size_t vertices_count = viewer->get_vertices_count(); + const libvgcode::PathVertex& curr_vertex = viewer->get_current_vertex(); + const size_t curr_id = viewer->get_current_vertex_id(); + size_t start_id = curr_id; + while (start_id > 0) { + --start_id; + if (curr_vertex.gcode_id != viewer->get_vertex_at(start_id).gcode_id) + break; + } + size_t end_id = curr_id; + while (end_id < vertices_count - 1) { + ++end_id; + if (curr_vertex.gcode_id != viewer->get_vertex_at(end_id).gcode_id) + break; + } + std::vector actual_speed_profile; + for (size_t i = start_id; i < end_id; ++i) { + actual_speed_profile.push_back(viewer->get_vertex_at(i).actual_feedrate); + } + + ImGui::Spacing(); + imgui.text(_u8L("Actual speed profile")); + ImGui::Separator(); + ImGui::PlotLines("##ActualSpeedProfile", actual_speed_profile.data(), static_cast(actual_speed_profile.size()), 0, nullptr, 0.0f, interval[1], { 0.0f, 150.0f }); + } +#endif // ENABLE_ET_SPE1872_DEBUG } // force extra frame to automatically update window size