Make IfcDiff more forgiving when invalid geometry occurs. See #3755.

This commit is contained in:
Dion Moult
2023-09-14 22:27:46 +10:00
parent 42e683375c
commit dca60b83a9
+14 -13
View File
@@ -190,19 +190,20 @@ class IfcDiff:
shape = iterator.get()
element = ifc.by_id(shape.id)
geometry = shape.geometry
shapes[element.GlobalId] = {
"total_verts": len(geometry.verts),
"sum_verts": sum(geometry.verts),
"min_vert": min(geometry.verts),
"max_vert": max(geometry.verts),
"matrix": tuple(shape.transformation.matrix.data),
"openings": sorted(
[o.RelatedOpeningElement.GlobalId for o in getattr(element, "HasOpenings", []) or []]
),
"projections": sorted(
[o.RelatedFeatureElement.GlobalId for o in getattr(element, "HasProjections", []) or []]
),
}
if geometry.verts:
shapes[element.GlobalId] = {
"total_verts": len(geometry.verts),
"sum_verts": sum(geometry.verts),
"min_vert": min(geometry.verts),
"max_vert": max(geometry.verts),
"matrix": tuple(shape.transformation.matrix.data),
"openings": sorted(
[o.RelatedOpeningElement.GlobalId for o in getattr(element, "HasOpenings", []) or []]
),
"projections": sorted(
[o.RelatedFeatureElement.GlobalId for o in getattr(element, "HasProjections", []) or []]
),
}
if not iterator.next():
break
return shapes