From 2015f0618a2aec25fc1ba0780b5ee1071cf028b0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 30 Jul 2023 14:47:05 +1000 Subject: [PATCH] Fix #3484. You can now have project-specific pset templates distributed with your project in a relative path. Defaults to pset/. --- src/blenderbim/blenderbim/bim/module/project/operator.py | 1 + src/blenderbim/blenderbim/bim/prop.py | 1 + src/blenderbim/blenderbim/bim/schema.py | 2 +- src/blenderbim/blenderbim/bim/ui.py | 2 ++ src/blenderbim/blenderbim/tool/project.py | 9 +++++++++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index a41915d26e..69d1bcfc88 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -715,6 +715,7 @@ class LoadProjectElements(bpy.types.Operator): print("Import finished in {:.2f} seconds".format(time.time() - start)) context.scene.BIMProjectProperties.is_loading = False + tool.Project.load_pset_templates() tool.Project.load_default_thumbnails() tool.Project.set_default_context() tool.Project.set_default_modeling_dimensions() diff --git a/src/blenderbim/blenderbim/bim/prop.py b/src/blenderbim/blenderbim/bim/prop.py index 209107a6b2..34596a7b56 100644 --- a/src/blenderbim/blenderbim/bim/prop.py +++ b/src/blenderbim/blenderbim/bim/prop.py @@ -327,6 +327,7 @@ class BIMProperties(PropertyGroup): data_dir: StringProperty( default=os.path.join(cwd, "data") + os.path.sep, name="Data Directory", update=update_data_dir ) + pset_dir: StringProperty(default=os.path.join("psets") + os.path.sep, name="Default Psets Directory") ifc_file: StringProperty(name="IFC File", update=update_ifc_file) last_transaction: StringProperty(name="Last Transaction") should_section_selected_objects: BoolProperty(name="Section Selected Objects", default=False) diff --git a/src/blenderbim/blenderbim/bim/schema.py b/src/blenderbim/blenderbim/bim/schema.py index 4a3ceebd4a..b4bab4ebfa 100644 --- a/src/blenderbim/blenderbim/bim/schema.py +++ b/src/blenderbim/blenderbim/bim/schema.py @@ -17,10 +17,10 @@ # along with BlenderBIM Add-on. If not, see . import os +import bpy import json import ifcopenshell import ifcopenshell.util.pset -import bpy from pathlib import Path cwd = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py index 12cccdfee7..b7948ee573 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -246,6 +246,8 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences): row.prop(context.scene.BIMProperties, "data_dir") row.operator("bim.select_data_dir", icon="FILE_FOLDER", text="") + row = self.layout.row(align=True) + row.prop(context.scene.BIMProperties, "psets_dir") row = self.layout.row(align=True) row.prop(context.scene.DocProperties, "sheets_dir") row = self.layout.row(align=True) diff --git a/src/blenderbim/blenderbim/tool/project.py b/src/blenderbim/blenderbim/tool/project.py index 2bc20b7473..0c98c54849 100644 --- a/src/blenderbim/blenderbim/tool/project.py +++ b/src/blenderbim/blenderbim/tool/project.py @@ -21,8 +21,10 @@ import bpy import ifcopenshell import ifcopenshell.util.unit import blenderbim.core.tool +import blenderbim.bim.schema import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore +from pathlib import Path class Project(blenderbim.core.tool.Project): @@ -51,6 +53,13 @@ class Project(blenderbim.core.tool.Project): ifc_class = sorted(tool.Ifc.get().by_type("IfcElementType"), key=lambda e: e.is_a())[0].is_a() bpy.ops.bim.load_type_thumbnails(ifc_class=ifc_class, offset=0, limit=9) + @classmethod + def load_pset_templates(cls): + pset_dir = tool.Ifc.resolve_uri(bpy.context.scene.BIMProperties.pset_dir) + if os.path.isdir(pset_dir): + for path in Path(pset_dir).glob("*.ifc"): + blenderbim.bim.schema.ifc.psetqto.templates.append(ifcopenshell.open(path)) + @classmethod def run_aggregate_assign_object(cls, relating_obj=None, related_obj=None): return blenderbim.core.aggregate.assign_object(