From 8411333f661af994a631b928ea5e11ef69ec6de6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 20 Jan 2021 16:53:34 +1100 Subject: [PATCH] WIP implement project UI to show basic project metadata. See #1222. --- .../blenderbim/bim/__init__.py | 2 - .../blenderbim/bim/import_ifc.py | 11 ---- .../blenderbim/bim/module/project/__init__.py | 1 + .../blenderbim/bim/module/project/operator.py | 14 +++++ .../blenderbim/bim/module/project/ui.py | 56 ++++++++++++++----- .../blenderbim/bim/operator.py | 39 +------------ src/ifcblenderexport/blenderbim/bim/prop.py | 1 - src/ifcblenderexport/blenderbim/bim/ui.py | 43 +------------- 8 files changed, 61 insertions(+), 106 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index d06f30ca42..6437767d8f 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -46,7 +46,6 @@ if bpy is not None: operator.SelectDataDir, operator.SelectSchemaDir, operator.SelectIfcFile, - operator.ValidateIfcFile, operator.ExportIFC, operator.ImportIFC, operator.ColourByAttribute, @@ -221,7 +220,6 @@ if bpy is not None: ui.BIM_PT_drawings, ui.BIM_PT_schedules, ui.BIM_PT_sheets, - ui.BIM_PT_bim, ui.BIM_PT_psets, ui.BIM_PT_classifications, ui.BIM_PT_document_information, diff --git a/src/ifcblenderexport/blenderbim/bim/import_ifc.py b/src/ifcblenderexport/blenderbim/bim/import_ifc.py index b00fb08b8b..605cebe288 100644 --- a/src/ifcblenderexport/blenderbim/bim/import_ifc.py +++ b/src/ifcblenderexport/blenderbim/bim/import_ifc.py @@ -335,8 +335,6 @@ class IfcImporter: self.profile_code("Purge diffs") self.load_existing_rooted_elements() self.profile_code("Load existing rooted elements") - self.cache_file() - self.profile_code("Caching file") self.load_file() self.profile_code("Loading file") self.set_ifc_file() @@ -1219,15 +1217,6 @@ class IfcImporter: with open(self.ifc_import_settings.diff_file, "r") as file: self.diff = json.load(file) - def cache_file(self): - destination = os.path.join(bpy.context.scene.BIMProperties.data_dir, "cache", "ifc") - copythread = FileCopy(self.ifc_import_settings.input_file, destination) - bpy.context.scene.BIMProperties.ifc_cache = os.path.join( - destination, os.path.basename(self.ifc_import_settings.input_file) - ) - copythread.start() - copythread.join() - def load_file(self): self.ifc_import_settings.logger.info("loading file %s", self.ifc_import_settings.input_file) extension = self.ifc_import_settings.input_file.split(".")[-1] diff --git a/src/ifcblenderexport/blenderbim/bim/module/project/__init__.py b/src/ifcblenderexport/blenderbim/bim/module/project/__init__.py index 916f953901..2e0535b86d 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/project/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/module/project/__init__.py @@ -3,6 +3,7 @@ from . import ui, operator classes = ( operator.CreateProject, + operator.ValidateIfcFile, ui.BIM_PT_project, ) diff --git a/src/ifcblenderexport/blenderbim/bim/module/project/operator.py b/src/ifcblenderexport/blenderbim/bim/module/project/operator.py index a16b75cc38..7f50b49a2b 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/project/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/module/project/operator.py @@ -1,4 +1,5 @@ import bpy +import logging import ifcopenshell import blenderbim.bim.module.project.create_file as create_file import blenderbim.bim.module.context.add_context as add_context @@ -57,3 +58,16 @@ class CreateProject(bpy.types.Operator): "relating_object": relating_object, }, ).execute() + + +class ValidateIfcFile(bpy.types.Operator): + bl_idname = "bim.validate_ifc_file" + bl_label = "Validate IFC File" + + def execute(self, context): + import ifcopenshell.validate + + logger = logging.getLogger("validate") + logger.setLevel(logging.DEBUG) + ifcopenshell.validate.validate(IfcStore.get_file(), logger) + return {"FINISHED"} diff --git a/src/ifcblenderexport/blenderbim/bim/module/project/ui.py b/src/ifcblenderexport/blenderbim/bim/module/project/ui.py index 4ed7b4d20d..95281b0d39 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/project/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/module/project/ui.py @@ -1,3 +1,4 @@ +import os from bpy.types import Panel from blenderbim.bim.ifc import IfcStore @@ -13,19 +14,46 @@ class BIM_PT_project(Panel): self.layout.use_property_decorate = False self.layout.use_property_split = True self.file = IfcStore.get_file() - props = context.scene.BIMProperties if self.file: - pass + self.draw_project_ui(context) else: - row = self.layout.row() - row.prop(props, "export_schema") - row = self.layout.row() - row.prop(context.scene.unit_settings, "system") - row = self.layout.row() - row.prop(context.scene.unit_settings, "length_unit") - row = self.layout.row() - row.prop(props, "area_unit", text="Area Unit") - row = self.layout.row() - row.prop(props, "volume_unit", text="Volume Unit") - row = self.layout.row() - row.operator("bim.create_project") + self.draw_create_project_ui(context) + + def draw_project_ui(self, context): + props = context.scene.BIMProperties + row = self.layout.row(align=True) + row.label(text="IFC File", icon="FILE") + row.label(text=os.path.basename(props.ifc_file)) + + row = self.layout.row(align=True) + row.label(text="IFC Schema", icon="FILE_CACHE") + row.label(text=IfcStore.get_file().schema) + + row = self.layout.row(align=True) + row.prop(props, "ifc_file", text="") + row.operator("bim.reload_ifc_file", icon="FILE_REFRESH", text="") + row.operator("bim.validate_ifc_file", icon="CHECKMARK", text="") + row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="") + + row = self.layout.row(align=True) + row.prop(props, "schema_dir") + row.operator("bim.select_schema_dir", icon="FILE_FOLDER", text="") + + row = self.layout.row(align=True) + row.prop(props, "data_dir") + row.operator("bim.select_data_dir", icon="FILE_FOLDER", text="") + + def draw_create_project_ui(self, context): + props = context.scene.BIMProperties + row = self.layout.row() + row.prop(props, "export_schema") + row = self.layout.row() + row.prop(context.scene.unit_settings, "system") + row = self.layout.row() + row.prop(context.scene.unit_settings, "length_unit") + row = self.layout.row() + row.prop(props, "area_unit", text="Area Unit") + row = self.layout.row() + row.prop(props, "volume_unit", text="Volume Unit") + row = self.layout.row() + row.operator("bim.create_project") diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index 22a4e0e0bb..d320e282d2 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -1220,19 +1220,6 @@ class SelectIfcFile(bpy.types.Operator): return {"RUNNING_MODAL"} -class ValidateIfcFile(bpy.types.Operator): - bl_idname = "bim.validate_ifc_file" - bl_label = "Validate IFC File" - - def execute(self, context): - import ifcopenshell.validate - - logger = logging.getLogger("validate") - logger.setLevel(logging.DEBUG) - ifcopenshell.validate.validate(ifc.IfcStore.get_file(), logger) - return {"FINISHED"} - - class SelectDataDir(bpy.types.Operator): bl_idname = "bim.select_data_dir" bl_label = "Select Data Directory" @@ -2210,33 +2197,9 @@ class ReloadIfcFile(bpy.types.Operator): bl_label = "Reload IFC File" def execute(self, context): - self.diff_ifc() - self.reimport_ifc(context) + # TODO: reimplement. See #1222. return {"FINISHED"} - def diff_ifc(self): - import ifcdiff - - temp_file = tempfile.NamedTemporaryFile(delete=False) - temp_file.close() - ifc_diff = ifcdiff.IfcDiff( - bpy.context.scene.BIMProperties.ifc_cache, bpy.context.scene.BIMProperties.ifc_file, temp_file.name - ) - ifc_diff.diff() - ifc_diff.export() - bpy.context.scene.BIMProperties.diff_json_file = temp_file.name - - def reimport_ifc(self, context): - logger = logging.getLogger("ImportIFC") - logging.basicConfig( - filename=bpy.context.scene.BIMProperties.data_dir + "process.log", filemode="a", level=logging.DEBUG - ) - ifc_import_settings = import_ifc.IfcImportSettings.factory( - context, bpy.context.scene.BIMProperties.ifc_file, logger - ) - ifc_importer = import_ifc.IfcImporter(ifc_import_settings) - ifc_importer.execute() - class AddIfcFile(bpy.types.Operator): bl_idname = "bim.add_ifc_file" diff --git a/src/ifcblenderexport/blenderbim/bim/prop.py b/src/ifcblenderexport/blenderbim/bim/prop.py index 780745cac4..21fcdec6e6 100644 --- a/src/ifcblenderexport/blenderbim/bim/prop.py +++ b/src/ifcblenderexport/blenderbim/bim/prop.py @@ -996,7 +996,6 @@ class BIMProperties(PropertyGroup): schema_dir: StringProperty(default=os.path.join(cwd, "schema") + os.path.sep, name="Schema Directory") data_dir: StringProperty(default=os.path.join(cwd, "data") + os.path.sep, name="Data Directory") ifc_file: StringProperty(name="IFC File") - ifc_cache: StringProperty(name="IFC Cache") ifc_product: EnumProperty(items=getIfcProducts, name="Products", update=refreshClasses) ifc_class: EnumProperty(items=getIfcClasses, name="Class", update=refreshPredefinedTypes) ifc_predefined_type: EnumProperty(items=getIfcPredefinedTypes, name="Predefined Type", default=None) diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index a0a698b400..1d45f5cc42 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -732,46 +732,6 @@ class BIM_PT_text(Panel): row.prop(variable, "prop_key") -class BIM_PT_bim(Panel): - bl_label = "Building Information Modeling" - bl_idname = "BIM_PT_bim" - bl_space_type = "PROPERTIES" - bl_region_type = "WINDOW" - bl_context = "scene" - - def draw(self, context): - layout = self.layout - layout.use_property_split = True - - scene = context.scene - bim_properties = scene.BIMProperties - - layout.label(text="System Setup:") - - row = layout.row(align=True) - row.prop(bim_properties, "schema_dir") - row.operator("bim.select_schema_dir", icon="FILE_FOLDER", text="") - - row = layout.row(align=True) - row.prop(bim_properties, "data_dir") - row.operator("bim.select_data_dir", icon="FILE_FOLDER", text="") - - row = layout.row(align=True) - row.prop(bim_properties, "ifc_file") - row.operator("bim.reload_ifc_file", icon="FILE_REFRESH", text="") - row.operator("bim.validate_ifc_file", icon="CHECKMARK", text="") - row.operator("bim.select_ifc_file", icon="FILE_FOLDER", text="") - - row = layout.row(align=True) - row.prop(bim_properties, "ifc_cache") - - layout.label(text="IFC Categorisation:") - - row = layout.row(align=True) - row.operator("bim.select_class") - row.operator("bim.select_type") - - class BIM_PT_search(Panel): bl_label = "IFC Search" bl_idname = "BIM_PT_search" @@ -811,6 +771,9 @@ class BIM_PT_search(Panel): row.operator("bim.select_pset", text="", icon="VIEWZOOM") row.operator("bim.colour_by_pset", text="", icon="BRUSH_DATA") + row = layout.row(align=True) + row.operator("bim.select_class") + row.operator("bim.select_type") class BIM_PT_library(Panel):