From 7ff1b937e32869aee32fd81d24043a4e1b2ec654 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 29 Jul 2016 15:19:50 +0200 Subject: [PATCH 1/2] Perobject settings now use correct stacks to calculate values CURA-1754 --- plugins/CuraEngineBackend/StartSliceJob.py | 2 +- plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 26cf71ec7e..6e7ccba6ee 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -212,7 +212,7 @@ class StartSliceJob(Job): def _handlePerObjectSettings(self, node, message): stack = node.callDecoration("getStack") # Check if the node has a stack attached to it and the stack has any settings in the top container. - if stack and stack.getTop().getAllKeys(): + if stack: # Because we want to use inheritance correctly, we send all settings as seen from the per object stack. for key in stack.getAllKeys(): setting = message.addRepeatedMessage("settings") diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 75cf522c14..482fb73b0f 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -127,7 +127,11 @@ Item { } } } - + Component.onCompleted: + { + // Ensure primary extruder is set as active + UM.ActiveTool.setProperty("SelectedActiveExtruder", extruders_model.getItem(0).id) + } onActivated: UM.ActiveTool.setProperty("SelectedActiveExtruder", extruders_model.getItem(index).id); onModelChanged: updateCurrentIndex(); From fa78cf2d397b6df5261ab5eeee111bc88ea4574e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 29 Jul 2016 15:44:34 +0200 Subject: [PATCH 2/2] No longer use brute force approach for per object CURA-1754 --- plugins/CuraEngineBackend/StartSliceJob.py | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 6e7ccba6ee..8f4f47ef50 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -13,6 +13,7 @@ from UM.Scene.SceneNode import SceneNode from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Settings.Validator import ValidatorState +from UM.Settings.SettingRelation import RelationType from cura.OneAtATimeIterator import OneAtATimeIterator @@ -213,9 +214,27 @@ class StartSliceJob(Job): stack = node.callDecoration("getStack") # Check if the node has a stack attached to it and the stack has any settings in the top container. if stack: - # Because we want to use inheritance correctly, we send all settings as seen from the per object stack. - for key in stack.getAllKeys(): + # Check all settings for relations, so we can also calculate the correct values for dependant settings. + changed_setting_keys = set(stack.getTop().getAllKeys()) + for key in stack.getTop().getAllKeys(): + instance = stack.getTop().getInstance(key) + self._addRelations(changed_setting_keys, instance.definition.relations) + Job.yieldThread() + + # Ensure that the engine is aware what the build extruder is + changed_setting_keys.add("extruder_nr") + + # Get values for all changed settings + for key in changed_setting_keys: setting = message.addRepeatedMessage("settings") setting.name = key setting.value = str(stack.getProperty(key, "value")).encode("utf-8") Job.yieldThread() + + def _addRelations(self, relations_set, relations): + for relation in filter(lambda r: r.role == "value", relations): + if relation.type == RelationType.RequiresTarget: + continue + + relations_set.add(relation.target.key) + self._addRelations(relations_set, relation.target.relations) \ No newline at end of file