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.
This commit is contained in:
Diego Prado Gesto 2018-03-07 13:57:13 +01:00
parent 0beee79c3a
commit 97740123fa
5 changed files with 44 additions and 20 deletions

View file

@ -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

View file

@ -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)

View file

@ -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()

View file

@ -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)

View file

@ -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: