nest.assign_object to support ifc2x3

This commit is contained in:
Andrej730
2024-04-10 15:54:04 +05:00
parent ee7cf918ea
commit 48e5d14817
5 changed files with 45 additions and 18 deletions
@@ -25,9 +25,9 @@ import ifcopenshell.util.placement
class TestAssignObject(test.bootstrap.IFC4):
def test_assigning_a_nesting(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSanitaryTerminal")
subelement1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcValve")
subelement2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcValve")
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
subelement1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
subelement2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
rel = ifcopenshell.api.run(
"nest.assign_object", self.file, related_objects=[subelement1, subelement2], relating_object=element
)
@@ -36,32 +36,36 @@ class TestAssignObject(test.bootstrap.IFC4):
assert rel.is_a("IfcRelNests")
def test_doing_nothing_if_the_nesting_is_already_assigned(self):
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSanitaryTerminal")
subelement = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcValve")
element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
subelement = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
ifcopenshell.api.run("nest.assign_object", self.file, related_objects=[subelement], relating_object=element)
total_elements = len([e for e in self.file])
ifcopenshell.api.run("nest.assign_object", self.file, related_objects=[subelement], relating_object=element)
assert len([e for e in self.file]) == total_elements
def test_that_old_nesting_relationships_are_updated_if_they_still_have_elements(self):
element1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSanitaryTerminal")
element2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSanitaryTerminal")
subelement1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcValve")
subelement2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcValve")
element1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
element2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
subelement1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
subelement2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
ifcopenshell.api.run(
"nest.assign_object", self.file, related_objects=[subelement1, subelement2], relating_object=element1
)
rel = subelement1.Nests[0]
rel = subelement1.Decomposes[0] if self.file.schema == "IFC2X3" else subelement1.Nests[0]
assert len(rel.RelatedObjects) == 2
ifcopenshell.api.run("nest.assign_object", self.file, related_objects=[subelement1], relating_object=element2)
assert len(rel.RelatedObjects) == 1
def test_that_old_nesting_relationships_are_purged_if_no_more_elements_are_nested(self):
element1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSanitaryTerminal")
element2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcSanitaryTerminal")
subelement1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcValve")
element1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
element2 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
subelement1 = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTask")
ifcopenshell.api.run("nest.assign_object", self.file, related_objects=[subelement1], relating_object=element1)
rel_id = subelement1.Nests[0].id()
rel_id = (subelement1.Decomposes[0] if self.file.schema == "IFC2X3" else subelement1.Nests[0]).id()
ifcopenshell.api.run("nest.assign_object", self.file, related_objects=[subelement1], relating_object=element2)
with pytest.raises(RuntimeError):
self.file.by_id(rel_id)
class TestAssignObjectIFC2X3(test.bootstrap.IFC2X3, TestAssignObject):
pass
@@ -49,3 +49,6 @@ class TestUnassignObject(test.bootstrap.IFC4):
ifcopenshell.api.run("nest.assign_object", self.file, related_objects=[subelement], relating_object=element)
ifcopenshell.api.run("nest.unassign_object", self.file, related_objects=[subelement])
assert len(self.file.by_type("IfcRelNests")) == 0
class TestUnassignObjectIFC2X3(test.bootstrap.IFC2X3, TestUnassignObject):
pass
@@ -775,6 +775,10 @@ class TestGetNestIFC4(test.bootstrap.IFC4):
assert subject.get_nest(subelement) == element
class TestGetNestIFC2X3(test.bootstrap.IFC2X3, TestGetNestIFC4):
pass
class TestReplaceAttributeIFC4(test.bootstrap.IFC4):
def test_replacing_an_elements_attribute(self):
element = self.file.createIfcWall("foo")