mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-10-02 04:59:52 +00:00
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 <ihab_elaghoury@yahoo.ca>
This commit is contained in:
@@ -21,6 +21,7 @@ if bpy is not None:
|
|||||||
import blenderbim.bim.module.style as module_style
|
import blenderbim.bim.module.style as module_style
|
||||||
import blenderbim.bim.module.type as module_type
|
import blenderbim.bim.module.type as module_type
|
||||||
import blenderbim.bim.module.unit as module_unit
|
import blenderbim.bim.module.unit as module_unit
|
||||||
|
import blenderbim.bim.module.cobie as module_cobie
|
||||||
from . import ui, prop, operator
|
from . import ui, prop, operator
|
||||||
|
|
||||||
classes = [
|
classes = [
|
||||||
@@ -153,9 +154,6 @@ if bpy is not None:
|
|||||||
operator.GuessQuantity,
|
operator.GuessQuantity,
|
||||||
operator.ExecuteBIMTester,
|
operator.ExecuteBIMTester,
|
||||||
operator.BIMTesterPurge,
|
operator.BIMTesterPurge,
|
||||||
operator.SelectCobieIfcFile,
|
|
||||||
operator.SelectCobieJsonFile,
|
|
||||||
operator.ExecuteIfcCobie,
|
|
||||||
operator.SelectIfcPatchInput,
|
operator.SelectIfcPatchInput,
|
||||||
operator.SelectIfcPatchOutput,
|
operator.SelectIfcPatchOutput,
|
||||||
operator.ExecuteIfcPatch,
|
operator.ExecuteIfcPatch,
|
||||||
@@ -258,7 +256,6 @@ if bpy is not None:
|
|||||||
ui.BIM_PT_gis,
|
ui.BIM_PT_gis,
|
||||||
ui.BIM_PT_presentation_layers,
|
ui.BIM_PT_presentation_layers,
|
||||||
ui.BIM_PT_diff,
|
ui.BIM_PT_diff,
|
||||||
ui.BIM_PT_cobie,
|
|
||||||
ui.BIM_PT_patch,
|
ui.BIM_PT_patch,
|
||||||
ui.BIM_PT_mvd,
|
ui.BIM_PT_mvd,
|
||||||
ui.BIM_PT_material,
|
ui.BIM_PT_material,
|
||||||
@@ -304,6 +301,7 @@ if bpy is not None:
|
|||||||
classes.extend(module_style.classes)
|
classes.extend(module_style.classes)
|
||||||
classes.extend(module_type.classes)
|
classes.extend(module_type.classes)
|
||||||
classes.extend(module_unit.classes)
|
classes.extend(module_unit.classes)
|
||||||
|
classes.extend(module_cobie.classes)
|
||||||
|
|
||||||
def menu_func_export(self, context):
|
def menu_func_export(self, context):
|
||||||
self.layout.operator(operator.ExportIFC.bl_idname, text="Industry Foundation Classes (.ifc/.ifczip/.ifcjson)")
|
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_style.register()
|
||||||
module_type.register()
|
module_type.register()
|
||||||
module_unit.register()
|
module_unit.register()
|
||||||
|
module_cobie.register()
|
||||||
bpy.app.handlers.depsgraph_update_pre.append(operator.depsgraph_update_pre_handler)
|
bpy.app.handlers.depsgraph_update_pre.append(operator.depsgraph_update_pre_handler)
|
||||||
bpy.app.handlers.load_post.append(prop.toggleDecorationsOnLoad)
|
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.Camera.BIMCameraProperties
|
||||||
del bpy.types.TextCurve.BIMTextProperties
|
del bpy.types.TextCurve.BIMTextProperties
|
||||||
bpy.types.SCENE_PT_unit.remove(ui.ifc_units)
|
bpy.types.SCENE_PT_unit.remove(ui.ifc_units)
|
||||||
|
module_cobie.unregister()
|
||||||
module_unit.unregister()
|
module_unit.unregister()
|
||||||
module_type.unregister()
|
module_type.unregister()
|
||||||
module_style.unregister()
|
module_style.unregister()
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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"}
|
||||||
|
|
||||||
@@ -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"
|
||||||
@@ -864,85 +864,6 @@ class SelectExternalMaterialDir(bpy.types.Operator):
|
|||||||
return {"RUNNING_MODAL"}
|
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):
|
class ExecuteIfcPatch(bpy.types.Operator):
|
||||||
bl_idname = "bim.execute_ifc_patch"
|
bl_idname = "bim.execute_ifc_patch"
|
||||||
bl_label = "Execute IFCPatch"
|
bl_label = "Execute IFCPatch"
|
||||||
|
|||||||
@@ -1281,43 +1281,6 @@ class BIM_PT_diff(Panel):
|
|||||||
row.operator("bim.execute_ifc_diff")
|
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):
|
class BIM_PT_patch(Panel):
|
||||||
bl_label = "IFC Patch"
|
bl_label = "IFC Patch"
|
||||||
bl_idname = "BIM_PT_patch"
|
bl_idname = "BIM_PT_patch"
|
||||||
|
|||||||
Reference in New Issue
Block a user