diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 74b4035957..3142d491a3 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3798,6 +3798,11 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role) return false; } + //BBS: force to retract when leave from external perimeter for a long travel + //Better way is judging whether the travel move direction is same with last extrusion move. + if (is_perimeter(m_last_processor_extrusion_role) && m_last_processor_extrusion_role != erPerimeter) + return true; + if (role == erSupportMaterial || role == erSupportTransition) { const SupportLayer* support_layer = dynamic_cast(m_layer); //FIXME support_layer->support_islands.contains should use some search structure!