From 42e820e505864550d13cd6062956d7e05add9635 Mon Sep 17 00:00:00 2001 From: Rodrigo <162915171+RF47@users.noreply.github.com> Date: Sun, 27 Jul 2025 05:13:36 -0300 Subject: [PATCH] Bug fix: avoid crossing perimeters (#10185) * avoid crossing perimeters avoid crossing perimeters Timelapse issue Update GCode.cpp Update GCode.cpp Update GCode.cpp Update GCode.cpp * Update GCode.cpp * Update GCode.cpp Update GCode.cpp * Update GCode.cpp Update GCode.cpp * Replace tab with space --------- Co-authored-by: Noisyfox --- src/libslic3r/GCode.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 9f0c236437..456be3c3ec 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3721,6 +3721,7 @@ LayerResult GCode::process_layer( if(is_BBL_Printer()){ if (printer_structure == PrinterStructure::psI3 && !need_insert_timelapse_gcode_for_traditional && !m_spiral_vase && print.config().print_sequence == PrintSequence::ByLayer) { std::string timepals_gcode = insert_timelapse_gcode(); + if(!timepals_gcode.empty()){ gcode += timepals_gcode; m_writer.set_current_position_clear(false); //BBS: check whether custom gcode changes the z position. Update if changed @@ -3730,6 +3731,7 @@ LayerResult GCode::process_layer( pos(2) = temp_z_after_timepals_gcode; m_writer.set_position(pos); } + } } } else { if (!m_config.time_lapse_gcode.value.empty()) { @@ -4134,6 +4136,7 @@ LayerResult GCode::process_layer( m_writer.add_object_change_labels(gcode); std::string timepals_gcode = insert_timelapse_gcode(); + if(!timepals_gcode.empty()){ gcode += timepals_gcode; m_writer.set_current_position_clear(false); //BBS: check whether custom gcode changes the z position. Update if changed @@ -4143,6 +4146,7 @@ LayerResult GCode::process_layer( pos(2) = temp_z_after_timepals_gcode; m_writer.set_position(pos); } + } has_insert_timelapse_gcode = true; } gcode_toolchange = m_wipe_tower->tool_change(*this, extruder_id, extruder_id == layer_tools.extruders.back()); @@ -4379,6 +4383,7 @@ LayerResult GCode::process_layer( gcode += this->retract(false, false, LiftType::NormalLift); std::string timepals_gcode = insert_timelapse_gcode(); + if(!timepals_gcode.empty()){ gcode += timepals_gcode; m_writer.set_current_position_clear(false); //BBS: check whether custom gcode changes the z position. Update if changed @@ -4388,7 +4393,7 @@ LayerResult GCode::process_layer( pos(2) = temp_z_after_timepals_gcode; m_writer.set_position(pos); } - + } has_insert_timelapse_gcode = true; } // Then print infill @@ -4464,6 +4469,7 @@ LayerResult GCode::process_layer( m_writer.add_object_change_labels(gcode); std::string timepals_gcode = insert_timelapse_gcode(); + if(!timepals_gcode.empty()){ gcode += timepals_gcode; m_writer.set_current_position_clear(false); //BBS: check whether custom gcode changes the z position. Update if changed @@ -4473,6 +4479,7 @@ LayerResult GCode::process_layer( pos(2) = temp_z_after_timepals_gcode; m_writer.set_position(pos); } + } } result.gcode = std::move(gcode); @@ -6078,8 +6085,7 @@ std::string GCode::travel_to(const Point& point, ExtrusionRole role, std::string // if a retraction would be needed, try to use reduce_crossing_wall to plan a // multi-hop travel path inside the configuration space - if (needs_retraction - && m_config.reduce_crossing_wall + if ( m_config.reduce_crossing_wall && ! m_avoid_crossing_perimeters.disabled_once() //BBS: don't generate detour travel paths when current position is unclear && m_writer.is_current_position_clear()) {