From 123557939f855cfbb29580e85327cdabca997071 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 20 Nov 2023 16:54:56 +1100 Subject: [PATCH] New ConvertNestToAggregate patch recipe --- .../recipes/ConvertNestToAggregate.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py diff --git a/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py b/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py new file mode 100644 index 0000000000..9e83df8211 --- /dev/null +++ b/src/ifcpatch/ifcpatch/recipes/ConvertNestToAggregate.py @@ -0,0 +1,34 @@ +class Patcher: + def __init__(self, src, file, logger): + """Convert nesting relationships to aggregate relationships + + Some software like Revit won't load nested children elements because + they (incorrectly) don't consider it to be part of the spatial tree. + For example, 12D software will use nesting. + + This patch converts all nest relationships into aggregate + relationships. + + See bug: https://github.com/Autodesk/revit-ifc/issues/706 + + Example: + + .. code:: python + + ifcpatch.execute({"input": model, "recipe": "ConvertNestToAggregate", "arguments": []}) + """ + self.src = src + self.file = file + self.logger = logger + + def patch(self): + for rel in self.file.by_type("IfcRelNests"): + new = self.file.createIfcRelAggregates( + ifcopenshell.guid.new(), + rel.OwnerHistory, + rel.Name, + rel.Description, + rel.RelatingObject, + rel.RelatedObjects, + ) + self.file.remove(rel)