From e0f4fc0759e161dda0a63190088aea5dfe9a4f9a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 15 Nov 2024 18:16:43 +0500 Subject: [PATCH] Fix error editing prop templates with None PrimaryMeasureType E.g. all qto props have it's None Error traceback: Error: Python: Traceback (most recent call last): File "\bonsai\bim\module\pset_template\operator.py", line 135, in execute props.active_prop_template.primary_measure_type = template.PrimaryMeasureType ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: bpy_struct: item.attr = val: expected a string enum, not NoneType --- src/bonsai/bonsai/bim/module/pset_template/data.py | 4 +++- src/bonsai/bonsai/bim/module/pset_template/operator.py | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/pset_template/data.py b/src/bonsai/bonsai/bim/module/pset_template/data.py index bc24095a4e..37637ada0d 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/data.py +++ b/src/bonsai/bonsai/bim/module/pset_template/data.py @@ -58,10 +58,12 @@ class PsetTemplatesData: return [] schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(ifc_file.schema) version = ifc_file.schema - return [ + enum_items = [ (t, t, ifcopenshell.util.doc.get_type_doc(version, t).get("description", "")) for t in sorted([d.name() for d in schema.declarations() if hasattr(d, "declared_type")]) ] + enum_items = [("-", "-", "")] + enum_items + return enum_items @classmethod def property_template_type(cls) -> list[tuple[str, str, str]]: diff --git a/src/bonsai/bonsai/bim/module/pset_template/operator.py b/src/bonsai/bonsai/bim/module/pset_template/operator.py index 1655d01860..78f47d721a 100644 --- a/src/bonsai/bonsai/bim/module/pset_template/operator.py +++ b/src/bonsai/bonsai/bim/module/pset_template/operator.py @@ -132,7 +132,7 @@ class EnableEditingPropTemplate(bpy.types.Operator): template = IfcStore.pset_template_file.by_id(props.active_prop_template_id) props.active_prop_template.name = template.Name or "" props.active_prop_template.description = template.Description or "" - props.active_prop_template.primary_measure_type = template.PrimaryMeasureType + props.active_prop_template.primary_measure_type = template.PrimaryMeasureType or "-" props.active_prop_template.template_type = template.TemplateType props.active_prop_template.enum_values.clear() @@ -287,13 +287,18 @@ class EditPropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperato bl_options = {"REGISTER", "UNDO"} def _execute(self, context): + assert IfcStore.pset_template_file props = context.scene.BIMPsetTemplateProperties + active_prop_template = props.active_prop_template if props.active_prop_template.template_type == "P_ENUMERATEDVALUE": data_type = props.active_prop_template.get_value_name() prop = props.active_prop_template enumerators = [getattr(ev, data_type) for ev in prop.enum_values] else: enumerators = None + if (primary_measure_type := active_prop_template.primary_measure_type) == "-": + primary_measure_type = None + ifcopenshell.api.run( "pset_template.edit_prop_template", IfcStore.pset_template_file, @@ -301,7 +306,7 @@ class EditPropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperato attributes={ "Name": props.active_prop_template.name, "Description": props.active_prop_template.description, - "PrimaryMeasureType": props.active_prop_template.primary_measure_type, + "PrimaryMeasureType": primary_measure_type, "TemplateType": props.active_prop_template.template_type, "Enumerators": enumerators, },