diff --git a/src/ifcbimtester/features/steps/geometric_detail.py b/src/ifcbimtester/features/steps/geometric_detail.py new file mode 100644 index 0000000000..0fbbe4e8fe --- /dev/null +++ b/src/ifcbimtester/features/steps/geometric_detail.py @@ -0,0 +1,27 @@ +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 diff --git a/src/ifcbimtester/features/template.html b/src/ifcbimtester/features/template.html index 927180e89f..66a2ebb0ba 100644 --- a/src/ifcbimtester/features/template.html +++ b/src/ifcbimtester/features/template.html @@ -57,7 +57,9 @@ {{time}}s {{^is_success}}

- {{error_message}} + {{#error_message}} + {{.}}
+ {{/error_message}}

{{/is_success}}