diff --git a/src/blenderbim/blenderbim/core/root.py b/src/blenderbim/blenderbim/core/root.py index bb3ede124c..67e1ebe856 100644 --- a/src/blenderbim/blenderbim/core/root.py +++ b/src/blenderbim/blenderbim/core/root.py @@ -38,7 +38,7 @@ def copy_class(ifc, collector, geometry, root, obj=None): ) collector.assign(obj) if root.is_opening_element(element): - root.add_dynamic_opening_voids(element, obj) + root.add_tracked_opening(obj) def assign_class( diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 003385e2dc..b12e935916 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -444,7 +444,7 @@ class Resource: @interface class Root: - def add_dynamic_opening_voids(cls, element, obj): pass + def add_tracked_opening(cls, obj): pass def does_type_have_representations(cls, element): pass def get_element_type(cls, element): pass def get_object_name(cls, obj): pass diff --git a/src/blenderbim/blenderbim/tool/root.py b/src/blenderbim/blenderbim/tool/root.py index cf1fbecb20..34faeb540f 100644 --- a/src/blenderbim/blenderbim/tool/root.py +++ b/src/blenderbim/blenderbim/tool/root.py @@ -26,19 +26,9 @@ from mathutils import Vector class Root(blenderbim.core.tool.Root): @classmethod - def add_dynamic_opening_voids(cls, element, obj): - for rel in element.VoidsElements: - building_obj = tool.Ifc.get_object(rel.RelatingBuildingElement) - try: - modifier = next(m for m in obj.modifiers if m.type == "BOOLEAN" and m.object == obj) - except StopIteration: - modifier = building_obj.modifiers.new("IfcOpeningElement", "BOOLEAN") - modifier.object = obj - finally: - modifier.operation = "DIFFERENCE" - modifier.solver = "EXACT" - modifier.use_self = True - modifier.operand_type = "OBJECT" + def add_tracked_opening(cls, obj): + new = bpy.context.scene.BIMModelProperties.openings.add() + new.obj = obj @classmethod def does_type_have_representations(cls, element): diff --git a/src/blenderbim/test/core/test_root.py b/src/blenderbim/test/core/test_root.py index 1e37e1d926..f2f35f5a65 100644 --- a/src/blenderbim/test/core/test_root.py +++ b/src/blenderbim/test/core/test_root.py @@ -86,7 +86,7 @@ class TestCopyClass: root.link_object_data("type_obj", "obj").should_be_called() collector.assign("obj").should_be_called() root.is_opening_element("element").should_be_called().will_return(True) - root.add_dynamic_opening_voids("element", "obj").should_be_called() + root.add_tracked_opening("obj").should_be_called() subject.copy_class(ifc, collector, geometry, root, obj="obj") diff --git a/src/blenderbim/test/tool/test_root.py b/src/blenderbim/test/tool/test_root.py index ef71a0effa..abde5e5a17 100644 --- a/src/blenderbim/test/tool/test_root.py +++ b/src/blenderbim/test/tool/test_root.py @@ -29,30 +29,12 @@ class TestImplementsTool(NewFile): assert isinstance(subject(), blenderbim.core.tool.Root) -class TestAddDynamicOpeningVoids(NewFile): +class TestAddTrackedOpening(NewFile): def test_run(self): - ifc = ifcopenshell.file() - tool.Ifc.set(ifc) - - obj = bpy.data.objects.new("Object", bpy.data.meshes.new("Mesh")) - element = ifc.createIfcOpeningElement() - tool.Ifc.link(element, obj) - - wall_obj = bpy.data.objects.new("Object", bpy.data.meshes.new("Mesh")) - wall_element = ifc.createIfcOpeningElement() - tool.Ifc.link(wall_element, wall_obj) - - ifcopenshell.api.run("void.add_opening", ifc, opening=element, element=wall_element) - - subject.add_dynamic_opening_voids(element, obj) - - modifier = wall_obj.modifiers[0] - assert modifier.type == "BOOLEAN" - assert modifier.name == "IfcOpeningElement" - assert modifier.operation == "DIFFERENCE" - assert modifier.object == obj - assert modifier.solver == "EXACT" - assert modifier.use_self is True + obj = bpy.data.objects.new("Object", None) + subject.add_tracked_opening(obj) + props = bpy.context.scene.BIMModelProperties + assert props.openings[0].obj == obj class TestDoesTypeHaveRepresentations(NewFile):