From 6dfe46d9bdc989da9d5e1742b95b577559595c87 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 19 Aug 2024 17:22:12 +0500 Subject: [PATCH] bonsai bcf - add default project for bcf v3, fix small possible issue with bcf v2 In theory in bcf v2 there could be a project with project info but without project. --- src/bonsai/bonsai/bim/module/bcf/operator.py | 30 ++++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/bcf/operator.py b/src/bonsai/bonsai/bim/module/bcf/operator.py index cc758cb6e6..c89ccb7332 100644 --- a/src/bonsai/bonsai/bim/module/bcf/operator.py +++ b/src/bonsai/bonsai/bim/module/bcf/operator.py @@ -72,15 +72,29 @@ class LoadBcfProject(bpy.types.Operator): bcfstore.BcfStore.set_by_filepath(self.filepath) bcfxml = bcfstore.BcfStore.get_bcfxml() assert bcfxml - # a BCFv2.1 does not need to have a project, but BBIM likes to have one + bcf_v2 = (bcfxml.version.version_id or "").startswith("2") + + # BCF v2.1/v3 does not need to have a project, but BBIM likes to have one # https://github.com/buildingSMART/BCF-XML/tree/release_2_1/Documentation#bcf-file-structure nameless = "Unknown" if bcfxml.project is None: - if bcfxml.version.version_id.startswith("2"): - print("No project, we will create one for BBIM.") - bcfxml.project_info = bcf.v2.model.ProjectExtension( - project=bcf.v2.model.Project(name=nameless, project_id=str(uuid.uuid4())), extension_schema="" + print("No project, we will create one for BBIM.") + project_info = bcfxml.project_info + if bcf_v2: + assert isinstance(bcfxml, bcf.v2.bcfxml.BcfXml) + if project_info is None: + project_info = bcf.v2.model.ProjectExtension(extension_schema="") + bcfxml.project_info = project_info + if project_info.project is None: + project_info.project = bcf.v2.model.Project(name=nameless, project_id=str(uuid.uuid4())) + else: + assert isinstance(bcfxml, bcf.v3.bcfxml.BcfXml) + project_info = bcf.v3.model.ProjectInfo( + project=bcf.v3.model.Project(name=nameless, project_id=str(uuid.uuid4())) ) + bcfxml.project_info = project_info + + assert bcfxml.project if bcfxml.project.name is None: bcfxml.project.name = nameless context.scene.BCFProperties.name = bcfxml.project.name @@ -249,10 +263,8 @@ class EditBcfProjectName(bpy.types.Operator): bcfxml = bcfstore.BcfStore.get_bcfxml() assert bcfxml - if not (version := (bcfxml.version.version_id or "")).startswith("2"): - self.report({"INFO"}, f"BCF {version} is not yet supported: {self.bl_rna.bl_idname}.") - return {"FINISHED"} - + # Bonsai creates default project on load. + assert bcfxml.project bcfxml.project.name = context.scene.BCFProperties.name return {"FINISHED"}