Fix #3484. You can now have project-specific pset templates distributed with your project in a relative path. Defaults to pset/.

This commit is contained in:
Dion Moult
2023-07-30 14:47:05 +10:00
parent 43f9d8888f
commit dc18f7a68a
5 changed files with 14 additions and 1 deletions
@@ -715,6 +715,7 @@ class LoadProjectElements(bpy.types.Operator):
print("Import finished in {:.2f} seconds".format(time.time() - start)) print("Import finished in {:.2f} seconds".format(time.time() - start))
context.scene.BIMProjectProperties.is_loading = False context.scene.BIMProjectProperties.is_loading = False
tool.Project.load_pset_templates()
tool.Project.load_default_thumbnails() tool.Project.load_default_thumbnails()
tool.Project.set_default_context() tool.Project.set_default_context()
tool.Project.set_default_modeling_dimensions() tool.Project.set_default_modeling_dimensions()
+1
View File
@@ -327,6 +327,7 @@ class BIMProperties(PropertyGroup):
data_dir: StringProperty( data_dir: StringProperty(
default=os.path.join(cwd, "data") + os.path.sep, name="Data Directory", update=update_data_dir 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) ifc_file: StringProperty(name="IFC File", update=update_ifc_file)
last_transaction: StringProperty(name="Last Transaction") last_transaction: StringProperty(name="Last Transaction")
should_section_selected_objects: BoolProperty(name="Section Selected Objects", default=False) should_section_selected_objects: BoolProperty(name="Section Selected Objects", default=False)
+1 -1
View File
@@ -17,10 +17,10 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import os import os
import bpy
import json import json
import ifcopenshell import ifcopenshell
import ifcopenshell.util.pset import ifcopenshell.util.pset
import bpy
from pathlib import Path from pathlib import Path
cwd = os.path.dirname(os.path.realpath(__file__)) cwd = os.path.dirname(os.path.realpath(__file__))
+2
View File
@@ -246,6 +246,8 @@ class BIM_ADDON_preferences(bpy.types.AddonPreferences):
row.prop(context.scene.BIMProperties, "data_dir") row.prop(context.scene.BIMProperties, "data_dir")
row.operator("bim.select_data_dir", icon="FILE_FOLDER", text="") 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 = self.layout.row(align=True)
row.prop(context.scene.DocProperties, "sheets_dir") row.prop(context.scene.DocProperties, "sheets_dir")
row = self.layout.row(align=True) row = self.layout.row(align=True)
@@ -21,8 +21,10 @@ import bpy
import ifcopenshell import ifcopenshell
import ifcopenshell.util.unit import ifcopenshell.util.unit
import blenderbim.core.tool import blenderbim.core.tool
import blenderbim.bim.schema
import blenderbim.tool as tool import blenderbim.tool as tool
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from pathlib import Path
class Project(blenderbim.core.tool.Project): 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() 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) 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 @classmethod
def run_aggregate_assign_object(cls, relating_obj=None, related_obj=None): def run_aggregate_assign_object(cls, relating_obj=None, related_obj=None):
return blenderbim.core.aggregate.assign_object( return blenderbim.core.aggregate.assign_object(