From 67808b8384e1a9598908fee2b7ccac816b6f51bd Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 9 Nov 2022 18:37:04 +1100 Subject: [PATCH] Fix issue where sometimes world coordinate system would trigger the georeferencing distance threshold --- src/blenderbim/blenderbim/bim/import_ifc.py | 25 +++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index b882938e5e..05657a1e07 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -112,7 +112,7 @@ class MaterialCreator: def parse_representation(self, representation): has_parsed = False - representation_items = self.resolve_all_representation_items(representation) + representation_items = self.resolve_all_stylable_representation_items(representation) for item in representation_items: if self.parse_representation_item(item): has_parsed = True @@ -153,7 +153,7 @@ class MaterialCreator: ] self.mesh.polygons.foreach_set("material_index", material_index) - def resolve_all_representation_items(self, representation): + def resolve_all_stylable_representation_items(self, representation): items = [] for item in representation.Items: if item.is_a("IfcMappedItem"): @@ -528,14 +528,21 @@ class IfcImporter: def does_element_likely_have_geometry_far_away(self, element): for representation in element.Representation.Representations: - for subelement in self.file.traverse(representation): - if subelement.is_a("IfcCartesianPointList3D"): - for point in subelement.CoordList: - if len(point) == 3 and self.is_point_far_away(point, is_meters=False): + items = [] + for item in representation.Items: + if item.is_a("IfcMappedItem"): + items.extend(item.MappingSource.MappedRepresentation.Items) + else: + items.append(item) + for item in items: + for subelement in self.file.traverse(item): + if subelement.is_a("IfcCartesianPointList3D"): + for point in subelement.CoordList: + if len(point) == 3 and self.is_point_far_away(point, is_meters=False): + return True + if subelement.is_a("IfcCartesianPoint"): + if len(subelement.Coordinates) == 3 and self.is_point_far_away(subelement, is_meters=False): return True - if subelement.is_a("IfcCartesianPoint"): - if len(subelement.Coordinates) == 3 and self.is_point_far_away(subelement, is_meters=False): - return True def apply_blender_offset_to_matrix_world(self, obj, matrix): props = bpy.context.scene.BIMGeoreferenceProperties