mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-12 06:28:59 +08:00
CURA-4400 correctly cope with quality changes that conflict with the current enabled extruders
This commit is contained in:
parent
e0e2d3362b
commit
d889795721
@ -338,6 +338,9 @@ class ContainerManager(QObject):
|
|||||||
container.clear()
|
container.clear()
|
||||||
send_emits_containers.append(container)
|
send_emits_containers.append(container)
|
||||||
|
|
||||||
|
# user changes are possibly added to make the current setup match the current enabled extruders
|
||||||
|
Application.getInstance().getMachineManager().correctExtruderSettings()
|
||||||
|
|
||||||
for container in send_emits_containers:
|
for container in send_emits_containers:
|
||||||
container.sendPostponedEmits()
|
container.sendPostponedEmits()
|
||||||
|
|
||||||
|
@ -705,26 +705,42 @@ class MachineManager(QObject):
|
|||||||
if containers:
|
if containers:
|
||||||
return containers[0].definition.getId()
|
return containers[0].definition.getId()
|
||||||
|
|
||||||
## Update extruder number to a valid value when the number of extruders are changed, or when an extruder is changed
|
def getIncompatibleSettingsOnEnabledExtruders(self, container):
|
||||||
def correctExtruderSettings(self):
|
|
||||||
extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value")
|
extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value")
|
||||||
|
result = []
|
||||||
# reset all extruder number settings whose value is no longer valid
|
for setting_instance in container.findInstances():
|
||||||
for setting_instance in self._global_container_stack.userChanges.findInstances():
|
|
||||||
setting_key = setting_instance.definition.key
|
setting_key = setting_instance.definition.key
|
||||||
enabled = self._global_container_stack.getProperty(setting_key, "enabled")
|
setting_enabled = self._global_container_stack.getProperty(setting_key, "enabled")
|
||||||
if not enabled:
|
if not setting_enabled:
|
||||||
self._global_container_stack.userChanges.removeInstance(setting_key)
|
# A setting is not visible anymore
|
||||||
Logger.log("d", "Reset setting [%s] because the setting is no longer enabled", setting_key)
|
result.append(setting_key)
|
||||||
|
Logger.log("d", "Reset setting [%s] from [%s] because the setting is no longer enabled", setting_key, container)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"):
|
if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
old_value = self._global_container_stack.userChanges.getProperty(setting_key, "value")
|
old_value = container.getProperty(setting_key, "value")
|
||||||
if int(old_value) >= extruder_count or not self._global_container_stack.extruders[str(old_value)].isEnabled:
|
if int(old_value) >= extruder_count or not self._global_container_stack.extruders[str(old_value)].isEnabled:
|
||||||
self._global_container_stack.userChanges.removeInstance(setting_key)
|
result.append(setting_key)
|
||||||
Logger.log("d", "Reset setting [%s] because its old value [%s] is no longer valid", setting_key, old_value)
|
Logger.log("d", "Reset setting [%s] in [%s] because its old value [%s] is no longer valid", setting_key, container, old_value)
|
||||||
|
return result
|
||||||
|
|
||||||
|
## Update extruder number to a valid value when the number of extruders are changed, or when an extruder is changed
|
||||||
|
def correctExtruderSettings(self):
|
||||||
|
for setting_key in self.getIncompatibleSettingsOnEnabledExtruders(self._global_container_stack.userChanges):
|
||||||
|
self._global_container_stack.userChanges.removeInstance(setting_key)
|
||||||
|
add_user_changes = self.getIncompatibleSettingsOnEnabledExtruders(self._global_container_stack.qualityChanges)
|
||||||
|
for setting_key in add_user_changes:
|
||||||
|
# Apply quality changes that are incompatible to user changes, so we do not change the quality changes itself.
|
||||||
|
self._global_container_stack.userChanges.setProperty(setting_key, "value", self._default_extruder_position)
|
||||||
|
if add_user_changes:
|
||||||
|
caution_message = Message(catalog.i18nc(
|
||||||
|
"@info:generic",
|
||||||
|
"Settings have been changed to match the current availability of extruders: [%s]" % ", ".join(add_user_changes)),
|
||||||
|
lifetime=0,
|
||||||
|
title = catalog.i18nc("@info:title", "Settings updated"))
|
||||||
|
caution_message.show()
|
||||||
|
|
||||||
## Set the amount of extruders on the active machine (global stack)
|
## Set the amount of extruders on the active machine (global stack)
|
||||||
# \param extruder_count int the number of extruders to set
|
# \param extruder_count int the number of extruders to set
|
||||||
|
Loading…
x
Reference in New Issue
Block a user