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
This commit is contained in:
Andrej730
2024-11-15 18:16:43 +05:00
parent 934869af98
commit e0f4fc0759
2 changed files with 10 additions and 3 deletions
@@ -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]]:
@@ -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,
},