diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index c1c5586f9f..59b98364e5 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot +from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot, QUrl from typing import List, Dict, Optional from UM.Math.Vector import Vector from cura.PrinterOutput.ConfigurationModel import ConfigurationModel @@ -50,16 +50,16 @@ class PrinterOutputModel(QObject): self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] - self._camera = None # type: Optional[NetworkCamera] + self._camera`_url = None # type: Optional[QUrl] @pyqtProperty(str, constant = True) def firmwareVersion(self) -> str: return self._firmware_version - def setCamera(self, camera: Optional["NetworkCamera"]) -> None: - if self._camera is not camera: - self._camera = camera - self.cameraChanged.emit() + def setCameraUrl(self, camera_url: Optional["QUrl"]) -> None: + if self._camera_url is not camera_url: + self._camera_url = camera_url + self.cameraUrlChanged.emit() def updateIsPreheating(self, pre_heating: bool) -> None: if self._is_preheating != pre_heating: @@ -70,9 +70,9 @@ class PrinterOutputModel(QObject): def isPreheating(self) -> bool: return self._is_preheating - @pyqtProperty(QObject, notify=cameraChanged) - def camera(self) -> Optional["NetworkCamera"]: - return self._camera + @pyqtProperty(QUrl, notify=cameraUrlChanged) + def cameraUrl(self) -> Optional["QUrl"]: + return self._camera_url @pyqtProperty(str, notify = printerTypeChanged) def type(self) -> str: diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml index 7aff32e424..41b3a93a7b 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml @@ -10,43 +10,36 @@ Component { height: maximumHeight; width: maximumWidth; - Cura.CameraView { + Cura.NetworkMJPGImage { id: cameraImage; anchors { horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter; } Component.onCompleted: { - if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) { - OutputDevice.activePrinter.camera.start(); + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + cameraImage.start(); } } height: Math.floor((imageHeight === 0 ? 600 * screenScaleFactor : imageHeight) * width / imageWidth); onVisibleChanged: { if (visible) { - if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) { - OutputDevice.activePrinter.camera.start(); + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + cameraImage.start(); } } else { - if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) { - OutputDevice.activePrinter.camera.stop(); + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + cameraImage.stop(); } } } + source: { + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + return OutputDevice.activePrinter.cameraUrl; + } + } width: Math.min(imageWidth === 0 ? 800 * screenScaleFactor : imageWidth, maximumWidth); z: 1; - - Connections - { - target: OutputDevice.activePrinter.camera; - onNewImage: - { - if (cameraImage.visible) { - cameraImage.image = OutputDevice.activePrinter.camera.latestImage; - cameraImage.update(); - } - } - } } } } \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml index 71104872a1..b247034c70 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml @@ -34,33 +34,23 @@ Item { z: 999; } - Cura.CameraView { + Cura.NetworkMJPGImage { id: cameraImage anchors.horizontalCenter: parent.horizontalCenter; anchors.verticalCenter: parent.verticalCenter; height: Math.round((imageHeight === 0 ? 600 * screenScaleFactor : imageHeight) * width / imageWidth); onVisibleChanged: { if (visible) { - if (camera != null) { - camera.start(); + if (cameraUrl != null) { + start(); } } else { - if (camera != null) { - camera.stop(); - } - } - } - - Connections - { - target: camera - onNewImage: { - if (cameraImage.visible) { - cameraImage.image = camera.latestImage; - cameraImage.update(); + if (cameraUrl != null) { + stop(); } } } + source: cameraUrl width: Math.min(imageWidth === 0 ? 800 * screenScaleFactor : imageWidth, maximumWidth); z: 1 } diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py index 4c7b93c145..5089b61a2a 100644 --- a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py @@ -548,7 +548,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _createPrinterModel(self, data: Dict[str, Any]) -> PrinterOutputModel: printer = PrinterOutputModel(output_controller = ClusterUM3PrinterOutputController(self), number_of_extruders = self._number_of_extruders) - printer.setCamera(NetworkCamera("http://" + data["ip_address"] + ":8080/?action=stream")) + printer.setCameraUrl(QUrl("http://" + data["ip_address"] + ":8080/?action=stream")) self._printers.append(printer) return printer diff --git a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py index e786840803..a49ec1f6a9 100644 --- a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py @@ -18,7 +18,7 @@ from UM.i18n import i18nCatalog from UM.Message import Message from PyQt5.QtNetwork import QNetworkRequest -from PyQt5.QtCore import QTimer +from PyQt5.QtCore import QTimer, QUrl from PyQt5.QtWidgets import QMessageBox from .LegacyUM3PrinterOutputController import LegacyUM3PrinterOutputController @@ -568,7 +568,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): # Quickest way to get the firmware version is to grab it from the zeroconf. firmware_version = self._properties.get(b"firmware_version", b"").decode("utf-8") self._printers = [PrinterOutputModel(output_controller=self._output_controller, number_of_extruders=self._number_of_extruders, firmware_version=firmware_version)] - self._printers[0].setCamera(NetworkCamera("http://" + self._address + ":8080/?action=stream")) + self._printers[0].setCameraUrl(QUrl("http://" + self._address + ":8080/?action=stream")) for extruder in self._printers[0].extruders: extruder.activeMaterialChanged.connect(self.materialIdChanged) extruder.hotendIDChanged.connect(self.hotendIdChanged)