From 36b45b744d961475bb39a95656bdb9f78de2df6e Mon Sep 17 00:00:00 2001 From: c4rlosdias Date: Tue, 18 Jul 2023 13:35:43 -0300 Subject: [PATCH] add export bcf to ifctester (2023_07_18) --- .../blenderbim/bim/module/tester/__init__.py | 1 + .../blenderbim/bim/module/tester/operator.py | 25 +++++++++++++++++-- .../blenderbim/bim/module/tester/ui.py | 4 +++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/tester/__init__.py b/src/blenderbim/blenderbim/bim/module/tester/__init__.py index 8daea23cf1..98480fa660 100644 --- a/src/blenderbim/blenderbim/bim/module/tester/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/tester/__init__.py @@ -25,6 +25,7 @@ classes = ( operator.SelectIfcTesterIfcFile, operator.SelectRequirement, operator.SelectEntity, + operator.ExportBcf, prop.FailedEntities, prop.Specification, prop.IfcTesterProperties, diff --git a/src/blenderbim/blenderbim/bim/module/tester/operator.py b/src/blenderbim/blenderbim/bim/module/tester/operator.py index 55cb3acf97..6926009602 100644 --- a/src/blenderbim/blenderbim/bim/module/tester/operator.py +++ b/src/blenderbim/blenderbim/bim/module/tester/operator.py @@ -54,7 +54,6 @@ class ExecuteIfcTester(bpy.types.Operator): print("Finished loading:", time.time() - start) start = time.time() specs.validate(ifc) - print(specs) print("Finished validating:", time.time() - start) start = time.time() @@ -63,7 +62,7 @@ class ExecuteIfcTester(bpy.types.Operator): engine.report() engine.to_file(output) webbrowser.open("file://" + output) - + report = None report = ifctester.reporter.Json(specs).report()['specifications'] if report: @@ -148,4 +147,26 @@ class SelectEntity(bpy.types.Operator): obj.select_set(True) bpy.context.view_layer.objects.active = obj return {"FINISHED"} + +class ExportBcf(bpy.types.Operator): + bl_idname = "bim.export_bcf" + bl_label = "Export BCF" + bl_options = {"REGISTER", "UNDO"} + + def execute(self, context): + props = context.scene.IfcTesterProperties + with tempfile.TemporaryDirectory() as dirpath: + output = os.path.join(dirpath, "{}.bcf".format(props.specs)) + if props.should_load_from_memory and tool.Ifc.get(): + ifc = tool.Ifc.get() + else: + ifc = ifcopenshell.open(props.ifc_file) + specs = ifctester.ids.open(props.specs) + specs.validate(ifc) + bcf_reporter = ifctester.reporter.Bcf(specs) + bcf_reporter.report() + bcf_reporter.to_file(output) + print("Finished exporting:") + + return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/tester/ui.py b/src/blenderbim/blenderbim/bim/module/tester/ui.py index feaffa30aa..1a7f466192 100644 --- a/src/blenderbim/blenderbim/bim/module/tester/ui.py +++ b/src/blenderbim/blenderbim/bim/module/tester/ui.py @@ -62,6 +62,10 @@ class BIM_PT_tester(Panel): ) self.draw_editable_ui(context) + + if self.props.has_report: + row = self.layout.row() + row.operator("bim.export_bcf", text="Export BCF", icon="EXPORT") def draw_editable_ui(self, context): props = context.scene.IfcTesterProperties