From 2ee2bc734831eeefcec6c48da3f7ddc04d928be2 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 4 Aug 2016 17:37:15 +0200 Subject: [PATCH] Properly implement ContainerManager::createQualityChanges Contributes to CURA-2006 --- cura/Settings/ContainerManager.py | 39 +++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index bec04af92e..d58b111be9 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -389,26 +389,51 @@ class ContainerManager(QObject): global_stack.getTop().clear() - @pyqtSlot() + @pyqtSlot(result = bool) def createQualityChanges(self): global_stack = UM.Application.getInstance().getGlobalContainerStack() + if not global_stack: + return False - user_container = global_stack.getTop() quality_container = global_stack.findContainer(type = "quality") if not quality_container: - return + UM.Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId()) + return False + + MachineManager.getInstance().blurSettings.emit() unique_name = UM.Settings.ContainerRegistry.getInstance().uniqueName(quality_container.getName()) unique_id = unique_name.lower() unique_id.replace(" ", "_") - quality_changes = user_container.duplicate() - quality_changes.setMetaDataEntry("type", "quality_changes") - quality_changes.setMetaDataEntry("quality_base", quality_container.getId()) + stacks = [ s for s in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()) ] + stacks.insert(0, global_stack) - UM.Settings.ContainerRegistry.getInstance().addContainer(quality_changes) + for stack in stacks: + user_container = stack.getTop() + quality_container = stack.findContainer(type = "quality") + quality_changes_container = stack.findContainer(type = "quality_changes") + if not quality_container or not quality_changes_container: + UM.Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId()) + return False + new_quality_changes = user_container.duplicate(stack.getId() + "_" + unique_id, unique_name) + new_quality_changes.setMetaDataEntry("type", "quality_changes") + new_quality_changes.addMetaDataEntry("quality", quality_container.getId()) + if not global_stack.getMetaDataEntry("has_machine_quality"): + new_quality_changes.setDefinition(UM.Settings.ContainerRegistry.getInstance().findContainers(id = "fdmprinter")[0]) + + if global_stack.getMetaDataEntry("has_materials"): + material = stack.findContainer(type = "material") + new_quality_changes.addMetaDataEntry("material", material.getId()) + + UM.Settings.ContainerRegistry.getInstance().addContainer(new_quality_changes) + + stack.replaceContainer(stack.getContainerIndex(quality_changes_container), new_quality_changes) + stack.getTop().clear() + + return True # Factory function, used by QML @staticmethod