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:
Jack Ha 2018-03-05 14:01:39 +01:00
parent b0801d40e3
commit 37d02da1f1
3 changed files with 54 additions and 26 deletions

View file

@ -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

View file

@ -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
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):

View file

@ -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