From 42c3eb0c64e49fa96430c81c8353c8057e91d74c Mon Sep 17 00:00:00 2001 From: joeydelarago Date: Fri, 2 Sep 2022 08:57:06 +0200 Subject: [PATCH 01/10] Save settings to json file in .ufp CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 40 +++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 52dab1efc7..5ae55ee4db 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -1,6 +1,6 @@ # Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - +import json from typing import cast, List, Dict from Charon.VirtualFile import VirtualFile # To open UFP files. @@ -10,6 +10,7 @@ from io import StringIO # For converting g-code to bytes. from PyQt6.QtCore import QBuffer +from UM.Application import Application from UM.Logger import Logger from UM.Mesh.MeshWriter import MeshWriter # The writer we need to implement. from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType @@ -18,11 +19,13 @@ from UM.PluginRegistry import PluginRegistry # To get the g-code writer. from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from cura.CuraApplication import CuraApplication +from cura.Settings.GlobalStack import GlobalStack from cura.Utils.Threading import call_on_qt_thread from UM.i18n import i18nCatalog METADATA_OBJECTS_PATH = "metadata/objects" +SETTINGS_PATH = "Cura/settings.json" catalog = i18nCatalog("cura") @@ -74,6 +77,19 @@ class UFPWriter(MeshWriter): Logger.error(error_msg) return False + #Write settings + try: + archive.addContentType(extension="json", mime_type="application/json") + setting_textio = StringIO() + json.dump(self._getSettings(), setting_textio, separators=(", ", ": "), indent=4) + settings = archive.getStream(SETTINGS_PATH) + settings.write(setting_textio.getvalue().encode("UTF-8")) + except EnvironmentError as e: + error_msg = catalog.i18nc("@info:error", "Can't write to UFP file:") + " " + str(e) + self.setInformation(error_msg) + Logger.error(error_msg) + return False + # Attempt to store the thumbnail, if any: backend = CuraApplication.getInstance().getBackend() snapshot = None if getattr(backend, "getLatestSnapshot", None) is None else backend.getLatestSnapshot() @@ -162,6 +178,10 @@ class UFPWriter(MeshWriter): return False return True + @staticmethod + def _writePluginMetadataToArchive() -> None: + pass + @staticmethod def _writeObjectList(archive): """Write a json list of object names to the METADATA_OBJECTS_PATH metadata field @@ -190,3 +210,21 @@ class UFPWriter(MeshWriter): return [{"name": item.getName()} for item in DepthFirstIterator(node) if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")] + + def _getSettings(self) -> Dict[str, Dict[str, Dict[str, str]]]: + container_registry = Application.getInstance().getContainerRegistry() + + global_stack = cast(GlobalStack, Application.getInstance().getGlobalContainerStack()) + quality_changes = global_stack.qualityChanges + + settings = { + "extruder_1": { + "changes": {}, + "default": {} + }, + "extruder_2": { + "changes": {}, + "default": {} + }, + } + return settings From ee7c8d1f02d50b2291d52130f11283f07dc17e23 Mon Sep 17 00:00:00 2001 From: joeydelarago Date: Fri, 2 Sep 2022 09:22:31 +0200 Subject: [PATCH 02/10] Move creatFlattenedContainerInstnance into CuraStackBuilder so it can be reused. CURA-9224 --- cura/Settings/CuraStackBuilder.py | 26 ++++++++++++++++++++++++-- plugins/GCodeWriter/GCodeWriter.py | 28 +++++----------------------- 2 files changed, 29 insertions(+), 25 deletions(-) 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") From b1090728c0c4d5a94b6ed622d6f4212f4240aabc Mon Sep 17 00:00:00 2001 From: joeydelarago Date: Fri, 2 Sep 2022 16:31:21 +0200 Subject: [PATCH 03/10] Add settings changes CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 5ae55ee4db..ff198b181c 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -19,6 +19,7 @@ from UM.PluginRegistry import PluginRegistry # To get the g-code writer. from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from cura.CuraApplication import CuraApplication +from cura.Settings.CuraStackBuilder import CuraStackBuilder from cura.Settings.GlobalStack import GlobalStack from cura.Utils.Threading import call_on_qt_thread @@ -212,19 +213,28 @@ class UFPWriter(MeshWriter): if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")] def _getSettings(self) -> Dict[str, Dict[str, Dict[str, str]]]: - container_registry = Application.getInstance().getContainerRegistry() + settings = { + "global": { + "changes": {}, + "default": {} + } + } global_stack = cast(GlobalStack, Application.getInstance().getGlobalContainerStack()) - quality_changes = global_stack.qualityChanges - settings = { - "extruder_1": { - "changes": {}, - "default": {} - }, - "extruder_2": { - "changes": {}, - "default": {} - }, - } + for i, extruder in enumerate(global_stack.extruderList): + extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) + settings[f"extruder_{i}"] = {} + settings[f"extruder_{i}"]["changes"] = {} + settings[f"extruder_{i}"]["default"] = {} + for setting in extruder_flattened_changes.getAllKeys(): + settings[f"extruder_{i}"]["changes"][setting] = extruder_flattened_changes.getProperty(setting, "value") + + settings["global"] = {} + settings["global"]["changes"] = {} + settings["global"]["default"] = {} + global_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(global_stack.userChanges, global_stack.qualityChanges) + for setting in global_flattened_changes.getAllKeys(): + settings["global"]["changes"][setting] = global_flattened_changes.getProperty(setting, "value") + return settings From ef36d3f6bd9b58b3cef5399a4dfb4ae802327178 Mon Sep 17 00:00:00 2001 From: joeydelarago Date: Fri, 2 Sep 2022 16:48:51 +0200 Subject: [PATCH 04/10] Refactoring CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index ff198b181c..c086fb1f8d 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -1,6 +1,7 @@ # Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import json +import copy from typing import cast, List, Dict from Charon.VirtualFile import VirtualFile # To open UFP files. @@ -222,19 +223,21 @@ class UFPWriter(MeshWriter): global_stack = cast(GlobalStack, Application.getInstance().getGlobalContainerStack()) - for i, extruder in enumerate(global_stack.extruderList): - extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) - settings[f"extruder_{i}"] = {} - settings[f"extruder_{i}"]["changes"] = {} - settings[f"extruder_{i}"]["default"] = {} - for setting in extruder_flattened_changes.getAllKeys(): - settings[f"extruder_{i}"]["changes"][setting] = extruder_flattened_changes.getProperty(setting, "value") - - settings["global"] = {} - settings["global"]["changes"] = {} - settings["global"]["default"] = {} global_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(global_stack.userChanges, global_stack.qualityChanges) + # Add all global user or quality changes for setting in global_flattened_changes.getAllKeys(): settings["global"]["changes"][setting] = global_flattened_changes.getProperty(setting, "value") + for i, extruder in enumerate(global_stack.extruderList): + # Add all user or quality changes for each extruder + extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) + + settings[f"extruder_{i}"] = {} + settings[f"extruder_{i}"]["changes"] = {} + settings[f"extruder_{i}"]["default"] = {} + + for setting in extruder_flattened_changes.getAllKeys(): + settings[f"extruder_{i}"]["changes"][setting] = extruder_flattened_changes.getProperty(setting, "value") + + return settings From 599fddd6ddefb3b4ce3f2613dd1c2affdc55725c Mon Sep 17 00:00:00 2001 From: joeydelarago Date: Mon, 5 Sep 2022 10:12:24 +0200 Subject: [PATCH 05/10] Add all settitngs to the json. Change default -> all_settings. This better reflects the purpose of the list. CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index c086fb1f8d..ce690af36e 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -214,30 +214,38 @@ class UFPWriter(MeshWriter): if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")] def _getSettings(self) -> Dict[str, Dict[str, Dict[str, str]]]: + """Get all changed settings and all settings. For each extruder and the global stack""" settings = { "global": { "changes": {}, - "default": {} + "all_settings": {} } } global_stack = cast(GlobalStack, Application.getInstance().getGlobalContainerStack()) + # Add global user or quality changes global_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(global_stack.userChanges, global_stack.qualityChanges) - # Add all global user or quality changes for setting in global_flattened_changes.getAllKeys(): settings["global"]["changes"][setting] = global_flattened_changes.getProperty(setting, "value") - for i, extruder in enumerate(global_stack.extruderList): - # Add all user or quality changes for each extruder - extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) + # Get global all settings values without user or quality changes + for setting in global_stack.getAllKeys(): + settings["global"]["all_settings"][setting] = global_stack.getProperty(setting, "value") + for i, extruder in enumerate(global_stack.extruderList): + # Add extruder fields to settings dictionary settings[f"extruder_{i}"] = {} settings[f"extruder_{i}"]["changes"] = {} - settings[f"extruder_{i}"]["default"] = {} + settings[f"extruder_{i}"]["all_settings"] = {} + # Add extruder user or quality changes + extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) for setting in extruder_flattened_changes.getAllKeys(): settings[f"extruder_{i}"]["changes"][setting] = extruder_flattened_changes.getProperty(setting, "value") + # Get extruder all settings values without user or quality changes + for setting in extruder.getAllKeys(): + settings[f"extruder_{i}"]["all_settings"][setting] = extruder.getProperty(setting, "value") return settings From 880724d2e4f46a20091fd26a765994fdfb8d454a Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Sat, 10 Sep 2022 09:47:31 +0200 Subject: [PATCH 06/10] Add material information to ufp output CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index ce690af36e..8059e1a875 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -27,7 +27,7 @@ from cura.Utils.Threading import call_on_qt_thread from UM.i18n import i18nCatalog METADATA_OBJECTS_PATH = "metadata/objects" -SETTINGS_PATH = "Cura/settings.json" +SLICE_METADATA_PATH = "Cura/slicemetadata.json" catalog = i18nCatalog("cura") @@ -83,9 +83,9 @@ class UFPWriter(MeshWriter): try: archive.addContentType(extension="json", mime_type="application/json") setting_textio = StringIO() - json.dump(self._getSettings(), setting_textio, separators=(", ", ": "), indent=4) - settings = archive.getStream(SETTINGS_PATH) - settings.write(setting_textio.getvalue().encode("UTF-8")) + json.dump(self._getSliceMetadata(), setting_textio, separators=(", ", ": "), indent=4) + steam = archive.getStream(SLICE_METADATA_PATH) + steam.write(setting_textio.getvalue().encode("UTF-8")) except EnvironmentError as e: error_msg = catalog.i18nc("@info:error", "Can't write to UFP file:") + " " + str(e) self.setInformation(error_msg) @@ -213,12 +213,18 @@ class UFPWriter(MeshWriter): for item in DepthFirstIterator(node) if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")] - def _getSettings(self) -> Dict[str, Dict[str, Dict[str, str]]]: + def _getSliceMetadata(self) -> Dict[str, Dict[str, Dict[str, str]]]: """Get all changed settings and all settings. For each extruder and the global stack""" + print_information = CuraApplication.getInstance().getPrintInformation() settings = { + "material": { + "length": print_information.materialLengths, + "weight": print_information.materialWeights, + "cost": print_information.materialCosts, + }, "global": { "changes": {}, - "all_settings": {} + "all_settings": {}, } } @@ -235,9 +241,10 @@ class UFPWriter(MeshWriter): for i, extruder in enumerate(global_stack.extruderList): # Add extruder fields to settings dictionary - settings[f"extruder_{i}"] = {} - settings[f"extruder_{i}"]["changes"] = {} - settings[f"extruder_{i}"]["all_settings"] = {} + settings[f"extruder_{i}"] = { + "changes": {}, + "all_settings": {}, + } # Add extruder user or quality changes extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) From aa28f8abfb222d435a7d3016dbbfd5a095d49d91 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 13 Sep 2022 11:15:04 +0200 Subject: [PATCH 07/10] Remove unused import CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index ce690af36e..367b0fb708 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -1,7 +1,6 @@ -# Copyright (c) 2021 Ultimaker B.V. +# Copyright (c) 2022 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import json -import copy from typing import cast, List, Dict from Charon.VirtualFile import VirtualFile # To open UFP files. From a27bf8f7ed701749713c92bdf1f1c735345b5a06 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 13 Sep 2022 11:16:02 +0200 Subject: [PATCH 08/10] Update formatting CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 367b0fb708..91229319f4 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -71,14 +71,15 @@ class UFPWriter(MeshWriter): try: gcode = archive.getStream("/3D/model.gcode") gcode.write(gcode_textio.getvalue().encode("UTF-8")) - archive.addRelation(virtual_path = "/3D/model.gcode", relation_type = "http://schemas.ultimaker.org/package/2018/relationships/gcode") + archive.addRelation(virtual_path = "/3D/model.gcode", + relation_type = "http://schemas.ultimaker.org/package/2018/relationships/gcode") except EnvironmentError as e: error_msg = catalog.i18nc("@info:error", "Can't write to UFP file:") + " " + str(e) self.setInformation(error_msg) Logger.error(error_msg) return False - #Write settings + # Write settings try: archive.addContentType(extension="json", mime_type="application/json") setting_textio = StringIO() From 8dc2eaf783d12ce0a1874f08d31c1df55a7dd6c1 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 13 Sep 2022 13:35:37 +0200 Subject: [PATCH 09/10] Move CreateFlattendContainerInstance to InstanceContainer It didn't really belong in the stack builder, as it's not a containerstack CURA-9224 --- cura/Settings/CuraStackBuilder.py | 22 +--------------------- plugins/GCodeWriter/GCodeWriter.py | 18 +++++++++--------- plugins/UFPWriter/UFPWriter.py | 5 +++-- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 9fd51d4563..a25a487c6e 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -299,24 +299,4 @@ class CuraStackBuilder: stack.setMetaDataEntry("is_abstract_machine", True) stack.setMetaDataEntry("is_online", True) - 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 + return stack \ No newline at end of file diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index d58690d3be..667e064d90 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -127,22 +127,22 @@ 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 = CuraStackBuilder.createFlattenedContainerInstance(stack.userChanges, container_with_profile) + merged_global_instance_container = InstanceContainer.createMergedInstanceContainer(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") + if merged_global_instance_container.getMetaDataEntry("type", None) is None: + merged_global_instance_container.setMetaDataEntry("type", "quality_changes") # Ensure that quality_type is set. (Can happen if we have empty quality changes). - if flat_global_container.getMetaDataEntry("quality_type", None) is None: - flat_global_container.setMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal")) + if merged_global_instance_container.getMetaDataEntry("quality_type", None) is None: + merged_global_instance_container.setMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal")) # Get the machine definition ID for quality profiles - flat_global_container.setMetaDataEntry("definition", machine_definition_id_for_quality) + merged_global_instance_container.setMetaDataEntry("definition", machine_definition_id_for_quality) - serialized = flat_global_container.serialize() + serialized = merged_global_instance_container.serialize() data = {"global_quality": serialized} - all_setting_keys = flat_global_container.getAllKeys() + all_setting_keys = merged_global_instance_container.getAllKeys() for extruder in stack.extruderList: extruder_quality = extruder.qualityChanges if extruder_quality.getId() == "empty_quality_changes": @@ -156,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 = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder_quality) + flat_extruder_quality = InstanceContainer.createMergedInstanceContainer(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") diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 91229319f4..8cb8cc43d0 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -18,6 +18,7 @@ from UM.PluginRegistry import PluginRegistry # To get the g-code writer. from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode +from UM.Settings.InstanceContainer import InstanceContainer from cura.CuraApplication import CuraApplication from cura.Settings.CuraStackBuilder import CuraStackBuilder from cura.Settings.GlobalStack import GlobalStack @@ -225,7 +226,7 @@ class UFPWriter(MeshWriter): global_stack = cast(GlobalStack, Application.getInstance().getGlobalContainerStack()) # Add global user or quality changes - global_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(global_stack.userChanges, global_stack.qualityChanges) + global_flattened_changes = InstanceContainer.createMergedInstanceContainer(global_stack.userChanges, global_stack.qualityChanges) for setting in global_flattened_changes.getAllKeys(): settings["global"]["changes"][setting] = global_flattened_changes.getProperty(setting, "value") @@ -240,7 +241,7 @@ class UFPWriter(MeshWriter): settings[f"extruder_{i}"]["all_settings"] = {} # Add extruder user or quality changes - extruder_flattened_changes = CuraStackBuilder.createFlattenedContainerInstance(extruder.userChanges, extruder.qualityChanges) + extruder_flattened_changes = InstanceContainer.createMergedInstanceContainer(extruder.userChanges, extruder.qualityChanges) for setting in extruder_flattened_changes.getAllKeys(): settings[f"extruder_{i}"]["changes"][setting] = extruder_flattened_changes.getProperty(setting, "value") From 356da40dde8f3d655c0d5efac727ef29fa88e7ec Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 13 Sep 2022 13:36:28 +0200 Subject: [PATCH 10/10] Remove unused function CURA-9224 --- plugins/UFPWriter/UFPWriter.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 8cb8cc43d0..f7f2a44b59 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -181,10 +181,6 @@ class UFPWriter(MeshWriter): return False return True - @staticmethod - def _writePluginMetadataToArchive() -> None: - pass - @staticmethod def _writeObjectList(archive): """Write a json list of object names to the METADATA_OBJECTS_PATH metadata field