From 6785e4fefd651cb24fee3de5657577803718b554 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Fri, 26 Jan 2024 13:59:36 +0100 Subject: [PATCH] New gcode visualization integration - Fixed center of gravity calculation and rendering --- src/slic3r/GUI/GCodeViewer.cpp | 6 +++++- src/slic3r/GUI/GCodeViewer.hpp | 11 +++++++++-- src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 7edf459bef..16deabdc77 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1113,6 +1113,8 @@ void GCodeViewer::init() void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const Print& print, const std::vector& str_tool_colors, const std::vector& str_color_print_colors) { + m_loaded_as_preview = false; + const bool current_top_layer_only = m_viewer.is_top_layer_only_view_range(); const bool required_top_layer_only = get_app_config()->get_bool("seq_top_layer_only"); if (current_top_layer_only != required_top_layer_only) @@ -1163,7 +1165,7 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const curr.role != libvgcode::EGCodeExtrusionRole::Custom) { const Vec3d curr_pos = libvgcode::convert(curr.position).cast(); const Vec3d prev_pos = libvgcode::convert(m_viewer.get_vertex_at(i - 1).position).cast(); - m_cog.add_segment(curr_pos, prev_pos, curr.volumetric_rate / curr.feedrate * (curr_pos - prev_pos).norm()); + m_cog.add_segment(curr_pos, prev_pos, gcode_result.filament_densities[curr.extruder_id] * curr.volumetric_rate / curr.feedrate * (curr_pos - prev_pos).norm()); } } #endif // !VGCODE_ENABLE_COG_AND_TOOL_MARKERS @@ -1297,6 +1299,8 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print & p #if ENABLE_NEW_GCODE_VIEWER void GCodeViewer::load_as_preview(libvgcode::GCodeInputData&& data) { + m_loaded_as_preview = true; + m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::Skirt, { 127, 255, 127 }); m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::ExternalPerimeter, { 255, 255, 0 }); m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::SupportMaterial, { 127, 255, 127 }); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 5867c77a78..d2e40fbcaa 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -903,6 +903,7 @@ private: #if ENABLE_NEW_GCODE_VIEWER libvgcode::Viewer m_viewer; + bool m_loaded_as_preview{ false }; #endif // ENABLE_NEW_GCODE_VIEWER public: @@ -928,9 +929,15 @@ public: void render(); #if ENABLE_NEW_GCODE_VIEWER #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS - void render_cog() { m_cog.render(m_cog_marker_fixed_screen_size); } + void render_cog() { + if (!m_loaded_as_preview && m_viewer.get_layers_count() > 0) + m_cog.render(m_cog_marker_fixed_screen_size); + } #else - void render_cog() { m_cog.render(); } + void render_cog() { + if (!m_loaded_as_preview && m_viewer.get_layers_count() > 0) + m_cog.render(); + } #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS bool has_data() const { return !m_viewer.get_extrusion_roles().empty(); } #else diff --git a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp index c27bbc9472..99d07a612a 100644 --- a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp +++ b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.cpp @@ -229,7 +229,7 @@ GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, const std::ve #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS const libvgcode::PathVertex vertex = { convert(curr.position), height, width, curr.feedrate, curr.fan_speed, - curr.temperature, curr.volumetric_rate(), curr.mm3_per_mm * (curr.position - prev.position).norm(), + curr.temperature, curr.volumetric_rate(), result.filament_densities[curr.extruder_id] * curr.mm3_per_mm * (curr.position - prev.position).norm(), convert(curr.extrusion_role), curr_type, static_cast(curr.gcode_id), static_cast(curr.layer_id), static_cast(curr.extruder_id), static_cast(curr.cp_color_id), curr.time }; #else