diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 746c70099b6..d21480b11bf 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -244,7 +244,13 @@ def createExtruderTrain(self, extruder_definition: DefinitionContainer, machine_ material = materials[0] preferred_material_id = machine_definition.getMetaDataEntry("preferred_material") if preferred_material_id: - search_criteria = { "type": "material", "id": preferred_material_id} + global_stack = ContainerRegistry.getInstance().findContainerStacks(id = machine_id) + if global_stack: + approximate_material_diameter = round(global_stack[0].getProperty("material_diameter", "value")) + else: + approximate_material_diameter = round(machine_definition.getProperty("material_diameter", "value")) + + search_criteria = { "type": "material", "id": preferred_material_id, "approximate_diameter": approximate_material_diameter} if machine_definition.getMetaDataEntry("has_machine_materials"): search_criteria["definition"] = machine_definition_id diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 638b475094e..d41f5fd84f7 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -332,7 +332,7 @@ def addMachine(self, name: str, definition_id: str) -> None: container_registry.addContainer(new_global_stack) variant_instance_container = self._updateVariantContainer(definition) - material_instance_container = self._updateMaterialContainer(definition, variant_instance_container) + material_instance_container = self._updateMaterialContainer(definition, new_global_stack, variant_instance_container) quality_instance_container = self._updateQualityContainer(definition, variant_instance_container, material_instance_container) current_settings_instance_container = InstanceContainer(name + "_current_settings") @@ -760,7 +760,7 @@ def setActiveVariant(self, variant_id): if old_material: preferred_material_name = old_material.getName() - self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), containers[0], preferred_material_name).id) + self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), self._global_container_stack, containers[0], preferred_material_name).id) else: Logger.log("w", "While trying to set the active variant, no variant was found to replace.") @@ -1110,11 +1110,12 @@ def _updateVariantContainer(self, definition): return self._empty_variant_container - def _updateMaterialContainer(self, definition, variant_container = None, preferred_material_name = None): + def _updateMaterialContainer(self, stack, definition, variant_container = None, preferred_material_name = None): if not definition.getMetaDataEntry("has_materials"): return self._empty_material_container - search_criteria = { "type": "material" } + approximate_material_diameter = round(stack.getProperty("material_diameter", "value")) + search_criteria = { "type": "material", "approximate_diameter": approximate_material_diameter } if definition.getMetaDataEntry("has_machine_materials"): search_criteria["definition"] = self.getQualityDefinitionId(definition) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7dc565ce260..fcf6d996883 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -118,6 +118,7 @@ def serialize(self): metadata.pop("variant", "") metadata.pop("type", "") metadata.pop("base_file", "") + metadata.pop("approximate_diameter", "") ## Begin Name Block builder.start("name") @@ -437,6 +438,7 @@ def deserialize(self, serialized): Logger.log("d", "Unsupported material setting %s", key) self._cached_values = global_setting_values + meta_data["approximate_diameter"] = round(diameter) meta_data["compatible"] = global_compatibility self.setMetaData(meta_data) self._dirty = False diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index ab38de97aa0..cb1a4cf644b 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -15,6 +15,15 @@ Menu property int extruderIndex: 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 + UM.SettingPropertyProvider + { + id: materialDiameterProvider + + containerStackId: Cura.MachineManager.activeMachineId + key: "material_diameter" + watchedProperties: [ "value" ] + } + MenuItem { id: automaticMaterial @@ -141,7 +150,7 @@ Menu function materialFilter() { - var result = { "type": "material" }; + var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value) }; if(Cura.MachineManager.filterMaterialsByMachine) { result.definition = Cura.MachineManager.activeQualityDefinitionId; diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 03bf9f5aa18..08cb6d4d138 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -18,7 +18,7 @@ UM.ManagementPage { filter: { - var result = { "type": "material" } + var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value) } if(Cura.MachineManager.filterMaterialsByMachine) { result.definition = Cura.MachineManager.activeQualityDefinitionId; @@ -327,6 +327,15 @@ UM.ManagementPage id: messageDialog } + UM.SettingPropertyProvider + { + id: materialDiameterProvider + + containerStackId: Cura.MachineManager.activeMachineId + key: "material_diameter" + watchedProperties: [ "value" ] + } + UM.I18nCatalog { id: catalog; name: "cura"; } SystemPalette { id: palette } }