Fix #5265. Accommodate invalid material sets.

This commit is contained in:
Dion Moult
2024-09-01 07:53:42 +10:00
parent ec21574be5
commit b476cb825c
2 changed files with 4 additions and 4 deletions
@@ -1712,7 +1712,7 @@ class LoadLinkedProject(bpy.types.Operator):
mesh.polygons.foreach_set("loop_total", loop_total) mesh.polygons.foreach_set("loop_total", loop_total)
mesh.polygons.foreach_set("use_smooth", [0] * total_faces) mesh.polygons.foreach_set("use_smooth", [0] * total_faces)
if material_ids.size > 0: if material_ids.size > 0 and len(mesh.polygons) == len(material_ids):
mesh.polygons.foreach_set("material_index", material_ids) mesh.polygons.foreach_set("material_index", material_ids)
mesh.update() mesh.update()
@@ -136,21 +136,21 @@ class Patcher:
if material.is_a("IfcMaterial"): if material.is_a("IfcMaterial"):
materials = [] materials = []
elif material.is_a("IfcMaterialLayerSet"): elif material.is_a("IfcMaterialLayerSet"):
for idx, item in enumerate(material.MaterialLayers): for idx, item in enumerate(material.MaterialLayers or []):
material = item.Material material = item.Material
properties.append([i, "IFC Material", f"Layer {idx + 1} Name", getattr(item, "Name", None)]) properties.append([i, "IFC Material", f"Layer {idx + 1} Name", getattr(item, "Name", None)])
properties.append([i, "IFC Material", f"Layer {idx + 1} Material", material.Name]) properties.append([i, "IFC Material", f"Layer {idx + 1} Material", material.Name])
if category := getattr(material, "Category", None): if category := getattr(material, "Category", None):
properties.append([i, "IFC Material", f"Layer {idx + 1} Category", category]) properties.append([i, "IFC Material", f"Layer {idx + 1} Category", category])
elif material.is_a("IfcMaterialProfileSet"): elif material.is_a("IfcMaterialProfileSet"):
for idx, item in enumerate(material.MaterialProfiles): for idx, item in enumerate(material.MaterialProfiles or []):
material = item.Material material = item.Material
properties.append([i, "IFC Material", f"Profile {idx + 1} Name", item.Name]) properties.append([i, "IFC Material", f"Profile {idx + 1} Name", item.Name])
properties.append([i, "IFC Material", f"Profile {idx + 1} Material", material.Name]) properties.append([i, "IFC Material", f"Profile {idx + 1} Material", material.Name])
if category := getattr(material, "Category", None): if category := getattr(material, "Category", None):
properties.append([i, "IFC Material", f"Profile {idx + 1} Category", category]) properties.append([i, "IFC Material", f"Profile {idx + 1} Category", category])
elif material.is_a("IfcMaterialConstituentSet"): elif material.is_a("IfcMaterialConstituentSet"):
for idx, item in enumerate(material.MaterialConstituents): for idx, item in enumerate(material.MaterialConstituents or []):
material = item.Material material = item.Material
properties.append([i, "IFC Material", f"Constituent {idx + 1} Name", item.Name]) properties.append([i, "IFC Material", f"Constituent {idx + 1} Name", item.Name])
properties.append([i, "IFC Material", f"Constituent {idx + 1} Material", material.Name]) properties.append([i, "IFC Material", f"Constituent {idx + 1} Material", material.Name])