Fix bug where you could add an opening twice to the same element.

This commit is contained in:
Dion Moult
2021-09-21 16:56:28 +10:00
parent a29d691944
commit 04d64de6d0
2 changed files with 34 additions and 0 deletions
@@ -10,6 +10,13 @@ class Usecase:
self.settings[key] = value
def execute(self):
voids_elements = self.settings["opening"].VoidsElements
if voids_elements:
if voids_elements[0].RelatingBuildingElement == self.settings["element"]:
return
self.file.remove(voids_elements[0])
self.file.create_entity(
"IfcRelVoidsElement",
**{
@@ -0,0 +1,27 @@
import test.bootstrap
import ifcopenshell.api
class TestAddOpening(test.bootstrap.IFC4):
def test_adding_an_opening(self):
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=wall)
assert wall.HasOpenings[0].RelatedOpeningElement == opening
def test_adding_an_opening_twice(self):
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=wall)
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=wall)
assert wall.HasOpenings[0].RelatedOpeningElement == opening
assert len(wall.HasOpenings) == 1
def test_adding_an_opening_which_is_already_voiding_another_element(self):
slab = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSlab")
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=slab)
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=wall)
assert not slab.HasOpenings
assert wall.HasOpenings[0].RelatedOpeningElement == opening