See #4484. Editing predefined type attributes now enforces valid combinations of userdefined and object/element type

This commit is contained in:
Dion Moult
2024-03-31 15:50:31 +11:00
parent 81fdaea5f2
commit fcf5073726
@@ -53,15 +53,29 @@ class Usecase:
if hasattr(self.settings["product"], "PredefinedType"): if hasattr(self.settings["product"], "PredefinedType"):
if hasattr(self.settings["product"], "ElementType"): if hasattr(self.settings["product"], "ElementType"):
if ( if (
not self.settings["product"].ElementType self.settings["product"].ElementType is None
and self.settings["product"].PredefinedType == "USERDEFINED" and self.settings["product"].PredefinedType == "USERDEFINED"
): ):
self.settings["product"].PredefinedType = "NOTDEFINED" 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"): elif hasattr(self.settings["product"], "ObjectType"):
if ( relating_type = ifcopenshell.util.element.get_type(self.settings["product"])
not self.settings["product"].ObjectType 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" and self.settings["product"].PredefinedType == "USERDEFINED"
): ):
self.settings["product"].PredefinedType = "NOTDEFINED" 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"): if hasattr(self.settings["product"], "OwnerHistory"):
ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": self.settings["product"]}) ifcopenshell.api.run("owner.update_owner_history", self.file, **{"element": self.settings["product"]})