diff --git a/src/blenderbim/blenderbim/bim/module/pset_template/__init__.py b/src/blenderbim/blenderbim/bim/module/pset_template/__init__.py index 3bc180c204..766045f8af 100644 --- a/src/blenderbim/blenderbim/bim/module/pset_template/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/pset_template/__init__.py @@ -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, diff --git a/src/blenderbim/blenderbim/bim/module/pset_template/operator.py b/src/blenderbim/blenderbim/bim/module/pset_template/operator.py index f2173a51b8..b6eface0e0 100644 --- a/src/blenderbim/blenderbim/bim/module/pset_template/operator.py +++ b/src/blenderbim/blenderbim/bim/module/pset_template/operator.py @@ -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 diff --git a/src/blenderbim/blenderbim/bim/module/pset_template/prop.py b/src/blenderbim/blenderbim/bim/module/pset_template/prop.py index d2821ca01a..2dba9b0504 100644 --- a/src/blenderbim/blenderbim/bim/module/pset_template/prop.py +++ b/src/blenderbim/blenderbim/bim/module/pset_template/prop.py @@ -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) diff --git a/src/blenderbim/blenderbim/bim/module/pset_template/ui.py b/src/blenderbim/blenderbim/bim/module/pset_template/ui.py index 969a355ed3..2f90bd94dd 100644 --- a/src/blenderbim/blenderbim/bim/module/pset_template/ui.py +++ b/src/blenderbim/blenderbim/bim/module/pset_template/ui.py @@ -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) diff --git a/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_pset_template.py b/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_pset_template.py index ae37efa128..4611dfb48e 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_pset_template.py +++ b/src/ifcopenshell-python/ifcopenshell/api/pset_template/add_pset_template.py @@ -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