diff --git a/src/blenderbim/blenderbim/bim/module/model/slab.py b/src/blenderbim/blenderbim/bim/module/model/slab.py index ba6691799e..f151fe343e 100644 --- a/src/blenderbim/blenderbim/bim/module/model/slab.py +++ b/src/blenderbim/blenderbim/bim/module/model/slab.py @@ -562,6 +562,7 @@ def disable_editing_extrusion_profile(context): element = tool.Ifc.get_entity(obj) body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + profile_mesh = obj.data blenderbim.core.geometry.switch_representation( tool.Ifc, tool.Geometry, @@ -571,6 +572,7 @@ def disable_editing_extrusion_profile(context): is_global=True, should_sync_changes_first=False, ) + tool.Geometry.delete_data(profile_mesh) return {"FINISHED"} @@ -663,6 +665,7 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): ifcopenshell.util.element.replace_attribute(inverse, old_profile, profile) ifcopenshell.util.element.remove_deep2(tool.Ifc.get(), old_profile) + profile_mesh = obj.data blenderbim.core.geometry.switch_representation( tool.Ifc, tool.Geometry, @@ -672,6 +675,7 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator): is_global=True, should_sync_changes_first=False, ) + bpy.data.meshes.remove(profile_mesh) footprint_context = ifcopenshell.util.representation.get_context( tool.Ifc.get(), "Plan", "FootPrint", "SKETCH_VIEW" diff --git a/src/blenderbim/blenderbim/bim/module/profile/operator.py b/src/blenderbim/blenderbim/bim/module/profile/operator.py index b7f496a042..9b0f3ef397 100644 --- a/src/blenderbim/blenderbim/bim/module/profile/operator.py +++ b/src/blenderbim/blenderbim/bim/module/profile/operator.py @@ -148,7 +148,9 @@ def disable_editing_arbitrary_profile(context): if obj and obj.data and obj.data.BIMMeshProperties.subshape_type == "PROFILE": ProfileDecorator.uninstall() bpy.ops.object.mode_set(mode="OBJECT") + profile_mesh = obj.data bpy.data.objects.remove(obj) + bpy.data.meshes.remove(profile_mesh) # need to update profile manager ui # if this was called from decorator @@ -191,7 +193,10 @@ class EditArbitraryProfile(bpy.types.Operator, tool.Ifc.Operator): bpy.ops.object.mode_set(mode="EDIT") return + profile_mesh = obj.data bpy.data.objects.remove(obj) + bpy.data.meshes.remove(profile_mesh) + profile.ProfileType = old_profile.ProfileType profile.ProfileName = old_profile.ProfileName for inverse in tool.Ifc.get().get_inverse(old_profile): diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 3f74aef95b..640ccbb955 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -176,6 +176,11 @@ class Model(blenderbim.core.tool.Model): @classmethod def import_profile(cls, profile, obj=None, position=None): + """Creates new profile mesh and assigns it to `obj`, + if `obj` is `None` then new "Profile" object will be created. + + Need to make sure to remove temporary mesh/object after use to avoid orphan data. + """ cls.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) if position is None: