mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-13 09:47:50 -06:00
CURA-4400 restore correct default extruder, added extruders_enabled_count and use that in fdmprinters (result: i.e. one at a time can be enabled by disabling an extruder)
This commit is contained in:
parent
b0801d40e3
commit
37d02da1f1
3 changed files with 54 additions and 26 deletions
|
@ -484,6 +484,8 @@ class ExtruderManager(QObject):
|
|||
|
||||
result = []
|
||||
for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()):
|
||||
if not extruder.isEnabled:
|
||||
continue
|
||||
# only include values from extruders that are "active" for the current machine instance
|
||||
if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value"):
|
||||
continue
|
||||
|
|
|
@ -195,7 +195,6 @@ class MachineManager(QObject):
|
|||
|
||||
# Update the local global container stack reference
|
||||
self._global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
|
||||
self.globalContainerChanged.emit()
|
||||
|
||||
# after switching the global stack we reconnect all the signals and set the variant and material references
|
||||
|
@ -309,6 +308,8 @@ class MachineManager(QObject):
|
|||
Application.getInstance().setGlobalContainerStack(global_stack)
|
||||
ExtruderManager.getInstance()._globalContainerStackChanged()
|
||||
self._initMachineState(containers[0])
|
||||
self.updateDefaultExtruder()
|
||||
self.updateNumberExtrudersEnabled()
|
||||
self.globalContainerChanged.emit()
|
||||
self._onGlobalContainerChanged()
|
||||
|
||||
|
@ -732,6 +733,7 @@ class MachineManager(QObject):
|
|||
definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count)
|
||||
|
||||
self.updateDefaultExtruder()
|
||||
self.updateNumberExtrudersEnabled()
|
||||
self.correctExtruderSettings()
|
||||
|
||||
# Check to see if any objects are set to print with an extruder that will no longer exist
|
||||
|
@ -748,14 +750,14 @@ class MachineManager(QObject):
|
|||
|
||||
# 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.
|
||||
global_user_container = self._global_container_stack.getTop()
|
||||
global_user_container = self._global_container_stack.userChanges
|
||||
|
||||
# Make sure extruder_stacks exists
|
||||
extruder_stacks = []
|
||||
|
||||
if previous_extruder_count == 1:
|
||||
extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
|
||||
global_user_container = self._global_container_stack.getTop()
|
||||
global_user_container = self._global_container_stack.userChanges
|
||||
|
||||
for setting_instance in global_user_container.findInstances():
|
||||
setting_key = setting_instance.definition.key
|
||||
|
@ -764,7 +766,7 @@ class MachineManager(QObject):
|
|||
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"))
|
||||
extruder_stack.userChanges.setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value"))
|
||||
global_user_container.removeInstance(setting_key)
|
||||
|
||||
# Signal that the global stack has changed
|
||||
|
@ -779,12 +781,23 @@ class MachineManager(QObject):
|
|||
|
||||
def updateDefaultExtruder(self):
|
||||
extruder_items = sorted(self._global_container_stack.extruders.items())
|
||||
old_position = self._default_extruder_position
|
||||
new_default_position = "0"
|
||||
for position, extruder in extruder_items:
|
||||
if extruder.isEnabled:
|
||||
new_default_position = position
|
||||
break
|
||||
self._default_extruder_position = new_default_position
|
||||
if new_default_position != old_position:
|
||||
self._default_extruder_position = new_default_position
|
||||
self.extruderChanged.emit()
|
||||
|
||||
def updateNumberExtrudersEnabled(self):
|
||||
definition_changes_container = self._global_container_stack.definitionChanges
|
||||
extruder_count = 0
|
||||
for position, extruder in self._global_container_stack.extruders.items():
|
||||
if extruder.isEnabled:
|
||||
extruder_count += 1
|
||||
definition_changes_container.setProperty("extruders_enabled_count", "value", extruder_count)
|
||||
|
||||
@pyqtProperty(str, notify = extruderChanged)
|
||||
def defaultExtruderPosition(self):
|
||||
|
@ -795,10 +808,11 @@ class MachineManager(QObject):
|
|||
extruder = self.getExtruder(position)
|
||||
extruder.setEnabled(enabled)
|
||||
self.updateDefaultExtruder()
|
||||
self.updateNumberExtrudersEnabled()
|
||||
if enabled == False:
|
||||
self.correctExtruderSettings()
|
||||
self.extruderChanged.emit()
|
||||
# HACK to update items in SettingExtruder
|
||||
# update items in SettingExtruder
|
||||
ExtruderManager.getInstance().extrudersChanged.emit(self._global_container_stack.getId())
|
||||
|
||||
def _onMachineNameChanged(self):
|
||||
|
|
|
@ -211,6 +211,18 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"extruders_enabled_count":
|
||||
{
|
||||
"label": "Number of Extruders that are enabled",
|
||||
"description": "Number of extruder trains that are enabled; automatically set in software",
|
||||
"default_value": "machine_extruder_count",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "16",
|
||||
"type": "int",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"machine_nozzle_tip_outer_diameter":
|
||||
{
|
||||
"label": "Outer nozzle diameter",
|
||||
|
@ -887,7 +899,7 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true,
|
||||
"settable_globally": true,
|
||||
"enabled": "machine_extruder_count > 1",
|
||||
"enabled": "extruders_enabled_count > 1",
|
||||
"children": {
|
||||
"wall_0_extruder_nr":
|
||||
{
|
||||
|
@ -900,7 +912,7 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true,
|
||||
"settable_globally": true,
|
||||
"enabled": "machine_extruder_count > 1"
|
||||
"enabled": "extruders_enabled_count > 1"
|
||||
},
|
||||
"wall_x_extruder_nr":
|
||||
{
|
||||
|
@ -913,7 +925,7 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true,
|
||||
"settable_globally": true,
|
||||
"enabled": "machine_extruder_count > 1"
|
||||
"enabled": "extruders_enabled_count > 1"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -970,7 +982,7 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true,
|
||||
"settable_globally": true,
|
||||
"enabled": "machine_extruder_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
|
||||
"enabled": "extruders_enabled_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
|
||||
},
|
||||
"roofing_layer_count":
|
||||
{
|
||||
|
@ -995,7 +1007,7 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true,
|
||||
"settable_globally": true,
|
||||
"enabled": "machine_extruder_count > 1"
|
||||
"enabled": "extruders_enabled_count > 1"
|
||||
},
|
||||
"top_bottom_thickness":
|
||||
{
|
||||
|
@ -1465,7 +1477,7 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true,
|
||||
"settable_globally": true,
|
||||
"enabled": "machine_extruder_count > 1"
|
||||
"enabled": "extruders_enabled_count > 1"
|
||||
},
|
||||
"infill_sparse_density":
|
||||
{
|
||||
|
@ -1916,7 +1928,7 @@
|
|||
"minimum_value": "0",
|
||||
"maximum_value_warning": "10.0",
|
||||
"maximum_value": "machine_nozzle_heat_up_speed",
|
||||
"enabled": "material_flow_dependent_temperature or (machine_extruder_count > 1 and material_final_print_temperature != material_print_temperature)",
|
||||
"enabled": "material_flow_dependent_temperature or (extruders_enabled_count > 1 and material_final_print_temperature != material_print_temperature)",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -2179,7 +2191,7 @@
|
|||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "260",
|
||||
"enabled": "machine_extruder_count > 1 and machine_nozzle_temp_enabled",
|
||||
"enabled": "extruders_enabled_count > 1 and machine_nozzle_temp_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -3281,7 +3293,7 @@
|
|||
"description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"enabled": "retraction_hop_enabled and machine_extruder_count > 1",
|
||||
"enabled": "retraction_hop_enabled and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
}
|
||||
|
@ -3459,7 +3471,7 @@
|
|||
"description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"enabled": "(support_enable or support_tree_enable) and machine_extruder_count > 1",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children": {
|
||||
|
@ -3470,7 +3482,7 @@
|
|||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "(support_enable or support_tree_enable) and machine_extruder_count > 1",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -3481,7 +3493,7 @@
|
|||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "(support_enable or support_tree_enable) and machine_extruder_count > 1",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -3492,7 +3504,7 @@
|
|||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "(support_enable or support_tree_enable) and machine_extruder_count > 1",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
|
@ -3504,7 +3516,7 @@
|
|||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"value": "support_interface_extruder_nr",
|
||||
"enabled": "(support_enable or support_tree_enable) and machine_extruder_count > 1",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -3515,7 +3527,7 @@
|
|||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"value": "support_interface_extruder_nr",
|
||||
"enabled": "(support_enable or support_tree_enable) and machine_extruder_count > 1",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
|
@ -4185,7 +4197,7 @@
|
|||
"description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "-1",
|
||||
"enabled": "machine_extruder_count > 1 and resolveOrValue('adhesion_type') != 'none'",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') != 'none'",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -4756,7 +4768,7 @@
|
|||
"label": "Enable Prime Tower",
|
||||
"description": "Print a tower next to the print which serves to prime the material after each nozzle switch.",
|
||||
"type": "bool",
|
||||
"enabled": "machine_extruder_count > 1",
|
||||
"enabled": "extruders_enabled_count > 1",
|
||||
"default_value": false,
|
||||
"resolve": "any(extruderValues('prime_tower_enable'))",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -4904,7 +4916,7 @@
|
|||
"description": "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle.",
|
||||
"type": "bool",
|
||||
"resolve": "any(extruderValues('ooze_shield_enabled'))",
|
||||
"enabled": "machine_extruder_count > 1",
|
||||
"enabled": "extruders_enabled_count > 1",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
|
@ -4997,7 +5009,7 @@
|
|||
"description": "Remove areas where multiple meshes are overlapping with each other. This may be used if merged dual material objects overlap with each other.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"value": "machine_extruder_count > 1",
|
||||
"value": "extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
|
@ -5044,7 +5056,7 @@
|
|||
"one_at_a_time": "One at a Time"
|
||||
},
|
||||
"default_value": "all_at_once",
|
||||
"enabled": "machine_extruder_count == 1",
|
||||
"enabled": "extruders_enabled_count == 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue