From 479b937f81fb354ad4c3d206892cf1d41e002c62 Mon Sep 17 00:00:00 2001 From: Roch Bertucat Date: Thu, 10 Dec 2020 10:37:17 +0100 Subject: [PATCH] Add a way to load a custom IFC Schema and add util methods --- .../bimtester/features/steps/ifcdata.py | 7 +++++++ .../bimtester/features/steps/utils.py | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/ifcbimtester/bimtester/features/steps/ifcdata.py b/src/ifcbimtester/bimtester/features/steps/ifcdata.py index 11c4a02053..a6e69e2bf8 100644 --- a/src/ifcbimtester/bimtester/features/steps/ifcdata.py +++ b/src/ifcbimtester/bimtester/features/steps/ifcdata.py @@ -2,6 +2,13 @@ from behave import step from utils import IfcFile +@step('The IFC schema "{schema}" must be provided') +def step_impl(context, schema): + try: + IfcFile.load_schema(schema) + except: + assert False + @step('The IFC file "{file}" must be provided') def step_impl(context, file): diff --git a/src/ifcbimtester/bimtester/features/steps/utils.py b/src/ifcbimtester/bimtester/features/steps/utils.py index 038b0c4149..3d348ce95f 100644 --- a/src/ifcbimtester/bimtester/features/steps/utils.py +++ b/src/ifcbimtester/bimtester/features/steps/utils.py @@ -1,4 +1,5 @@ import ifcopenshell +import ifcopenshell.express import ifcopenshell.util import ifcopenshell.util.element @@ -10,6 +11,13 @@ class IfcFile(object): @classmethod def load(cls, path=None): cls.file = ifcopenshell.open(path) + if not cls.file: + assert False + + @classmethod + def load_schema(cls, path=None): + schema = ifcopenshell.express.parse(path) + ifcopenshell.register_schema(schema) @classmethod def get(cls): @@ -23,6 +31,17 @@ class IfcFile(object): return cls.get().by_guid(guid) except: assert False, "An element with the ID {} could not be found.".format(guid) + + @classmethod + def by_type(cls, ifc_type): + return cls.get().by_type(ifc_type.strip()) + + @classmethod + def by_types(cls, ifc_types): + elements = [] + for ifc_type in ifc_types.split(","): + elements += cls.by_type(ifc_type.strip()) + return elements def assert_number(number):