mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-12 09:17:50 -06:00
Always use extruder stack in machine settings action plugin, keep support for older project files - CURA-4482
This commit is contained in:
parent
f421166b18
commit
b8757b46b3
1 changed files with 66 additions and 63 deletions
|
@ -116,7 +116,7 @@ class MachineSettingsAction(MachineAction):
|
||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def setMachineExtruderCount(self, extruder_count):
|
def setMachineExtruderCount(self, extruder_count):
|
||||||
machine_manager = Application.getInstance().getMachineManager()
|
# machine_manager = Application.getInstance().getMachineManager()
|
||||||
extruder_manager = ExtruderManager.getInstance()
|
extruder_manager = ExtruderManager.getInstance()
|
||||||
|
|
||||||
definition_changes_container = self._global_container_stack.definitionChanges
|
definition_changes_container = self._global_container_stack.definitionChanges
|
||||||
|
@ -127,33 +127,34 @@ class MachineSettingsAction(MachineAction):
|
||||||
if extruder_count == previous_extruder_count:
|
if extruder_count == previous_extruder_count:
|
||||||
return
|
return
|
||||||
|
|
||||||
extruder_material_id = None
|
# extruder_material_id = None
|
||||||
extruder_variant_id = None
|
# extruder_variant_id = None
|
||||||
if extruder_count == 1:
|
|
||||||
# Get the material and variant of the first extruder before setting the number extruders to 1
|
|
||||||
if machine_manager.hasMaterials:
|
|
||||||
extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]]
|
|
||||||
if machine_manager.hasVariants:
|
|
||||||
extruder_variant_id = machine_manager.allActiveVariantIds[extruder_manager.extruderIds["0"]]
|
|
||||||
|
|
||||||
# Copy any settable_per_extruder setting value from the extruders to the global stack
|
# if extruder_count == 1:
|
||||||
extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
|
# # Get the material and variant of the first extruder before setting the number extruders to 1
|
||||||
extruder_stacks.reverse() # make sure the first extruder is done last, so its settings override any higher extruder settings
|
# if machine_manager.hasMaterials:
|
||||||
|
# extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]]
|
||||||
global_user_container = self._global_container_stack.getTop()
|
# if machine_manager.hasVariants:
|
||||||
for extruder_stack in extruder_stacks:
|
# extruder_variant_id = machine_manager.allActiveVariantIds[extruder_manager.extruderIds["0"]]
|
||||||
extruder_index = extruder_stack.getMetaDataEntry("position")
|
#
|
||||||
extruder_user_container = extruder_stack.getTop()
|
# # Copy any settable_per_extruder setting value from the extruders to the global stack
|
||||||
for setting_instance in extruder_user_container.findInstances():
|
# extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
|
||||||
setting_key = setting_instance.definition.key
|
# extruder_stacks.reverse() # make sure the first extruder is done last, so its settings override any higher extruder settings
|
||||||
settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder")
|
#
|
||||||
|
# global_user_container = self._global_container_stack.getTop()
|
||||||
if settable_per_extruder:
|
# for extruder_stack in extruder_stacks:
|
||||||
limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder")
|
# extruder_index = extruder_stack.getMetaDataEntry("position")
|
||||||
|
# extruder_user_container = extruder_stack.getTop()
|
||||||
if limit_to_extruder == "-1" or limit_to_extruder == extruder_index:
|
# for setting_instance in extruder_user_container.findInstances():
|
||||||
global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value"))
|
# setting_key = setting_instance.definition.key
|
||||||
extruder_user_container.removeInstance(setting_key)
|
# settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder")
|
||||||
|
#
|
||||||
|
# if settable_per_extruder:
|
||||||
|
# limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder")
|
||||||
|
#
|
||||||
|
# if limit_to_extruder == "-1" or limit_to_extruder == extruder_index:
|
||||||
|
# global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value"))
|
||||||
|
# extruder_user_container.removeInstance(setting_key)
|
||||||
|
|
||||||
# reset all extruder number settings whose value is no longer valid
|
# reset all extruder number settings whose value is no longer valid
|
||||||
for setting_instance in self._global_container_stack.userChanges.findInstances():
|
for setting_instance in self._global_container_stack.userChanges.findInstances():
|
||||||
|
@ -185,50 +186,52 @@ class MachineSettingsAction(MachineAction):
|
||||||
# extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStack()
|
# extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStack()
|
||||||
global_user_container = self._global_container_stack.getTop()
|
global_user_container = self._global_container_stack.getTop()
|
||||||
|
|
||||||
if extruder_count > 1:
|
# if extruder_count > 1:
|
||||||
# Multi extrusion
|
|
||||||
# Make sure one of the extruder stacks is active
|
# Make sure one of the extruder stacks is active
|
||||||
if extruder_manager.activeExtruderIndex == -1:
|
|
||||||
extruder_manager.setActiveExtruderIndex(0)
|
extruder_manager.setActiveExtruderIndex(0)
|
||||||
|
|
||||||
# Move settable_per_extruder values out of the global container
|
# Move settable_per_extruder values out of the global container
|
||||||
|
# After CURA-4482 this should not be the case anymore, but we still want to support older project files.
|
||||||
if previous_extruder_count == 1:
|
if previous_extruder_count == 1:
|
||||||
extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
|
extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
|
||||||
global_user_container = self._global_container_stack.getTop()
|
global_user_container = self._global_container_stack.getTop()
|
||||||
|
|
||||||
for setting_instance in global_user_container.findInstances():
|
for setting_instance in global_user_container.findInstances():
|
||||||
setting_key = setting_instance.definition.key
|
setting_key = setting_instance.definition.key
|
||||||
settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder")
|
settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder")
|
||||||
|
|
||||||
if settable_per_extruder:
|
if settable_per_extruder:
|
||||||
limit_to_extruder = int(self._global_container_stack.getProperty(setting_key, "limit_to_extruder"))
|
limit_to_extruder = int(self._global_container_stack.getProperty(setting_key, "limit_to_extruder"))
|
||||||
extruder_stack = extruder_stacks[max(0, limit_to_extruder)]
|
extruder_stack = extruder_stacks[max(0, limit_to_extruder)]
|
||||||
extruder_stack.getTop().setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value"))
|
extruder_stack.getTop().setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value"))
|
||||||
global_user_container.removeInstance(setting_key)
|
global_user_container.removeInstance(setting_key)
|
||||||
else:
|
|
||||||
# Single extrusion
|
|
||||||
|
|
||||||
# Make sure the machine stack is active
|
# else:
|
||||||
if extruder_manager.activeExtruderIndex > -1:
|
# # Single extrusion
|
||||||
extruder_manager.setActiveExtruderIndex(-1)
|
#
|
||||||
|
# # Make sure the machine stack is active
|
||||||
# Restore material and variant on global stack
|
# if extruder_manager.activeExtruderIndex > -1:
|
||||||
# MachineManager._onGlobalContainerChanged removes the global material and variant of multiextruder machines
|
# extruder_manager.setActiveExtruderIndex(-1)
|
||||||
if extruder_material_id or extruder_variant_id:
|
#
|
||||||
# Prevent the DiscardOrKeepProfileChangesDialog from popping up (twice) if there are user changes
|
# # Restore material and variant on global stack
|
||||||
# The dialog is not relevant here, since we're restoring the previous situation as good as possible
|
# # MachineManager._onGlobalContainerChanged removes the global material and variant of multiextruder machines
|
||||||
preferences = Preferences.getInstance()
|
# if extruder_material_id or extruder_variant_id:
|
||||||
choice_on_profile_override = preferences.getValue("cura/choice_on_profile_override")
|
# # Prevent the DiscardOrKeepProfileChangesDialog from popping up (twice) if there are user changes
|
||||||
preferences.setValue("cura/choice_on_profile_override", "always_keep")
|
# # The dialog is not relevant here, since we're restoring the previous situation as good as possible
|
||||||
|
# preferences = Preferences.getInstance()
|
||||||
if extruder_material_id:
|
# choice_on_profile_override = preferences.getValue("cura/choice_on_profile_override")
|
||||||
machine_manager.setActiveMaterial(extruder_material_id)
|
# preferences.setValue("cura/choice_on_profile_override", "always_keep")
|
||||||
if extruder_variant_id:
|
#
|
||||||
machine_manager.setActiveVariant(extruder_variant_id)
|
# if extruder_material_id:
|
||||||
|
# machine_manager.setActiveMaterial(extruder_material_id)
|
||||||
preferences.setValue("cura/choice_on_profile_override", choice_on_profile_override)
|
# if extruder_variant_id:
|
||||||
|
# machine_manager.setActiveVariant(extruder_variant_id)
|
||||||
|
#
|
||||||
|
# preferences.setValue("cura/choice_on_profile_override", choice_on_profile_override)
|
||||||
|
|
||||||
self.forceUpdate()
|
self.forceUpdate()
|
||||||
|
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def forceUpdate(self):
|
def forceUpdate(self):
|
||||||
# Force rebuilding the build volume by reloading the global container stack.
|
# Force rebuilding the build volume by reloading the global container stack.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue