Avoid collisions when moving Z down (#7208)

Avoid collisions with previous extrusions in the same layer when moving Z down in an XYZ move.
This happens for example when starting a scarf joint after another perimeter was already printed.

Fixes SoftFever#7191

Co-authored-by: SoftFever <softfeverever@gmail.com>
This commit is contained in:
Fritz Webering 2024-10-27 15:24:49 +01:00 committed by GitHub
parent 661efa733e
commit cf6d9c77ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -447,6 +447,12 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co
// this function, fix it first. // this function, fix it first.
//std::terminate(); //std::terminate();
// Orca: If moving down during below the current layer nominal Z, force XY->Z moves to avoid collisions with previous extrusions
double nominal_z = m_pos(2) - m_lifted;
if (point(2) < nominal_z - EPSILON) { // EPSILON to avoid false matches due to rounding errors
this->set_current_position_clear(false); // This forces XYZ moves to be split into XY->Z
}
/* If target Z is lower than current Z but higher than nominal Z we /* If target Z is lower than current Z but higher than nominal Z we
don't perform the Z move but we only move in the XY plane and don't perform the Z move but we only move in the XY plane and
adjust the nominal Z by reducing the lift amount that will be adjust the nominal Z by reducing the lift amount that will be