mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-24 06:39:38 +08:00
Merge pull request #20368 from Ultimaker/purgelineMinZ_and_fix
Purgeline min z and fix
This commit is contained in:
commit
2f2b6a03ab
@ -163,11 +163,21 @@ class PurgeLinesAndUnload(Script):
|
|||||||
"move_to_start":
|
"move_to_start":
|
||||||
{
|
{
|
||||||
"label": "Circle around to layer start ⚠️",
|
"label": "Circle around to layer start ⚠️",
|
||||||
"description": "Depending on where the 'Layer Start X' and 'Layer Start Y' are for the print, the opening travel move can pass across the print area and leave a string there. This option will generate an orthogonal path that moves the nozzle around the edges of the build plate and then comes in to the Start Point. || ⚠️ || The nozzle will drop to Z0.0 and touch the build plate at each stop in order to 'nail down the string' so it doesn't follow in a straight line.",
|
"description": "Depending on where the 'Layer Start X' and 'Layer Start Y' are for the print, the opening travel move can pass across the print area and leave a string there. This option will generate an orthogonal path that moves the nozzle around the edges of the build plate and then comes in to the Start Point. || ⚠️ || The nozzle can drop to Z0.0 and touch the build plate at each stop in order to 'nail down the string'. The nozzle always raises after the touch-down. It will not drag on the bed.",
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
"default_value": false,
|
"default_value": false,
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
|
"move_to_start_min_z":
|
||||||
|
{
|
||||||
|
"label": " Minimum Z height ⚠️",
|
||||||
|
"description": "When moving to the start position, the nozzle can touch down on the build plate at each stop (Z = 0.0). That will stick the string to the build plate at each direction change so it doesn't pull across the print area. Some printers may not respond well to Z=0.0. You may set a minimum Z height here (min is 0.0 and max is 0.50). The string must stick or it defeats the purpose of moving around the periphery.",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 0.0,
|
||||||
|
"minimum_value": 0.0,
|
||||||
|
"maximum_value": 0.5,
|
||||||
|
"enabled": "move_to_start"
|
||||||
|
},
|
||||||
"adjust_starting_e":
|
"adjust_starting_e":
|
||||||
{
|
{
|
||||||
"label": "Adjust Starting E location",
|
"label": "Adjust Starting E location",
|
||||||
@ -254,6 +264,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
self.prime_blob_distance = self.getSettingValueByKey("prime_blob_distance")
|
self.prime_blob_distance = self.getSettingValueByKey("prime_blob_distance")
|
||||||
else:
|
else:
|
||||||
self.prime_blob_distance = 0
|
self.prime_blob_distance = 0
|
||||||
|
# Set the minimum Z to stick the string to the build plate when Move to Start is selected.
|
||||||
|
self.touchdown_z = self.getSettingValueByKey("move_to_start_min_z")
|
||||||
|
|
||||||
# Mapping settings to corresponding methods
|
# Mapping settings to corresponding methods
|
||||||
procedures = {
|
procedures = {
|
||||||
@ -385,7 +397,7 @@ class PurgeLinesAndUnload(Script):
|
|||||||
def add_move(axis: str, position: float) -> None:
|
def add_move(axis: str, position: float) -> None:
|
||||||
moves.append(
|
moves.append(
|
||||||
f"G0 F{self.speed_travel} {axis}{position} ; Start move\n"
|
f"G0 F{self.speed_travel} {axis}{position} ; Start move\n"
|
||||||
f"G0 F600 Z0 ; Nail down the string\n"
|
f"G0 F600 Z{self.touchdown_z} ; Nail down the string\n"
|
||||||
f"G0 F600 Z2 ; Move up\n"
|
f"G0 F600 Z2 ; Move up\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -480,6 +492,14 @@ class PurgeLinesAndUnload(Script):
|
|||||||
def calculate_purge_volume(line_width, purge_length, volume_per_mm):
|
def calculate_purge_volume(line_width, purge_length, volume_per_mm):
|
||||||
return round((line_width * 0.3 * purge_length) * 1.25 / volume_per_mm, 5)
|
return round((line_width * 0.3 * purge_length) * 1.25 / volume_per_mm, 5)
|
||||||
|
|
||||||
|
def adjust_for_prime_blob_gcode(retract_speed, retract_distance):
|
||||||
|
"""Generates G-code lines for prime blob adjustment."""
|
||||||
|
gcode_lines = [
|
||||||
|
f"G1 F{retract_speed} E{retract_distance} ; Unretract",
|
||||||
|
"G92 E0 ; Reset extruder"
|
||||||
|
]
|
||||||
|
return "\n".join(gcode_lines)
|
||||||
|
|
||||||
purge_location = self.getSettingValueByKey("purge_line_location")
|
purge_location = self.getSettingValueByKey("purge_line_location")
|
||||||
purge_extrusion_full = True if self.getSettingValueByKey("purge_line_length") == "purge_full" else False
|
purge_extrusion_full = True if self.getSettingValueByKey("purge_line_length") == "purge_full" else False
|
||||||
purge_str = ";TYPE:CUSTOM----------[Purge Lines]\nG0 F600 Z2 ; Move up\nG92 E0 ; Reset extruder\n"
|
purge_str = ";TYPE:CUSTOM----------[Purge Lines]\nG0 F600 Z2 ; Move up\nG92 E0 ; Reset extruder\n"
|
||||||
@ -494,6 +514,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
# Travel to the purge start
|
# Travel to the purge start
|
||||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + self.border_distance} Y{self.machine_front + 10} ; Move to start\n"
|
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + self.border_distance} Y{self.machine_front + 10} ; Move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{self.machine_left + self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{self.machine_left + self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{self.machine_left + 3 + self.border_distance} Y{y_stop} ; Move over\n"
|
purge_str += f"G0 X{self.machine_left + 3 + self.border_distance} Y{y_stop} ; Move over\n"
|
||||||
@ -513,6 +535,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
# Travel to the purge start
|
# Travel to the purge start
|
||||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_right - self.border_distance} ; Move\nG0 Y{self.machine_back - 10} ; Move\n"
|
purge_str += f"G0 F{self.speed_travel} X{self.machine_right - self.border_distance} ; Move\nG0 Y{self.machine_back - 10} ; Move\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{self.machine_right - self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{self.machine_right - self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{self.machine_right - 3 - self.border_distance} Y{y_stop} ; Move over\n"
|
purge_str += f"G0 X{self.machine_right - 3 - self.border_distance} Y{y_stop} ; Move over\n"
|
||||||
@ -533,6 +557,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
# Travel to the purge start
|
# Travel to the purge start
|
||||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + 10} Y{self.machine_front + self.border_distance} ; Move to start\n"
|
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + 10} Y{self.machine_front + self.border_distance} ; Move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_front + self.border_distance} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_front + self.border_distance} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{x_stop} Y{self.machine_front + 3 + self.border_distance} ; Move over\n"
|
purge_str += f"G0 X{x_stop} Y{self.machine_front + 3 + self.border_distance} ; Move over\n"
|
||||||
@ -554,6 +580,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
purge_str += f"G0 F{self.speed_travel} Y{self.machine_back - self.border_distance} ; Ortho Move to back\n"
|
purge_str += f"G0 F{self.speed_travel} Y{self.machine_back - self.border_distance} ; Ortho Move to back\n"
|
||||||
purge_str += f"G0 X{self.machine_right - 10} ; Ortho move to start\n"
|
purge_str += f"G0 X{self.machine_right - 10} ; Ortho move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_back - self.border_distance} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_back - self.border_distance} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{x_stop} Y{self.machine_back - 3 - self.border_distance} ; Move over\n"
|
purge_str += f"G0 X{x_stop} Y{self.machine_back - 3 - self.border_distance} ; Move over\n"
|
||||||
@ -575,6 +603,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
# Travel to the purge start
|
# Travel to the purge start
|
||||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + self.border_distance} Y{self.machine_front + 10} ; Move to start\n"
|
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + self.border_distance} Y{self.machine_front + 10} ; Move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{self.machine_left + self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{self.machine_left + self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{self.machine_left + 3 + self.border_distance} Y{y_stop} ; Move over\n"
|
purge_str += f"G0 X{self.machine_left + 3 + self.border_distance} Y{y_stop} ; Move over\n"
|
||||||
@ -594,6 +624,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
# Travel to the purge start
|
# Travel to the purge start
|
||||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_right - self.border_distance} Z2 ; Move\nG0 Y{self.machine_back - 10} Z2 ; Move to start\n"
|
purge_str += f"G0 F{self.speed_travel} X{self.machine_right - self.border_distance} Z2 ; Move\nG0 Y{self.machine_back - 10} Z2 ; Move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{self.machine_right - self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{self.machine_right - self.border_distance} Y{y_stop} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{self.machine_right - 3 - self.border_distance} Y{y_stop} ; Move over\n"
|
purge_str += f"G0 X{self.machine_right - 3 - self.border_distance} Y{y_stop} ; Move over\n"
|
||||||
@ -613,6 +645,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
# Travel to the purge start
|
# Travel to the purge start
|
||||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + 10} Z2 ; Move\nG0 Y{self.machine_front + self.border_distance} Z2 ; Move to start\n"
|
purge_str += f"G0 F{self.speed_travel} X{self.machine_left + 10} Z2 ; Move\nG0 Y{self.machine_front + self.border_distance} Z2 ; Move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_front + self.border_distance} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_front + self.border_distance} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{x_stop} Y{self.machine_front + 3 + self.border_distance} ; Move over\n"
|
purge_str += f"G0 X{x_stop} Y{self.machine_front + 3 + self.border_distance} ; Move over\n"
|
||||||
@ -633,6 +667,8 @@ class PurgeLinesAndUnload(Script):
|
|||||||
purge_str += f"G0 F{self.speed_travel} Y{self.machine_back - self.border_distance} Z2; Ortho Move to back\n"
|
purge_str += f"G0 F{self.speed_travel} Y{self.machine_back - self.border_distance} Z2; Ortho Move to back\n"
|
||||||
purge_str += f"G0 X{self.machine_right - 10} Z2 ; Ortho Move to start\n"
|
purge_str += f"G0 X{self.machine_right - 10} Z2 ; Ortho Move to start\n"
|
||||||
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
purge_str += f"G0 F600 Z0.3 ; Move down\n"
|
||||||
|
if self.prime_blob_enable:
|
||||||
|
purge_str += adjust_for_prime_blob_gcode(self.retract_speed, self.retract_dist)
|
||||||
# Purge two lines
|
# Purge two lines
|
||||||
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_back - self.border_distance} E{purge_volume} ; First line\n"
|
purge_str += f"G1 F{self.print_speed} X{x_stop} Y{self.machine_back - self.border_distance} E{purge_volume} ; First line\n"
|
||||||
purge_str += f"G0 X{x_stop} Y{self.machine_back - 3 - self.border_distance} ; Move over\n"
|
purge_str += f"G0 X{x_stop} Y{self.machine_back - 3 - self.border_distance} ; Move over\n"
|
||||||
@ -945,7 +981,7 @@ class PurgeLinesAndUnload(Script):
|
|||||||
blob_string = "G0 F1200 Z20 ; Move up\n"
|
blob_string = "G0 F1200 Z20 ; Move up\n"
|
||||||
blob_string += f"G0 F{self.speed_travel} X{blob_x} Y{blob_y} ; Move to blob location\n"
|
blob_string += f"G0 F{self.speed_travel} X{blob_x} Y{blob_y} ; Move to blob location\n"
|
||||||
blob_string += f"G1 F{speed_blob} E{self.prime_blob_distance} ; Blob\n"
|
blob_string += f"G1 F{speed_blob} E{self.prime_blob_distance} ; Blob\n"
|
||||||
blob_string += f"G1 F{self.retract_speed} E-{self.retract_dist} ; Retract\n"
|
blob_string += f"G1 F{self.retract_speed} E{self.prime_blob_distance - self.retract_dist} ; Retract\n"
|
||||||
blob_string += "G92 E0 ; Reset extruder\n"
|
blob_string += "G92 E0 ; Reset extruder\n"
|
||||||
blob_string += "M300 P500 S600 ; Beep\n"
|
blob_string += "M300 P500 S600 ; Beep\n"
|
||||||
blob_string += "G4 S2 ; Wait\n"
|
blob_string += "G4 S2 ; Wait\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user