mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-10 08:17:51 -06:00
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.
This commit is contained in:
parent
a6c927d87f
commit
ab2a2d5725
1 changed files with 11 additions and 1 deletions
|
@ -557,6 +557,9 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi
|
||||||
|
|
||||||
// draw pressure advance pattern
|
// draw pressure advance pattern
|
||||||
for (int i = 0; i < m_num_layers; ++i) {
|
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) {
|
if (i > 0) {
|
||||||
gcode << "; end pressure advance pattern for layer\n";
|
gcode << "; end pressure advance pattern for layer\n";
|
||||||
CustomGCode::Item item;
|
CustomGCode::Item item;
|
||||||
|
@ -568,7 +571,6 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi
|
||||||
gcode = std::stringstream(); // reset for next layer contents
|
gcode = std::stringstream(); // reset for next layer contents
|
||||||
gcode << "; start pressure advance pattern for layer\n";
|
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");
|
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_x = to_x;
|
||||||
double initial_y = to_y;
|
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 << 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) {
|
for (int j = 0; j < num_patterns; ++j) {
|
||||||
// increment pressure advance
|
// increment pressure advance
|
||||||
|
@ -631,15 +635,21 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi
|
||||||
if (k != wall_count() - 1) {
|
if (k != wall_count() - 1) {
|
||||||
// perimeters not done yet. move to next perimeter
|
// perimeters not done yet. move to next perimeter
|
||||||
to_x += line_spacing_angle();
|
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 << 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) {
|
} else if (j != num_patterns - 1) {
|
||||||
// patterns not done yet. move to next pattern
|
// patterns not done yet. move to next pattern
|
||||||
to_x += m_pattern_spacing + line_width();
|
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 << 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) {
|
} else if (i != m_num_layers - 1) {
|
||||||
// layers not done yet. move back to start
|
// layers not done yet. move back to start
|
||||||
to_x = initial_x;
|
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 << 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 {
|
} else {
|
||||||
// everything done
|
// everything done
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue