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.
This commit is contained in:
Lipu Fei 2017-08-01 09:40:49 +02:00
parent 05879e0dfc
commit 792feaade6

View file

@ -93,6 +93,8 @@ class CuraStackBuilder:
# assume the material and variant have already been set. # assume the material and variant have already been set.
if "definition_changes" in kwargs: if "definition_changes" in kwargs:
stack.setDefinitionChangesById(kwargs["definition_changes"]) stack.setDefinitionChangesById(kwargs["definition_changes"])
else:
stack.setDefinitionChanges(cls._createDefinitionChangesContainer(stack, new_stack_id + "_settings"))
if "variant" in kwargs: if "variant" in kwargs:
stack.setVariantById(kwargs["variant"]) stack.setVariantById(kwargs["variant"])
@ -140,6 +142,8 @@ class CuraStackBuilder:
# assume the material and variant have already been set. # assume the material and variant have already been set.
if "definition_changes" in kwargs: if "definition_changes" in kwargs:
stack.setDefinitionChangesById(kwargs["definition_changes"]) stack.setDefinitionChangesById(kwargs["definition_changes"])
else:
stack.setDefinitionChanges(cls._createDefinitionChangesContainer(stack, new_stack_id + "_settings"))
if "variant" in kwargs: if "variant" in kwargs:
stack.setVariantById(kwargs["variant"]) stack.setVariantById(kwargs["variant"])
@ -158,3 +162,17 @@ class CuraStackBuilder:
registry.addContainer(user_container) registry.addContainer(user_container)
return stack 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