mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-10-02 04:59:52 +00:00
28 lines
1.0 KiB
Python
28 lines
1.0 KiB
Python
from behave import step
|
|
from utils import IfcFile
|
|
from utils import IfcFile, assert_attribute
|
|
|
|
@step('All elements must be under {number} polygons')
|
|
def step_impl(context, number):
|
|
number = int(number)
|
|
errors = []
|
|
for element in IfcFile.get().by_type('IfcElement'):
|
|
if not element.Representation:
|
|
continue
|
|
total_polygons = 0
|
|
tree = IfcFile.get().traverse(element.Representation)
|
|
for e in tree:
|
|
if e.is_a('IfcFace'):
|
|
total_polygons += 1
|
|
elif e.is_a('IfcPolygonalFaceSet'):
|
|
total_polygons += len(e.Faces)
|
|
elif e.is_a('IfcTriangulatedFaceSet'):
|
|
total_polygons += len(e.CoordIndex)
|
|
if total_polygons > number:
|
|
errors.append((total_polygons, element))
|
|
if errors:
|
|
message = 'The following {} elements are over 500 polygons:\n'.format(len(errors))
|
|
for error in errors:
|
|
message += 'Polygons: {} - {}\n'.format(error[0], error[1])
|
|
assert False, message
|