From 0e31de3ed96fbe7cf23e0794d17777edad20e638 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 16 Dec 2016 16:13:15 +0100 Subject: [PATCH] No longer crash when numeric settings are empty strings They may temporarily be empty strings while the user is typing, but that currently makes the setting red. However, if we crash during the build plate updating, the front-end gets in some half-updated state in which settings get reset to their previous state every time the user changes anything. So don't crash here. Contributes to issue CURA-3157. --- cura/BuildVolume.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 629f7ba6d8..56fa8d7b3b 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -721,7 +721,12 @@ class BuildVolume(SceneNode): # # \return A sequence of setting values, one for each extruder. def _getSettingFromAllExtruders(self, setting_key, property = "value"): - return ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property) + all_values = ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property) + all_types = ExtruderManager.getInstance().getAllExtruderSettings(setting_key, "type") + for i in range(len(all_values)): + if not all_values[i] and (all_types[i] == "int" or all_types[i] == "float"): + all_values[i] = 0 + return all_values ## Private convenience function to get a setting from the support infill # extruder. @@ -745,16 +750,21 @@ class BuildVolume(SceneNode): multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1 if not multi_extrusion: - return self._global_container_stack.getProperty(setting_key, property) + stack = self._global_container_stack + else: + extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value") - extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value") + if extruder_index == "-1": # If extruder index is -1 use global instead + stack = self._global_container_stack + else: + extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)] + stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] - if extruder_index == "-1": # If extruder index is -1 use global instead - return self._global_container_stack.getProperty(setting_key, property) - - extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)] - stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] - return stack.getProperty(setting_key, property) + value = stack.getProperty(setting_key, property) + setting_type = stack.getProperty(setting_key, "type") + if not value and (setting_type == "int" or setting_type == "float"): + return 0 + return value ## Convenience function to calculate the disallowed radius around the edge. #