ExtruderOuputModel.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # Copyright (c) 2017 Ultimaker B.V.
  2. # Cura is released under the terms of the LGPLv3 or higher.
  3. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot
  4. from UM.Logger import Logger
  5. from typing import Optional
  6. MYPY = False
  7. if MYPY:
  8. from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
  9. from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel
  10. class ExtruderOutputModel(QObject):
  11. hotendIDChanged = pyqtSignal()
  12. targetHotendTemperatureChanged = pyqtSignal()
  13. hotendTemperatureChanged = pyqtSignal()
  14. activeMaterialChanged = pyqtSignal()
  15. def __init__(self, printer: "PrinterOutputModel", parent=None):
  16. super().__init__(parent)
  17. self._printer = printer
  18. self._target_hotend_temperature = 0
  19. self._hotend_temperature = 0
  20. self._hotend_id = ""
  21. self._active_material = None # type: Optional[MaterialOutputModel]
  22. @pyqtProperty(QObject, notify = activeMaterialChanged)
  23. def activeMaterial(self) -> "MaterialOutputModel":
  24. return self._active_material
  25. def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]):
  26. if self._active_material != material:
  27. self._active_material = material
  28. self.activeMaterialChanged.emit()
  29. ## Update the hotend temperature. This only changes it locally.
  30. def updateHotendTemperature(self, temperature: float):
  31. if self._hotend_temperature != temperature:
  32. self._hotend_temperature = temperature
  33. self.hotendTemperatureChanged.emit()
  34. def updateTargetHotendTemperature(self, temperature: float):
  35. if self._target_hotend_temperature != temperature:
  36. self._target_hotend_temperature = temperature
  37. self.targetHotendTemperatureChanged.emit()
  38. ## Set the target hotend temperature. This ensures that it's actually sent to the remote.
  39. @pyqtSlot(float)
  40. def setTargetHotendTemperature(self, temperature: float):
  41. self._printer.getController().setTargetHotendTemperature(self._printer, self, temperature)
  42. self.updateTargetHotendTemperature(temperature)
  43. @pyqtProperty(float, notify = targetHotendTemperatureChanged)
  44. def targetHotendTemperature(self) -> float:
  45. return self._target_hotend_temperature
  46. @pyqtProperty(float, notify=hotendTemperatureChanged)
  47. def hotendTemperature(self) -> float:
  48. return self._hotend_temperature
  49. @pyqtProperty(str, notify = hotendIDChanged)
  50. def hotendID(self) -> str:
  51. return self._hotend_id
  52. def updateHotendID(self, id: str):
  53. if self._hotend_id != id:
  54. self._hotend_id = id
  55. self.hotendIDChanged.emit()