From 9bca705dc3649599998b7ac728eae7ddd184d925 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sat, 8 Apr 2023 11:36:59 +0500 Subject: [PATCH] Solved producing orphan objects data on drawing deletion --- src/blenderbim/blenderbim/tool/drawing.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 8532998451..f6b4a69a42 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -146,7 +146,20 @@ class Drawing(blenderbim.core.tool.Drawing): tool.Ifc.delete(element) obj = tool.Ifc.get_object(element) if obj: + obj_data = obj.data bpy.data.objects.remove(obj) + if obj_data.users == 0: # in case we have drawing element types + cls.remove_object_data(obj_data) + + @classmethod + def remove_object_data(cls, data): + """also removes all related objects""" + if isinstance(data, bpy.types.Camera): + bpy.data.cameras.remove(data) + elif isinstance(data, bpy.types.Mesh): + bpy.data.meshes.remove(data) + elif isinstance(data, bpy.types.Curve): + bpy.data.curves.remove(C.object.data) @classmethod def delete_object(cls, obj): @@ -1244,7 +1257,7 @@ class Drawing(blenderbim.core.tool.Drawing): # sync viewport objects visibility with selectors from EPset_Drawing/Include and /Exclude drawing_elements = cls.get_drawing_elements(tool.Ifc.get_entity(camera)) for element in tool.Ifc.get().by_type("IfcElement"): - if element.is_a() in ("IfcOpeningElement", ): + if element.is_a() in ("IfcOpeningElement",): continue obj = tool.Ifc.get_object(element)