From 357e2de7507c6830f1189618a1c093de9aa50027 Mon Sep 17 00:00:00 2001 From: sunsets <845944018@qq.com> Date: Thu, 26 Oct 2023 10:48:00 +0800 Subject: [PATCH] tool position extra text --- src/slic3r/GUI/GCodeViewer.cpp | 65 +++++++++++++++++++++++++++++++--- src/slic3r/GUI/GCodeViewer.hpp | 21 ++++++++--- 2 files changed, 77 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 8274404..297ecf5 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -305,7 +305,11 @@ void GCodeViewer::SequentialView::Marker::set_world_position(const Vec3f& positi Geometry::translation_transform(m_model.get_bounding_box().size().z() * Vec3d::UnitZ()) * Geometry::rotation_transform({ M_PI, 0.0, 0.0 })).cast(); } -void GCodeViewer::SequentialView::Marker::render() +////B43 +void GCodeViewer::SequentialView::Marker::update_curr_move(GCodeProcessorResult::MoveVertex move) { m_curr_move = move; } + +//B43 +void GCodeViewer::SequentialView::Marker::render(EViewType &view_type) { if (!m_visible) return; @@ -347,7 +351,35 @@ void GCodeViewer::SequentialView::Marker::render() ImGui::SameLine(); char buf[1024]; const Vec3f position = m_world_position + m_world_offset; + //B43 sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f", position.x(), position.y(), position.z()); + switch (view_type) { + case EViewType::Height: { + sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f, Height: %.2f mm", position.x(), position.y(), position.z(), m_curr_move.height); + break; + } + case EViewType::Width: { + sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f, Width: %.2f mm", position.x(), position.y(), position.z(), m_curr_move.width); + break; + } + case EViewType::Feedrate: { + sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f, Speed: %.0f mm/s", position.x(), position.y(), position.z(), m_curr_move.feedrate); + break; + } + case EViewType::VolumetricRate: { + sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f, Flow: %.2f mm³/s", position.x(), position.y(), position.z(), m_curr_move.volumetric_rate()); + break; + } + case EViewType::FanSpeed: { + sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f, Fan Speed: %.0f %%", position.x(), position.y(), position.z(), m_curr_move.fan_speed); + break; + } + case EViewType::Temperature: { + sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f, Temperature: %.0f °C", position.x(), position.y(), position.z(), m_curr_move.temperature); + break; + } + } + imgui.text(std::string(buf)); // force extra frame to automatically update window size @@ -553,10 +585,10 @@ void GCodeViewer::SequentialView::GCodeWindow::stop_mapping_file() if (m_file.is_open()) m_file.close(); } - -void GCodeViewer::SequentialView::render(float legend_height) +//B43 +void GCodeViewer::SequentialView::render(float legend_height, EViewType &view_type) { - marker.render(); + marker.render(view_type); float bottom = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_height(); if (wxGetApp().is_editor()) bottom -= wxGetApp().plater()->get_view_toolbar().get_height(); @@ -733,6 +765,9 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr // release gpu memory, if used reset(); + //B43 + m_gcode_result = &gcode_result; + m_sequential_view.gcode_window.load_gcode(gcode_result.filename, gcode_result.lines_ends); if (wxGetApp().is_gcode_viewer()) @@ -940,7 +975,8 @@ void GCodeViewer::render() if (m_sequential_view.current.last != m_sequential_view.endpoints.last) { m_sequential_view.marker.set_world_position(m_sequential_view.current_position); m_sequential_view.marker.set_world_offset(m_sequential_view.current_offset); - m_sequential_view.render(legend_height); + //B43 + m_sequential_view.render(legend_height, m_view_type); } } #if ENABLE_GCODE_VIEWER_STATISTICS @@ -997,6 +1033,25 @@ void GCodeViewer::update_sequential_view_current(unsigned int first, unsigned in if (new_first != first || new_last != last) wxGetApp().plater()->update_preview_moves_slider(); + + update_marker_curr_move(); +} + +//B43 +void GCodeViewer::update_marker_curr_move() +{ + if ((int) m_last_result_id != -1) { + auto it = std::find_if(m_gcode_result->moves.begin(), m_gcode_result->moves.end(), [this](auto move) { + if (m_sequential_view.current.last < m_sequential_view.gcode_ids.size() && m_sequential_view.current.last >= 0) { + return move.gcode_id == static_cast(m_sequential_view.gcode_ids[m_sequential_view.current.last]); + } + return false; + }); + if (it != m_gcode_result->moves.end()) + m_sequential_view.marker.update_curr_move(*it); + } + + } bool GCodeViewer::is_toolpath_move_type_visible(EMoveType type) const diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 97458f2..ea2a43c 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -645,6 +645,8 @@ class GCodeViewer #endif // ENABLE_GCODE_VIEWER_STATISTICS public: + //B43 + enum class EViewType : unsigned char; struct SequentialView { class Marker @@ -658,6 +660,8 @@ public: Vec3f m_world_offset; float m_z_offset{ 0.5f }; bool m_visible{ true }; + //B43 + GCodeProcessorResult::MoveVertex m_curr_move; public: void init(); @@ -669,8 +673,9 @@ public: bool is_visible() const { return m_visible; } void set_visible(bool visible) { m_visible = visible; } - - void render(); + //B43 + void render(EViewType &view_type); + void update_curr_move(GCodeProcessorResult::MoveVertex move); }; class GCodeWindow @@ -725,8 +730,8 @@ public: Marker marker; GCodeWindow gcode_window; std::vector gcode_ids; - - void render(float legend_height); + //B43 + void render(float legend_height, EViewType &view_type); }; enum class EViewType : unsigned char @@ -757,6 +762,10 @@ private: BoundingBoxf3 m_shells_bounding_box; // bounding box of toolpaths + marker tools + shells BoundingBoxf3 m_max_bounding_box; + + //B43 + const GCodeProcessorResult *m_gcode_result; + float m_max_print_height{ 0.0f }; std::vector m_tool_colors; Layers m_layers; @@ -829,6 +838,10 @@ public: const SequentialView& get_sequential_view() const { return m_sequential_view; } void update_sequential_view_current(unsigned int first, unsigned int last); + //B43 + void update_marker_curr_move(); + + bool is_contained_in_bed() const { return m_contained_in_bed; } EViewType get_view_type() const { return m_view_type; }