From c79b7bdd7ad2ed7df481f718c87346a489ba5da9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Sun, 5 Jun 2016 11:34:29 +0200 Subject: [PATCH] Machine manager now creates ExtruderTrainStacks CURA-340 --- cura/CuraApplication.py | 12 +++++++++--- cura/MachineManagerModel.py | 27 ++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index df72a4208d..729264767e 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -269,9 +269,15 @@ class CuraApplication(QtApplication): continue file_name = urllib.parse.quote_plus(stack.getId()) + ".stack.cfg" - path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name) - with SaveFile(path, "wt", -1, "utf-8") as f: - f.write(data) + stack_type = stack.getMetaDataEntry("type", None) + path = None + if not stack_type: + path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name) + elif stack_type == "extruder": + path = Resources.getStoragePath(self.ResourceTypes.ExtruderStack, file_name) + if path: + with SaveFile(path, "wt", -1, "utf-8") as f: + f.write(data) @pyqtSlot(result = QUrl) diff --git a/cura/MachineManagerModel.py b/cura/MachineManagerModel.py index 3e4c7a0411..c69ddbc3c2 100644 --- a/cura/MachineManagerModel.py +++ b/cura/MachineManagerModel.py @@ -33,8 +33,6 @@ class MachineManagerModel(QObject): active_machine_id = Preferences.getInstance().getValue("cura/active_machine") - - if active_machine_id != "": # An active machine was saved, so restore it. self.setActiveMachine(active_machine_id) @@ -46,9 +44,15 @@ class MachineManagerModel(QObject): activeVariantChanged = pyqtSignal() activeQualityChanged = pyqtSignal() + activeExtrudersChanged = pyqtSignal() + globalValueChanged = pyqtSignal() # Emitted whenever a value inside global container is changed. globalValidationChanged = pyqtSignal() # Emitted whenever a validation inside global container is changed. + @pyqtProperty("QVariantMap", notify = activeExtrudersChanged) + def activeExtruders(self): + return {} + def _onGlobalPropertyChanged(self, key, property_name): if property_name == "value": self.globalValueChanged.emit() @@ -115,7 +119,7 @@ class MachineManagerModel(QObject): UM.Settings.ContainerRegistry.getInstance().addContainer(current_settings_instance_container) # If a definition is found, its a list. Should only have one item. - new_global_stack.addContainer(definitions[0]) + new_global_stack.addContainer(definition) if variant_instance_container: new_global_stack.addContainer(variant_instance_container) if material_instance_container: @@ -124,6 +128,23 @@ class MachineManagerModel(QObject): new_global_stack.addContainer(quality_instance_container) new_global_stack.addContainer(current_settings_instance_container) + ## Check if the machine has extruder trains + extruder_trains = definition.getMetaDataEntry("machine_extruder_trains", {}) + for extruder in extruder_trains: + extruder_train_stack = UM.Settings.ContainerStack(name + "_extruder_" + extruder) + extruder_train_stack.addMetaDataEntry("type", "extruder") + extruder_definitions = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id=extruder_trains[extruder]) + if extruder_definitions: + extruder_train_stack.addContainer(extruder_definitions[0]) + current_settings_container_extruder = UM.Settings.InstanceContainer(extruder_train_stack.getName() + "_current_settings") + current_settings_container_extruder.addMetaDataEntry("machine", name) + current_settings_container_extruder.addMetaDataEntry("type", "user") + extruder_train_stack.addContainer(current_settings_container_extruder) + extruder_train_stack.setNextStack(new_global_stack) + UM.Settings.ContainerRegistry.getInstance().addContainer(extruder_train_stack) + else: + Logger.log("W", "Unable to find definition for extruder") + Application.getInstance().setGlobalContainerStack(new_global_stack) # Create a name that is not empty and unique