diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index c1aeb26151..9fd51d4563 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -1,6 +1,8 @@ -# Copyright (c) 2019 Ultimaker B.V. +# Copyright (c) 2022 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import copy + from typing import Optional, cast from UM.ConfigurationErrorMessage import ConfigurationErrorMessage @@ -297,4 +299,24 @@ class CuraStackBuilder: stack.setMetaDataEntry("is_abstract_machine", True) stack.setMetaDataEntry("is_online", True) - return stack \ No newline at end of file + return stack + + @classmethod + def createFlattenedContainerInstance(cls, instance_container1, instance_container2): + """Create a new container with container 2 as base and container 1 written over it.""" + + flat_container = InstanceContainer(instance_container2.getName()) + + # The metadata includes id, name and definition + flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData())) + + if instance_container1.getDefinition(): + flat_container.setDefinition(instance_container1.getDefinition().getId()) + + for key in instance_container2.getAllKeys(): + flat_container.setProperty(key, "value", instance_container2.getProperty(key, "value")) + + for key in instance_container1.getAllKeys(): + flat_container.setProperty(key, "value", instance_container1.getProperty(key, "value")) + + return flat_container diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 7323ffd35c..d58690d3be 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -1,9 +1,8 @@ -# Copyright (c) 2019 Ultimaker B.V. +# Copyright (c) 2022 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import re # For escaping characters in the settings. import json -import copy from UM.Mesh.MeshWriter import MeshWriter from UM.Logger import Logger @@ -12,6 +11,8 @@ from UM.Settings.InstanceContainer import InstanceContainer from cura.Machines.ContainerTree import ContainerTree from UM.i18n import i18nCatalog +from cura.Settings.CuraStackBuilder import CuraStackBuilder + catalog = i18nCatalog("cura") @@ -96,25 +97,6 @@ class GCodeWriter(MeshWriter): self.setInformation(catalog.i18nc("@warning:status", "Please prepare G-code before exporting.")) return False - def _createFlattenedContainerInstance(self, instance_container1, instance_container2): - """Create a new container with container 2 as base and container 1 written over it.""" - - flat_container = InstanceContainer(instance_container2.getName()) - - # The metadata includes id, name and definition - flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData())) - - if instance_container1.getDefinition(): - flat_container.setDefinition(instance_container1.getDefinition().getId()) - - for key in instance_container2.getAllKeys(): - flat_container.setProperty(key, "value", instance_container2.getProperty(key, "value")) - - for key in instance_container1.getAllKeys(): - flat_container.setProperty(key, "value", instance_container1.getProperty(key, "value")) - - return flat_container - def _serialiseSettings(self, stack): """Serialises a container stack to prepare it for writing at the end of the g-code. @@ -145,7 +127,7 @@ class GCodeWriter(MeshWriter): container_with_profile.setDefinition(machine_definition_id_for_quality) container_with_profile.setMetaDataEntry("setting_version", stack.quality.getMetaDataEntry("setting_version")) - flat_global_container = self._createFlattenedContainerInstance(stack.userChanges, container_with_profile) + flat_global_container = CuraStackBuilder.createFlattenedContainerInstance(stack.userChanges, container_with_profile) # If the quality changes is not set, we need to set type manually if flat_global_container.getMetaDataEntry("type", None) is None: flat_global_container.setMetaDataEntry("type", "quality_changes") @@ -174,7 +156,7 @@ class GCodeWriter(MeshWriter): extruder_quality.setDefinition(machine_definition_id_for_quality) extruder_quality.setMetaDataEntry("setting_version", stack.quality.getMetaDataEntry("setting_version")) - flat_extruder_quality = self._createFlattenedContainerInstance(extruder.userChanges, extruder_quality) + flat_extruder_quality = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder_quality) # If the quality changes is not set, we need to set type manually if flat_extruder_quality.getMetaDataEntry("type", None) is None: flat_extruder_quality.setMetaDataEntry("type", "quality_changes")