diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index fb899164d..e458d933b 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -104,6 +104,7 @@ void GCodeViewer::reset() buffer.reset(); } + m_bounding_box = BoundingBoxf3(); m_extrusions.reset_role_visibility_flags(); m_shells.volumes.clear(); m_layers_zs = std::vector<double>(); @@ -198,13 +199,14 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) if (m_vertices.vertices_count == 0) return; - // vertex data -> extract from result + // vertex data / bounding box -> extract from result std::vector<float> vertices_data; for (const GCodeProcessor::MoveVertex& move : gcode_result.moves) { for (int j = 0; j < 3; ++j) { vertices_data.insert(vertices_data.end(), move.position[j]); + m_bounding_box.merge(move.position.cast<double>()); } } diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 1020606b8..aff2a807d 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -97,6 +97,7 @@ public: private: VBuffer m_vertices; std::vector<IBuffer> m_buffers{ static_cast<size_t>(GCodeProcessor::EMoveType::Extrude) }; + BoundingBoxf3 m_bounding_box; unsigned int m_last_result_id{ 0 }; std::vector<double> m_layers_zs; @@ -117,6 +118,7 @@ public: void reset(); void render() const; + const BoundingBoxf3& get_bounding_box() const { return m_bounding_box; } const std::vector<double>& get_layers_zs() const { return m_layers_zs; }; EViewType get_view_type() const { return m_view_type; } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index fcefc8f8a..604f98a79 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2841,9 +2841,8 @@ void GLCanvas3D::load_gcode_preview_2(const GCodeProcessor::Result& gcode_result } out.close(); } - - m_gcode_viewer.load(gcode_result , *this->fff_print(), m_initialized); #endif // ENABLE_GCODE_VIEWER_DEBUG_OUTPUT + m_gcode_viewer.load(gcode_result, *this->fff_print(), m_initialized); } #endif // ENABLE_GCODE_VIEWER @@ -5213,6 +5212,12 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be #else bb.merge(m_bed.get_bounding_box(include_bed_model)); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER + +#if ENABLE_GCODE_VIEWER + if (!m_main_toolbar.is_enabled()) + bb.merge(m_gcode_viewer.get_bounding_box()); +#endif // ENABLE_GCODE_VIEWER + return bb; }