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 return self._buildplate_configuration
def __str__(self): def __str__(self):
info = "Printer type: " + self.printerType + "\n" info = "Printer type: " + self._printer_type + "\n"
info += "Extruders: [\n" info += "Extruders: [\n"
for configuration in self.extruderConfigurations: for configuration in self._extruder_configurations:
info += " " + str(configuration) + "\n" info += " " + str(configuration) + "\n"
info += "]" info += "]"
if self._buildplate_configuration is not None:
info += "\nBuildplate: " + self._buildplate_configuration
return info return info
def __eq__(self, other): def __eq__(self, other):
@ -54,7 +56,7 @@ class ConfigurationModel(QObject):
def __hash__(self): def __hash__(self):
extruder_hash = hash(0) extruder_hash = hash(0)
first_extruder = None first_extruder = None
for configuration in self.extruderConfigurations: for configuration in self._extruder_configurations:
extruder_hash ^= hash(configuration) extruder_hash ^= hash(configuration)
if configuration.position == 0: if configuration.position == 0:
first_extruder = configuration 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 # 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 # unique within a set
def __hash__(self): 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() headPositionChanged = pyqtSignal()
keyChanged = pyqtSignal() keyChanged = pyqtSignal()
typeChanged = pyqtSignal() typeChanged = pyqtSignal()
buildplateChanged = pyqtSignal()
cameraChanged = pyqtSignal() cameraChanged = pyqtSignal()
configurationChanged = pyqtSignal() configurationChanged = pyqtSignal()
@ -41,6 +42,7 @@ class PrinterOutputModel(QObject):
self._printer_state = "unknown" self._printer_state = "unknown"
self._is_preheating = False self._is_preheating = False
self._type = "" self._type = ""
self._buildplate_name = None
# Update the printer configuration every time any of the extruders changes its configuration # Update the printer configuration every time any of the extruders changes its configuration
for extruder in self._extruders: for extruder in self._extruders:
extruder.extruderConfigurationChanged.connect(self._updatePrinterConfiguration) extruder.extruderConfigurationChanged.connect(self._updatePrinterConfiguration)
@ -78,6 +80,15 @@ class PrinterOutputModel(QObject):
self._type = type self._type = type
self.typeChanged.emit() 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) @pyqtProperty(str, notify=keyChanged)
def key(self): def key(self):
return self._key return self._key
@ -252,5 +263,5 @@ class PrinterOutputModel(QObject):
def _updatePrinterConfiguration(self): def _updatePrinterConfiguration(self):
self._printer_configuration.printerType = self._type self._printer_configuration.printerType = self._type
self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] 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() self.configurationChanged.emit()

View file

@ -24,6 +24,7 @@ from UM.Settings.SettingFunction import SettingFunction
from UM.Signal import postponeSignals, CompressTechnique from UM.Signal import postponeSignals, CompressTechnique
from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
from cura.Machines.VariantManager import VariantType
from cura.PrinterOutputDevice import PrinterOutputDevice from cura.PrinterOutputDevice import PrinterOutputDevice
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel
@ -205,11 +206,6 @@ class MachineManager(QObject):
# print("%%%%%%%%", configuration == self._current_printer_configuration) # print("%%%%%%%%", configuration == self._current_printer_configuration)
return self._current_printer_configuration == 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) @pyqtProperty("QVariantList", notify = outputDevicesChanged)
def printerOutputDevices(self): def printerOutputDevices(self):
return self._printer_output_devices return self._printer_output_devices
@ -1028,6 +1024,29 @@ class MachineManager(QObject):
self._setMaterial(position, new_material) self._setMaterial(position, new_material)
continue 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") @pyqtSlot("QVariant")
def setGlobalVariant(self, container_node): def setGlobalVariant(self, container_node):
self.blurSettings.emit() self.blurSettings.emit()
@ -1036,16 +1055,6 @@ class MachineManager(QObject):
self._updateMaterialWithVariant(None) # Update all materials self._updateMaterialWithVariant(None) # Update all materials
self._updateQualityWithMaterial() 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") @pyqtSlot(str, "QVariant")
def setMaterial(self, position, container_node): def setMaterial(self, position, container_node):
position = str(position) position = str(position)

View file

@ -380,6 +380,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
printer.updateName(data["friendly_name"]) printer.updateName(data["friendly_name"])
printer.updateKey(data["uuid"]) printer.updateKey(data["uuid"])
printer.updateType(data["machine_variant"]) printer.updateType(data["machine_variant"])
if "build_plate" in data:
printer.updateBuildplate(data["build_plate"]["name"])
if not data["enabled"]: if not data["enabled"]:
printer.updateState("disabled") printer.updateState("disabled")
else: else: