mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-14 06:05:52 +08:00
Brim, raft & skirt settings are now retrieved from correct extruder (if any)
CURA-2245
This commit is contained in:
parent
98a759196d
commit
277123d1d3
@ -22,6 +22,8 @@ catalog = i18nCatalog("cura")
|
|||||||
import numpy
|
import numpy
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
|
import UM.Settings.ContainerRegistry
|
||||||
|
|
||||||
|
|
||||||
# Setting for clearance around the prime
|
# Setting for clearance around the prime
|
||||||
PRIME_CLEARANCE = 10
|
PRIME_CLEARANCE = 10
|
||||||
@ -256,11 +258,17 @@ class BuildVolume(SceneNode):
|
|||||||
def _onGlobalContainerStackChanged(self):
|
def _onGlobalContainerStackChanged(self):
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
self._global_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged)
|
self._global_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged)
|
||||||
|
extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())
|
||||||
|
for extruder in extruders:
|
||||||
|
extruder.propertyChanged.disconnect(self._onSettingPropertyChanged)
|
||||||
|
|
||||||
self._global_container_stack = Application.getInstance().getGlobalContainerStack()
|
self._global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
|
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
self._global_container_stack.propertyChanged.connect(self._onSettingPropertyChanged)
|
self._global_container_stack.propertyChanged.connect(self._onSettingPropertyChanged)
|
||||||
|
extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())
|
||||||
|
for extruder in extruders:
|
||||||
|
extruder.propertyChanged.connect(self._onSettingPropertyChanged)
|
||||||
|
|
||||||
self._width = self._global_container_stack.getProperty("machine_width", "value")
|
self._width = self._global_container_stack.getProperty("machine_width", "value")
|
||||||
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
||||||
@ -410,6 +418,21 @@ class BuildVolume(SceneNode):
|
|||||||
self._has_errors = collision
|
self._has_errors = collision
|
||||||
self._disallowed_areas = areas
|
self._disallowed_areas = areas
|
||||||
|
|
||||||
|
## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property).
|
||||||
|
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")
|
||||||
|
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)
|
||||||
|
|
||||||
## Convenience function to calculate the size of the bed adhesion in directions x, y.
|
## Convenience function to calculate the size of the bed adhesion in directions x, y.
|
||||||
def _getBedAdhesionSize(self):
|
def _getBedAdhesionSize(self):
|
||||||
if not self._global_container_stack:
|
if not self._global_container_stack:
|
||||||
@ -423,13 +446,13 @@ class BuildVolume(SceneNode):
|
|||||||
|
|
||||||
adhesion_type = container_stack.getProperty("adhesion_type", "value")
|
adhesion_type = container_stack.getProperty("adhesion_type", "value")
|
||||||
if adhesion_type == "skirt":
|
if adhesion_type == "skirt":
|
||||||
skirt_distance = container_stack.getProperty("skirt_gap", "value")
|
skirt_distance = self._getSettingProperty("skirt_gap", "value")
|
||||||
skirt_line_count = container_stack.getProperty("skirt_line_count", "value")
|
skirt_line_count = self._getSettingProperty("skirt_line_count", "value")
|
||||||
skirt_size = skirt_distance + (skirt_line_count * container_stack.getProperty("skirt_brim_line_width", "value"))
|
skirt_size = skirt_distance + (skirt_line_count * self._getSettingProperty("skirt_brim_line_width", "value"))
|
||||||
elif adhesion_type == "brim":
|
elif adhesion_type == "brim":
|
||||||
skirt_size = container_stack.getProperty("brim_line_count", "value") * container_stack.getProperty("skirt_brim_line_width", "value")
|
skirt_size = self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value")
|
||||||
elif adhesion_type == "raft":
|
elif adhesion_type == "raft":
|
||||||
skirt_size = container_stack.getProperty("raft_margin", "value")
|
skirt_size = self._getSettingProperty("raft_margin", "value")
|
||||||
|
|
||||||
if container_stack.getProperty("draft_shield_enabled", "value"):
|
if container_stack.getProperty("draft_shield_enabled", "value"):
|
||||||
skirt_size += container_stack.getProperty("draft_shield_dist", "value")
|
skirt_size += container_stack.getProperty("draft_shield_dist", "value")
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
|
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
from cura.Settings.ExtruderManager import ExtruderManager
|
||||||
from UM.Math.Polygon import Polygon
|
from UM.Math.Polygon import Polygon
|
||||||
from . import ConvexHullNode
|
from . import ConvexHullNode
|
||||||
|
|
||||||
|
import UM.Settings.ContainerRegistry
|
||||||
|
|
||||||
import numpy
|
import numpy
|
||||||
|
|
||||||
## The convex hull decorator is a scene node decorator that adds the convex hull functionality to a scene node.
|
## The convex hull decorator is a scene node decorator that adds the convex hull functionality to a scene node.
|
||||||
@ -227,18 +229,15 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||||||
# Add extra margin depending on adhesion type
|
# Add extra margin depending on adhesion type
|
||||||
adhesion_type = self._global_stack.getProperty("adhesion_type", "value")
|
adhesion_type = self._global_stack.getProperty("adhesion_type", "value")
|
||||||
extra_margin = 0
|
extra_margin = 0
|
||||||
machine_head_coords = numpy.array(
|
|
||||||
self._global_stack.getProperty("machine_head_with_fans_polygon", "value"),
|
|
||||||
numpy.float32)
|
|
||||||
|
|
||||||
if adhesion_type == "raft":
|
if adhesion_type == "raft":
|
||||||
extra_margin = max(0, self._global_stack.getProperty("raft_margin", "value"))
|
extra_margin = max(0, self._getSettingProperty("raft_margin", "value"))
|
||||||
elif adhesion_type == "brim":
|
elif adhesion_type == "brim":
|
||||||
extra_margin = max(0, self._global_stack.getProperty("brim_line_count", "value") * self._global_stack.getProperty("skirt_brim_line_width", "value"))
|
extra_margin = max(0, self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value"))
|
||||||
elif adhesion_type == "skirt":
|
elif adhesion_type == "skirt":
|
||||||
extra_margin = max(
|
extra_margin = max(
|
||||||
0, self._global_stack.getProperty("skirt_gap", "value") +
|
0, self._getSettingProperty("skirt_gap", "value") +
|
||||||
self._global_stack.getProperty("skirt_line_count", "value") * self._global_stack.getProperty("skirt_brim_line_width", "value"))
|
self._getSettingPropertyy("skirt_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value"))
|
||||||
|
|
||||||
# adjust head_and_fans with extra margin
|
# adjust head_and_fans with extra margin
|
||||||
if extra_margin > 0:
|
if extra_margin > 0:
|
||||||
@ -268,6 +267,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||||||
if self._global_stack:
|
if self._global_stack:
|
||||||
self._global_stack.propertyChanged.disconnect(self._onSettingValueChanged)
|
self._global_stack.propertyChanged.disconnect(self._onSettingValueChanged)
|
||||||
self._global_stack.containersChanged.disconnect(self._onChanged)
|
self._global_stack.containersChanged.disconnect(self._onChanged)
|
||||||
|
extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_stack.getId())
|
||||||
|
for extruder in extruders:
|
||||||
|
extruder.propertyChanged.disconnect(self._onSettingValueChanged)
|
||||||
|
|
||||||
self._global_stack = Application.getInstance().getGlobalContainerStack()
|
self._global_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
|
|
||||||
@ -275,8 +277,27 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||||||
self._global_stack.propertyChanged.connect(self._onSettingValueChanged)
|
self._global_stack.propertyChanged.connect(self._onSettingValueChanged)
|
||||||
self._global_stack.containersChanged.connect(self._onChanged)
|
self._global_stack.containersChanged.connect(self._onChanged)
|
||||||
|
|
||||||
|
extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_stack.getId())
|
||||||
|
for extruder in extruders:
|
||||||
|
extruder.propertyChanged.connect(self._onSettingValueChanged)
|
||||||
|
|
||||||
self._onChanged()
|
self._onChanged()
|
||||||
|
|
||||||
|
## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property).
|
||||||
|
def _getSettingProperty(self, setting_key, property="value"):
|
||||||
|
multi_extrusion = self._global_stack.getProperty("machine_extruder_count", "value") > 1
|
||||||
|
|
||||||
|
if not multi_extrusion:
|
||||||
|
return self._global_stack.getProperty(setting_key, property)
|
||||||
|
|
||||||
|
extruder_index = self._global_stack.getProperty(setting_key, "limit_to_extruder")
|
||||||
|
if extruder_index == "-1": # If extruder index is -1 use global instead
|
||||||
|
return self._global_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)
|
||||||
|
|
||||||
## Returns true if node is a descendent or the same as the root node.
|
## Returns true if node is a descendent or the same as the root node.
|
||||||
def __isDescendant(self, root, node):
|
def __isDescendant(self, root, node):
|
||||||
if node is None:
|
if node is None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user