From e2e06e5e899da8160ae0cc7729961d7486d0ddb4 Mon Sep 17 00:00:00 2001 From: Vovodroid Date: Mon, 14 Apr 2025 10:24:12 +0300 Subject: [PATCH] Fix skirt start angle per object (#7374) --- src/libslic3r/GCode.cpp | 10 ++++++---- src/libslic3r/GCode.hpp | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index e6c39a772d..5764a21da6 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3515,6 +3515,7 @@ inline std::string get_instance_name(const PrintObject *object, const PrintInsta std::string GCode::generate_skirt(const Print &print, const ExtrusionEntityCollection &skirt, const Point& offset, + const float skirt_start_angle, const LayerTools &layer_tools, const Layer& layer, unsigned int extruder_id) @@ -3559,7 +3560,7 @@ std::string GCode::generate_skirt(const Print &print, //FIXME using the support_speed of the 1st object printed. if (first_layer && i==loops.first) { //set skirt start point location - const Point desired_start_point = Skirt::find_start_point(loop, layer.object()->config().skirt_start_angle); + const Point desired_start_point = Skirt::find_start_point(loop, skirt_start_angle); gcode += this->extrude_loop(loop, "skirt", m_config.support_speed.value, {}, &desired_start_point); } else @@ -4156,7 +4157,8 @@ LayerResult GCode::process_layer( m_last_processor_extrusion_role = erWipeTower; if (print.config().skirt_type == stCombined && !print.skirt().empty()) - gcode += generate_skirt(print, print.skirt(), Point(0,0), layer_tools, layer, extruder_id); + gcode += generate_skirt(print, print.skirt(), Point(0, 0), layer.object()->config().skirt_start_angle, layer_tools, layer, + extruder_id); auto objects_by_extruder_it = by_extruder.find(extruder_id); if (objects_by_extruder_it == by_extruder.end()) @@ -4216,7 +4218,7 @@ LayerResult GCode::process_layer( m_skirt_done.erase(m_skirt_done.begin()+1,m_skirt_done.end()); const Point& offset = instance_to_print.print_object.instances()[instance_to_print.instance_id].shift; - gcode += generate_skirt(print, instance_to_print.print_object.object_skirt(), offset, layer_tools, layer, extruder_id); + gcode += generate_skirt(print, instance_to_print.print_object.object_skirt(), offset, instance_to_print.print_object.config().skirt_start_angle, layer_tools, layer, extruder_id); } } @@ -4236,7 +4238,7 @@ LayerResult GCode::process_layer( if (first_layer) m_skirt_done.clear(); const Point& offset = instance_to_print.print_object.instances()[instance_to_print.instance_id].shift; - gcode += generate_skirt(print, instance_to_print.print_object.object_skirt(), offset, layer_tools, layer, extruder_id); + gcode += generate_skirt(print, instance_to_print.print_object.object_skirt(), offset, instance_to_print.print_object.config().skirt_start_angle, layer_tools, layer, extruder_id); if (instances_to_print.size() > 1 && &instance_to_print != &*(instances_to_print.end() - 1)) m_skirt_done.pop_back(); } diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 5131742dc3..b41228059c 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -311,6 +311,7 @@ private: std::string generate_skirt(const Print &print, const ExtrusionEntityCollection &skirt, const Point& offset, + const float skirt_start_angle, const LayerTools &layer_tools, const Layer& layer, unsigned int extruder_id);