From 2a7fbea9c33e38fa0547eed94bda1b23f8d11fe1 Mon Sep 17 00:00:00 2001 From: Cyril Waechter Date: Thu, 17 Jun 2021 02:31:18 +0200 Subject: [PATCH] Add recipe to extract only spaces (#1521) `ExtractElements` was not allowing to extract only spaces. It also helps to workaround revit-ifc failure in linking spaces. See: https://github.com/Autodesk/revit-ifc/issues/15 --- .../ifcpatch/recipes/ExtractSpaces.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/ifcpatch/ifcpatch/recipes/ExtractSpaces.py diff --git a/src/ifcpatch/ifcpatch/recipes/ExtractSpaces.py b/src/ifcpatch/ifcpatch/recipes/ExtractSpaces.py new file mode 100644 index 0000000000..7c1c95621f --- /dev/null +++ b/src/ifcpatch/ifcpatch/recipes/ExtractSpaces.py @@ -0,0 +1,29 @@ +import ifcopenshell +import ifcopenshell.util.selector + + +class Patcher: + def __init__(self, src, file, logger, args=None): + self.src = src + self.file = file + self.logger = logger + self.args = args + + def patch(self): + self.contained_ins = {} + self.aggregates = {} + self.new = ifcopenshell.file(schema=self.file.wrapped_data.schema) + self.owner_history = None + for owner_history in self.file.by_type("IfcOwnerHistory"): + self.owner_history = self.new.add(owner_history) + break + selector = ifcopenshell.util.selector.Selector() + for space in selector.parse(self.file, ".IfcSpace"): + self.add_element(space) + self.file = self.new + + def add_element(self, element): + self.new.add(element) + for rel_aggregate in element.Decomposes: + self.add_element(rel_aggregate.RelatingObject) + self.new.add(rel_aggregate)