mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 09:32:37 +00:00
Cleaned up meshes produced during slab / arbitrary profile edit
Previously it was producing orphan meshes
This commit is contained in:
@@ -562,6 +562,7 @@ def disable_editing_extrusion_profile(context):
|
|||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
|
body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW")
|
||||||
|
|
||||||
|
profile_mesh = obj.data
|
||||||
blenderbim.core.geometry.switch_representation(
|
blenderbim.core.geometry.switch_representation(
|
||||||
tool.Ifc,
|
tool.Ifc,
|
||||||
tool.Geometry,
|
tool.Geometry,
|
||||||
@@ -571,6 +572,7 @@ def disable_editing_extrusion_profile(context):
|
|||||||
is_global=True,
|
is_global=True,
|
||||||
should_sync_changes_first=False,
|
should_sync_changes_first=False,
|
||||||
)
|
)
|
||||||
|
tool.Geometry.delete_data(profile_mesh)
|
||||||
return {"FINISHED"}
|
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.replace_attribute(inverse, old_profile, profile)
|
||||||
ifcopenshell.util.element.remove_deep2(tool.Ifc.get(), old_profile)
|
ifcopenshell.util.element.remove_deep2(tool.Ifc.get(), old_profile)
|
||||||
|
|
||||||
|
profile_mesh = obj.data
|
||||||
blenderbim.core.geometry.switch_representation(
|
blenderbim.core.geometry.switch_representation(
|
||||||
tool.Ifc,
|
tool.Ifc,
|
||||||
tool.Geometry,
|
tool.Geometry,
|
||||||
@@ -672,6 +675,7 @@ class EditExtrusionProfile(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
is_global=True,
|
is_global=True,
|
||||||
should_sync_changes_first=False,
|
should_sync_changes_first=False,
|
||||||
)
|
)
|
||||||
|
bpy.data.meshes.remove(profile_mesh)
|
||||||
|
|
||||||
footprint_context = ifcopenshell.util.representation.get_context(
|
footprint_context = ifcopenshell.util.representation.get_context(
|
||||||
tool.Ifc.get(), "Plan", "FootPrint", "SKETCH_VIEW"
|
tool.Ifc.get(), "Plan", "FootPrint", "SKETCH_VIEW"
|
||||||
|
|||||||
@@ -148,7 +148,9 @@ def disable_editing_arbitrary_profile(context):
|
|||||||
if obj and obj.data and obj.data.BIMMeshProperties.subshape_type == "PROFILE":
|
if obj and obj.data and obj.data.BIMMeshProperties.subshape_type == "PROFILE":
|
||||||
ProfileDecorator.uninstall()
|
ProfileDecorator.uninstall()
|
||||||
bpy.ops.object.mode_set(mode="OBJECT")
|
bpy.ops.object.mode_set(mode="OBJECT")
|
||||||
|
profile_mesh = obj.data
|
||||||
bpy.data.objects.remove(obj)
|
bpy.data.objects.remove(obj)
|
||||||
|
bpy.data.meshes.remove(profile_mesh)
|
||||||
|
|
||||||
# need to update profile manager ui
|
# need to update profile manager ui
|
||||||
# if this was called from decorator
|
# 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")
|
bpy.ops.object.mode_set(mode="EDIT")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
profile_mesh = obj.data
|
||||||
bpy.data.objects.remove(obj)
|
bpy.data.objects.remove(obj)
|
||||||
|
bpy.data.meshes.remove(profile_mesh)
|
||||||
|
|
||||||
profile.ProfileType = old_profile.ProfileType
|
profile.ProfileType = old_profile.ProfileType
|
||||||
profile.ProfileName = old_profile.ProfileName
|
profile.ProfileName = old_profile.ProfileName
|
||||||
for inverse in tool.Ifc.get().get_inverse(old_profile):
|
for inverse in tool.Ifc.get().get_inverse(old_profile):
|
||||||
|
|||||||
@@ -176,6 +176,11 @@ class Model(blenderbim.core.tool.Model):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def import_profile(cls, profile, obj=None, position=None):
|
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())
|
cls.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
|
||||||
|
|
||||||
if position is None:
|
if position is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user