From 9b12cae8b44779169633da4eebf71765c76b6dbe Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 21 Aug 2024 16:38:04 +0500 Subject: [PATCH] bcf bonsai - create bcf v3 projects and display loaded bcf version Example - https://imgur.com/a/3ZSGtw7 --- src/bonsai/bonsai/bim/module/bcf/bcfstore.py | 10 +++++++++- src/bonsai/bonsai/bim/module/bcf/operator.py | 9 +++++++-- src/bonsai/bonsai/bim/module/bcf/prop.py | 6 ++++++ src/bonsai/bonsai/bim/module/bcf/ui.py | 5 +++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/bcf/bcfstore.py b/src/bonsai/bonsai/bim/module/bcf/bcfstore.py index 659a366970..b80e724be3 100644 --- a/src/bonsai/bonsai/bim/module/bcf/bcfstore.py +++ b/src/bonsai/bonsai/bim/module/bcf/bcfstore.py @@ -46,7 +46,15 @@ class BcfStore: @classmethod def set(cls, bcfxml: Union[bcf.bcfxml.BcfXml, None], filepath: str) -> None: cls.bcfxml = bcfxml - bpy.context.scene.BCFProperties.bcf_file = filepath + props = bpy.context.scene.BCFProperties + props.bcf_file = filepath + + # Set bcf_version prop on load. + if filepath or bcfxml: + bcfxml = cls.get_bcfxml() + assert bcfxml + bcf_v2 = (bcfxml.version.version_id or "").startswith("2") + props.bcf_version = "2" if bcf_v2 else "3" @classmethod def set_by_filepath(cls, filepath: str) -> None: diff --git a/src/bonsai/bonsai/bim/module/bcf/operator.py b/src/bonsai/bonsai/bim/module/bcf/operator.py index 3576156413..fd39e63edf 100644 --- a/src/bonsai/bonsai/bim/module/bcf/operator.py +++ b/src/bonsai/bonsai/bim/module/bcf/operator.py @@ -55,7 +55,10 @@ class NewBcfProject(bpy.types.Operator): bl_options = {"REGISTER", "UNDO"} def execute(self, context): - bcfxml = bcf.v2.bcfxml.BcfXml.create_new("New Project") + props = context.scene.BCFProperties + bcf_v2 = props.bcf_version == "2" + bcf_class = bcf.v2.bcfxml.BcfXml if bcf_v2 else bcf.v3.bcfxml.BcfXml + bcfxml = bcf_class.create_new("New Project") bcfstore.BcfStore.set(bcfxml, "") bpy.ops.bim.load_bcf_project() return {"FINISHED"} @@ -65,12 +68,14 @@ class LoadBcfProject(bpy.types.Operator): bl_idname = "bim.load_bcf_project" bl_label = "Load BCF Project" bl_options = {"REGISTER", "UNDO"} - filepath: bpy.props.StringProperty(subtype="FILE_PATH") + filepath: bpy.props.StringProperty(subtype="FILE_PATH", options={"SKIP_SAVE"}) filter_glob: bpy.props.StringProperty(default="*.bcf;*.bcfzip", options={"HIDDEN"}) def execute(self, context): + # Operator is also used when new project is created by not yet saved. if self.filepath: bcfstore.BcfStore.set_by_filepath(self.filepath) + bcfxml = bcfstore.BcfStore.get_bcfxml() assert bcfxml bcf_v2 = (bcfxml.version.version_id or "").startswith("2") diff --git a/src/bonsai/bonsai/bim/module/bcf/prop.py b/src/bonsai/bonsai/bim/module/bcf/prop.py index c0bb812c14..a10ac5dcc7 100644 --- a/src/bonsai/bonsai/bim/module/bcf/prop.py +++ b/src/bonsai/bonsai/bim/module/bcf/prop.py @@ -201,6 +201,12 @@ def get_related_topics(self: "BCFProperties", context: bpy.types.Context) -> lis class BCFProperties(PropertyGroup): bcf_file: StringProperty(name="BCF File") + bcf_version: EnumProperty( + name="BCF Version", + description="Currently loaded BCF project version / BCF version to use for created projects", + items=[("2", "v2.1", ""), ("3", "v3.0", "")], + default="3", + ) comment_text_width: IntProperty(name="Comment Text Width", default=40) name: StringProperty(default="", name="Project Name", update=updateBcfProjectName) author: StringProperty( diff --git a/src/bonsai/bonsai/bim/module/bcf/ui.py b/src/bonsai/bonsai/bim/module/bcf/ui.py index 526e14c36f..4bbe95a46a 100644 --- a/src/bonsai/bonsai/bim/module/bcf/ui.py +++ b/src/bonsai/bonsai/bim/module/bcf/ui.py @@ -44,6 +44,7 @@ class BIM_PT_bcf(Panel): row = layout.row(align=True) row.operator("bim.new_bcf_project", text="New Project") row.operator("bim.load_bcf_project", text="Load Project") + layout.prop(props, "bcf_version") return row = layout.row(align=True) @@ -52,6 +53,10 @@ class BIM_PT_bcf(Panel): row.operator("bim.save_bcf_project", icon="EXPORT", text="Save Project As...") row.operator("bim.unload_bcf_project", text="", icon="CANCEL") + row = layout.row() + row.prop(props, "bcf_version", emboss=False) + row.enabled = False + row = layout.row() row.prop(props, "name")