From 0662b0c5b61dc4310c9bb372fa12811bb66ff9ad Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 30 Oct 2024 15:45:49 +0500 Subject: [PATCH] Optimize updating representations adding/removing openings No need to update all possible elements from decomposition because openings affect only related objects from IfcRelAggregate. For example, see #5639. --- src/bonsai/bonsai/bim/module/void/operator.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/void/operator.py b/src/bonsai/bonsai/bim/module/void/operator.py index 6d243329a4..fc4d78e7a8 100644 --- a/src/bonsai/bonsai/bim/module/void/operator.py +++ b/src/bonsai/bonsai/bim/module/void/operator.py @@ -115,8 +115,7 @@ class AddOpening(bpy.types.Operator, tool.Ifc.Operator): bonsai.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj2) voided_objs = [obj1] - # TODO: should we use get_parts instead? - for subelement in ifcopenshell.util.element.get_decomposition(element1): + for subelement in tool.Aggregate.get_parts_recursively(voided_element): subobj = tool.Ifc.get_object(subelement) if subobj: voided_objs.append(subobj) @@ -180,8 +179,8 @@ class RemoveOpening(bpy.types.Operator, tool.Ifc.Operator): ifcopenshell.api.run("void.remove_opening", tool.Ifc.get(), opening=opening) - decomposed_building_elements = set([element]) - decomposed_building_elements.update(ifcopenshell.util.element.get_decomposition(element)) + decomposed_building_elements = {element} + decomposed_building_elements.update(tool.Aggregate.get_parts_recursively(element)) for building_element in decomposed_building_elements: building_obj = tool.Ifc.get_object(building_element)