From 47a388fd2cc98fe5a444cb3daa9120193f1a498a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:38:49 +0200 Subject: [PATCH] Introduce a CuraStackBuilder class It contains factory functions for creating new stacks with certain quality/material/variant combinations. --- cura/Settings/CuraStackBuilder.py | 86 +++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 cura/Settings/CuraStackBuilder.py diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py new file mode 100644 index 0000000000..527e860f31 --- /dev/null +++ b/cura/Settings/CuraStackBuilder.py @@ -0,0 +1,86 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.ContainerRegistry import ContainerRegistry + +from .GlobalStack import GlobalStack +from .ExtruderStack import ExtruderStack + +class CuraStackBuilder: + @staticmethod + def createExtruderStack(new_stack_id: str, definition_id: str, **kwargs) -> ExtruderStack: + registry = ContainerRegistry.getInstance() + + stack = ExtruderStack(new_stack_id) + + user_container = InstanceContainer(new_stack_id + "_user") + user_container.addMetaDataEntry("type", "user") + user_container.addMetaDataEntry("machine", new_stack_id) + + stack.setUserChanges(user_container) + + if "quality_changes" in kwargs: + stack.setQualityChangesById(kwargs["quality_changes"]) + + if "quality" in kwargs: + stack.setQualityById(kwargs["quality"]) + + if "material" in kwargs: + stack.setMaterialById(kwargs["material"]) + + if "variant" in kwargs: + stack.setVariantById(kwargs["variant"]) + + if "definition_changes" in kwargs: + stack.setDefinitionChangesById(kwargs["definition_changes"]) + + if "definition" in kwargs: + stack.setDefinitionById(kwargs["definition"]) + + if "next_stack" in kwargs: + stack.setNextStack(kwargs["next_stack"]) + + # Only add the created containers to the registry after we have set all the other + # properties. This makes the create operation more transactional, since any problems + # setting properties will not result in incomplete containers being added. + registry.addContainer(stack) + registry.addContainer(user_container) + + return stack + + @staticmethod + def createGlobalStack(new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: + registry = ContainerRegistry.getInstance() + + stack = GlobalStack(new_stack_id) + + stack.setDefinition(definition) + + user_container = InstanceContainer(new_stack_id + "_user") + user_container.addMetaDataEntry("type", "user") + user_container.addMetaDataEntry("machine", new_stack_id) + user_container.setDefinition(definition) + + stack.setUserChanges(user_container) + + if "quality_changes" in kwargs: + stack.setQualityChangesById(kwargs["quality_changes"]) + + if "quality" in kwargs: + stack.setQualityById(kwargs["quality"]) + + if "material" in kwargs: + stack.setMaterialById(kwargs["material"]) + + if "variant" in kwargs: + stack.setVariantById(kwargs["variant"]) + + if "definition_changes" in kwargs: + stack.setDefinitionChangesById(kwargs["definition_changes"]) + + registry.addContainer(stack) + registry.addContainer(user_container) + + return stack