From ae0a341c957e2e5126131e7536236dc914cd44cd Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 20 Aug 2023 23:51:38 +1000 Subject: [PATCH] Fix #3551. Project specific pset templates now show up in the pset template editor. --- .../bim/module/pset_template/data.py | 21 ++++++++++++------- src/blenderbim/test/bim/test_feature.py | 6 +----- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/pset_template/data.py b/src/blenderbim/blenderbim/bim/module/pset_template/data.py index 8af3a19bbb..a48a315610 100644 --- a/src/blenderbim/blenderbim/bim/module/pset_template/data.py +++ b/src/blenderbim/blenderbim/bim/module/pset_template/data.py @@ -18,6 +18,7 @@ import os import bpy +import pathlib import ifcopenshell import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore @@ -51,17 +52,23 @@ class PsetTemplatesData: @classmethod def pset_template_files(cls): - files = os.listdir(os.path.join(bpy.context.scene.BIMProperties.data_dir, "pset")) - return [(f.replace(".ifc", ""), f.replace(".ifc", ""), "") for f in files] + results = [] + pset_dir = os.path.join(bpy.context.scene.BIMProperties.data_dir, "pset") + files = os.listdir(pset_dir) + for f in files: + results.append((os.path.join(pset_dir, f), f.strip(".ifc"), "Global Pset Template")) + + pset_dir = tool.Ifc.resolve_uri(bpy.context.scene.BIMProperties.pset_dir) + if os.path.isdir(pset_dir): + for path in pathlib.Path(pset_dir).glob("*.ifc"): + results.append((str(path), os.path.basename(str(path)).strip(".ifc"), "Project Pset Template")) + + return sorted(results, key=lambda x: x[1]) @classmethod def pset_templates(cls): if not IfcStore.pset_template_file: - IfcStore.pset_template_path = os.path.join( - bpy.context.scene.BIMProperties.data_dir, - "pset", - bpy.context.scene.BIMPsetTemplateProperties.pset_template_files + ".ifc", - ) + IfcStore.pset_template_path = bpy.context.scene.BIMPsetTemplateProperties.pset_template_files IfcStore.pset_template_file = ifcopenshell.open(IfcStore.pset_template_path) return [(str(t.id()), t.Name, "") for t in IfcStore.pset_template_file.by_type("IfcPropertySetTemplate")] diff --git a/src/blenderbim/test/bim/test_feature.py b/src/blenderbim/test/bim/test_feature.py index 050eeeb229..a5e073d510 100644 --- a/src/blenderbim/test/bim/test_feature.py +++ b/src/blenderbim/test/bim/test_feature.py @@ -94,11 +94,7 @@ def an_empty_ifc_2x3_project(): @when("I load a new pset template file") def i_load_a_new_pset_template_file(): - IfcStore.pset_template_path = os.path.join( - bpy.context.scene.BIMProperties.data_dir, - "pset", - bpy.context.scene.BIMPsetTemplateProperties.pset_template_files + ".ifc", - ) + IfcStore.pset_template_path = bpy.context.scene.BIMPsetTemplateProperties.pset_template_files IfcStore.pset_template_file = ifcopenshell.open(IfcStore.pset_template_path)