ExtruderModel.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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.PrinterModel import PrinterModel
  9. from cura.PrinterOutput.MaterialModel import MaterialModel
  10. class ExtruderModel(QObject):
  11. hotendIDChanged = pyqtSignal()
  12. targetHotendTemperatureChanged = pyqtSignal()
  13. hotendTemperatureChanged = pyqtSignal()
  14. activeMaterialChanged = pyqtSignal()
  15. def __init__(self, printer: "PrinterModel", 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[MaterialModel]
  22. @pyqtProperty(QObject, notify = activeMaterialChanged)
  23. def activeMaterial(self) -> "MaterialModel":
  24. return self._active_material
  25. def updateActiveMaterial(self, material: Optional["MaterialModel"]):
  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: int):
  31. if self._hotend_temperature != temperature:
  32. self._hotend_temperature = temperature
  33. self.hotendTemperatureChanged.emit()
  34. def updateTargetHotendTemperature(self, temperature: int):
  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(int)
  40. def setTargetHotendTemperature(self, temperature: int):
  41. self._setTargetHotendTemperature(temperature)
  42. self.updateTargetHotendTemperature(temperature)
  43. @pyqtProperty(int, notify = targetHotendTemperatureChanged)
  44. def targetHotendTemperature(self) -> int:
  45. return self._target_hotend_temperature
  46. @pyqtProperty(int, notify=hotendTemperatureChanged)
  47. def hotendTemperature(self) -> int:
  48. return self._hotendTemperature
  49. ## Protected setter for the hotend temperature of the connected printer (if any).
  50. # /parameter temperature Temperature hotend needs to go to (in deg celsius)
  51. # /sa setTargetHotendTemperature
  52. def _setTargetHotendTemperature(self, temperature):
  53. Logger.log("w", "_setTargetHotendTemperature is not implemented by this model")
  54. @pyqtProperty(str, notify = hotendIDChanged)
  55. def hotendID(self) -> str:
  56. return self._hotend_id
  57. def updateHotendID(self, id: str):
  58. if self._hotend_id != id:
  59. self._hotend_id = id
  60. self.hotendIDChanged.emit()