Separate out pieces that contribute to the disallowed border

This makes it much more clear which settings contribute to the border in what way.

Also fixes the border size definitely.

Contributes to issue CURA-2407.
This commit is contained in:
Ghostkeeper 2016-09-27 16:15:09 +02:00
parent 1daa71c0ec
commit 433f7ce53f
No known key found for this signature in database
GPG Key ID: 701948C5954A7385

View File

@ -478,7 +478,6 @@ class BuildVolume(SceneNode):
if not self._global_container_stack: if not self._global_container_stack:
return 0 return 0
container_stack = self._global_container_stack container_stack = self._global_container_stack
border_size = 0.0
# If we are printing one at a time, we need to add the bed adhesion size to the disallowed areas of the objects # If we are printing one at a time, we need to add the bed adhesion size to the disallowed areas of the objects
if container_stack.getProperty("print_sequence", "value") == "one_at_a_time": if container_stack.getProperty("print_sequence", "value") == "one_at_a_time":
@ -488,51 +487,46 @@ class BuildVolume(SceneNode):
if adhesion_type == "skirt": if adhesion_type == "skirt":
skirt_distance = self._getSettingProperty("skirt_gap", "value") skirt_distance = self._getSettingProperty("skirt_gap", "value")
skirt_line_count = self._getSettingProperty("skirt_line_count", "value") skirt_line_count = self._getSettingProperty("skirt_line_count", "value")
border_size = skirt_distance + (skirt_line_count * self._getSettingProperty("skirt_brim_line_width", "value")) bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingProperty("skirt_brim_line_width", "value"))
if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value"))
extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width") extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width")
del extruder_values[adhesion_extruder_nr] # Remove the value of the adhesion extruder nr. del extruder_values[adhesion_extruder_nr] # Remove the value of the adhesion extruder nr.
for value in extruder_values: for value in extruder_values:
border_size += value bed_adhesion_size += value
elif adhesion_type == "brim": elif adhesion_type == "brim":
border_size = self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value") bed_adhesion_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: if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value"))
extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width") extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width")
del extruder_values[adhesion_extruder_nr] # Remove the value of the adhesion extruder nr. del extruder_values[adhesion_extruder_nr] # Remove the value of the adhesion extruder nr.
for value in extruder_values: for value in extruder_values:
border_size += value bed_adhesion_size += value
elif adhesion_type == "raft": elif adhesion_type == "raft":
border_size = self._getSettingProperty("raft_margin", "value") bed_adhesion_size = self._getSettingProperty("raft_margin", "value")
else: else:
raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?")
wall_expansion_radius = 0 #Outer wall is moved?
if self._getSettingProperty("xy_offset", "value"): if self._getSettingProperty("xy_offset", "value"):
border_size += self._getSettingProperty("xy_offset", "value") wall_expansion_radius += self._getSettingProperty("xy_offset", "value")
farthest_shield_distance = 0
if container_stack.getProperty("draft_shield_enabled", "value"): if container_stack.getProperty("draft_shield_enabled", "value"):
draft_shield_dist = container_stack.getProperty("draft_shield_dist", "value") farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("draft_shield_dist", "value"))
if border_size < draft_shield_dist:
border_size = draft_shield_dist
if container_stack.getProperty("ooze_shield_enabled", "value"): if container_stack.getProperty("ooze_shield_enabled", "value"):
ooze_shield_dist = container_stack.getProperty("ooze_shield_dist", "value") farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value"))
if border_size < ooze_shield_dist:
border_size = ooze_shield_dist
move_from_wall_radius = 0 #Moves that start from outer wall.
if self._getSettingProperty("infill_wipe_dist", "value"): if self._getSettingProperty("infill_wipe_dist", "value"):
infill_wipe_distance = self._getSettingProperty("infill_wipe_dist", "value") wall_expansion_radius = max(move_from_wall_radius, self._getSettingProperty("infill_wipe_dist", "value"))
if border_size < infill_wipe_distance:
border_size = infill_wipe_distance
if self._getSettingProperty("travel_avoid_distance", "value"): if self._getSettingProperty("travel_avoid_distance", "value"):
travel_avoid_distance = self._getSettingProperty("travel_avoid_distance", "value") move_from_wall_radius = max(move_from_wall_radius, self._getSettingProperty("travel_avoid_distance", "value"))
if border_size < travel_avoid_distance:
border_size = travel_avoid_distance
#Now combine our different pieces of data to get the final border size.
# - Wall expansion is applied to the outer wall itself, so add it to the rest.
# - Farthest shield, moves from the wall and bed adhesion are all radiusses around the outer wall, so take the max of them.
border_size = wall_expansion_radius + max(farthest_shield_distance, move_from_wall_radius, bed_adhesion_size)
return border_size return border_size
def _clamp(self, value, min_value, max_value): def _clamp(self, value, min_value, max_value):