From fcf507372611e06c09d605e643d48559c522d002 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 31 Mar 2024 15:50:31 +1100 Subject: [PATCH] See #4484. Editing predefined type attributes now enforces valid combinations of userdefined and object/element type --- .../api/attribute/edit_attributes.py | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py index 83bc15f0ec..072427057a 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py +++ b/src/ifcopenshell-python/ifcopenshell/api/attribute/edit_attributes.py @@ -53,15 +53,29 @@ class Usecase: if hasattr(self.settings["product"], "PredefinedType"): if hasattr(self.settings["product"], "ElementType"): if ( - not self.settings["product"].ElementType + self.settings["product"].ElementType is None and self.settings["product"].PredefinedType == "USERDEFINED" ): self.settings["product"].PredefinedType = "NOTDEFINED" + elif ( + self.settings["product"].ElementType + and self.settings["product"].PredefinedType != "USERDEFINED" + ): + self.settings["product"].PredefinedType = "USERDEFINED" elif hasattr(self.settings["product"], "ObjectType"): - if ( - not self.settings["product"].ObjectType + relating_type = ifcopenshell.util.element.get_type(self.settings["product"]) + if relating_type and relating_type.PredefinedType != "NOTDEFINED": + self.settings["product"].ObjectType = None + self.settings["product"].PredefinedType = None + elif ( + self.settings["product"].ObjectType is None and self.settings["product"].PredefinedType == "USERDEFINED" ): self.settings["product"].PredefinedType = "NOTDEFINED" + elif ( + self.settings["product"].ObjectType + and self.settings["product"].PredefinedType != "USERDEFINED" + ): + self.settings["product"].PredefinedType = "USERDEFINED" if hasattr(self.settings["product"], "OwnerHistory"): ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": self.settings["product"]})