mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +00:00
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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user