From 26e63c84276d804590d01d5235b996f914174d84 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 12 Nov 2024 15:38:35 +0500 Subject: [PATCH] Fix edit_pset for enum props without reference #5707 Similar to fb081e3cf but now we cover case when IfcPropertyEnumeratedValue is passed to properties argument. --- .../ifcopenshell/api/pset/edit_pset.py | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py index c8c11e9695..f863456466 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset/edit_pset.py @@ -17,6 +17,7 @@ # along with IfcOpenShell. If not, see . import ifcopenshell +import ifcopenshell.util.element import ifcopenshell.util.pset from typing import Optional, Any, Union @@ -261,15 +262,27 @@ class Usecase: prop.EnumerationValues = tuple(sel_vals) or None elif isinstance(value, ifcopenshell.entity_instance) and value.is_a("IfcPropertyEnumeratedValue"): - if not value.EnumerationReference.EnumerationValues: + # Copy enum value. + if (value_enum_values := value.EnumerationValues) is None: if self._try_purge(prop): return - prop.EnumerationReference.EnumerationValues = None - prop.EnumerationValues = None + prop.EnumerationValues = value_enum_values + # Copy values from / recreate value EnumerationReference in prop. + value_reference = value.EnumerationReference + prop_reference = prop.EnumerationReference + if value_reference is None: + if prop_reference: + ifcopenshell.util.element.remove_deep2(self.file, prop_reference) + prop.EnumerationReference = None else: - prop.EnumerationReference.EnumerationValues = value.EnumerationReference.EnumerationValues - prop.EnumerationValues = value.EnumerationValues + if prop_reference is None: + prop_reference = ifcopenshell.util.element.copy_deep(self.file, value_reference) + prop.EnumerationReference = prop_reference + else: + prop_reference.Name = value_reference.Name + prop_reference.EnumerationValues = value_reference.EnumerationValues + prop_reference.Unit = value_reference.Unit else: raise ValueError(