From 0596e2000c1c0b6f8e0b13d5d1f51a759b79ef00 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 28 Jul 2021 18:20:47 +1000 Subject: [PATCH] New debug utility to purge all Blender IFC links. See #1599. --- .../blenderbim/bim/module/debug/__init__.py | 1 + .../blenderbim/bim/module/debug/operator.py | 34 ++++++++++++++----- .../blenderbim/bim/module/debug/ui.py | 3 ++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/debug/__init__.py b/src/blenderbim/blenderbim/bim/module/debug/__init__.py index 4522ae260a..b5d7474567 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/debug/__init__.py @@ -3,6 +3,7 @@ from . import ui, prop, operator classes = ( operator.PrintIfcFile, + operator.PurgeIfcLinks, operator.PrintObjectPlacement, operator.ValidateIfcFile, operator.ProfileImportIFC, diff --git a/src/blenderbim/blenderbim/bim/module/debug/operator.py b/src/blenderbim/blenderbim/bim/module/debug/operator.py index a4d2d18a91..c69bc8da50 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/operator.py +++ b/src/blenderbim/blenderbim/bim/module/debug/operator.py @@ -2,6 +2,8 @@ import bpy import logging import ifcopenshell import ifcopenshell.util.placement +import ifcopenshell.util.representation +import blenderbim.bim.handler import blenderbim.bim.import_ifc as import_ifc from blenderbim.bim.ifc import IfcStore @@ -15,6 +17,24 @@ class PrintIfcFile(bpy.types.Operator): return {"FINISHED"} +class PurgeIfcLinks(bpy.types.Operator): + bl_idname = "bim.purge_ifc_links" + bl_label = "Purge IFC Links" + + def execute(self, context): + for obj in bpy.data.objects: + if obj.type in {"MESH", "EMPTY"}: + obj.BIMObjectProperties.ifc_definition_id = 0 + if obj.data: + obj.data.BIMMeshProperties.ifc_definition_id = 0 + for material in bpy.data.materials: + material.BIMMaterialProperties.ifc_style_id = False + bpy.context.scene.BIMProperties.ifc_file = "" + IfcStore.purge() + blenderbim.bim.handler.purge_module_data() + return {"FINISHED"} + + class ValidateIfcFile(bpy.types.Operator): bl_idname = "bim.validate_ifc_file" bl_label = "Validate IFC File" @@ -37,11 +57,9 @@ class ProfileImportIFC(bpy.types.Operator): import pstats # For Windows - filepath = bpy.context.scene.BIMProperties.ifc_file.replace('\\', '\\\\') + filepath = bpy.context.scene.BIMProperties.ifc_file.replace("\\", "\\\\") - cProfile.run( - f"import bpy; bpy.ops.import_ifc.bim(filepath='{filepath}')", "blender.prof" - ) + cProfile.run(f"import bpy; bpy.ops.import_ifc.bim(filepath='{filepath}')", "blender.prof") p = pstats.Stats("blender.prof") p.sort_stats("cumulative").print_stats(50) return {"FINISHED"} @@ -57,18 +75,18 @@ class CreateAllShapes(bpy.types.Operator): total = len(elements) settings = ifcopenshell.geom.settings() failures = [] - excludes = () # For the developer to debug with + excludes = () # For the developer to debug with for i, element in enumerate(elements): if element.GlobalId in excludes: continue - print(f'{i}/{total}:', element) + print(f"{i}/{total}:", element) try: shape = ifcopenshell.geom.create_shape(settings, element) print("Success", len(shape.geometry.verts), len(shape.geometry.edges), len(shape.geometry.faces)) except: failures.append(element) - print('***** FAILURE *****') - print('Failures:') + print("***** FAILURE *****") + print("Failures:") for failure in failures: print(failure) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/debug/ui.py b/src/blenderbim/blenderbim/bim/module/debug/ui.py index b91212c283..a7cd696c83 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/ui.py +++ b/src/blenderbim/blenderbim/bim/module/debug/ui.py @@ -23,6 +23,9 @@ class BIM_PT_debug(Panel): row = layout.row() row.operator("bim.print_ifc_file") + row = layout.row() + row.operator("bim.purge_ifc_links") + row = layout.row() row.operator("bim.create_all_shapes")