diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 3d29b71a8e..c669e84f5e 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -115,6 +115,16 @@ class BaseMaterialsModel(ListModel): def _update(self): self._favorite_ids = set(Preferences.getInstance().getValue("cura/favorite_materials").split(";")) + # Update the available materials (ContainerNode) for the current active machine and extruder setup. + global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() + extruder_stack = global_stack.extruders[str(self._extruder_position)] + nozzle_name = None + if extruder_stack.variant.getId() != "empty_variant": + nozzle_name = extruder_stack.variant.getName() + materials = ContainerTree.getInstance().machines[global_stack.definition.getId()].variants[nozzle_name].materials + compatible_material_diameter = str(round(extruder_stack.getCompatibleMaterialDiameter())) + self._available_materials = {key: material for key, material in materials.items() if material.container.getMetaDataEntry("approximate_diameter") == compatible_material_diameter} + ## This method is used by all material models in the beginning of the # _update() method in order to prevent errors. It's the same in all models # so it's placed here for easy access. @@ -126,16 +136,7 @@ class BaseMaterialsModel(ListModel): extruder_position = str(self._extruder_position) if extruder_position not in global_stack.extruders: return False - extruder_stack = global_stack.extruders[extruder_position] - nozzle_name = None - if extruder_stack.variant.getId() != "empty_variant": - nozzle_name = extruder_stack.variant.getName() - - # Update the available materials (ContainerNode) for the current active machine and extruder setup. - materials = ContainerTree.getInstance().machines[global_stack.definition.getId()].variants[nozzle_name].materials - compatible_material_diameter = str(round(extruder_stack.getCompatibleMaterialDiameter())) - self._available_materials = {key: material for key, material in materials.items() if material.container.getMetaDataEntry("approximate_diameter") == compatible_material_diameter} return True ## This is another convenience function which is shared by all material diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 91b90b215f..255ef1dc0a 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -19,9 +19,9 @@ class FavoriteMaterialsModel(BaseMaterialsModel): self._update() def _update(self): - super()._update() if not self._canUpdate(): return + super()._update() item_list = [] diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index a6534f0e9d..2542a6412a 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -10,9 +10,9 @@ class GenericMaterialsModel(BaseMaterialsModel): self._update() def _update(self): - super()._update() if not self._canUpdate(): return + super()._update() item_list = [] diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py index 3af67e37d0..dea6982f03 100644 --- a/cura/Machines/Models/MaterialBrandsModel.py +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -27,9 +27,9 @@ class MaterialBrandsModel(BaseMaterialsModel): self._update() def _update(self): - super()._update() if not self._canUpdate(): return + super()._update() brand_item_list = [] brand_group_dict = {}