From f5e089e0fd81244943c71fa2b1df4d0be02476d0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 27 Jul 2021 20:46:39 +1000 Subject: [PATCH] Material based surface styles are now supported on import as a style fallback. See #1585. --- src/blenderbim/blenderbim/bim/import_ifc.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 4cf9a37103..542cde68b9 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -54,9 +54,24 @@ class MaterialCreator: if not self.mesh or self.mesh.name in self.parsed_meshes: return self.parsed_meshes.add(self.mesh.name) + self.add_default_material_surface_style(element) if self.parse_representations(element): self.assign_material_slots_to_faces() + def add_default_material_surface_style(self, element): + element_material = ifcopenshell.util.element.get_material(element) + if not element_material: + return + for material in [m for m in self.ifc_importer.file.traverse(element_material) if m.is_a("IfcMaterial")]: + if not material.HasRepresentation: + continue + surface_style = [ + s for s in self.ifc_importer.file.traverse(material.HasRepresentation[0]) if s.is_a("IfcSurfaceStyle") + ] + if surface_style: + self.mesh.materials.append(self.styles[surface_style[0].id()]) + return + def load_existing_materials(self): for material in bpy.data.materials: if material.BIMObjectProperties.ifc_definition_id: @@ -568,9 +583,7 @@ class IfcImporter: ) ) checkpoint = time.time() - self.update_progress( - ((total_created / approx_total_products) * progress_range) + start_progress - ) + self.update_progress(((total_created / approx_total_products) * progress_range) + start_progress) shape = iterator.get() if shape: product = self.file.by_id(shape.guid)