diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py b/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py index af10d9b149..0e876b0c47 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/remove_product.py @@ -130,4 +130,9 @@ class Usecase: elif inverse.is_a("IfcRelAssignsToGroup"): if len(inverse.RelatedObjects) == 1: self.file.remove(inverse) + elif inverse.is_a("IfcRelAssignsToProduct"): + if inverse.RelatingProduct == self.settings["product"]: + self.file.remove(inverse) + elif len(inverse.RelatedObject) == 1: + self.file.remove(inverse) self.file.remove(self.settings["product"]) diff --git a/src/ifcopenshell-python/test/api/root/test_remove_product.py b/src/ifcopenshell-python/test/api/root/test_remove_product.py index c66ab9686b..d383859f88 100644 --- a/src/ifcopenshell-python/test/api/root/test_remove_product.py +++ b/src/ifcopenshell-python/test/api/root/test_remove_product.py @@ -245,3 +245,10 @@ class TestRemoveProduct(test.bootstrap.IFC4): ifcopenshell.api.run("group.assign_group", self.file, products=[element], group=group) ifcopenshell.api.run("root.remove_product", self.file, product=element) assert not self.file.by_type("IfcRelAssignsToGroup") + + def test_removing_product_assignments(self): + element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall") + annotation = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcAnnotation") + ifcopenshell.api.run("drawing.assign_product", self.file, relating_product=element, related_object=annotation) + ifcopenshell.api.run("root.remove_product", self.file, product=element) + assert not self.file.by_type("IfcRelAssignsToProduct")