mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 14:37:29 -06:00
Update PurgeLinesAndUnload.py
Added purge blob option. Required changes in some settings to 'self'. Fixed 'quick_purge_speed' to adjust for 2.85 filament.
This commit is contained in:
parent
f44a0cbb8b
commit
5fe1193df1
1 changed files with 51 additions and 11 deletions
|
@ -125,6 +125,23 @@ class PurgeLinesAndUnload(Script):
|
|||
"maximum_value": 12,
|
||||
"enabled": "add_purge_lines"
|
||||
},
|
||||
"prime_blob_enable":
|
||||
{
|
||||
"label": " Start with Prime Blob️",
|
||||
"description": "Enable a stationary purge before starting the purge lines. Available only when purge line location is 'left' or 'front'",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "add_purge_lines and purge_line_location in ['front', 'left']"
|
||||
},
|
||||
"prime_blob_distance":
|
||||
{
|
||||
"label": " Blob Distance️",
|
||||
"description": "How many mm's of filament should be extruded for the blob.",
|
||||
"type": "int",
|
||||
"default_value": 0,
|
||||
"unit": "mm ",
|
||||
"enabled": "add_purge_lines and prime_blob_enable and purge_line_location in ['front', 'left']"
|
||||
},
|
||||
"move_to_start":
|
||||
{
|
||||
"label": "Circle around to layer start ⚠️",
|
||||
|
@ -214,6 +231,11 @@ class PurgeLinesAndUnload(Script):
|
|||
# The start location changes according to which quadrant the nozzle is in at the beginning
|
||||
self.end_purge_location = self._get_real_start_point(data[1])
|
||||
self.border_distance = self.getSettingValueByKey("border_distance")
|
||||
self.prime_blob_enable = self.getSettingValueByKey("prime_blob_enable")
|
||||
if self.prime_blob_enable:
|
||||
self.prime_blob_distance = self.getSettingValueByKey("prime_blob_distance")
|
||||
else:
|
||||
self.prime_blob_distance = 0
|
||||
|
||||
# Mapping settings to corresponding methods
|
||||
procedures = {
|
||||
|
@ -295,7 +317,7 @@ class PurgeLinesAndUnload(Script):
|
|||
if startup[index + 1].startswith("G0"):
|
||||
prime_move = startup[index + 1] + " ; Move to Prime Tower"
|
||||
adjustment_lines = self._move_to_location("Prime Tower", prime_tower_loc)
|
||||
startup[index + 1] = adjustment_lines + prime_move + "\n" + startup[index]
|
||||
startup[index + 1] = adjustment_lines + prime_move + "\n;---------------------[End of Prime Tower moves]\n" + startup[index]
|
||||
startup.pop(index)
|
||||
first_section[1] = "\n".join(startup)
|
||||
move_to_prime_present = True
|
||||
|
@ -443,6 +465,7 @@ class PurgeLinesAndUnload(Script):
|
|||
purge_location = self.getSettingValueByKey("purge_line_location")
|
||||
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 += self._get_blob_code()
|
||||
# Normal cartesian printer with origin at the left front corner
|
||||
if self.bed_shape == "rectangular" and not self.origin_at_center:
|
||||
if purge_location == Location.LEFT:
|
||||
|
@ -562,7 +585,7 @@ class PurgeLinesAndUnload(Script):
|
|||
purge_str += "G0 F600 Z8 ; Move Up\nG4 S1 ; Wait for 1 second\n"
|
||||
# Wipe
|
||||
purge_str += f"G0 F{self.print_speed} X{self.machine_right - 3 - self.border_distance} Y{self.machine_back - 20} Z0.3 ; Slide over and down\n"
|
||||
purge_str += f"G0 X{self.machine_right - 3 - self.border_distance} Y{self.machine_back - 35} ; Wipe\n"
|
||||
purge_str += f"G0 F{self.speed_travel} X{self.machine_right - 3 - self.border_distance} Y{self.machine_back - 35} ; Wipe\n"
|
||||
self.end_purge_location = Position.RIGHT_REAR
|
||||
elif purge_location == Location.FRONT:
|
||||
purge_len = int(self.machine_right - self.machine_left - 20) if purge_extrusion_full else int(
|
||||
|
@ -581,7 +604,7 @@ class PurgeLinesAndUnload(Script):
|
|||
purge_str += "G0 F600 Z8 ; Move Up\nG4 S1 ; Wait for 1 second\n"
|
||||
# Wipe
|
||||
purge_str += f"G0 F{self.print_speed} X{self.machine_left + 20} Y{self.machine_front + 3 + self.border_distance} Z0.3 ; Slide over and down\n"
|
||||
purge_str += f"G0 X{self.machine_left + 35} Y{self.machine_front + 3 + self.border_distance} ; Wipe\n"
|
||||
purge_str += f"G0 F{self.print_speed} X{self.machine_left + 35} Y{self.machine_front + 3 + self.border_distance} ; Wipe\n"
|
||||
self.end_purge_location = Position.LEFT_FRONT
|
||||
elif purge_location == Location.REAR:
|
||||
purge_len = int(self.machine_right - self.machine_left - 20) if purge_extrusion_full else abs(
|
||||
|
@ -601,7 +624,7 @@ class PurgeLinesAndUnload(Script):
|
|||
purge_str += "G0 F600 Z8 ; Move Up\nG4 S1 ; Wait for 1 second\n"
|
||||
# Wipe
|
||||
purge_str += f"G0 F{self.print_speed} X{self.machine_right - 20} Y{self.machine_back - 3 - self.border_distance} Z0.3 ; Slide over and down\n"
|
||||
purge_str += f"G0 X{self.machine_right - 35} Y{self.machine_back - 3 - self.border_distance} ; Wipe\n"
|
||||
purge_str += f"G0 F{self.print_speed} X{self.machine_right - 35} Y{self.machine_back - 3 - self.border_distance} ; Wipe\n"
|
||||
self.end_purge_location = Position.RIGHT_REAR
|
||||
# Elliptic printers with Origin at Center
|
||||
elif self.bed_shape == "elliptic":
|
||||
|
@ -788,7 +811,8 @@ class PurgeLinesAndUnload(Script):
|
|||
# Unloading a large amount of filament in a single command can trip the 'Overlong Extrusion' warning in some firmware. Unloads longer than 150mm are split into individual 150mm segments.
|
||||
def _unload_filament(self, data: str) -> str:
|
||||
extrude_speed = 3000
|
||||
quick_purge_speed = round(float(self.extruder[0].getProperty("machine_nozzle_size", "value")) * 500)
|
||||
quick_purge_speed = round(float(self.nozzle_size) * 500)
|
||||
if self.material_diameter > 2: quick_purge_speed *= .38 # Adjustment for 2.85 filament
|
||||
retract_amount = self.extruder[0].getProperty("retraction_amount", "value")
|
||||
quick_purge_amount = retract_amount + 5 if retract_amount < 2.0 else retract_amount * 2
|
||||
unload_distance = self.getSettingValueByKey("unload_distance")
|
||||
|
@ -875,17 +899,33 @@ class PurgeLinesAndUnload(Script):
|
|||
else:
|
||||
self.nozzle_offset_x = 0.0
|
||||
self.nozzle_offset_y = 0.0
|
||||
material_diameter = self.extruder[num].getProperty("material_diameter", "value")
|
||||
self.material_diameter = self.extruder[num].getProperty("material_diameter", "value")
|
||||
self.nozzle_size = self.extruder[num].getProperty("machine_nozzle_size", "value")
|
||||
self.init_line_width = self.extruder[num].getProperty("skirt_brim_line_width", "value")
|
||||
self.print_speed = round(self.extruder[num].getProperty("speed_print", "value") * 60 * .75)
|
||||
self.speed_travel = round(self.extruder[num].getProperty("speed_travel", "value") * 60)
|
||||
self.retract_dist = self.extruder[num].getProperty("retraction_amount", "value")
|
||||
self.retraction_enable = self.extruder[num].getProperty("retraction_enable", "value")
|
||||
self.retract_speed = self.extruder[num].getProperty("retraction_retract_speed", "value") * 60
|
||||
self.mm3_per_mm = (material_diameter / 2) ** 2 * math.pi
|
||||
self.mm3_per_mm = (self.material_diameter / 2) ** 2 * math.pi
|
||||
# Don't add purge lines if 'T0' has offsets.
|
||||
t0_x_offset = self.extruder[0].getProperty("machine_nozzle_offset_x", "value")
|
||||
t0_y_offset = self.extruder[0].getProperty("machine_nozzle_offset_y", "value")
|
||||
if t0_x_offset or t0_y_offset:
|
||||
self.t0_has_offsets = True
|
||||
return num
|
||||
|
||||
def _get_blob_code(self) -> str:
|
||||
if not self.prime_blob_enable or self.prime_blob_distance == 0 or self.getSettingValueByKey("purge_line_location") not in ["front", "left"]:
|
||||
return ""
|
||||
# Set extruder speed for 1.75 filament
|
||||
speed_blob = round(float(self.nozzle_size) * 500)
|
||||
# Adjust speed if 2.85 filament
|
||||
if self.material_diameter > 2: speed_blob *= .4
|
||||
blob_string = "G0 F1200 Z20 ; Move up\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 += "G92 E0 ; Reset extruder\n"
|
||||
blob_string += "M300 P500 S600 ; Beep\n"
|
||||
blob_string += "G4 S2 ; Wait\n"
|
||||
return blob_string
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue