mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 23:46:22 -06:00
Move setting values that are settable per extruder from/to global stack when setting extruder count
This commit is contained in:
parent
d2d36b8c98
commit
fab0fa1dde
1 changed files with 44 additions and 7 deletions
|
@ -132,7 +132,8 @@ class MachineSettingsAction(MachineAction):
|
||||||
if not self._global_container_stack or not definition_changes_container:
|
if not self._global_container_stack or not definition_changes_container:
|
||||||
return
|
return
|
||||||
|
|
||||||
if extruder_count == self._global_container_stack.getProperty("machine_extruder_count", "value"):
|
previous_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value")
|
||||||
|
if extruder_count == previous_extruder_count:
|
||||||
return
|
return
|
||||||
|
|
||||||
extruder_material_id = None
|
extruder_material_id = None
|
||||||
|
@ -144,11 +145,29 @@ class MachineSettingsAction(MachineAction):
|
||||||
if machine_manager.hasVariants:
|
if machine_manager.hasVariants:
|
||||||
extruder_variant_id = machine_manager.activeVariantIds[0]
|
extruder_variant_id = machine_manager.activeVariantIds[0]
|
||||||
|
|
||||||
|
# Copy any settable_per_extruder setting value from the extruders to the global stack
|
||||||
|
extruder_stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()))
|
||||||
|
extruder_stacks.reverse() # make sure the first extruder is done last, so its settings override any higher extruder settings
|
||||||
|
|
||||||
|
global_user_container = self._global_container_stack.getTop()
|
||||||
|
for extruder_stack in extruder_stacks:
|
||||||
|
extruder_index = extruder_stack.getMetaDataEntry("position")
|
||||||
|
extruder_user_container = extruder_stack.getTop()
|
||||||
|
for setting_instance in extruder_user_container.findInstances():
|
||||||
|
setting_key = setting_instance.definition.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)
|
||||||
|
|
||||||
# Check to see if any features are set to print with an extruder that will no longer exist
|
# Check to see if any features are set to print with an extruder that will no longer exist
|
||||||
for setting_name in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]:
|
for setting_key in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]:
|
||||||
if int(self._global_container_stack.getProperty(setting_name, "value")) > extruder_count -1:
|
if int(self._global_container_stack.getProperty(setting_key, "value")) > extruder_count -1:
|
||||||
Logger.log("i", "Lowering %s setting to match number of extruders", setting_name)
|
Logger.log("i", "Lowering %s setting to match number of extruders", setting_key)
|
||||||
self._global_container_stack.getTop().setProperty(setting_name, "value", extruder_count -1)
|
self._global_container_stack.getTop().setProperty(setting_key, "value", extruder_count -1)
|
||||||
|
|
||||||
# Check to see if any objects are set to print with an extruder that will no longer exist
|
# Check to see if any objects are set to print with an extruder that will no longer exist
|
||||||
root_node = Application.getInstance().getController().getScene().getRoot()
|
root_node = Application.getInstance().getController().getScene().getRoot()
|
||||||
|
@ -163,11 +182,29 @@ class MachineSettingsAction(MachineAction):
|
||||||
self.forceUpdate()
|
self.forceUpdate()
|
||||||
|
|
||||||
if extruder_count > 1:
|
if extruder_count > 1:
|
||||||
# multiextrusion; make sure one of these extruder stacks is active
|
# Multiextrusion
|
||||||
|
|
||||||
|
# Make sure one of the extruder stacks is active
|
||||||
if extruder_manager.activeExtruderIndex == -1:
|
if extruder_manager.activeExtruderIndex == -1:
|
||||||
extruder_manager.setActiveExtruderIndex(0)
|
extruder_manager.setActiveExtruderIndex(0)
|
||||||
|
|
||||||
|
# Move settable_per_extruder values out of the global container
|
||||||
|
if previous_extruder_count == 1:
|
||||||
|
extruder_stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()))
|
||||||
|
global_user_container = self._global_container_stack.getTop()
|
||||||
|
|
||||||
|
for setting_instance in global_user_container.findInstances():
|
||||||
|
setting_key = setting_instance.definition.key
|
||||||
|
settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder")
|
||||||
|
if settable_per_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.getTop().setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value"))
|
||||||
|
global_user_container.removeInstance(setting_key)
|
||||||
else:
|
else:
|
||||||
# single extrusion; make sure the machine stack is active
|
# Single extrusion
|
||||||
|
|
||||||
|
# Make sure the machine stack is active
|
||||||
if extruder_manager.activeExtruderIndex > -1:
|
if extruder_manager.activeExtruderIndex > -1:
|
||||||
extruder_manager.setActiveExtruderIndex(-1);
|
extruder_manager.setActiveExtruderIndex(-1);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue