Fix bug where you could add a filling twice or to multiple openings.

This commit is contained in:
Dion Moult
2021-09-21 17:29:28 +10:00
parent 04d64de6d0
commit ef8c82e1c9
2 changed files with 34 additions and 0 deletions
@@ -9,6 +9,13 @@ class Usecase:
self.settings[key] = value
def execute(self):
fills_voids = self.settings["element"].FillsVoids
if fills_voids:
if fills_voids[0].RelatingOpeningElement == self.settings["opening"]:
return
self.file.remove(fills_voids[0])
self.file.create_entity(
"IfcRelFillsElement",
**{
@@ -0,0 +1,27 @@
import test.bootstrap
import ifcopenshell.api
class TestAddFilling(test.bootstrap.IFC4):
def test_adding_a_filling(self):
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
door = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcDoor")
ifcopenshell.api.run("void.add_filling", self.file, opening=opening, element=door)
assert door.FillsVoids[0].RelatingOpeningElement == opening
def test_adding_a_filling_twice(self):
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
door = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcDoor")
ifcopenshell.api.run("void.add_filling", self.file, opening=opening, element=door)
ifcopenshell.api.run("void.add_filling", self.file, opening=opening, element=door)
assert door.FillsVoids[0].RelatingOpeningElement == opening
assert len(opening.HasFillings) == 1
def test_adding_a_filling_which_is_already_filling_another_opening(self):
door = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcDoor")
opening1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
opening2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
ifcopenshell.api.run("void.add_filling", self.file, opening=opening1, element=door)
ifcopenshell.api.run("void.add_filling", self.file, opening=opening2, element=door)
assert not opening1.HasFillings
assert opening2.HasFillings[0].RelatedBuildingElement == door