From 792feaade6bfe44a91f438a1eece5d29557cb2b1 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 1 Aug 2017 09:40:49 +0200 Subject: [PATCH] Always create a definition changes container for a newly created stack CURA-4107 A newly created stack will have an empty definition changes container by default, but when a machine or extruder gets activate, Cura will create a definition changes container for it if it has an empty one. This lazy creation caused the problem when after Cura creates a multi-extrusion machine for the first time, switching to a different extruder tab will cause an extruder stack change, which eventually triggers an unnecessary auto-slice. --- cura/Settings/CuraStackBuilder.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index ff05a1e00a..a15797cf7f 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -93,6 +93,8 @@ class CuraStackBuilder: # assume the material and variant have already been set. if "definition_changes" in kwargs: stack.setDefinitionChangesById(kwargs["definition_changes"]) + else: + stack.setDefinitionChanges(cls._createDefinitionChangesContainer(stack, new_stack_id + "_settings")) if "variant" in kwargs: stack.setVariantById(kwargs["variant"]) @@ -140,6 +142,8 @@ class CuraStackBuilder: # assume the material and variant have already been set. if "definition_changes" in kwargs: stack.setDefinitionChangesById(kwargs["definition_changes"]) + else: + stack.setDefinitionChanges(cls._createDefinitionChangesContainer(stack, new_stack_id + "_settings")) if "variant" in kwargs: stack.setVariantById(kwargs["variant"]) @@ -158,3 +162,17 @@ class CuraStackBuilder: registry.addContainer(user_container) return stack + + @classmethod + def _createDefinitionChangesContainer(cls, container_stack, container_name, container_index = None): + from cura.CuraApplication import CuraApplication + definition_changes_container = InstanceContainer(container_name) + definition = container_stack.getBottom() + definition_changes_container.setDefinition(definition) + definition_changes_container.addMetaDataEntry("type", "definition_changes") + definition_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) + + ContainerRegistry.getInstance().addContainer(definition_changes_container) + container_stack.definitionChanges = definition_changes_container + + return definition_changes_container