diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index cff60e3494..adc2982aa8 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -68,6 +68,7 @@ class BuildVolume(SceneNode): self._volume_aabb = None self._raft_thickness = 0.0 + self._extra_z_clearance = 0.0 self._adhesion_type = None self._platform = Platform(self) @@ -347,7 +348,7 @@ class BuildVolume(SceneNode): self._volume_aabb = AxisAlignedBox( minimum = Vector(min_w, min_h - 1.0, min_d), - maximum = Vector(max_w, max_h - self._raft_thickness, max_d)) + maximum = Vector(max_w, max_h - self._raft_thickness - self._extra_z_clearance, max_d)) bed_adhesion_size = self._getEdgeDisallowedSize() @@ -356,7 +357,7 @@ class BuildVolume(SceneNode): # The +1 and -1 is added as there is always a bit of extra room required to work properly. scale_to_max_bounds = AxisAlignedBox( minimum = Vector(min_w + bed_adhesion_size + 1, min_h, min_d + disallowed_area_size - bed_adhesion_size + 1), - maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness, max_d - disallowed_area_size + bed_adhesion_size - 1) + maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - disallowed_area_size + bed_adhesion_size - 1) ) Application.getInstance().getController().getScene()._maximum_bounds = scale_to_max_bounds @@ -384,6 +385,21 @@ class BuildVolume(SceneNode): self.setPosition(Vector(0, -self._raft_thickness, 0), SceneNode.TransformSpace.World) self.raftThicknessChanged.emit() + def _updateExtraZClearance(self): + extra_z = None + extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + for extruder in extruders: + retraction_hop = extruder.getProperty("retraction_hop", "value") + if extra_z is None or retraction_hop > extra_z: + extra_z = retraction_hop + if extra_z is None: + # If no extruders, take global value. + extra_z = self._global_container_stack.getProperty("retraction_hop", "value") + if extra_z != self._extra_z_clearance: + self._extra_z_clearance = extra_z + from UM.Logger import Logger + Logger.log("d", " ### Extra z clearance changed: %s" % extra_z) + ## Update the build volume visualization def _onStackChanged(self): if self._global_container_stack: @@ -450,6 +466,10 @@ class BuildVolume(SceneNode): self._updateRaftThickness() rebuild_me = True + if setting_key in self._extra_z_settings: + self._updateExtraZClearance() + rebuild_me = True + if rebuild_me: self.rebuild() @@ -872,6 +892,7 @@ class BuildVolume(SceneNode): _skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist"] _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap"] + _extra_z_settings = ["retraction_hop"] _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"] _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"]