From ab2a2d57253e5f9851e1b82b7309dd0a0b2b95eb Mon Sep 17 00:00:00 2001 From: stew675 Date: Sat, 2 Dec 2023 19:37:33 -0600 Subject: [PATCH] Add zhop to PA pattern (#2952) The current PA pattern implementation does not lift the nozzle when moving. The way the pattern is drawn means that the nozzle is often dragged over already printed lines, which can pull the pattern off the bed, or damage the lines already drawn. As a result I often see failed prints with the PA pattern, or moderate damage to already drawn lines. This change adds a 1 layer hop between each move to eliminate nozzle drag. --- src/libslic3r/calib.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index 7d279e1895..120764885f 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -557,6 +557,9 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi // draw pressure advance pattern for (int i = 0; i < m_num_layers; ++i) { + const double layer_height = height_first_layer() + (i * height_layer()); + const double zhop_height = layer_height + height_layer(); + if (i > 0) { gcode << "; end pressure advance pattern for layer\n"; CustomGCode::Item item; @@ -568,7 +571,6 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi gcode = std::stringstream(); // reset for next layer contents gcode << "; start pressure advance pattern for layer\n"; - const double layer_height = height_first_layer() + (i * height_layer()); gcode << m_writer.travel_to_z(layer_height, "Move to layer height"); } @@ -606,7 +608,9 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi double initial_x = to_x; double initial_y = to_y; + gcode << m_writer.travel_to_z(zhop_height, "z-hop before move"); gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move to pattern start"); + gcode << m_writer.travel_to_z(layer_height, "undo z-hop"); for (int j = 0; j < num_patterns; ++j) { // increment pressure advance @@ -631,15 +635,21 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi if (k != wall_count() - 1) { // perimeters not done yet. move to next perimeter to_x += line_spacing_angle(); + gcode << m_writer.travel_to_z(zhop_height, "z-hop before move"); gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move to start next pattern wall"); + gcode << m_writer.travel_to_z(layer_height, "undo z-hop"); } else if (j != num_patterns - 1) { // patterns not done yet. move to next pattern to_x += m_pattern_spacing + line_width(); + gcode << m_writer.travel_to_z(zhop_height, "z-hop before move"); gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move to next pattern"); + gcode << m_writer.travel_to_z(layer_height, "undo z-hop"); } else if (i != m_num_layers - 1) { // layers not done yet. move back to start to_x = initial_x; + gcode << m_writer.travel_to_z(zhop_height, "z-hop before move"); gcode << move_to(Vec2d(to_x, to_y), m_writer, "Move back to start position"); + gcode << m_writer.travel_to_z(layer_height, "undo z-hop"); } else { // everything done }