mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 01:50:01 +00:00
Elements with filled openings don't have their openings copied, as it depends on the fill
This commit is contained in:
@@ -72,16 +72,18 @@ class Usecase:
|
|||||||
continue
|
continue
|
||||||
elif inverse.is_a("IfcRelVoidsElement") and inverse.RelatingBuildingElement == from_element:
|
elif inverse.is_a("IfcRelVoidsElement") and inverse.RelatingBuildingElement == from_element:
|
||||||
opening = inverse.RelatedOpeningElement
|
opening = inverse.RelatedOpeningElement
|
||||||
new_opening = ifcopenshell.api.run("root.copy_class", self.file, product=opening)
|
# We don't copy filled openings, since there is no guarantee the filling is also copied
|
||||||
new_opening.VoidsElements[0].RelatingBuildingElement = to_element
|
if not opening.HasFillings:
|
||||||
if new_opening.ObjectPlacement and new_opening.ObjectPlacement.is_a("IfcLocalPlacement"):
|
new_opening = ifcopenshell.api.run("root.copy_class", self.file, product=opening)
|
||||||
if to_element.ObjectPlacement:
|
new_opening.VoidsElements[0].RelatingBuildingElement = to_element
|
||||||
new_opening.ObjectPlacement.PlacementRelTo = to_element.ObjectPlacement
|
if new_opening.ObjectPlacement and new_opening.ObjectPlacement.is_a("IfcLocalPlacement"):
|
||||||
# For now, we do copy opening representations
|
if to_element.ObjectPlacement:
|
||||||
if opening.Representation:
|
new_opening.ObjectPlacement.PlacementRelTo = to_element.ObjectPlacement
|
||||||
new_opening.Representation = ifcopenshell.util.element.copy_deep(
|
# For now, we do copy opening representations
|
||||||
self.file, opening.Representation, exclude=["IfcGeometricRepresentationContext"]
|
if opening.Representation:
|
||||||
)
|
new_opening.Representation = ifcopenshell.util.element.copy_deep(
|
||||||
|
self.file, opening.Representation, exclude=["IfcGeometricRepresentationContext"]
|
||||||
|
)
|
||||||
elif inverse.is_a("IfcRelFillsElement"):
|
elif inverse.is_a("IfcRelFillsElement"):
|
||||||
continue
|
continue
|
||||||
elif inverse.is_a("IfcRelConnectsPathElements"):
|
elif inverse.is_a("IfcRelConnectsPathElements"):
|
||||||
|
|||||||
@@ -115,6 +115,15 @@ class TestCopyClass(test.bootstrap.IFC4):
|
|||||||
assert new.HasOpenings[0].RelatedOpeningElement != opening
|
assert new.HasOpenings[0].RelatedOpeningElement != opening
|
||||||
assert new.HasOpenings[0].RelatedOpeningElement.is_a("IfcOpeningElement")
|
assert new.HasOpenings[0].RelatedOpeningElement.is_a("IfcOpeningElement")
|
||||||
|
|
||||||
|
def test_copying_an_element_with_a_filled_opening_should_not_copy_the_opening_nor_fill(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")
|
||||||
|
window = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWindow")
|
||||||
|
ifcopenshell.api.run("void.add_opening", self.file, opening=opening, element=wall)
|
||||||
|
ifcopenshell.api.run("void.add_filling", self.file, opening=opening, element=window)
|
||||||
|
new = ifcopenshell.api.run("root.copy_class", self.file, product=wall)
|
||||||
|
assert not new.HasOpenings
|
||||||
|
|
||||||
def test_copying_an_opening_voiding_an_element(self):
|
def test_copying_an_opening_voiding_an_element(self):
|
||||||
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
|
wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall")
|
||||||
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
|
opening = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcOpeningElement")
|
||||||
|
|||||||
Reference in New Issue
Block a user