diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 9b73bd8ce9..a9d0554958 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -93,7 +93,7 @@ def get_predefined_type(element): if element_type: predefined_type = getattr(element_type, "PredefinedType", None) if predefined_type == "USERDEFINED" or not predefined_type: - predefined_type = getattr(element_type, "ElementType", None) + predefined_type = getattr(element_type, "ElementType", getattr(element_type, "ProcessType", None)) if predefined_type and predefined_type != "NOTDEFINED": return predefined_type predefined_type = getattr(element, "PredefinedType", None) diff --git a/src/ifcopenshell-python/test/util/test_element.py b/src/ifcopenshell-python/test/util/test_element.py index 1c351b61a8..afae619e04 100644 --- a/src/ifcopenshell-python/test/util/test_element.py +++ b/src/ifcopenshell-python/test/util/test_element.py @@ -174,7 +174,7 @@ class TestGetPredefinedTypeIFC4(test.bootstrap.IFC4): element_type.PredefinedType = "PARTITIONING" assert subject.get_predefined_type(element) == "PARTITIONING" - def test_getting_an_inherited_userdefined_type(self): + def test_getting_an_inherited_userdefined_type_for_an_element_type(self): element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall") element_type = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWallType") ifcopenshell.api.run("type.assign_type", self.file, related_object=element, relating_type=element_type) @@ -190,6 +190,14 @@ class TestGetPredefinedTypeIFC4(test.bootstrap.IFC4): element.PredefinedType = "PARTITIONING" assert subject.get_predefined_type(element) == "PARTITIONING" + def test_getting_an_inherited_userdefined_type_for_a_process_type(self): + element = ifcopenshell.api.run("sequence.add_task", self.file) + element_type = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcTaskType") + ifcopenshell.api.run("type.assign_type", self.file, related_object=element, relating_type=element_type) + element_type.PredefinedType = "USERDEFINED" + element_type.ProcessType = "FOOBAR" + assert subject.get_predefined_type(element) == "FOOBAR" + class TestGetTypeIFC4(test.bootstrap.IFC4): def test_getting_the_type_of_a_product(self):