From 4141a878871a95964d219cb5ebb042ba2a8e241f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 22 Sep 2016 15:42:04 +0200 Subject: [PATCH] BuildVolume now takes the extra line by extra extruders into account CURA-2407 --- cura/BuildVolume.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 93777233de..fb8b1ce5a8 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -446,14 +446,15 @@ class BuildVolume(SceneNode): self._has_errors = collision self._disallowed_areas = areas - ## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property). + ## Private convenience function to get a setting from the adhesion extruder. def _getSettingProperty(self, setting_key, property = "value"): 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) - extruder_index = self._global_container_stack.getProperty(setting_key, "limit_to_extruder") + extruder_index = self._global_container_stack.getProperty("adhesion_extruder_nr", "value") + if extruder_index == "-1": # If extruder index is -1 use global instead return self._global_container_stack.getProperty(setting_key, property) @@ -461,6 +462,17 @@ class BuildVolume(SceneNode): stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] return stack.getProperty(setting_key, property) + def _getAllExtruderValues(self, setting_key): + multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1 + if not multi_extrusion: + return [self._global_container_stack.getProperty(setting_key, "value")] + result = [] + for index in ExtruderManager.getInstance().extruderIds: + extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(index)] + stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id=extruder_stack_id)[0] + result.append(stack.getProperty(setting_key, "value")) + return result + ## Convenience function to calculate the size of the bed adhesion in directions x, y. def _getBedAdhesionSize(self): if not self._global_container_stack: @@ -477,8 +489,21 @@ class BuildVolume(SceneNode): skirt_distance = self._getSettingProperty("skirt_gap", "value") skirt_line_count = self._getSettingProperty("skirt_line_count", "value") skirt_size = skirt_distance + (skirt_line_count * self._getSettingProperty("skirt_brim_line_width", "value")) + if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: + adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) + extruder_values = self._getAllExtruderValues("skirt_brim_line_width") + del extruder_values[adhesion_extruder_nr] # Remove the value of the adhesion extruder nr. + for value in extruder_values: + skirt_size += value elif adhesion_type == "brim": skirt_size = self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value") + if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: + adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) + extruder_values = self._getAllExtruderValues("skirt_brim_line_width") + del extruder_values[adhesion_extruder_nr] # Remove the value of the adhesion extruder nr. + for value in extruder_values: + skirt_size += value + elif adhesion_type == "raft": skirt_size = self._getSettingProperty("raft_margin", "value")