def __init__(self, printer: "PrinterOutputModel", position, parent=None): super().__init__(parent) self._printer = printer self._position = position self._target_hotend_temperature = 0 self._hotend_temperature = 0 self._hotend_id = "" self._active_material = None # type: Optional[MaterialOutputModel] self._extruder_configuration = ExtruderConfigurationModel() self._extruder_configuration.position = self._position self._is_preheating = False
def _createPrintJobModel(self, data: Dict[str, Any]) -> UM3PrintJobOutputModel: print_job = UM3PrintJobOutputModel( output_controller=ClusterUM3PrinterOutputController(self), key=data["uuid"], name=data["name"]) configuration = ConfigurationModel() extruders = [ ExtruderConfigurationModel(position=idx) for idx in range(0, self._number_of_extruders) ] for index in range(0, self._number_of_extruders): try: extruder_data = data["configuration"][index] except IndexError: continue extruder = extruders[int( data["configuration"][index]["extruder_index"])] extruder.setHotendID(extruder_data.get("print_core_id", "")) extruder.setMaterial( self._createMaterialOutputModel( extruder_data.get("material", {}))) configuration.setExtruderConfigurations(extruders) print_job.updateConfiguration(configuration) print_job.setCompatibleMachineFamilies( data.get("compatible_machine_families", [])) print_job.stateChanged.connect(self._printJobStateChanged) return print_job
def __init__(self, printer: "PrinterOutputModel", position: int, parent=None) -> None: super().__init__(parent) self._printer = printer # type: PrinterOutputModel self._position = position self._target_hotend_temperature = 0.0 # type: float self._hotend_temperature = 0.0 # type: float self._is_preheating = False # The extruder output model wraps the configuration model. This way we can use the same config model for jobs # and extruders alike. self._extruder_configuration = ExtruderConfigurationModel() self._extruder_configuration.position = self._position self._extruder_configuration.extruderConfigurationChanged.connect( self.extruderConfigurationChanged)
def __init__(self, printer: "PrinterOutputModel", position: int, parent=None) -> None: super().__init__(parent) self._printer = printer # type: PrinterOutputModel self._position = position self._target_hotend_temperature = 0.0 # type: float self._hotend_temperature = 0.0 # type: float self._is_preheating = False # The extruder output model wraps the configuration model. This way we can use the same config model for jobs # and extruders alike. self._extruder_configuration = ExtruderConfigurationModel() self._extruder_configuration.position = self._position self._extruder_configuration.extruderConfigurationChanged.connect(self.extruderConfigurationChanged)
class ExtruderOutputModel(QObject): targetHotendTemperatureChanged = pyqtSignal() hotendTemperatureChanged = pyqtSignal() extruderConfigurationChanged = pyqtSignal() isPreheatingChanged = pyqtSignal() def __init__(self, printer: "PrinterOutputModel", position: int, parent=None) -> None: super().__init__(parent) self._printer = printer # type: PrinterOutputModel self._position = position self._target_hotend_temperature = 0.0 # type: float self._hotend_temperature = 0.0 # type: float self._is_preheating = False # The extruder output model wraps the configuration model. This way we can use the same config model for jobs # and extruders alike. self._extruder_configuration = ExtruderConfigurationModel() self._extruder_configuration.position = self._position self._extruder_configuration.extruderConfigurationChanged.connect( self.extruderConfigurationChanged) def getPrinter(self) -> "PrinterOutputModel": return self._printer def getPosition(self) -> int: return self._position # Does the printer support pre-heating the bed at all @pyqtProperty(bool, constant=True) def canPreHeatHotends(self) -> bool: if self._printer: return self._printer.canPreHeatHotends return False @pyqtProperty(QObject, notify=extruderConfigurationChanged) def activeMaterial(self) -> Optional["MaterialOutputModel"]: return self._extruder_configuration.activeMaterial def updateActiveMaterial( self, material: Optional["MaterialOutputModel"]) -> None: self._extruder_configuration.setMaterial(material) ## Update the hotend temperature. This only changes it locally. def updateHotendTemperature(self, temperature: float) -> None: if self._hotend_temperature != temperature: self._hotend_temperature = temperature self.hotendTemperatureChanged.emit() def updateTargetHotendTemperature(self, temperature: float) -> None: if self._target_hotend_temperature != temperature: self._target_hotend_temperature = temperature self.targetHotendTemperatureChanged.emit() ## Set the target hotend temperature. This ensures that it's actually sent to the remote. @pyqtSlot(float) def setTargetHotendTemperature(self, temperature: float) -> None: self._printer.getController().setTargetHotendTemperature( self._printer, self, temperature) self.updateTargetHotendTemperature(temperature) @pyqtProperty(float, notify=targetHotendTemperatureChanged) def targetHotendTemperature(self) -> float: return self._target_hotend_temperature @pyqtProperty(float, notify=hotendTemperatureChanged) def hotendTemperature(self) -> float: return self._hotend_temperature @pyqtProperty(str, notify=extruderConfigurationChanged) def hotendID(self) -> str: return self._extruder_configuration.hotendID def updateHotendID(self, hotend_id: str) -> None: self._extruder_configuration.setHotendID(hotend_id) @pyqtProperty(QObject, notify=extruderConfigurationChanged) def extruderConfiguration(self) -> Optional[ExtruderConfigurationModel]: if self._extruder_configuration.isValid(): return self._extruder_configuration return None def updateIsPreheating(self, pre_heating: bool) -> None: if self._is_preheating != pre_heating: self._is_preheating = pre_heating self.isPreheatingChanged.emit() @pyqtProperty(bool, notify=isPreheatingChanged) def isPreheating(self) -> bool: return self._is_preheating ## Pre-heats the extruder before printer. # # \param temperature The temperature to heat the extruder to, in degrees # Celsius. # \param duration How long the bed should stay warm, in seconds. @pyqtSlot(float, float) def preheatHotend(self, temperature: float, duration: float) -> None: self._printer._controller.preheatHotend(self, temperature, duration) @pyqtSlot() def cancelPreheatHotend(self) -> None: self._printer._controller.cancelPreheatHotend(self)
class ExtruderOutputModel(QObject): hotendIDChanged = pyqtSignal() targetHotendTemperatureChanged = pyqtSignal() hotendTemperatureChanged = pyqtSignal() activeMaterialChanged = pyqtSignal() extruderConfigurationChanged = pyqtSignal() isPreheatingChanged = pyqtSignal() def __init__(self, printer: "PrinterOutputModel", position, parent=None) -> None: super().__init__(parent) self._printer = printer self._position = position self._target_hotend_temperature = 0 # type: float self._hotend_temperature = 0 # type: float self._hotend_id = "" self._active_material = None # type: Optional[MaterialOutputModel] self._extruder_configuration = ExtruderConfigurationModel() self._extruder_configuration.position = self._position self._is_preheating = False def getPrinter(self): return self._printer def getPosition(self): return self._position # Does the printer support pre-heating the bed at all @pyqtProperty(bool, constant=True) def canPreHeatHotends(self): if self._printer: return self._printer.canPreHeatHotends return False @pyqtProperty(QObject, notify=activeMaterialChanged) def activeMaterial(self) -> Optional["MaterialOutputModel"]: return self._active_material def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]): if self._active_material != material: self._active_material = material self._extruder_configuration.material = self._active_material self.activeMaterialChanged.emit() self.extruderConfigurationChanged.emit() ## Update the hotend temperature. This only changes it locally. def updateHotendTemperature(self, temperature: float): if self._hotend_temperature != temperature: self._hotend_temperature = temperature self.hotendTemperatureChanged.emit() def updateTargetHotendTemperature(self, temperature: float): if self._target_hotend_temperature != temperature: self._target_hotend_temperature = temperature self.targetHotendTemperatureChanged.emit() ## Set the target hotend temperature. This ensures that it's actually sent to the remote. @pyqtSlot(float) def setTargetHotendTemperature(self, temperature: float): self._printer.getController().setTargetHotendTemperature( self._printer, self, temperature) self.updateTargetHotendTemperature(temperature) @pyqtProperty(float, notify=targetHotendTemperatureChanged) def targetHotendTemperature(self) -> float: return self._target_hotend_temperature @pyqtProperty(float, notify=hotendTemperatureChanged) def hotendTemperature(self) -> float: return self._hotend_temperature @pyqtProperty(str, notify=hotendIDChanged) def hotendID(self) -> str: return self._hotend_id def updateHotendID(self, id: str): if self._hotend_id != id: self._hotend_id = id self._extruder_configuration.hotendID = self._hotend_id self.hotendIDChanged.emit() self.extruderConfigurationChanged.emit() @pyqtProperty(QObject, notify=extruderConfigurationChanged) def extruderConfiguration(self): if self._extruder_configuration.isValid(): return self._extruder_configuration return None def updateIsPreheating(self, pre_heating): if self._is_preheating != pre_heating: self._is_preheating = pre_heating self.isPreheatingChanged.emit() @pyqtProperty(bool, notify=isPreheatingChanged) def isPreheating(self): return self._is_preheating ## Pre-heats the extruder before printer. # # \param temperature The temperature to heat the extruder to, in degrees # Celsius. # \param duration How long the bed should stay warm, in seconds. @pyqtSlot(float, float) def preheatHotend(self, temperature, duration): self._printer._controller.preheatHotend(self, temperature, duration) @pyqtSlot() def cancelPreheatHotend(self): self._printer._controller.cancelPreheatHotend(self)
def updateConfigurationModel(self, model: ExtruderConfigurationModel) -> ExtruderConfigurationModel: model.setHotendID(self.print_core_id) if self.material: model.setMaterial(self.material.createOutputModel()) return model
def createConfigurationModel(self) -> ExtruderConfigurationModel: model = ExtruderConfigurationModel(position = self.extruder_index) self.updateConfigurationModel(model) return model
from unittest.mock import MagicMock import pytest from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel test_validate_data_get_set = [ { "attribute": "extruderConfigurations", "value": [ExtruderConfigurationModel()] }, { "attribute": "buildplateConfiguration", "value": "BHDHAHHADAD" }, { "attribute": "printerType", "value": ":(", "check_signal": False }, ] @pytest.mark.parametrize("data", test_validate_data_get_set) def test_getAndSet(data): model = ConfigurationModel() # Convert the first letter into a capital attribute = list(data["attribute"]) attribute[0] = attribute[0].capitalize()
class ExtruderOutputModel(QObject): targetHotendTemperatureChanged = pyqtSignal() hotendTemperatureChanged = pyqtSignal() extruderConfigurationChanged = pyqtSignal() isPreheatingChanged = pyqtSignal() def __init__(self, printer: "PrinterOutputModel", position: int, parent=None) -> None: super().__init__(parent) self._printer = printer # type: PrinterOutputModel self._position = position self._target_hotend_temperature = 0.0 # type: float self._hotend_temperature = 0.0 # type: float self._is_preheating = False # The extruder output model wraps the configuration model. This way we can use the same config model for jobs # and extruders alike. self._extruder_configuration = ExtruderConfigurationModel() self._extruder_configuration.position = self._position self._extruder_configuration.extruderConfigurationChanged.connect(self.extruderConfigurationChanged) def getPrinter(self) -> "PrinterOutputModel": return self._printer def getPosition(self) -> int: return self._position # Does the printer support pre-heating the bed at all @pyqtProperty(bool, constant=True) def canPreHeatHotends(self) -> bool: if self._printer: return self._printer.canPreHeatHotends return False @pyqtProperty(QObject, notify = extruderConfigurationChanged) def activeMaterial(self) -> Optional["MaterialOutputModel"]: return self._extruder_configuration.activeMaterial def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]) -> None: self._extruder_configuration.setMaterial(material) ## Update the hotend temperature. This only changes it locally. def updateHotendTemperature(self, temperature: float) -> None: if self._hotend_temperature != temperature: self._hotend_temperature = temperature self.hotendTemperatureChanged.emit() def updateTargetHotendTemperature(self, temperature: float) -> None: if self._target_hotend_temperature != temperature: self._target_hotend_temperature = temperature self.targetHotendTemperatureChanged.emit() ## Set the target hotend temperature. This ensures that it's actually sent to the remote. @pyqtSlot(float) def setTargetHotendTemperature(self, temperature: float) -> None: self._printer.getController().setTargetHotendTemperature(self._printer, self, temperature) self.updateTargetHotendTemperature(temperature) @pyqtProperty(float, notify = targetHotendTemperatureChanged) def targetHotendTemperature(self) -> float: return self._target_hotend_temperature @pyqtProperty(float, notify = hotendTemperatureChanged) def hotendTemperature(self) -> float: return self._hotend_temperature @pyqtProperty(str, notify = extruderConfigurationChanged) def hotendID(self) -> str: return self._extruder_configuration.hotendID def updateHotendID(self, hotend_id: str) -> None: self._extruder_configuration.setHotendID(hotend_id) @pyqtProperty(QObject, notify = extruderConfigurationChanged) def extruderConfiguration(self) -> Optional[ExtruderConfigurationModel]: if self._extruder_configuration.isValid(): return self._extruder_configuration return None def updateIsPreheating(self, pre_heating: bool) -> None: if self._is_preheating != pre_heating: self._is_preheating = pre_heating self.isPreheatingChanged.emit() @pyqtProperty(bool, notify=isPreheatingChanged) def isPreheating(self) -> bool: return self._is_preheating ## Pre-heats the extruder before printer. # # \param temperature The temperature to heat the extruder to, in degrees # Celsius. # \param duration How long the bed should stay warm, in seconds. @pyqtSlot(float, float) def preheatHotend(self, temperature: float, duration: float) -> None: self._printer._controller.preheatHotend(self, temperature, duration) @pyqtSlot() def cancelPreheatHotend(self) -> None: self._printer._controller.cancelPreheatHotend(self)