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() shape = iterator.get()
element = ifc.by_id(shape.id) element = ifc.by_id(shape.id)
geometry = shape.geometry geometry = shape.geometry
shapes[element.GlobalId] = { if geometry.verts:
"total_verts": len(geometry.verts), shapes[element.GlobalId] = {
"sum_verts": sum(geometry.verts), "total_verts": len(geometry.verts),
"min_vert": min(geometry.verts), "sum_verts": sum(geometry.verts),
"max_vert": max(geometry.verts), "min_vert": min(geometry.verts),
"matrix": tuple(shape.transformation.matrix.data), "max_vert": max(geometry.verts),
"openings": sorted( "matrix": tuple(shape.transformation.matrix.data),
[o.RelatedOpeningElement.GlobalId for o in getattr(element, "HasOpenings", []) or []] "openings": sorted(
), [o.RelatedOpeningElement.GlobalId for o in getattr(element, "HasOpenings", []) or []]
"projections": sorted( ),
[o.RelatedFeatureElement.GlobalId for o in getattr(element, "HasProjections", []) or []] "projections": sorted(
), [o.RelatedFeatureElement.GlobalId for o in getattr(element, "HasProjections", []) or []]
} ),
}
if not iterator.next(): if not iterator.next():
break break
return shapes return shapes