From f3df78784afbfed1de9b347d820c3d3cf102dd7a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 24 Jul 2023 18:01:25 +1000 Subject: [PATCH] New projects now load with a Views and Types collection with appropriate visibility settings. --- src/blenderbim/blenderbim/bim/import_ifc.py | 23 ++------------------- src/blenderbim/blenderbim/core/project.py | 1 + src/blenderbim/blenderbim/core/tool.py | 1 + src/blenderbim/blenderbim/tool/loader.py | 15 ++++++++++++++ src/blenderbim/blenderbim/tool/project.py | 5 +++++ src/blenderbim/test/core/test_project.py | 3 +++ 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index d52e9a6217..f189561103 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1437,27 +1437,8 @@ class IfcImporter: self.create_spatial_decomposition_collection(self.project["blender"], orphaned_spaces) orphaned_spaces = [e for e in self.spatial_elements if e.GlobalId not in self.collections] - self.create_views_collection() - self.create_type_collection() - - def create_type_collection(self): - for collection in self.project["blender"].children: - if collection.name == "Types": - self.type_collection = collection - break - if not self.type_collection: - self.type_collection = bpy.data.collections.new("Types") - self.project["blender"].children.link(self.type_collection) - - def create_views_collection(self): - view_collection = None - for collection in self.project["blender"].children: - if collection.name == "Views": - view_collection = collection - break - if not view_collection: - view_collection = bpy.data.collections.new("Views") - self.project["blender"].children.link(view_collection) + tool.Loader.create_project_collection("Views") + self.type_collection = tool.Loader.create_project_collection("Types") def create_spatial_decomposition_collection(self, parent, related_objects): for element in related_objects: diff --git a/src/blenderbim/blenderbim/core/project.py b/src/blenderbim/blenderbim/core/project.py index 920cd5716f..ee021cd4a6 100644 --- a/src/blenderbim/blenderbim/core/project.py +++ b/src/blenderbim/blenderbim/core/project.py @@ -83,6 +83,7 @@ def create_project(ifc, project, schema=None, template=None): project.set_context(body) project.set_active_spatial_element(storey) + project.create_project_collections() if template: project.append_all_types_from_template(template) diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 7520251c62..44b14a3e3c 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -540,6 +540,7 @@ class Owner: class Project: def append_all_types_from_template(cls, template): pass def create_empty(cls, name): pass + def create_project_collections(cls): pass def load_default_thumbnails(cls): pass def run_aggregate_assign_object(cls, relating_obj=None, related_obj=None): pass def run_context_add_context(cls, context_type=None, context_identifier=None, target_view=None, parent=None): pass diff --git a/src/blenderbim/blenderbim/tool/loader.py b/src/blenderbim/blenderbim/tool/loader.py index 1bb487728d..54b48d6732 100644 --- a/src/blenderbim/blenderbim/tool/loader.py +++ b/src/blenderbim/blenderbim/tool/loader.py @@ -33,6 +33,21 @@ from pathlib import Path class Loader(blenderbim.core.tool.Loader): + @classmethod + def create_project_collection(self, name): + project_obj = tool.Ifc.get_object(tool.Ifc.get().by_type("IfcProject")[0]) + project_collection = project_obj.BIMObjectProperties.collection + for collection in project_collection.children: + if collection.name == name: + return collection + collection = bpy.data.collections.new(name) + project_collection.children.link(collection) + if name == "Types": + project_layer = bpy.context.view_layer.layer_collection.children.get(project_collection.name) + if project_layer: + project_layer.children[collection.name].hide_viewport = True + return collection + @classmethod def get_mesh_name(cls, geometry): representation_id = geometry.id diff --git a/src/blenderbim/blenderbim/tool/project.py b/src/blenderbim/blenderbim/tool/project.py index 537426f769..2bc20b7473 100644 --- a/src/blenderbim/blenderbim/tool/project.py +++ b/src/blenderbim/blenderbim/tool/project.py @@ -40,6 +40,11 @@ class Project(blenderbim.core.tool.Project): def create_empty(cls, name): return bpy.data.objects.new(name, None) + @classmethod + def create_project_collections(cls): + tool.Loader.create_project_collection("Views") + tool.Loader.create_project_collection("Types") + @classmethod def load_default_thumbnails(cls): if tool.Ifc.get().by_type("IfcElementType"): diff --git a/src/blenderbim/test/core/test_project.py b/src/blenderbim/test/core/test_project.py index 199bd455cd..29ff452424 100644 --- a/src/blenderbim/test/core/test_project.py +++ b/src/blenderbim/test/core/test_project.py @@ -91,6 +91,7 @@ class TestCreateProject: project.set_context("body").should_be_called() project.set_active_spatial_element("storey").should_be_called() + project.create_project_collections().should_be_called() project.load_default_thumbnails().should_be_called() project.set_default_context().should_be_called() @@ -122,6 +123,7 @@ class TestCreateProject: project.set_context("body").should_be_called() project.set_active_spatial_element("storey").should_be_called() + project.create_project_collections().should_be_called() project.append_all_types_from_template("template").should_be_called() @@ -162,6 +164,7 @@ class TestCreateProject: project.set_context("body").should_be_called() project.set_active_spatial_element("storey").should_be_called() + project.create_project_collections().should_be_called() project.load_default_thumbnails().should_be_called() project.set_default_context().should_be_called()