From 497f793a6b8be0d865967ea9798860be184a1d48 Mon Sep 17 00:00:00 2001 From: ihabelaghoury <46285271+ihabelaghoury@users.noreply.github.com> Date: Tue, 12 Jan 2021 01:02:37 +0200 Subject: [PATCH] Cobie Module Refactoring (#1252) * Create Mylog.txt * Remove Cobie references from ui and operator * Update __init__.py * Extra Updates * Update operator.py * Update ui.py Co-authored-by: Ihab El Aghoury --- .../blenderbim/bim/__init__.py | 10 +-- .../blenderbim/bim/module/cobie/__init__.py | 17 ++++ .../blenderbim/bim/module/cobie/operator.py | 81 +++++++++++++++++++ .../blenderbim/bim/module/cobie/ui.py | 39 +++++++++ .../blenderbim/bim/operator.py | 79 ------------------ src/ifcblenderexport/blenderbim/bim/ui.py | 37 --------- 6 files changed, 142 insertions(+), 121 deletions(-) create mode 100644 src/ifcblenderexport/blenderbim/bim/module/cobie/__init__.py create mode 100644 src/ifcblenderexport/blenderbim/bim/module/cobie/operator.py create mode 100644 src/ifcblenderexport/blenderbim/bim/module/cobie/ui.py diff --git a/src/ifcblenderexport/blenderbim/bim/__init__.py b/src/ifcblenderexport/blenderbim/bim/__init__.py index 70ac59e636..525cf58ccf 100644 --- a/src/ifcblenderexport/blenderbim/bim/__init__.py +++ b/src/ifcblenderexport/blenderbim/bim/__init__.py @@ -21,6 +21,7 @@ if bpy is not None: import blenderbim.bim.module.style as module_style import blenderbim.bim.module.type as module_type import blenderbim.bim.module.unit as module_unit + import blenderbim.bim.module.cobie as module_cobie from . import ui, prop, operator classes = [ @@ -153,9 +154,6 @@ if bpy is not None: operator.GuessQuantity, operator.ExecuteBIMTester, operator.BIMTesterPurge, - operator.SelectCobieIfcFile, - operator.SelectCobieJsonFile, - operator.ExecuteIfcCobie, operator.SelectIfcPatchInput, operator.SelectIfcPatchOutput, operator.ExecuteIfcPatch, @@ -258,7 +256,6 @@ if bpy is not None: ui.BIM_PT_gis, ui.BIM_PT_presentation_layers, ui.BIM_PT_diff, - ui.BIM_PT_cobie, ui.BIM_PT_patch, ui.BIM_PT_mvd, ui.BIM_PT_material, @@ -304,7 +301,8 @@ if bpy is not None: classes.extend(module_style.classes) classes.extend(module_type.classes) classes.extend(module_unit.classes) - + classes.extend(module_cobie.classes) + def menu_func_export(self, context): self.layout.operator(operator.ExportIFC.bl_idname, text="Industry Foundation Classes (.ifc/.ifczip/.ifcjson)") @@ -350,6 +348,7 @@ if bpy is not None: module_style.register() module_type.register() module_unit.register() + module_cobie.register() bpy.app.handlers.depsgraph_update_pre.append(operator.depsgraph_update_pre_handler) bpy.app.handlers.load_post.append(prop.toggleDecorationsOnLoad) @@ -370,6 +369,7 @@ if bpy is not None: del bpy.types.Camera.BIMCameraProperties del bpy.types.TextCurve.BIMTextProperties bpy.types.SCENE_PT_unit.remove(ui.ifc_units) + module_cobie.unregister() module_unit.unregister() module_type.unregister() module_style.unregister() diff --git a/src/ifcblenderexport/blenderbim/bim/module/cobie/__init__.py b/src/ifcblenderexport/blenderbim/bim/module/cobie/__init__.py new file mode 100644 index 0000000000..2f4f1736ba --- /dev/null +++ b/src/ifcblenderexport/blenderbim/bim/module/cobie/__init__.py @@ -0,0 +1,17 @@ +import bpy +from . import ui, operator + +classes = ( + operator.SelectCobieIfcFile, + operator.SelectCobieJsonFile, + operator.ExecuteIfcCobie, + ui.BIM_PT_cobie, +) + + +def register(): + pass + + +def unregister(): + pass diff --git a/src/ifcblenderexport/blenderbim/bim/module/cobie/operator.py b/src/ifcblenderexport/blenderbim/bim/module/cobie/operator.py new file mode 100644 index 0000000000..32a95b59e7 --- /dev/null +++ b/src/ifcblenderexport/blenderbim/bim/module/cobie/operator.py @@ -0,0 +1,81 @@ +import bpy +from blenderbim.bim.ifc import IfcStore + +class SelectCobieIfcFile(bpy.types.Operator): + bl_idname = "bim.select_cobie_ifc_file" + bl_label = "Select COBie IFC File" + filepath: bpy.props.StringProperty(subtype="FILE_PATH") + + def execute(self, context): + bpy.context.scene.BIMProperties.cobie_ifc_file = self.filepath + return {"FINISHED"} + + def invoke(self, context, event): + context.window_manager.fileselect_add(self) + return {"RUNNING_MODAL"} + + +class SelectCobieJsonFile(bpy.types.Operator): + bl_idname = "bim.select_cobie_json_file" + bl_label = "Select COBie JSON File" + filepath: bpy.props.StringProperty(subtype="FILE_PATH") + + def execute(self, context): + bpy.context.scene.BIMProperties.cobie_json_file = self.filepath + return {"FINISHED"} + + def invoke(self, context, event): + context.window_manager.fileselect_add(self) + return {"RUNNING_MODAL"} + + +class ExecuteIfcCobie(bpy.types.Operator): + bl_idname = "bim.execute_ifc_cobie" + bl_label = "Execute IFCCOBie" + file_format: bpy.props.StringProperty() + + def execute(self, context): + from cobie import IfcCobieParser + + output_dir = os.path.dirname(bpy.context.scene.BIMProperties.cobie_ifc_file) + output = os.path.join(output_dir, "output") + logger = logging.getLogger("IFCtoCOBie") + fh = logging.FileHandler(os.path.join(output_dir, "cobie.log")) + fh.setLevel(logging.DEBUG) + fh.setFormatter(logging.Formatter("%(asctime)s : %(levelname)s : %(message)s")) + logger = logging.getLogger("IFCtoCOBie") + logger.addHandler(fh) + selector = ifcopenshell.util.selector.Selector() + if bpy.context.scene.BIMProperties.cobie_json_file: + with open(bpy.context.scene.BIMProperties.cobie_json_file, "r") as f: + custom_data = json.load(f) + else: + custom_data = {} + parser = IfcCobieParser(logger, selector) + parser.parse( + bpy.context.scene.BIMProperties.cobie_ifc_file, + bpy.context.scene.BIMProperties.cobie_types, + bpy.context.scene.BIMProperties.cobie_components, + custom_data, + ) + if self.file_format == "xlsx": + from cobie import CobieXlsWriter + + writer = CobieXlsWriter(parser, output) + writer.write() + webbrowser.open("file://" + output + "." + self.file_format) + elif self.file_format == "ods": + from cobie import CobieOdsWriter + + writer = CobieOdsWriter(parser, output) + writer.write() + webbrowser.open("file://" + output + "." + self.file_format) + else: + from cobie import CobieCsvWriter + + writer = CobieCsvWriter(parser, output_dir) + writer.write() + webbrowser.open("file://" + output_dir) + webbrowser.open("file://" + output_dir + "/cobie.log") + return {"FINISHED"} + diff --git a/src/ifcblenderexport/blenderbim/bim/module/cobie/ui.py b/src/ifcblenderexport/blenderbim/bim/module/cobie/ui.py new file mode 100644 index 0000000000..18c71f404c --- /dev/null +++ b/src/ifcblenderexport/blenderbim/bim/module/cobie/ui.py @@ -0,0 +1,39 @@ +from bpy.types import Panel +from blenderbim.bim.ifc import IfcStore + + +class BIM_PT_cobie(Panel): + bl_label = "IFC COBie" + bl_idname = "BIM_PT_cobie" + bl_options = {"DEFAULT_CLOSED"} + 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 + props = scene.BIMProperties + + row = layout.row(align=True) + row.prop(props, "cobie_ifc_file") + row.operator("bim.select_cobie_ifc_file", icon="FILE_FOLDER", text="") + + row = layout.row() + row.prop(props, "cobie_types") + row = layout.row() + row.prop(props, "cobie_components") + + row = layout.row(align=True) + row.prop(props, "cobie_json_file") + row.operator("bim.select_cobie_json_file", icon="FILE_FOLDER", text="") + + row = layout.row() + op = row.operator("bim.execute_ifc_cobie", text="CSV") + op.file_format = "csv" + op = row.operator("bim.execute_ifc_cobie", text="ODS") + op.file_format = "ods" + op = row.operator("bim.execute_ifc_cobie", text="XLSX") + op.file_format = "xlsx" diff --git a/src/ifcblenderexport/blenderbim/bim/operator.py b/src/ifcblenderexport/blenderbim/bim/operator.py index dc8c689274..a7ca2e9c93 100644 --- a/src/ifcblenderexport/blenderbim/bim/operator.py +++ b/src/ifcblenderexport/blenderbim/bim/operator.py @@ -864,85 +864,6 @@ class SelectExternalMaterialDir(bpy.types.Operator): return {"RUNNING_MODAL"} -class SelectCobieIfcFile(bpy.types.Operator): - bl_idname = "bim.select_cobie_ifc_file" - bl_label = "Select COBie IFC File" - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - bpy.context.scene.BIMProperties.cobie_ifc_file = self.filepath - return {"FINISHED"} - - def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - - -class SelectCobieJsonFile(bpy.types.Operator): - bl_idname = "bim.select_cobie_json_file" - bl_label = "Select COBie JSON File" - filepath: bpy.props.StringProperty(subtype="FILE_PATH") - - def execute(self, context): - bpy.context.scene.BIMProperties.cobie_json_file = self.filepath - return {"FINISHED"} - - def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {"RUNNING_MODAL"} - - -class ExecuteIfcCobie(bpy.types.Operator): - bl_idname = "bim.execute_ifc_cobie" - bl_label = "Execute IFCCOBie" - file_format: bpy.props.StringProperty() - - def execute(self, context): - from cobie import IfcCobieParser - - output_dir = os.path.dirname(bpy.context.scene.BIMProperties.cobie_ifc_file) - output = os.path.join(output_dir, "output") - logger = logging.getLogger("IFCtoCOBie") - fh = logging.FileHandler(os.path.join(output_dir, "cobie.log")) - fh.setLevel(logging.DEBUG) - fh.setFormatter(logging.Formatter("%(asctime)s : %(levelname)s : %(message)s")) - logger = logging.getLogger("IFCtoCOBie") - logger.addHandler(fh) - selector = ifcopenshell.util.selector.Selector() - if bpy.context.scene.BIMProperties.cobie_json_file: - with open(bpy.context.scene.BIMProperties.cobie_json_file, "r") as f: - custom_data = json.load(f) - else: - custom_data = {} - parser = IfcCobieParser(logger, selector) - parser.parse( - bpy.context.scene.BIMProperties.cobie_ifc_file, - bpy.context.scene.BIMProperties.cobie_types, - bpy.context.scene.BIMProperties.cobie_components, - custom_data, - ) - if self.file_format == "xlsx": - from cobie import CobieXlsWriter - - writer = CobieXlsWriter(parser, output) - writer.write() - webbrowser.open("file://" + output + "." + self.file_format) - elif self.file_format == "ods": - from cobie import CobieOdsWriter - - writer = CobieOdsWriter(parser, output) - writer.write() - webbrowser.open("file://" + output + "." + self.file_format) - else: - from cobie import CobieCsvWriter - - writer = CobieCsvWriter(parser, output_dir) - writer.write() - webbrowser.open("file://" + output_dir) - webbrowser.open("file://" + output_dir + "/cobie.log") - return {"FINISHED"} - - class ExecuteIfcPatch(bpy.types.Operator): bl_idname = "bim.execute_ifc_patch" bl_label = "Execute IFCPatch" diff --git a/src/ifcblenderexport/blenderbim/bim/ui.py b/src/ifcblenderexport/blenderbim/bim/ui.py index 9cc4157c53..96321153b5 100644 --- a/src/ifcblenderexport/blenderbim/bim/ui.py +++ b/src/ifcblenderexport/blenderbim/bim/ui.py @@ -1281,43 +1281,6 @@ class BIM_PT_diff(Panel): row.operator("bim.execute_ifc_diff") -class BIM_PT_cobie(Panel): - bl_label = "IFC COBie" - bl_idname = "BIM_PT_cobie" - bl_options = {"DEFAULT_CLOSED"} - 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 - props = scene.BIMProperties - - row = layout.row(align=True) - row.prop(props, "cobie_ifc_file") - row.operator("bim.select_cobie_ifc_file", icon="FILE_FOLDER", text="") - - row = layout.row() - row.prop(props, "cobie_types") - row = layout.row() - row.prop(props, "cobie_components") - - row = layout.row(align=True) - row.prop(props, "cobie_json_file") - row.operator("bim.select_cobie_json_file", icon="FILE_FOLDER", text="") - - row = layout.row() - op = row.operator("bim.execute_ifc_cobie", text="CSV") - op.file_format = "csv" - op = row.operator("bim.execute_ifc_cobie", text="ODS") - op.file_format = "ods" - op = row.operator("bim.execute_ifc_cobie", text="XLSX") - op.file_format = "xlsx" - - class BIM_PT_patch(Panel): bl_label = "IFC Patch" bl_idname = "BIM_PT_patch"