diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 73a10b313e..c185432f32 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -1,10 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Dict from UM.Logger import Logger from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel -from cura.Machines.MaterialNode import MaterialNode class GenericMaterialsModel(BaseMaterialsModel): @@ -33,6 +31,7 @@ class GenericMaterialsModel(BaseMaterialsModel): self.setItems([]) return extruder_stack = global_stack.extruders[extruder_position] + exclude_materials = set(global_stack.definition.getMetaDataEntry("exclude_materials", [])) available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) @@ -40,25 +39,12 @@ class GenericMaterialsModel(BaseMaterialsModel): self.setItems([]) return - # Check if it's an Ultimaker printer - printer_manufacturer = global_stack.getMetaDataEntry("manufacturer", "") - is_ultimaker_printer = "ultimaker" in printer_manufacturer.lower() - - # For Ultimaker printers, only show the generic materials that are supported. - if not is_ultimaker_printer: - item_list = self._getGenericProfiles(available_material_dict) - else: - item_list = self._getUltimakerGenericProfiles(available_material_dict) - - # Sort the item list by material name alphabetically - item_list = sorted(item_list, key = lambda d: d["name"].upper()) - - self.setItems(item_list) - - def _getGenericProfiles(self, available_material_dict): item_list = [] for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata + # Skip excluded materials + if metadata["id"] in exclude_materials: + continue # Only add results for generic materials if metadata["brand"].lower() != "generic": continue @@ -73,42 +59,7 @@ class GenericMaterialsModel(BaseMaterialsModel): } item_list.append(item) - return item_list + # Sort the item list by material name alphabetically + item_list = sorted(item_list, key = lambda d: d["name"].upper()) - ## The method filters available materials by name. If material is not defined for Ultimaker printers - # then it will be removed - # \available_material_dict \type{dictionary} - # \return The filtered list - def _getUltimakerGenericProfiles(self, available_material_dict: Dict[str, MaterialNode]): - generic_item_list = [] - ultimaker_item_set = set() - - for root_material_id, container_node in available_material_dict.items(): - metadata = container_node.metadata - - is_ultimaker_brand = False - brand_name = metadata["brand"].lower() - - if brand_name != "generic": - if brand_name == 'ultimaker': - is_ultimaker_brand = True - else: - continue - - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } - if is_ultimaker_brand: - ultimaker_item_set.add(item['material']) - else: - generic_item_list.append(item) - - # If material is not in ultimaker list then remove it - item_list = [material for material in generic_item_list if material['material'] in ultimaker_item_set] - - return item_list + self.setItems(item_list) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 1ca7444d04..a980a1afdf 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -6,7 +6,8 @@ "author": "Ultimaker", "manufacturer": "Ultimaker B.V.", "category": "Ultimaker", - "visible": false + "visible": false, + "exclude_materials": [ "generic_hips", "generic_petg" ] }, "overrides": { "machine_max_feedrate_e": {