diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py index 230a734797..30c95f2765 100644 --- a/cura/PrinterOutput/ConfigurationModel.py +++ b/cura/PrinterOutput/ConfigurationModel.py @@ -41,11 +41,13 @@ class ConfigurationModel(QObject): return self._buildplate_configuration def __str__(self): - info = "Printer type: " + self.printerType + "\n" + info = "Printer type: " + self._printer_type + "\n" info += "Extruders: [\n" - for configuration in self.extruderConfigurations: + for configuration in self._extruder_configurations: info += " " + str(configuration) + "\n" info += "]" + if self._buildplate_configuration is not None: + info += "\nBuildplate: " + self._buildplate_configuration return info def __eq__(self, other): @@ -54,7 +56,7 @@ class ConfigurationModel(QObject): def __hash__(self): extruder_hash = hash(0) first_extruder = None - for configuration in self.extruderConfigurations: + for configuration in self._extruder_configurations: extruder_hash ^= hash(configuration) if configuration.position == 0: first_extruder = configuration diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index 072adfc24e..34eddb3038 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -46,4 +46,4 @@ class ExtruderConfigurationModel(QObject): # Calculating a hash function using the position of the extruder, the material GUID and the hotend id to check if is # unique within a set def __hash__(self): - return hash(self._position) ^ (hash(self._material.guid) if self.material is not None else hash(0)) ^ hash(self._hotend_id) \ No newline at end of file + return hash(self._position) ^ (hash(self._material.guid) if self._material is not None else hash(0)) ^ hash(self._hotend_id) \ No newline at end of file diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index f59cc1bece..8d674c1c5f 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -23,6 +23,7 @@ class PrinterOutputModel(QObject): headPositionChanged = pyqtSignal() keyChanged = pyqtSignal() typeChanged = pyqtSignal() + buildplateChanged = pyqtSignal() cameraChanged = pyqtSignal() configurationChanged = pyqtSignal() @@ -41,6 +42,7 @@ class PrinterOutputModel(QObject): self._printer_state = "unknown" self._is_preheating = False self._type = "" + self._buildplate_name = None # Update the printer configuration every time any of the extruders changes its configuration for extruder in self._extruders: extruder.extruderConfigurationChanged.connect(self._updatePrinterConfiguration) @@ -78,6 +80,15 @@ class PrinterOutputModel(QObject): self._type = type self.typeChanged.emit() + @pyqtProperty(str, notify = buildplateChanged) + def buildplate(self): + return self._buildplate_name + + def updateBuildplate(self, buildplate_name): + if self._buildplate_name != buildplate_name: + self._buildplate_name = buildplate_name + self.buildplateChanged.emit() + @pyqtProperty(str, notify=keyChanged) def key(self): return self._key @@ -252,5 +263,5 @@ class PrinterOutputModel(QObject): def _updatePrinterConfiguration(self): self._printer_configuration.printerType = self._type self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] - self._printer_configuration.buildplateConfiguration = None # TODO Add the buildplate information + self._printer_configuration.buildplateConfiguration = self._buildplate_name self.configurationChanged.emit() diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 0924b1d33b..12146e927e 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -24,6 +24,7 @@ from UM.Settings.SettingFunction import SettingFunction from UM.Signal import postponeSignals, CompressTechnique from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch +from cura.Machines.VariantManager import VariantType from cura.PrinterOutputDevice import PrinterOutputDevice from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel @@ -205,11 +206,6 @@ class MachineManager(QObject): # print("%%%%%%%%", configuration == self._current_printer_configuration) return self._current_printer_configuration == configuration - @pyqtSlot(QObject) - def applyRemoteConfiguration(self, configuration: ConfigurationModel): - for extruder_configuration in configuration.extruderConfigurations: - self.setConfiguration(extruder_configuration.position, extruder_configuration.hotendID, extruder_configuration.material.guid) - @pyqtProperty("QVariantList", notify = outputDevicesChanged) def printerOutputDevices(self): return self._printer_output_devices @@ -1028,6 +1024,29 @@ class MachineManager(QObject): self._setMaterial(position, new_material) continue + @pyqtSlot(QObject) + def applyRemoteConfiguration(self, configuration: ConfigurationModel): + self.blurSettings.emit() + with postponeSignals(*self._getContainerChangedSignals(), + compress=CompressTechnique.CompressPerParameterValue): + for extruder_configuration in configuration.extruderConfigurations: + position = str(extruder_configuration.position) + variant_container_node = self._variant_manager.getVariantNode( + self._global_container_stack.definition.getId(), extruder_configuration.hotendID) + material_container_node = self._material_manager.getMaterialNodeByType( + self._global_container_stack, extruder_configuration.hotendID, + extruder_configuration.material.guid) + self._setVariantNode(position, variant_container_node) + self._setMaterial(position, material_container_node) + self._updateMaterialWithVariant(position) + + if configuration.buildplateConfiguration is not None: + global_variant_container_node = self._variant_manager.getVariantNode( + self._global_container_stack.definition.getId(), configuration.buildplateConfiguration, + variant_type=VariantType.BUILD_PLATE) + self._setGlobalVariant(global_variant_container_node) + self._updateQualityWithMaterial() + @pyqtSlot("QVariant") def setGlobalVariant(self, container_node): self.blurSettings.emit() @@ -1036,16 +1055,6 @@ class MachineManager(QObject): self._updateMaterialWithVariant(None) # Update all materials self._updateQualityWithMaterial() - def setConfiguration(self, position, variant_name, material_guid): - position = str(position) - variant_container_node = self._variant_manager.getVariantNode(self._global_container_stack.definition.getId(), variant_name) - material_container_node = self._material_manager.getMaterialNodeByType(self._global_container_stack, variant_name, material_guid) - with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): - self._setVariantNode(position, variant_container_node) - self._setMaterial(position, material_container_node) - self._updateMaterialWithVariant(position) - self._updateQualityWithMaterial() - @pyqtSlot(str, "QVariant") def setMaterial(self, position, container_node): position = str(position) diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 7a4c590acc..a79936bdcf 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -380,6 +380,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): printer.updateName(data["friendly_name"]) printer.updateKey(data["uuid"]) printer.updateType(data["machine_variant"]) + if "build_plate" in data: + printer.updateBuildplate(data["build_plate"]["name"]) if not data["enabled"]: printer.updateState("disabled") else: