From 54afa799c54bf3727481241e5e5f45dffb7e3442 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 29 Oct 2018 15:04:50 +0100 Subject: [PATCH] Ignore per-meshgroup settings in per object stack CURA-5767 --- cura/Settings/PerObjectContainerStack.py | 18 +++++++++++++++++- plugins/3MFReader/ThreeMFReader.py | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cura/Settings/PerObjectContainerStack.py b/cura/Settings/PerObjectContainerStack.py index 3589029517..3623e1e0be 100644 --- a/cura/Settings/PerObjectContainerStack.py +++ b/cura/Settings/PerObjectContainerStack.py @@ -5,6 +5,7 @@ from typing import Any, Optional from UM.Application import Application from UM.Decorators import override +from UM.Logger import Logger from UM.Settings.Interfaces import PropertyEvaluationContext from UM.Settings.SettingInstance import InstanceState @@ -57,7 +58,22 @@ class PerObjectContainerStack(CuraContainerStack): return result @override(CuraContainerStack) - def setNextStack(self, stack: CuraContainerStack) -> None: + def setProperty(self, key: str, property_name: str, property_value: Any, container: "ContainerInterface" = None, set_from_cache: bool = False) -> None: + application = Application.getInstance() + machine_manager = application.getMachineManager() + global_stack = machine_manager.activeMachine + + # Ignore all settable-per-meshgroup settings for now because the current CuraEngine architecture cannot handle + # that correctly. This check is also here is because if an old project file includes per-object settings that + # are settable-per-meshgroup, when it is loaded, we need to filter out those settings. + if not global_stack.getProperty(key, "settable_per_mesh"): + Logger.log("i", "Setting [%s] ignored as a per-object setting because it's not settable-per-mesh.", key) + return + super().setProperty(self, key, property_name, property_value, + container = container, set_from_cache = set_from_cache) + + @override(CuraContainerStack) + def setNextStack(self, stack: "CuraContainerStack") -> None: super().setNextStack(stack) # trigger signal to re-evaluate all default settings diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 49c6995d18..75ce7d932c 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -135,7 +135,7 @@ class ThreeMFReader(MeshReader): definition_id = getMachineDefinitionIDForQualitySearch(global_container_stack.definition) um_node.callDecoration("getStack").getTop().setDefinition(definition_id) - setting_container = um_node.callDecoration("getStack").getTop() + setting_container = um_node.callDecoration("getStack") for key in settings: setting_value = settings[key]