Fix bug where a material wouldn't get assigned for multiple mapped representations

This commit is contained in:
Dion Moult
2020-11-20 23:31:52 +11:00
parent 2bd44e2fe8
commit 280466df53
@@ -51,12 +51,13 @@ class MaterialCreator:
hasattr(element, "RepresentationMaps") and not element.RepresentationMaps hasattr(element, "RepresentationMaps") and not element.RepresentationMaps
): ):
return return
if self.mesh and self.mesh.name in self.parsed_meshes:
return
self.parse_material(element) self.parse_material(element)
if self.mesh: if not self.mesh:
self.parsed_meshes.append(self.mesh.name) return
if self.mesh and self.parse_representations(element): if self.mesh.name in self.parsed_meshes:
return
self.parsed_meshes.append(self.mesh.name)
if self.parse_representations(element):
self.assign_material_slots_to_faces(obj, self.mesh) self.assign_material_slots_to_faces(obj, self.mesh)
def parse_representations(self, element): def parse_representations(self, element):
@@ -927,7 +928,6 @@ class IfcImporter:
self.ifc_import_settings.logger.info("Creating object %s", element) self.ifc_import_settings.logger.info("Creating object %s", element)
is_fresh_mesh = False
if shape: if shape:
# TODO: make names more meaningful # TODO: make names more meaningful
mesh_name = f"mesh-{shape.geometry.id}" mesh_name = f"mesh-{shape.geometry.id}"
@@ -938,7 +938,6 @@ class IfcImporter:
if mesh is None: if mesh is None:
mesh = self.create_mesh(element, shape) mesh = self.create_mesh(element, shape)
self.meshes[mesh_name] = mesh self.meshes[mesh_name] = mesh
is_fresh_mesh = True
else: else:
mesh = None mesh = None
@@ -951,8 +950,7 @@ class IfcImporter:
) )
mat.transpose() mat.transpose()
obj.matrix_world = mat obj.matrix_world = mat
if is_fresh_mesh: self.material_creator.create(element, obj, mesh)
self.material_creator.create(element, obj, mesh)
elif hasattr(element, "ObjectPlacement"): elif hasattr(element, "ObjectPlacement"):
obj.matrix_world = self.get_element_matrix(element) obj.matrix_world = self.get_element_matrix(element)