From 7b98e48b9cb27a2a921f07f69b0a4077f3daa2e8 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 14 Jun 2020 19:03:20 +1000 Subject: [PATCH] Prevent adding a crazy number of material slots, especially in messy IFCs coming from Revit --- src/ifcblenderexport/blenderbim/bim/import_ifc.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ifcblenderexport/blenderbim/bim/import_ifc.py b/src/ifcblenderexport/blenderbim/bim/import_ifc.py index 43d2ba74bf..58fbf026f0 100644 --- a/src/ifcblenderexport/blenderbim/bim/import_ifc.py +++ b/src/ifcblenderexport/blenderbim/bim/import_ifc.py @@ -31,10 +31,12 @@ class MaterialCreator(): def __init__(self, ifc_import_settings): self.mesh = None self.materials = {} + self.current_object_materials = [] self.parsed_meshes = [] self.ifc_import_settings = ifc_import_settings def create(self, element, obj, mesh): + self.current_object_materials = [] self.obj = obj self.mesh = mesh if (hasattr(element, 'Representation') and not element.Representation) \ @@ -76,7 +78,10 @@ class MaterialCreator(): material_name = self.get_material_name(styled_item) - if material_name not in self.materials: + if material_name in self.current_object_materials: + return True + + if material_name not in self.materials.keys(): material = bpy.data.materials.get(material_name) if material: self.materials[material_name] = material @@ -214,6 +219,7 @@ class MaterialCreator(): def assign_material_to_mesh(self, material, is_styled_item=False): self.mesh.materials.append(material) + self.current_object_materials.append(material.name) if is_styled_item: index = len(self.obj.material_slots) - 1 self.obj.material_slots[index].link = 'OBJECT'