Fix UI bugs for settings predefined types / assign_type to prevent invalid ifc (#7011)

This commit is contained in:
Christoph Mellüh
2025-08-12 08:11:55 +02:00
committed by GitHub
parent b5e977d7f3
commit 3e5a2e5eb2
4 changed files with 55 additions and 6 deletions
@@ -139,6 +139,37 @@ class TestAssignType(test.bootstrap.IFC4):
assert (material := ifcopenshell.util.element.get_material(element1))
assert material.id() == material_id
def test_remove_predefined_type_if_type_assignment(self):
"""
if an element has a PredefinedType, it should be removed when assigning a type.
This is because the type will have its own PredefinedType, and the element's PredefinedType
will conflict with it. (See #7006)
"""
element_type = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWallType")
element_type.PredefinedType = "MOVABLE"
element = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWall")
element.PredefinedType = "USERDEFINED"
element.ObjectType = "Test"
ifcopenshell.api.type.assign_type(self.file, related_objects=[element], relating_type=element_type)
assert element.PredefinedType is None
assert element.ObjectType is None
def test_keep_predefined_type_if_type_assignment_is_notdefined(self):
"""
if an element has a PredefinedType, it will be removed when assigning a type.(See #7006)
This behavior needs to be blocked if the PredefinedType of the typing Entity is set to "NOTDEFINED". (See #7011)
"""
element_type = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWallType")
element_type.PredefinedType = "NOTDEFINED"
element = ifcopenshell.api.root.create_entity(self.file, ifc_class="IfcWall")
element.PredefinedType = "USERDEFINED"
element.ObjectType = "Test"
ifcopenshell.api.type.assign_type(self.file, related_objects=[element], relating_type=element_type)
assert element.PredefinedType == "USERDEFINED"
assert element.ObjectType == "Test"
class TestAssignTypeIFC2X3(test.bootstrap.IFC2X3, TestAssignType):
pass