mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-21 21:58:01 -06:00
Fix typing in GenericOutputController
This commit is contained in:
parent
2c3b723070
commit
28dc32adab
1 changed files with 36 additions and 29 deletions
|
@ -1,7 +1,7 @@
|
||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from typing import TYPE_CHECKING, Union
|
from typing import TYPE_CHECKING, Set, Union, Optional
|
||||||
|
|
||||||
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
|
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
|
||||||
from PyQt5.QtCore import QTimer
|
from PyQt5.QtCore import QTimer
|
||||||
|
@ -9,27 +9,28 @@ from PyQt5.QtCore import QTimer
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
|
from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
|
||||||
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
|
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
|
||||||
|
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice
|
||||||
from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel
|
from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel
|
||||||
|
|
||||||
|
|
||||||
class GenericOutputController(PrinterOutputController):
|
class GenericOutputController(PrinterOutputController):
|
||||||
def __init__(self, output_device):
|
def __init__(self, output_device: "PrinterOutputDevice") -> None:
|
||||||
super().__init__(output_device)
|
super().__init__(output_device)
|
||||||
|
|
||||||
self._preheat_bed_timer = QTimer()
|
self._preheat_bed_timer = QTimer()
|
||||||
self._preheat_bed_timer.setSingleShot(True)
|
self._preheat_bed_timer.setSingleShot(True)
|
||||||
self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished)
|
self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished)
|
||||||
self._preheat_printer = None
|
self._preheat_printer = None #type: Optional[PrinterOutputModel]
|
||||||
|
|
||||||
self._preheat_hotends_timer = QTimer()
|
self._preheat_hotends_timer = QTimer()
|
||||||
self._preheat_hotends_timer.setSingleShot(True)
|
self._preheat_hotends_timer.setSingleShot(True)
|
||||||
self._preheat_hotends_timer.timeout.connect(self._onPreheatHotendsTimerFinished)
|
self._preheat_hotends_timer.timeout.connect(self._onPreheatHotendsTimerFinished)
|
||||||
self._preheat_hotends = set()
|
self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
|
||||||
|
|
||||||
self._output_device.printersChanged.connect(self._onPrintersChanged)
|
self._output_device.printersChanged.connect(self._onPrintersChanged)
|
||||||
self._active_printer = None
|
self._active_printer = None #type: Optional[PrinterOutputModel]
|
||||||
|
|
||||||
def _onPrintersChanged(self):
|
def _onPrintersChanged(self) -> None:
|
||||||
if self._active_printer:
|
if self._active_printer:
|
||||||
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
|
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
|
||||||
self._active_printer.targetBedTemperatureChanged.disconnect(self._onTargetBedTemperatureChanged)
|
self._active_printer.targetBedTemperatureChanged.disconnect(self._onTargetBedTemperatureChanged)
|
||||||
|
@ -43,32 +44,33 @@ class GenericOutputController(PrinterOutputController):
|
||||||
for extruder in self._active_printer.extruders:
|
for extruder in self._active_printer.extruders:
|
||||||
extruder.targetHotendTemperatureChanged.connect(self._onTargetHotendTemperatureChanged)
|
extruder.targetHotendTemperatureChanged.connect(self._onTargetHotendTemperatureChanged)
|
||||||
|
|
||||||
def _onPrinterStateChanged(self):
|
def _onPrinterStateChanged(self) -> None:
|
||||||
if self._active_printer.state != "idle":
|
if self._active_printer and self._active_printer.state != "idle":
|
||||||
if self._preheat_bed_timer.isActive():
|
if self._preheat_bed_timer.isActive():
|
||||||
self._preheat_bed_timer.stop()
|
self._preheat_bed_timer.stop()
|
||||||
self._preheat_printer.updateIsPreheating(False)
|
if self._preheat_printer:
|
||||||
|
self._preheat_printer.updateIsPreheating(False)
|
||||||
if self._preheat_hotends_timer.isActive():
|
if self._preheat_hotends_timer.isActive():
|
||||||
self._preheat_hotends_timer.stop()
|
self._preheat_hotends_timer.stop()
|
||||||
for extruder in self._preheat_hotends:
|
for extruder in self._preheat_hotends:
|
||||||
extruder.updateIsPreheating(False)
|
extruder.updateIsPreheating(False)
|
||||||
self._preheat_hotends = set()
|
self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
|
||||||
|
|
||||||
def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed):
|
def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
|
||||||
self._output_device.sendCommand("G91")
|
self._output_device.sendCommand("G91")
|
||||||
self._output_device.sendCommand("G0 X%s Y%s Z%s F%s" % (x, y, z, speed))
|
self._output_device.sendCommand("G0 X%s Y%s Z%s F%s" % (x, y, z, speed))
|
||||||
self._output_device.sendCommand("G90")
|
self._output_device.sendCommand("G90")
|
||||||
|
|
||||||
def homeHead(self, printer):
|
def homeHead(self, printer: "PrinterOutputModel") -> None:
|
||||||
self._output_device.sendCommand("G28 X Y")
|
self._output_device.sendCommand("G28 X Y")
|
||||||
|
|
||||||
def homeBed(self, printer):
|
def homeBed(self, printer: "PrinterOutputModel") -> None:
|
||||||
self._output_device.sendCommand("G28 Z")
|
self._output_device.sendCommand("G28 Z")
|
||||||
|
|
||||||
def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
|
def sendRawCommand(self, printer: "PrinterOutputModel", command: str) -> None:
|
||||||
self._output_device.sendCommand(command.upper()) #Most printers only understand uppercase g-code commands.
|
self._output_device.sendCommand(command.upper()) #Most printers only understand uppercase g-code commands.
|
||||||
|
|
||||||
def setJobState(self, job: "PrintJobOutputModel", state: str):
|
def setJobState(self, job: "PrintJobOutputModel", state: str) -> None:
|
||||||
if state == "pause":
|
if state == "pause":
|
||||||
self._output_device.pausePrint()
|
self._output_device.pausePrint()
|
||||||
job.updateState("paused")
|
job.updateState("paused")
|
||||||
|
@ -79,15 +81,15 @@ class GenericOutputController(PrinterOutputController):
|
||||||
self._output_device.cancelPrint()
|
self._output_device.cancelPrint()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int):
|
def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int) -> None:
|
||||||
self._output_device.sendCommand("M140 S%s" % temperature)
|
self._output_device.sendCommand("M140 S%s" % temperature)
|
||||||
|
|
||||||
def _onTargetBedTemperatureChanged(self):
|
def _onTargetBedTemperatureChanged(self) -> None:
|
||||||
if self._preheat_bed_timer.isActive() and self._preheat_printer.targetBedTemperature == 0:
|
if self._preheat_bed_timer.isActive() and self._preheat_printer and self._preheat_printer.targetBedTemperature == 0:
|
||||||
self._preheat_bed_timer.stop()
|
self._preheat_bed_timer.stop()
|
||||||
self._preheat_printer.updateIsPreheating(False)
|
self._preheat_printer.updateIsPreheating(False)
|
||||||
|
|
||||||
def preheatBed(self, printer: "PrinterOutputModel", temperature, duration):
|
def preheatBed(self, printer: "PrinterOutputModel", temperature, duration) -> None:
|
||||||
try:
|
try:
|
||||||
temperature = round(temperature) # The API doesn't allow floating point.
|
temperature = round(temperature) # The API doesn't allow floating point.
|
||||||
duration = round(duration)
|
duration = round(duration)
|
||||||
|
@ -100,21 +102,25 @@ class GenericOutputController(PrinterOutputController):
|
||||||
self._preheat_printer = printer
|
self._preheat_printer = printer
|
||||||
printer.updateIsPreheating(True)
|
printer.updateIsPreheating(True)
|
||||||
|
|
||||||
def cancelPreheatBed(self, printer: "PrinterOutputModel"):
|
def cancelPreheatBed(self, printer: "PrinterOutputModel") -> None:
|
||||||
self.setTargetBedTemperature(printer, temperature=0)
|
self.setTargetBedTemperature(printer, temperature=0)
|
||||||
self._preheat_bed_timer.stop()
|
self._preheat_bed_timer.stop()
|
||||||
printer.updateIsPreheating(False)
|
printer.updateIsPreheating(False)
|
||||||
|
|
||||||
def _onPreheatBedTimerFinished(self):
|
def _onPreheatBedTimerFinished(self) -> None:
|
||||||
|
if not self._preheat_printer:
|
||||||
|
return
|
||||||
self.setTargetBedTemperature(self._preheat_printer, 0)
|
self.setTargetBedTemperature(self._preheat_printer, 0)
|
||||||
self._preheat_printer.updateIsPreheating(False)
|
self._preheat_printer.updateIsPreheating(False)
|
||||||
|
|
||||||
def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: Union[int, float]) -> None:
|
def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: Union[int, float]) -> None:
|
||||||
self._output_device.sendCommand("M104 S%s T%s" % (temperature, position))
|
self._output_device.sendCommand("M104 S%s T%s" % (temperature, position))
|
||||||
|
|
||||||
def _onTargetHotendTemperatureChanged(self):
|
def _onTargetHotendTemperatureChanged(self) -> None:
|
||||||
if not self._preheat_hotends_timer.isActive():
|
if not self._preheat_hotends_timer.isActive():
|
||||||
return
|
return
|
||||||
|
if not self._active_printer:
|
||||||
|
return
|
||||||
|
|
||||||
for extruder in self._active_printer.extruders:
|
for extruder in self._active_printer.extruders:
|
||||||
if extruder in self._preheat_hotends and extruder.targetHotendTemperature == 0:
|
if extruder in self._preheat_hotends and extruder.targetHotendTemperature == 0:
|
||||||
|
@ -123,7 +129,7 @@ class GenericOutputController(PrinterOutputController):
|
||||||
if not self._preheat_hotends:
|
if not self._preheat_hotends:
|
||||||
self._preheat_hotends_timer.stop()
|
self._preheat_hotends_timer.stop()
|
||||||
|
|
||||||
def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration):
|
def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration) -> None:
|
||||||
position = extruder.getPosition()
|
position = extruder.getPosition()
|
||||||
number_of_extruders = len(extruder.getPrinter().extruders)
|
number_of_extruders = len(extruder.getPrinter().extruders)
|
||||||
if position >= number_of_extruders:
|
if position >= number_of_extruders:
|
||||||
|
@ -141,7 +147,7 @@ class GenericOutputController(PrinterOutputController):
|
||||||
self._preheat_hotends.add(extruder)
|
self._preheat_hotends.add(extruder)
|
||||||
extruder.updateIsPreheating(True)
|
extruder.updateIsPreheating(True)
|
||||||
|
|
||||||
def cancelPreheatHotend(self, extruder: "ExtruderOutputModel"):
|
def cancelPreheatHotend(self, extruder: "ExtruderOutputModel") -> None:
|
||||||
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), temperature=0)
|
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), temperature=0)
|
||||||
if extruder in self._preheat_hotends:
|
if extruder in self._preheat_hotends:
|
||||||
extruder.updateIsPreheating(False)
|
extruder.updateIsPreheating(False)
|
||||||
|
@ -149,21 +155,22 @@ class GenericOutputController(PrinterOutputController):
|
||||||
if not self._preheat_hotends and self._preheat_hotends_timer.isActive():
|
if not self._preheat_hotends and self._preheat_hotends_timer.isActive():
|
||||||
self._preheat_hotends_timer.stop()
|
self._preheat_hotends_timer.stop()
|
||||||
|
|
||||||
def _onPreheatHotendsTimerFinished(self):
|
def _onPreheatHotendsTimerFinished(self) -> None:
|
||||||
for extruder in self._preheat_hotends:
|
for extruder in self._preheat_hotends:
|
||||||
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), 0)
|
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), 0)
|
||||||
self._preheat_hotends = set()
|
self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
|
||||||
|
|
||||||
# Cancel any ongoing preheating timers, without setting back the temperature to 0
|
# Cancel any ongoing preheating timers, without setting back the temperature to 0
|
||||||
# This can be used eg at the start of a print
|
# This can be used eg at the start of a print
|
||||||
def stopPreheatTimers(self):
|
def stopPreheatTimers(self) -> None:
|
||||||
if self._preheat_hotends_timer.isActive():
|
if self._preheat_hotends_timer.isActive():
|
||||||
for extruder in self._preheat_hotends:
|
for extruder in self._preheat_hotends:
|
||||||
extruder.updateIsPreheating(False)
|
extruder.updateIsPreheating(False)
|
||||||
self._preheat_hotends = set()
|
self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
|
||||||
|
|
||||||
self._preheat_hotends_timer.stop()
|
self._preheat_hotends_timer.stop()
|
||||||
|
|
||||||
if self._preheat_bed_timer.isActive():
|
if self._preheat_bed_timer.isActive():
|
||||||
self._preheat_printer.updateIsPreheating(False)
|
if self._preheat_printer:
|
||||||
|
self._preheat_printer.updateIsPreheating(False)
|
||||||
self._preheat_bed_timer.stop()
|
self._preheat_bed_timer.stop()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue