mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-28 23:04:34 +08:00
Merge pull request #8698 from Ultimaker/CURA-7827_Properly_set_print_sequence_when_number_of_enabled_extruder_changes
CURA-7827: Correct print sequence when there are more than one enabled extruders
This commit is contained in:
commit
05d98091b0
@ -345,6 +345,9 @@ class ContainerManager(QObject):
|
||||
# user changes are possibly added to make the current setup match the current enabled extruders
|
||||
machine_manager.correctExtruderSettings()
|
||||
|
||||
# The Print Sequence should be changed to match the current setup
|
||||
machine_manager.correctPrintSequence()
|
||||
|
||||
for container in send_emits_containers:
|
||||
container.sendPostponedEmits()
|
||||
|
||||
|
@ -128,6 +128,7 @@ class MachineManager(QObject):
|
||||
self.activeQualityChangesGroupChanged.connect(self.activeQualityDisplayNameChanged)
|
||||
|
||||
self.activeStackValueChanged.connect(self._reCalculateNumUserSettings)
|
||||
self.numberExtrudersEnabledChanged.connect(self.correctPrintSequence)
|
||||
|
||||
activeQualityDisplayNameChanged = pyqtSignal()
|
||||
|
||||
@ -826,11 +827,6 @@ class MachineManager(QObject):
|
||||
result = [] # type: List[str]
|
||||
for setting_instance in container.findInstances():
|
||||
setting_key = setting_instance.definition.key
|
||||
if setting_key == "print_sequence":
|
||||
old_value = container.getProperty(setting_key, "value")
|
||||
Logger.log("d", "Reset setting [%s] in [%s] because its old value [%s] is no longer valid", setting_key, container, old_value)
|
||||
result.append(setting_key)
|
||||
continue
|
||||
if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"):
|
||||
continue
|
||||
|
||||
@ -862,6 +858,41 @@ class MachineManager(QObject):
|
||||
title = catalog.i18nc("@info:title", "Settings updated"))
|
||||
caution_message.show()
|
||||
|
||||
def correctPrintSequence(self) -> None:
|
||||
"""
|
||||
Sets the Print Sequence setting to "all-at-once" when there are more than one enabled extruders.
|
||||
|
||||
This setting has to be explicitly changed whenever we have more than one enabled extruders to make sure that the
|
||||
Cura UI is properly updated to reset all the UI elements changes that occur due to the one-at-a-time mode (such
|
||||
as the reduced build volume, the different convex hulls of the objects etc.).
|
||||
"""
|
||||
|
||||
setting_key = "print_sequence"
|
||||
new_value = "all_at_once"
|
||||
|
||||
if self._global_container_stack is None \
|
||||
or self._global_container_stack.getProperty(setting_key, "value") == new_value \
|
||||
or self.numberExtrudersEnabled < 2:
|
||||
return
|
||||
|
||||
user_changes_container = self._global_container_stack.userChanges
|
||||
quality_changes_container = self._global_container_stack.qualityChanges
|
||||
print_sequence_quality_changes = quality_changes_container.getProperty(setting_key, "value")
|
||||
print_sequence_user_changes = user_changes_container.getProperty(setting_key, "value")
|
||||
|
||||
# If the user changes container has a value and its the incorrect value, then reset the setting in the user
|
||||
# changes (so that the circular revert-changes arrow will now show up in the interface)
|
||||
if print_sequence_user_changes and print_sequence_user_changes != new_value:
|
||||
user_changes_container.removeInstance(setting_key)
|
||||
Logger.log("d", "Resetting '{}' in container '{}' because there are more than 1 enabled extruders.".format(setting_key, user_changes_container))
|
||||
# If the print sequence doesn't exist in either the user changes or the quality changes (yet it still has the
|
||||
# wrong value in the global stack), or it exists in the quality changes and it has the wrong value, then set it
|
||||
# in the user changes
|
||||
elif (not print_sequence_quality_changes and not print_sequence_user_changes) \
|
||||
or (print_sequence_quality_changes and print_sequence_quality_changes != new_value):
|
||||
user_changes_container.setProperty(setting_key, "value", new_value)
|
||||
Logger.log("d", "Setting '{}' in '{}' to '{}' because there are more than 1 enabled extruders.".format(setting_key, user_changes_container, new_value))
|
||||
|
||||
def setActiveMachineExtruderCount(self, extruder_count: int) -> None:
|
||||
"""Set the amount of extruders on the active machine (global stack)
|
||||
|
||||
|
@ -21,7 +21,8 @@ def machine_manager(application, extruder_manager, container_registry, global_st
|
||||
application.getGlobalContainerStack = MagicMock(return_value = global_stack)
|
||||
with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
|
||||
manager = MachineManager(application)
|
||||
manager._onGlobalContainerChanged()
|
||||
with patch.object(MachineManager, "updateNumberExtrudersEnabled", return_value = None):
|
||||
manager._onGlobalContainerChanged()
|
||||
|
||||
return manager
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user