Improve usability of pset template UI by removing save button and using new explicit applicable entity defaults to mitigate possible invalid pset templates.

This commit is contained in:
Dion Moult
2023-09-10 17:37:35 +10:00
parent 6cf482dc63
commit 9be7d951c3
5 changed files with 53 additions and 21 deletions
@@ -22,7 +22,7 @@ from . import ui, prop, operator
classes = (
operator.AddPropEnum,
operator.AddPropTemplate,
operator.AddPsetFile,
operator.AddPsetTemplateFile,
operator.AddPsetTemplate,
operator.DeletePropEnum,
operator.DisableEditingPropTemplate,
@@ -33,7 +33,7 @@ classes = (
operator.EnableEditingPsetTemplate,
operator.RemovePropTemplate,
operator.RemovePsetTemplate,
operator.SavePsetTemplateFile,
operator.RemovePsetTemplateFile,
prop.PsetTemplate,
prop.EnumerationValues,
prop.PropTemplate,
@@ -44,9 +44,9 @@ class Operator:
IfcStore.pset_template_file.redo()
class AddPsetFile(bpy.types.Operator):
bl_idname = "bim.add_pset_file"
bl_label = "Add Pset File"
class AddPsetTemplateFile(bpy.types.Operator):
bl_idname = "bim.add_pset_template_file"
bl_label = "Add Pset Template File"
bl_options = {"REGISTER", "UNDO"}
def invoke(self, context, event):
@@ -64,18 +64,13 @@ class AddPsetFile(bpy.types.Operator):
self.props.new_template_filename + ".ifc",
)
template.create_entity(
"IFCPROPERTYSETTEMPLATE",
**{
"GlobalId": ifcopenshell.guid.new(),
"Name": "Name",
"Description": "Description",
"TemplateType": "PSET_TYPEDRIVENONLY",
"ApplicableEntity": "IfcTypeObject",
}
)
pset_template = ifcopenshell.api.run("pset_template.add_pset_template", template)
ifcopenshell.api.run("pset_template.add_prop_template", template, pset_template=pset_template)
template.write(filepath)
self.props.new_template_filename = ""
blenderbim.bim.handler.purge_module_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
context.scene.BIMPsetTemplateProperties.pset_template_files = filepath
return {"FINISHED"}
@@ -86,7 +81,10 @@ class AddPsetTemplate(bpy.types.Operator, Operator):
def _execute(self, context):
template = ifcopenshell.api.run("pset_template.add_pset_template", IfcStore.pset_template_file)
ifcopenshell.api.run("pset_template.add_prop_template", IfcStore.pset_template_file, pset_template=template)
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
blenderbim.bim.handler.refresh_ui_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
context.scene.BIMPsetTemplateProperties.pset_templates = str(template.id())
@@ -104,6 +102,9 @@ class RemovePsetTemplate(bpy.types.Operator, Operator):
IfcStore.pset_template_file,
**{"pset_template": IfcStore.pset_template_file.by_id(int(props.pset_templates))}
)
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
blenderbim.bim.handler.refresh_ui_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
class EnableEditingPsetTemplate(bpy.types.Operator):
@@ -215,6 +216,9 @@ class EditPsetTemplate(bpy.types.Operator, Operator):
}
)
bpy.ops.bim.disable_editing_pset_template()
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
blenderbim.bim.handler.refresh_ui_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
class SavePsetTemplateFile(bpy.types.Operator):
@@ -228,6 +232,20 @@ class SavePsetTemplateFile(bpy.types.Operator):
return {"FINISHED"}
class RemovePsetTemplateFile(bpy.types.Operator):
bl_idname = "bim.remove_pset_template_file"
bl_label = "Remove Pset Template File"
def execute(self, context):
try:
os.remove(IfcStore.pset_template_path)
except:
pass
blenderbim.bim.handler.purge_module_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
return {"FINISHED"}
class AddPropTemplate(bpy.types.Operator, Operator):
bl_idname = "bim.add_prop_template"
bl_label = "Add Prop Template"
@@ -239,9 +257,12 @@ class AddPropTemplate(bpy.types.Operator, Operator):
ifcopenshell.api.run(
"pset_template.add_prop_template",
IfcStore.pset_template_file,
**{"pset_template": IfcStore.pset_template_file.by_id(pset_template_id)}
pset_template=IfcStore.pset_template_file.by_id(pset_template_id),
)
bpy.ops.bim.disable_editing_prop_template()
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
blenderbim.bim.handler.refresh_ui_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
class RemovePropTemplate(bpy.types.Operator, Operator):
@@ -257,6 +278,9 @@ class RemovePropTemplate(bpy.types.Operator, Operator):
IfcStore.pset_template_file,
**{"prop_template": IfcStore.pset_template_file.by_id(self.prop_template)}
)
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
blenderbim.bim.handler.refresh_ui_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
class EditPropTemplate(bpy.types.Operator, Operator):
@@ -285,6 +309,9 @@ class EditPropTemplate(bpy.types.Operator, Operator):
}
)
bpy.ops.bim.disable_editing_prop_template()
IfcStore.pset_template_file.write(IfcStore.pset_template_path)
blenderbim.bim.handler.refresh_ui_data()
blenderbim.bim.schema.reload(tool.Ifc.get().schema)
# TODO -This will need to go into the
# api code at some point - vulevukusej
@@ -38,6 +38,7 @@ from bpy.props import (
def updatePsetTemplateFiles(self, context):
IfcStore.pset_template_file = None
PsetTemplatesData.is_loaded = False
PsetTemplatesData.data["pset_template_files"] = PsetTemplatesData.pset_template_files()
PsetTemplatesData.data["pset_templates"] = PsetTemplatesData.pset_templates()
PsetTemplatesData.data["prop_templates"] = PsetTemplatesData.prop_templates()
@@ -179,7 +180,7 @@ class BIMPsetTemplateProperties(PropertyGroup):
pset_template_files: EnumProperty(
items=getPsetTemplateFiles, name="Pset Template Files", update=updatePsetTemplateFiles
)
pset_templates: EnumProperty(items=getPsetTemplates, name="Pset Template Files", update=updatePsetTemplates)
pset_templates: EnumProperty(items=getPsetTemplates, name="Pset Templates", update=updatePsetTemplates)
active_pset_template_id: IntProperty(name="Active Pset Template Id")
active_prop_template_id: IntProperty(name="Active Prop Template Id")
active_pset_template: PointerProperty(type=PsetTemplate)
@@ -38,9 +38,9 @@ class BIM_PT_pset_template(Panel):
self.props = context.scene.BIMPsetTemplateProperties
row = self.layout.row(align=True)
prop_with_search(row, self.props, "pset_template_files", text="")
row.operator("bim.save_pset_template_file", text="", icon="EXPORT")
row.operator("bim.add_pset_file", icon="ADD", text="")
prop_with_search(row, self.props, "pset_template_files", text="", icon="FILE")
row.operator("bim.add_pset_template_file", icon="ADD", text="")
row.operator("bim.remove_pset_template_file", icon="X", text="")
row = self.layout.row(align=True)
@@ -21,7 +21,11 @@ import ifcopenshell
class Usecase:
def __init__(
self, file, name="New_Pset", template_type="PSET_TYPEDRIVENOVERRIDE", applicable_entity="IfcTypeObject"
self,
file,
name="New_Pset",
template_type="PSET_TYPEDRIVENOVERRIDE",
applicable_entity="IfcObject,IfcTypeObject",
):
"""Adds a new property set template