New gcode visualization integration - Fixed center of gravity calculation and rendering

This commit is contained in:
enricoturri1966 2024-01-26 13:59:36 +01:00 committed by Lukas Matena
parent 0da174908a
commit 6785e4fefd
3 changed files with 15 additions and 4 deletions

View File

@ -1113,6 +1113,8 @@ void GCodeViewer::init()
void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const Print& print, const std::vector<std::string>& str_tool_colors, void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const Print& print, const std::vector<std::string>& str_tool_colors,
const std::vector<std::string>& str_color_print_colors) const std::vector<std::string>& 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 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"); const bool required_top_layer_only = get_app_config()->get_bool("seq_top_layer_only");
if (current_top_layer_only != required_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) { curr.role != libvgcode::EGCodeExtrusionRole::Custom) {
const Vec3d curr_pos = libvgcode::convert(curr.position).cast<double>(); const Vec3d curr_pos = libvgcode::convert(curr.position).cast<double>();
const Vec3d prev_pos = libvgcode::convert(m_viewer.get_vertex_at(i - 1).position).cast<double>(); const Vec3d prev_pos = libvgcode::convert(m_viewer.get_vertex_at(i - 1).position).cast<double>();
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 #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 #if ENABLE_NEW_GCODE_VIEWER
void GCodeViewer::load_as_preview(libvgcode::GCodeInputData&& data) 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::Skirt, { 127, 255, 127 });
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::ExternalPerimeter, { 255, 255, 0 }); m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::ExternalPerimeter, { 255, 255, 0 });
m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::SupportMaterial, { 127, 255, 127 }); m_viewer.set_extrusion_role_color(libvgcode::EGCodeExtrusionRole::SupportMaterial, { 127, 255, 127 });

View File

@ -903,6 +903,7 @@ private:
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
libvgcode::Viewer m_viewer; libvgcode::Viewer m_viewer;
bool m_loaded_as_preview{ false };
#endif // ENABLE_NEW_GCODE_VIEWER #endif // ENABLE_NEW_GCODE_VIEWER
public: public:
@ -928,9 +929,15 @@ public:
void render(); void render();
#if ENABLE_NEW_GCODE_VIEWER #if ENABLE_NEW_GCODE_VIEWER
#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS #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 #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 #endif // VGCODE_ENABLE_COG_AND_TOOL_MARKERS
bool has_data() const { return !m_viewer.get_extrusion_roles().empty(); } bool has_data() const { return !m_viewer.get_extrusion_roles().empty(); }
#else #else

View File

@ -229,7 +229,7 @@ GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, const std::ve
#if VGCODE_ENABLE_COG_AND_TOOL_MARKERS #if VGCODE_ENABLE_COG_AND_TOOL_MARKERS
const libvgcode::PathVertex vertex = { convert(curr.position), height, width, curr.feedrate, curr.fan_speed, 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<uint32_t>(curr.gcode_id), static_cast<uint32_t>(curr.layer_id), convert(curr.extrusion_role), curr_type, static_cast<uint32_t>(curr.gcode_id), static_cast<uint32_t>(curr.layer_id),
static_cast<uint8_t>(curr.extruder_id), static_cast<uint8_t>(curr.cp_color_id), curr.time }; static_cast<uint8_t>(curr.extruder_id), static_cast<uint8_t>(curr.cp_color_id), curr.time };
#else #else