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 [] return []
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(ifc_file.schema) schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(ifc_file.schema)
version = ifc_file.schema version = ifc_file.schema
return [ enum_items = [
(t, t, ifcopenshell.util.doc.get_type_doc(version, t).get("description", "")) (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")]) for t in sorted([d.name() for d in schema.declarations() if hasattr(d, "declared_type")])
] ]
enum_items = [("-", "-", "")] + enum_items
return enum_items
@classmethod @classmethod
def property_template_type(cls) -> list[tuple[str, str, str]]: 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) template = IfcStore.pset_template_file.by_id(props.active_prop_template_id)
props.active_prop_template.name = template.Name or "" props.active_prop_template.name = template.Name or ""
props.active_prop_template.description = template.Description 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.template_type = template.TemplateType
props.active_prop_template.enum_values.clear() props.active_prop_template.enum_values.clear()
@@ -287,13 +287,18 @@ class EditPropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperato
bl_options = {"REGISTER", "UNDO"} bl_options = {"REGISTER", "UNDO"}
def _execute(self, context): def _execute(self, context):
assert IfcStore.pset_template_file
props = context.scene.BIMPsetTemplateProperties props = context.scene.BIMPsetTemplateProperties
active_prop_template = props.active_prop_template
if props.active_prop_template.template_type == "P_ENUMERATEDVALUE": if props.active_prop_template.template_type == "P_ENUMERATEDVALUE":
data_type = props.active_prop_template.get_value_name() data_type = props.active_prop_template.get_value_name()
prop = props.active_prop_template prop = props.active_prop_template
enumerators = [getattr(ev, data_type) for ev in prop.enum_values] enumerators = [getattr(ev, data_type) for ev in prop.enum_values]
else: else:
enumerators = None enumerators = None
if (primary_measure_type := active_prop_template.primary_measure_type) == "-":
primary_measure_type = None
ifcopenshell.api.run( ifcopenshell.api.run(
"pset_template.edit_prop_template", "pset_template.edit_prop_template",
IfcStore.pset_template_file, IfcStore.pset_template_file,
@@ -301,7 +306,7 @@ class EditPropTemplate(bpy.types.Operator, tool.PsetTemplate.PsetTemplateOperato
attributes={ attributes={
"Name": props.active_prop_template.name, "Name": props.active_prop_template.name,
"Description": props.active_prop_template.description, "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, "TemplateType": props.active_prop_template.template_type,
"Enumerators": enumerators, "Enumerators": enumerators,
}, },