mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Switch to an appropriate material when changing the material diameter
If we don't do this, the material will always override the setting in Machine Settings
This commit is contained in:
parent
ddc94e9bec
commit
8c2f556616
2 changed files with 90 additions and 1 deletions
|
@ -280,3 +280,86 @@ class MachineSettingsAction(MachineAction):
|
||||||
self._global_container_stack.material = ContainerRegistry.getInstance().getEmptyInstanceContainer()
|
self._global_container_stack.material = ContainerRegistry.getInstance().getEmptyInstanceContainer()
|
||||||
|
|
||||||
Application.getInstance().globalContainerStackChanged.emit()
|
Application.getInstance().globalContainerStackChanged.emit()
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def updateMaterialForDiameter(self):
|
||||||
|
# Updates the material container to a material that matches the material diameter set for the printer
|
||||||
|
if not self._global_container_stack:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not self._global_container_stack.getMetaDataEntry("has_materials", False):
|
||||||
|
return
|
||||||
|
|
||||||
|
machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value")
|
||||||
|
if machine_extruder_count > 1:
|
||||||
|
material = ExtruderManager.getInstance().getActiveExtruderStack().material
|
||||||
|
else:
|
||||||
|
material = self._global_container_stack.material
|
||||||
|
material_diameter = material.getProperty("material_diameter", "value")
|
||||||
|
if not material_diameter: # in case of "empty" material
|
||||||
|
material_diameter = 0
|
||||||
|
material_approximate_diameter = str(round(material_diameter))
|
||||||
|
|
||||||
|
definition_changes = self._global_container_stack.definitionChanges
|
||||||
|
machine_diameter = definition_changes.getProperty("material_diameter", "value")
|
||||||
|
if not machine_diameter:
|
||||||
|
machine_diameter = self._global_container_stack.definition.getProperty("material_diameter", "value")
|
||||||
|
machine_approximate_diameter = str(round(machine_diameter))
|
||||||
|
|
||||||
|
if material_approximate_diameter != machine_approximate_diameter:
|
||||||
|
Logger.log("i", "The the currently active material(s) do not match the diameter set for the printer. Finding alternatives.")
|
||||||
|
|
||||||
|
if machine_extruder_count > 1:
|
||||||
|
stacks = ExtruderManager.getInstance().getExtruderStacks()
|
||||||
|
else:
|
||||||
|
stacks = [self._global_container_stack]
|
||||||
|
|
||||||
|
if self._global_container_stack.getMetaDataEntry("has_machine_materials", False):
|
||||||
|
materials_definition = self._global_container_stack.definition.getId()
|
||||||
|
has_material_variants = self._global_container_stack.getMetaDataEntry("has_variants", False)
|
||||||
|
else:
|
||||||
|
materials_definition = "fdmprinter"
|
||||||
|
has_material_variants = False
|
||||||
|
|
||||||
|
for stack in stacks:
|
||||||
|
old_material = stack.material
|
||||||
|
search_criteria = {
|
||||||
|
"type": "material",
|
||||||
|
"approximate_diameter": machine_approximate_diameter,
|
||||||
|
"material": old_material.getMetaDataEntry("material", "value"),
|
||||||
|
"supplier": old_material.getMetaDataEntry("supplier", "value"),
|
||||||
|
"color_name": old_material.getMetaDataEntry("color_name", "value"),
|
||||||
|
"definition": materials_definition
|
||||||
|
}
|
||||||
|
if has_material_variants:
|
||||||
|
search_criteria["variant"] = stack.variant.getId()
|
||||||
|
|
||||||
|
if old_material.getId() == "empty":
|
||||||
|
search_criteria.pop("material", None)
|
||||||
|
search_criteria.pop("supplier", None)
|
||||||
|
search_criteria.pop("definition", None)
|
||||||
|
search_criteria["id"] = stack.getMetaDataEntry("preferred_material")
|
||||||
|
|
||||||
|
materials = self._container_registry.findInstanceContainers(**search_criteria)
|
||||||
|
if not materials:
|
||||||
|
# Same material with new diameter is not found, search for generic version of the same material type
|
||||||
|
search_criteria.pop("supplier", None)
|
||||||
|
search_criteria["color_name"] = "Generic"
|
||||||
|
materials = self._container_registry.findInstanceContainers(**search_criteria)
|
||||||
|
if not materials:
|
||||||
|
# Generic material with new diameter is not found, search for preferred material
|
||||||
|
search_criteria.pop("color_name", None)
|
||||||
|
search_criteria.pop("material", None)
|
||||||
|
search_criteria["id"] = stack.getMetaDataEntry("preferred_material")
|
||||||
|
materials = self._container_registry.findInstanceContainers(**search_criteria)
|
||||||
|
if not materials:
|
||||||
|
# Preferrd material with new diameter is not found, search for any material
|
||||||
|
search_criteria.pop("id", None)
|
||||||
|
materials = self._container_registry.findInstanceContainers(**search_criteria)
|
||||||
|
if not materials:
|
||||||
|
# Just use empty material as a final fallback
|
||||||
|
materials = [ContainerRegistry.getInstance().getEmptyInstanceContainer()]
|
||||||
|
|
||||||
|
Logger.log("i", "Selecting new material: %s" % materials[0].getId())
|
||||||
|
|
||||||
|
stack.material = materials[0]
|
||||||
|
|
|
@ -320,7 +320,8 @@ Cura.MachineAction
|
||||||
sourceComponent: numericTextFieldWithUnit
|
sourceComponent: numericTextFieldWithUnit
|
||||||
property string settingKey: "material_diameter"
|
property string settingKey: "material_diameter"
|
||||||
property string unit: catalog.i18nc("@label", "mm")
|
property string unit: catalog.i18nc("@label", "mm")
|
||||||
property string tooltip: catalog.i18nc("@tooltip", "The nominal diameter of filament supported by the printer.")
|
property string tooltip: catalog.i18nc("@tooltip", "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile.")
|
||||||
|
property string afterOnEditingFinished: "manager.updateMaterialForDiameter()"
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
@ -578,6 +579,7 @@ Cura.MachineAction
|
||||||
|
|
||||||
property bool _isExtruderSetting: (typeof(isExtruderSetting) === 'undefined') ? false: isExtruderSetting
|
property bool _isExtruderSetting: (typeof(isExtruderSetting) === 'undefined') ? false: isExtruderSetting
|
||||||
property bool _allowNegative: (typeof(allowNegative) === 'undefined') ? false : allowNegative
|
property bool _allowNegative: (typeof(allowNegative) === 'undefined') ? false : allowNegative
|
||||||
|
property string _afterOnEditingFinished: (typeof(afterOnEditingFinished) === 'undefined') ? "": afterOnEditingFinished
|
||||||
property bool _forceUpdateOnChange: (typeof(forceUpdateOnChange) === 'undefined') ? false: forceUpdateOnChange
|
property bool _forceUpdateOnChange: (typeof(forceUpdateOnChange) === 'undefined') ? false: forceUpdateOnChange
|
||||||
property string _tooltip: (typeof(tooltip) === 'undefined') ? propertyProvider.properties.description : tooltip
|
property string _tooltip: (typeof(tooltip) === 'undefined') ? propertyProvider.properties.description : tooltip
|
||||||
|
|
||||||
|
@ -620,6 +622,10 @@ Cura.MachineAction
|
||||||
ExtruderManager.setActiveExtruderIndex(extruderIndex)
|
ExtruderManager.setActiveExtruderIndex(extruderIndex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(_afterOnEditingFinished != "")
|
||||||
|
{
|
||||||
|
eval(_afterOnEditingFinished);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue