diff --git a/cura/Machines/Models/MaterialsModel.py b/cura/Machines/Models/MaterialsModel.py index 616903062e..5ef5845371 100644 --- a/cura/Machines/Models/MaterialsModel.py +++ b/cura/Machines/Models/MaterialsModel.py @@ -30,7 +30,7 @@ def getAvailableMaterials(extruder_position: Optional[int] = None): variant_name = None if extruder_stack.variant.getId() != "empty_variant": variant_name = extruder_stack.variant.getName() - diameter = extruder_stack.getProperty("material_diameter", "value") + diameter = extruder_stack.approximateMaterialDiameter # Fetch the available materials (ContainerNode) for the current active machine and extruder setup. result_dict = material_manager.getAvailableMaterials(machine_definition_id, variant_name, diameter) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 178cf31e3f..fe1bb6a990 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -179,6 +179,7 @@ class ExtruderManager(QObject): self._selected_object_extruders = [] self.selectedObjectExtrudersChanged.emit() + @pyqtSlot(result = QObject) def getActiveExtruderStack(self) -> Optional["ExtruderStack"]: global_container_stack = Application.getInstance().getGlobalContainerStack() diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 870de62c98..2995aae795 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -3,6 +3,8 @@ from typing import Any, TYPE_CHECKING, Optional +from PyQt5.QtCore import pyqtProperty + from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack @@ -49,6 +51,33 @@ class ExtruderStack(CuraContainerStack): def getLoadingPriority(cls) -> int: return 3 + ## Return the filament diameter that the machine requires. + # + # If the machine has no requirement for the diameter, -1 is returned. + # \return The filament diameter for the printer + @property + def materialDiameter(self) -> float: + containers_to_check = [self.variant, self.definitionChanges, self.definition] + + for container in containers_to_check: + if container is not None: + material_diameter = container.getProperty("material_diameter", "value") + if material_diameter is not None: + return material_diameter + return -1 + + ## Return the approximate filament diameter that the machine requires. + # + # The approximate material diameter is the material diameter rounded to + # the nearest millimetre. + # + # If the machine has no requirement for the diameter, -1 is returned. + # + # \return The approximate filament diameter for the printer + @pyqtProperty(float) + def approximateMaterialDiameter(self) -> float: + return round(float(self.materialDiameter)) + ## Overridden from ContainerStack # # It will perform a few extra checks when trying to get properties. diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 6d18bf615b..ae1f1370ed 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -125,21 +125,6 @@ class GlobalStack(CuraContainerStack): def setNextStack(self, next_stack: ContainerStack) -> None: raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!") - ## Gets the approximate filament diameter that the machine requires. - # - # The approximate material diameter is the material diameter rounded to - # the nearest millimetre. - # - # If the machine has no requirement for the diameter, -1 is returned. - # - # \return The approximate filament diameter for the printer, as a string. - @pyqtProperty(str) - def approximateMaterialDiameter(self) -> str: - material_diameter = self.definition.getProperty("material_diameter", "value") - if material_diameter is None: - return "-1" - return str(round(float(material_diameter))) #Round, then convert back to string. - # protected: # Determine whether or not we should try to get the "resolve" property instead of the diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index 3dc16c5a86..021fcc02e1 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -207,7 +207,7 @@ TabView var old_diameter = Cura.ContainerManager.getContainerProperty(base.containerId, "material_diameter", "value").toString(); var old_approximate_diameter = Cura.ContainerManager.getContainerMetaDataEntry(base.containerId, "approximate_diameter"); var new_approximate_diameter = getApproximateDiameter(value); - if (Cura.MachineManager.filterMaterialsByMachine && new_approximate_diameter != Cura.MachineManager.activeMachine.approximateMaterialDiameter) + if (Cura.MachineManager.filterMaterialsByMachine && new_approximate_diameter != Cura.ExtruderManager.getActiveExtruderStack().approximateMaterialDiameter) { confirmDiameterChangeDialog.old_diameter_value = old_diameter; confirmDiameterChangeDialog.new_diameter_value = value;