mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Implement preheating hotends for USB printing
This commit is contained in:
parent
70cd6aad53
commit
bc5b5ac283
6 changed files with 89 additions and 17 deletions
|
@ -19,6 +19,11 @@ class USBPrinterOuptutController(PrinterOutputController):
|
|||
self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished)
|
||||
self._preheat_printer = None
|
||||
|
||||
self._preheat_extruders_timer = QTimer()
|
||||
self._preheat_extruders_timer.setSingleShot(True)
|
||||
self._preheat_extruders_timer.timeout.connect(self._onPreheatHotendsTimerFinished)
|
||||
self._preheat_extruders = set()
|
||||
|
||||
def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed):
|
||||
self._output_device.sendCommand("G91")
|
||||
self._output_device.sendCommand("G0 X%s Y%s Z%s F%s" % (x, y, z, speed))
|
||||
|
@ -42,6 +47,9 @@ class USBPrinterOuptutController(PrinterOutputController):
|
|||
self._output_device.cancelPrint()
|
||||
pass
|
||||
|
||||
def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int):
|
||||
self._output_device.sendCommand("M140 S%s" % temperature)
|
||||
|
||||
def preheatBed(self, printer: "PrinterOutputModel", temperature, duration):
|
||||
try:
|
||||
temperature = round(temperature) # The API doesn't allow floating point.
|
||||
|
@ -60,9 +68,42 @@ class USBPrinterOuptutController(PrinterOutputController):
|
|||
self._preheat_bed_timer.stop()
|
||||
printer.updateIsPreheating(False)
|
||||
|
||||
def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int):
|
||||
self._output_device.sendCommand("M140 S%s" % temperature)
|
||||
|
||||
def _onPreheatBedTimerFinished(self):
|
||||
self.setTargetBedTemperature(self._preheat_printer, 0)
|
||||
self._preheat_printer.updateIsPreheating(False)
|
||||
self._preheat_printer.updateIsPreheating(False)
|
||||
|
||||
def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: int):
|
||||
self._output_device.sendCommand("M104 S%s T%s" % (temperature, position))
|
||||
|
||||
def _onPreheatHotendsTimerFinished(self):
|
||||
for extruder in self._preheat_extruders:
|
||||
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), 0)
|
||||
self._preheat_extruders = set()
|
||||
self._preheat_printer.updateIsPreheating(False)
|
||||
|
||||
def cancelPreheatHotend(self, extruder: "ExtruderOutputModel"):
|
||||
self.preheatHotend(extruder, temperature=0, duration=0)
|
||||
self._preheat_extruders_timer.stop()
|
||||
try:
|
||||
self._preheat_extruders.remove(extruder)
|
||||
except KeyError:
|
||||
pass
|
||||
extruder.updateIsPreheating(False)
|
||||
|
||||
def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration):
|
||||
position = extruder.getPosition()
|
||||
number_of_extruders = len(extruder.getPrinter().extruders)
|
||||
if position >= number_of_extruders:
|
||||
return # Got invalid extruder nr, can't pre-heat.
|
||||
|
||||
try:
|
||||
temperature = round(temperature) # The API doesn't allow floating point.
|
||||
duration = round(duration)
|
||||
except ValueError:
|
||||
return # Got invalid values, can't pre-heat.
|
||||
|
||||
self.setTargetHotendTemperature(extruder.getPrinter(), position, temperature=temperature)
|
||||
self._preheat_extruders_timer.setInterval(duration * 1000)
|
||||
self._preheat_extruders_timer.start()
|
||||
self._preheat_extruders.add(extruder)
|
||||
extruder.updateIsPreheating(True)
|
Loading…
Add table
Add a link
Reference in a new issue