From 17a8b3338749529cc5aad867b9962568b62e900c Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 14 Dec 2020 13:51:01 +1100 Subject: [PATCH] You can new create new BCF projects from scratch --- .../blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/operator.py | 19 +++++++++++++++++++ src/ifcblenderexport/blenderbim/bim/prop.py | 1 + src/ifcblenderexport/blenderbim/bim/ui.py | 13 +++++++------ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 07e5b318ce..10327fbd87 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -25,6 +25,7 @@ if bpy is not None: operator.UnassignClass, operator.SelectClass, operator.SelectType, + operator.NewBcfProject, operator.LoadBcfProject, operator.SaveBcfProject, operator.AddBcfTopic, diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 016c9e1a31..0d67291e18 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -507,6 +507,24 @@ class RejectElement(bpy.types.Operator): return {"FINISHED"} +class NewBcfProject(bpy.types.Operator): + bl_idname = "bim.new_bcf_project" + bl_label = "New BCF Project" + + def execute(self, context): + import bcfplugin + bcfplugin.newProject("New BCF Project") + bcf.BcfStore.topics = bcfplugin.getTopics() + bpy.context.scene.BCFProperties.is_editable = False + bpy.context.scene.BCFProperties.name = bcfplugin.getProjectName() + while len(bpy.context.scene.BCFProperties.topics) > 0: + bpy.context.scene.BCFProperties.topics.remove(0) + bpy.context.scene.BCFProperties.is_editable = True + bpy.context.scene.BCFProperties.directory = bcfplugin.util.getBcfDir() + bpy.context.scene.BCFProperties.is_loaded = True + return {"FINISHED"} + + class LoadBcfProject(bpy.types.Operator): bl_idname = "bim.load_bcf_project" bl_label = "Load BCF Project" @@ -525,6 +543,7 @@ class LoadBcfProject(bpy.types.Operator): new = bpy.context.scene.BCFProperties.topics.add() new.name = topic[0] bpy.context.scene.BCFProperties.is_editable = True + bpy.context.scene.BCFProperties.is_loaded = True return {"FINISHED"} def invoke(self, context, event): diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index 15500500bb..5b032daec9 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -1640,6 +1640,7 @@ class BIMProperties(PropertyGroup): class BCFProperties(PropertyGroup): is_editable: BoolProperty(name="Is Editable", default=False) + is_loaded: BoolProperty(name="Is Loaded", default=False) name: StringProperty(default="", name="Project Name", update=updateBcfProjectName) author: StringProperty(default="john@doe.com", name="Author Email") topics: CollectionProperty(name="BCF Topics", type=BcfTopic) diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 67ede77508..c8fe83e02c 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -1661,12 +1661,13 @@ class BIM_PT_bcf(Panel): props = bpy.context.scene.BCFProperties row = layout.row(align=True) - row.operator("bim.load_bcf_project") + row.operator("bim.new_bcf_project", text="New Project") + row.operator("bim.load_bcf_project", text="Load Project") - if not props.topics: + if not props.is_loaded: return - row.operator("bim.save_bcf_project") + row.operator("bim.save_bcf_project", text="Save Project") row = layout.row() row.prop(props, "name") @@ -1674,15 +1675,15 @@ class BIM_PT_bcf(Panel): row = layout.row() row.prop(props, "author") - if not props.topics: - return - props = bpy.context.scene.BCFProperties row = layout.row() row.template_list("BIM_UL_topics", "", props, "topics", props, "active_topic_index") col = row.column(align=True) col.operator("bim.add_bcf_topic", icon="ADD", text="") + if not props.topics: + return + row = layout.row() row.prop(props, "topic_description", text="")