Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
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)
Пример #6
0
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
Пример #9
0
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()
Пример #10
0
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)