Browse Source

CURA-4870 Add information about the buildplate in the printer output
model so it can be used to show the buildplate name in the configuration
list.

Diego Prado Gesto 7 years ago
parent
commit
97740123fa

+ 5 - 3
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

+ 1 - 1
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)
+        return hash(self._position) ^ (hash(self._material.guid) if self._material is not None else hash(0)) ^ hash(self._hotend_id)

+ 12 - 1
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()

+ 24 - 15
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)

+ 2 - 0
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: