Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-05-16 16:01:17 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-05-16 17:43:14 +0300
commit901868a4b2fc6e70d9c74119d97c57de132859a3 (patch)
tree94f96b6fd5f8a1ec509c6551f504cad958c1688f
parent2e5b7a4a044ab982af66def583ae16bb563a1357 (diff)
Update for Depsgraph API changes
Addresses new behavior of object.to_mesh(). This is corresponding part for D4875. Reviewers: brecht Reviewed By: brecht Differential Revision: https://developer.blender.org/D4876
-rw-r--r--add_curve_ivygen.py5
-rw-r--r--animation_add_corrective_shape_key.py7
-rw-r--r--blenderkit/asset_inspector.py7
-rw-r--r--blenderkit/ui.py4
-rw-r--r--blenderkit/utils.py10
-rw-r--r--io_export_dxf/primitive_exporters/mesh_exporter.py6
-rw-r--r--io_export_pc2.py5
-rw-r--r--io_export_unreal_psk_psa.py9
-rw-r--r--io_mesh_ply/export_ply.py10
-rw-r--r--io_mesh_raw/export_raw.py6
-rw-r--r--io_mesh_stl/blender_utils.py14
-rw-r--r--io_scene_3ds/export_3ds.py5
-rw-r--r--io_scene_fbx/export_fbx_bin.py5
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py6
-rw-r--r--io_scene_ms3d/ms3d_export.py5
-rw-r--r--io_scene_obj/export_obj.py2
-rw-r--r--io_scene_vrml2/export_vrml2.py4
-rw-r--r--io_scene_x/export_x.py8
-rw-r--r--io_scene_x3d/export_x3d.py2
-rw-r--r--io_shape_mdd/export_mdd.py5
-rw-r--r--mesh_looptools.py5
-rw-r--r--mesh_tissue/lattice.py5
-rw-r--r--mesh_tissue/tessellate_numpy.py43
-rw-r--r--mesh_tissue/uv_to_mesh.py4
-rw-r--r--object_fracture_cell/fracture_cell_setup.py8
-rw-r--r--object_print3d_utils/mesh_helpers.py10
-rw-r--r--object_scatter/operator.py5
-rw-r--r--oscurart_tools/mesh/shapes_to_objects.py3
-rw-r--r--render_povray/render.py5
29 files changed, 152 insertions, 61 deletions
diff --git a/add_curve_ivygen.py b/add_curve_ivygen.py
index 60f6ec59..7c683846 100644
--- a/add_curve_ivygen.py
+++ b/add_curve_ivygen.py
@@ -439,12 +439,13 @@ def bvhtree_from_object(ob):
bm = bmesh.new()
depsgraph = context.evaluated_depsgraph_get()
- mesh = ob.evaluated_get(depsgraph).to_mesh()
+ ob_eval = ob.evaluated_get(depsgraph)
+ mesh = ob_eval.to_mesh()
bm.from_mesh(mesh)
bm.transform(ob.matrix_world)
bvhtree = BVHTree.FromBMesh(bm)
- bpy.data.meshes.remove(mesh)
+ ob_eval.to_mesh_clear()
return bvhtree
def check_mesh_faces(ob):
diff --git a/animation_add_corrective_shape_key.py b/animation_add_corrective_shape_key.py
index e40a7919..91d57396 100644
--- a/animation_add_corrective_shape_key.py
+++ b/animation_add_corrective_shape_key.py
@@ -71,7 +71,8 @@ def extract_mapped_coords(ob, shape_verts):
totvert = len(shape_verts)
depsgraph = context.evaluated_depsgraph_get()
- mesh = ob.evaluated_get(depsgraph).to_mesh()
+ ob_eval = ob.evaluated_get(depsgraph)
+ mesh = ob_eval.to_mesh()
# cheating, the original mapped verts happen
# to be at the end of the vertex array
@@ -79,7 +80,7 @@ def extract_mapped_coords(ob, shape_verts):
arr = [verts[i].co.copy() for i in range(len(verts) - totvert, len(verts))]
mesh.user_clear()
- bpy.data.meshes.remove(mesh)
+ ob_eval.to_mesh_clear()
return arr
@@ -203,7 +204,7 @@ class add_corrective_pose_shape(bpy.types.Operator):
def func_object_duplicate_flatten_modifiers(context, obj):
depsgraph = context.evaluated_depsgraph_get()
- mesh = obj.evaluated_get(depsgraph).to_mesh()
+ mesh = bpy.data.meshes.new_from_object(obj.evaluated_get(depsgraph))
name = obj.name + "_clean"
new_object = bpy.data.objects.new(name, mesh)
new_object.data = mesh
diff --git a/blenderkit/asset_inspector.py b/blenderkit/asset_inspector.py
index 93a39d59..58867d6e 100644
--- a/blenderkit/asset_inspector.py
+++ b/blenderkit/asset_inspector.py
@@ -204,9 +204,11 @@ def check_meshprops(props, obs):
for ob in obs:
if ob.type == 'MESH' or ob.type == 'CURVE':
+ ob_eval = None
if ob.type == 'CURVE':
depsgraph = bpy.context.evaluated_depsgraph_get()
- mesh = ob.evaluated_get(depsgraph).to_mesh()
+ ob_eval = ob.evaluated_get(depsgraph)
+ mesh = ob_eval.to_mesh()
else:
mesh = ob.data
fco = len(mesh.polygons)
@@ -244,6 +246,9 @@ def check_meshprops(props, obs):
fcor *= m.ratio
fcr += fcor
+ if ob_eval:
+ ob_eval.to_mesh_clear()
+
# write out props
props.face_count = fc
props.face_count_render = fcr
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index fd475af9..b0ac9209 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1242,8 +1242,10 @@ class AssetBarOperator(bpy.types.Operator):
target_object = object.name
# create final mesh to extract correct material slot
depsgraph = bpy.context.evaluated_depsgraph_get()
- temp_mesh = object.evaluated_get(depsgraph).to_mesh()
+ object_eval = object.evaluated_get(depsgraph)
+ temp_mesh = object_eval.to_mesh()
target_slot = temp_mesh.polygons[face_index].material_index
+ object_eval.to_mesh_clear()
else:
self.report({'WARNING'}, "Invalid or library object as input:")
target_object = ''
diff --git a/blenderkit/utils.py b/blenderkit/utils.py
index c6e97fa9..fd6c7d83 100644
--- a/blenderkit/utils.py
+++ b/blenderkit/utils.py
@@ -301,7 +301,8 @@ def get_bounds_snappable(obs, use_modifiers=False):
# If to_mesh() works we can use it on curves and any other ob type almost.
# disabled to_mesh for 2.8 by now, not wanting to use dependency graph yet.
depsgraph = bpy.context.evaluated_depsgraph_get()
- mesh = ob.evaluated_get(depsgraph).to_mesh()
+ object_eval = ob.evaluated_get(depsgraph)
+ mesh = object_eval.to_mesh()
# if self.applyModifiers:
# evaluated_get(depsgraph).to_mesh()
@@ -318,7 +319,8 @@ def get_bounds_snappable(obs, use_modifiers=False):
maxx = max(maxx, parent_coord.x)
maxy = max(maxy, parent_coord.y)
maxz = max(maxz, parent_coord.z)
- # bpy.data.meshes.remove(mesh)
+
+ object_eval.to_mesh_clear()
if obcount == 0:
minx, miny, minz, maxx, maxy, maxz = 0, 0, 0, 0, 0, 0
@@ -344,7 +346,8 @@ def get_bounds_worldspace(obs, use_modifiers=False):
mw = ob.matrix_world
if ob.type == 'MESH' or ob.type == 'CURVE':
depsgraph = bpy.context.evaluated_depsgraph_get()
- mesh = ob.evaluated_get(depsgraph).to_mesh()
+ ob_eval = ob.evaluated_get(depsgraph)
+ mesh = ob_eval.to_mesh()
obcount += 1
for c in mesh.vertices:
coord = c.co
@@ -355,6 +358,7 @@ def get_bounds_worldspace(obs, use_modifiers=False):
maxx = max(maxx, world_coord.x)
maxy = max(maxy, world_coord.y)
maxz = max(maxz, world_coord.z)
+ ob_eval.to_mesh_clear()
if obcount == 0:
minx, miny, minz, maxx, maxy, maxz = 0, 0, 0, 0, 0, 0
diff --git a/io_export_dxf/primitive_exporters/mesh_exporter.py b/io_export_dxf/primitive_exporters/mesh_exporter.py
index 358bc2e3..6b1f0a41 100644
--- a/io_export_dxf/primitive_exporters/mesh_exporter.py
+++ b/io_export_dxf/primitive_exporters/mesh_exporter.py
@@ -42,7 +42,11 @@ class MeshDXFExporter(BasePrimitiveDXFExporter):
entities = self._writeInsert(ob, mx, me.name, **(kwargs))
else: # no other instances, so go the standard way
- return self._standard_way(drawing, me, mx, mx_n)
+ self._standard_way(drawing, me, mx, mx_n)
+
+ if obj.modifiers and settings['apply_modifiers']:
+ depsgraph = ctx.evaluated_depsgraph_get()
+ obj.evaluated_get(depsgraph).to_mesh_clear()
def _writeInsert(self, drawing, ob, mx, insert_name, **kwargs):
from insert_exporter import InsertDXFExporter
diff --git a/io_export_pc2.py b/io_export_pc2.py
index 5e69d14f..a5ad1b0c 100644
--- a/io_export_pc2.py
+++ b/io_export_pc2.py
@@ -112,7 +112,10 @@ def do_export(context, props, filepath):
float(v.co[2]))
file.write(thisVertex)
- bpy.data.meshes.remove(me, do_unlink=True)
+ if apply_modifiers:
+ ob.evaluated_get(depsgraph).to_mesh_clear()
+ else:
+ me = ob.to_mesh_clear()
file.flush()
file.close()
diff --git a/io_export_unreal_psk_psa.py b/io_export_unreal_psk_psa.py
index 4851586b..cbccdb9b 100644
--- a/io_export_unreal_psk_psa.py
+++ b/io_export_unreal_psk_psa.py
@@ -982,7 +982,7 @@ def triangulate_mesh(object):
me_ob = object.copy()
depsgraph = bpy.context.evaluated_depsgraph_get()
- me_ob.data = object.evaluated_get(depsgraph).to_mesh() # write data object
+ me_ob.data = bpy.data.meshes.new_from_object(object.evaluated_get(depsgraph)) # write data object
bpy.context.collection.objects.link(me_ob)
bpy.context.scene.update()
bpy.ops.object.mode_set(mode='OBJECT')
@@ -1007,7 +1007,7 @@ def triangulate_mesh(object):
verbose("Triangulated mesh")
- me_ob.data = me_ob.evaluated_get(depsgraph).to_mesh() # write data object
+ me_ob.data = bpy.data.meshes.new_from_object(me_ob.evaluated_get(depsgraph)) # write data object
bpy.context.scene.update()
return me_ob
@@ -2102,7 +2102,8 @@ def rebuildmesh(obj):
uvfaces = []
# print("creating array build mesh...")
depsgraph = bpy.context.evaluated_depsgraph_get()
- mmesh = obj.evaluated_get(depsgraph).to_mesh()
+ obj_eval = obj.evaluated_get(depsgraph)
+ mmesh = obj_eval.to_mesh()
uv_layer = mmesh.tessface_uv_textures.active
for face in mmesh.tessfaces:
@@ -2119,6 +2120,8 @@ def rebuildmesh(obj):
else:
faces.extend([(face.vertices[0], face.vertices[1], face.vertices[2], face.vertices[3])])
+ obj_eval.to_mesh_clear()
+
# vertex positions
for vertex in mesh.vertices:
verts.append(vertex.co.to_tuple())
diff --git a/io_mesh_ply/export_ply.py b/io_mesh_ply/export_ply.py
index f465ed91..b14641be 100644
--- a/io_mesh_ply/export_ply.py
+++ b/io_mesh_ply/export_ply.py
@@ -201,12 +201,14 @@ def save(
if bpy.ops.object.mode_set.poll():
bpy.ops.object.mode_set(mode='OBJECT')
+ mesh_owner_object = None
if use_mesh_modifiers and obj.modifiers:
depsgraph = context.evaluated_depsgraph_get()
- mesh = obj.evaluated_get(depsgraph).to_mesh()
-
+ mesh_owner_object = obj.evaluated_get(depsgraph)
+ mesh = mesh_owner_object.to_mesh()
else:
- mesh = obj.data.copy()
+ mesh_owner_object = obj
+ mesh = mesh_owner_object.to_mesh()
if not mesh:
raise Exception("Error, could not get mesh data from active object")
@@ -221,6 +223,6 @@ def save(
use_colors=use_colors,
)
- bpy.data.meshes.remove(mesh)
+ mesh_owner_object.to_mesh_clear()
return ret
diff --git a/io_mesh_raw/export_raw.py b/io_mesh_raw/export_raw.py
index 8672134a..ed34e3ae 100644
--- a/io_mesh_raw/export_raw.py
+++ b/io_mesh_raw/export_raw.py
@@ -68,9 +68,11 @@ def write(filepath,
faces = []
for obj in bpy.context.selected_objects:
+ obj_eval = None
if applyMods or obj.type != 'MESH':
try:
- me = obj.evaluated_get(depsgraph).to_mesh()
+ obj_eval = obj.evaluated_get(depsgraph)
+ me = obj_eval.to_mesh()
except:
me = None
is_tmp_mesh = True
@@ -90,7 +92,7 @@ def write(filepath,
faces.append(fv)
if is_tmp_mesh:
- bpy.data.meshes.remove(me)
+ obj_eval.to_mesh_clear()
# write the faces to a file
file = open(filepath, "w")
diff --git a/io_mesh_stl/blender_utils.py b/io_mesh_stl/blender_utils.py
index 088caa8e..d61adf31 100644
--- a/io_mesh_stl/blender_utils.py
+++ b/io_mesh_stl/blender_utils.py
@@ -81,12 +81,14 @@ def faces_from_mesh(ob, global_matrix, use_mesh_modifiers=False):
ob.update_from_editmode()
# get the modifiers
+ if use_mesh_modifiers:
+ depsgraph = bpy.context.evaluated_depsgraph_get()
+ mesh_owner = ob.evaluated_get(depsgraph)
+ else:
+ mesh_owner = ob
+
try:
- if use_mesh_modifiers:
- depsgraph = bpy.context.evaluated_depsgraph_get()
- mesh = ob.evaluated_get(depsgraph).to_mesh()
- else:
- mesh = ob.to_mesh()
+ mesh = mesh_owner.to_mesh()
except RuntimeError:
return
@@ -101,4 +103,4 @@ def faces_from_mesh(ob, global_matrix, use_mesh_modifiers=False):
for tri in mesh.loop_triangles:
yield [vertices[index].co.copy() for index in tri.vertices]
- bpy.data.meshes.remove(mesh)
+ mesh_owner.to_mesh_clear()
diff --git a/io_scene_3ds/export_3ds.py b/io_scene_3ds/export_3ds.py
index 84b7c91a..a81cd11d 100644
--- a/io_scene_3ds/export_3ds.py
+++ b/io_scene_3ds/export_3ds.py
@@ -1039,8 +1039,9 @@ def save(operator,
if ob.type not in {'MESH', 'CURVE', 'SURFACE', 'FONT', 'META'}:
continue
+ ob_derived_eval = ob_derived.evaluated_get(depsgraph)
try:
- data = ob_derived.evaluated_get(depsgraph).to_mesh()
+ data = ob_derived_eval.to_mesh()
except:
data = None
@@ -1080,6 +1081,8 @@ def save(operator,
if f.material_index >= mat_ls_len:
f.material_index = 0
+ ob_derived_eval.to_mesh_clear()
+
if free:
free_derived_objects(ob)
diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index e399c807..a64e9a83 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -2228,7 +2228,10 @@ def fbx_data_from_scene(scene, depsgraph, settings):
if backup_pose_positions:
depsgraph.update()
ob_to_convert = ob.evaluated_get(depsgraph) if settings.use_mesh_modifiers else ob
- tmp_me = ob_to_convert.to_mesh()
+ # NOTE: The dependency graph might be re-evaluating multiple times, which could
+ # potentially free the mesh created early on. So we put those meshes to bmain and
+ # free them afterwards. Not ideal but ensures correct ownerwhip.
+ tmp_me = bpy.data.meshes.new_from_object(ob_to_convert)
data_meshes[ob_obj] = (get_blenderID_key(tmp_me), tmp_me, True)
# Change armatures back.
for armature, pose_position in backup_pose_positions:
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
index 35785c80..d74a5c1d 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
@@ -227,7 +227,8 @@ def __gather_mesh(blender_object, export_settings):
modifier.show_viewport = False
depsgraph = bpy.context.evaluated_depsgraph_get()
- blender_mesh = blender_object.evaluated_get(depsgraph).to_mesh()
+ blender_mesh_owner = blender_object.evaluated_get(depsgraph)
+ blender_mesh = blender_mesh_owner.to_mesh()
for prop in blender_object.data.keys():
blender_mesh[prop] = blender_object.data[prop]
skip_filter = True
@@ -247,7 +248,7 @@ def __gather_mesh(blender_object, export_settings):
result = gltf2_blender_gather_mesh.gather_mesh(blender_mesh, vertex_groups, modifiers, skip_filter, export_settings)
if export_settings[gltf2_blender_export_keys.APPLY]:
- bpy.data.meshes.remove(blender_mesh)
+ blender_mesh_owner.to_mesh_clear()
return result
@@ -308,6 +309,7 @@ def __gather_skin(blender_object, export_settings):
# check if any vertices in the mesh are part of a vertex group
depsgraph = bpy.context.evaluated_depsgraph_get()
+ # XXX: ...
blender_mesh = blender_object.evaluated_get(depsgraph).to_mesh()
if not any(vertex.groups is not None and len(vertex.groups) > 0 for vertex in blender_mesh.vertices):
return None
diff --git a/io_scene_ms3d/ms3d_export.py b/io_scene_ms3d/ms3d_export.py
index ba48e046..4fe31c00 100644
--- a/io_scene_ms3d/ms3d_export.py
+++ b/io_scene_ms3d/ms3d_export.py
@@ -299,12 +299,15 @@ class Ms3dExporter():
# convert to tris by using the triangulate modifier
blender_mesh_object_temp.modifiers.new("temp", 'TRIANGULATE')
- blender_mesh_temp = blender_mesh_object_temp.evaluated_get(blender_depsgraph).to_mesh()
+ blender_mesh_object_temp_eval = blender_mesh_object_temp.evaluated_get(blender_depsgraph)
+ blender_mesh_temp = blender_mesh_object_temp_eval.to_mesh()
enable_edit_mode(True, blender_context)
bm = bmesh.new()
bm.from_mesh(blender_mesh_temp)
+ blender_mesh_object_temp_eval.to_mesh_clear()
+
layer_texture = bm.faces.layers.tex.get(
ms3d_str['OBJECT_LAYER_TEXTURE'])
if layer_texture is None:
diff --git a/io_scene_obj/export_obj.py b/io_scene_obj/export_obj.py
index 49ec8bc0..d7769035 100644
--- a/io_scene_obj/export_obj.py
+++ b/io_scene_obj/export_obj.py
@@ -639,7 +639,7 @@ def write_file(filepath, objects, depsgraph, scene,
totno += no_unique_count
# clean up
- bpy.data.meshes.remove(me)
+ ob_for_convert.to_mesh_clear()
subprogress1.leave_substeps("Finished writing geometry of '%s'." % ob_main.name)
subprogress1.leave_substeps()
diff --git a/io_scene_vrml2/export_vrml2.py b/io_scene_vrml2/export_vrml2.py
index d259e0b5..e4038990 100644
--- a/io_scene_vrml2/export_vrml2.py
+++ b/io_scene_vrml2/export_vrml2.py
@@ -163,9 +163,11 @@ def save_object(fw, global_matrix,
if is_editmode:
bpy.ops.object.editmode_toggle()
- me = obj.evaluated_get(depsgraph).to_mesh()
+ obj_eval = obj.evaluated_get(depsgraph)
+ me = obj_eval.to_mesh()
bm = bmesh.new()
bm.from_mesh(me)
+ obj_eval.to_mesh_clear()
if is_editmode:
bpy.ops.object.editmode_toggle()
diff --git a/io_scene_x/export_x.py b/io_scene_x/export_x.py
index d2773881..e0fc817b 100644
--- a/io_scene_x/export_x.py
+++ b/io_scene_x/export_x.py
@@ -371,7 +371,7 @@ class MeshExportObject(ExportObject):
for Modifier in DeactivatedModifierList:
Modifier.show_viewport = False
- depsgraph = self.Exporter.context.evaluated_depsgraph_get()
+ depsgraph = self.Exporter.context.evaluated_depsgraph_get()
Mesh = self.BlenderObject.evaluated_get(depsgraph).to_mesh()
# Restore the deactivated modifiers
@@ -384,7 +384,11 @@ class MeshExportObject(ExportObject):
self.__WriteMesh(Mesh)
# Cleanup
- bpy.data.meshes.remove(Mesh)
+ if self.Config.ApplyModifiers:
+ depsgraph = self.Exporter.context.evaluated_depsgraph_get()
+ self.BlenderObject.evaluated_get(depsgraph).to_mesh_clear()
+ else:
+ self.BlenderObject.to_mesh_clear()
self.Exporter.Log("Writing children of {}".format(self))
self._WriteChildren()
diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py
index 491675e7..92094dc6 100644
--- a/io_scene_x3d/export_x3d.py
+++ b/io_scene_x3d/export_x3d.py
@@ -1451,7 +1451,7 @@ def export(file,
# free mesh created with create_mesh()
if do_remove:
- bpy.data.meshes.remove(me)
+ obj_for_mesh.to_mesh_clear()
elif obj_type == 'LIGHT':
data = obj.data
diff --git a/io_shape_mdd/export_mdd.py b/io_shape_mdd/export_mdd.py
index 69b9dbe1..4ca22e91 100644
--- a/io_shape_mdd/export_mdd.py
+++ b/io_shape_mdd/export_mdd.py
@@ -68,7 +68,8 @@ def save(context, filepath="", frame_start=1, frame_end=300, fps=25.0, use_rest_
orig_frame = scene.frame_current
scene.frame_set(frame_start)
depsgraph = context.evaluated_depsgraph_get()
- me = obj.evaluated_get(depsgraph).to_mesh()
+ obj_eval = obj.evaluated_get
+ me = obj_eval.to_mesh()
#Flip y and z
'''
@@ -118,4 +119,6 @@ def save(context, filepath="", frame_start=1, frame_end=300, fps=25.0, use_rest_
print('MDD Exported: %r frames:%d\n' % (filepath, numframes - 1))
scene.frame_set(orig_frame)
+ obj_eval.to_mesh_clear()
+
return {'FINISHED'}
diff --git a/mesh_looptools.py b/mesh_looptools.py
index a863218d..2b11465f 100644
--- a/mesh_looptools.py
+++ b/mesh_looptools.py
@@ -527,9 +527,10 @@ def get_derived_bmesh(object, bm):
# get derived mesh
bm_mod = bmesh.new()
depsgraph = bpy.context.evaluated_depsgraph_get()
- mesh_mod = object.evaluated_get(depsgraph).to_mesh()
+ object_eval = object.evaluated_get(depsgraph)
+ mesh_mod = object_eval.to_mesh()
bm_mod.from_mesh(mesh_mod)
- bpy.context.blend_data.meshes.remove(mesh_mod)
+ object_eval.to_mesh_clear()
# re-enable other modifiers
for mod_name in show_viewport:
object.modifiers[mod_name].show_viewport = True
diff --git a/mesh_tissue/lattice.py b/mesh_tissue/lattice.py
index eb1269a3..2850c77a 100644
--- a/mesh_tissue/lattice.py
+++ b/mesh_tissue/lattice.py
@@ -319,9 +319,10 @@ class lattice_along_surface(Operator):
obj = o
o.select_set(False)
break
+ obj_eval = obj.evaluated_get(depsgraph)
try:
obj_dim = obj.dimensions
- obj_me = obj.evaluated_get(depsgraph).to_mesh()
+ obj_me = obj_eval.to_mesh()
except:
self.report({'ERROR'}, "The object to deform is not valid. Only "
"Mesh, Curve, Surface and Font objects are allowed.")
@@ -360,6 +361,8 @@ class lattice_along_surface(Operator):
max[2] = vert[2]
first = False
+ obj_eval.to_mesh_clear()
+
bb = max - min
lattice_loc = (max + min) / 2
bpy.ops.object.add(type='LATTICE', align='WORLD',
diff --git a/mesh_tissue/tessellate_numpy.py b/mesh_tissue/tessellate_numpy.py
index 07c4fc87..02464be7 100644
--- a/mesh_tissue/tessellate_numpy.py
+++ b/mesh_tissue/tessellate_numpy.py
@@ -77,8 +77,10 @@ def tassellate(ob0, ob1, offset, zscale, gen_modifiers, com_modifiers, mode,
else:
depsgraph = None
+ me0_owner = None
if gen_modifiers: # Apply generator modifiers
- me0 = ob0.evaluated_get(depsgraph).to_mesh()
+ me0_owner = ob0.evaluated_get(depsgraph)
+ me0 = me0_owner.to_mesh()
else:
me0 = ob0.data
ob0.data = me0
@@ -95,8 +97,9 @@ def tassellate(ob0, ob1, offset, zscale, gen_modifiers, com_modifiers, mode,
return 0
# Apply component modifiers
+ me1_owner = ob1.evaluated_get(depsgraph)
if com_modifiers:
- me1 = ob1.evaluated_get(depsgraph).to_mesh()
+ me1 = me1_owner.to_mesh()
else:
me1 = ob1.data
@@ -410,6 +413,13 @@ def tassellate(ob0, ob1, offset, zscale, gen_modifiers, com_modifiers, mode,
new_vertex_group_np[i],
"ADD")
ob0.data = old_me0
+
+ if me0_owner:
+ me0_owner.to_mesh_clear()
+
+ if me1_owner:
+ me1_owner.to_mesh_clear()
+
return new_ob
@@ -675,9 +685,12 @@ class tessellate(Operator):
depsgraph = None
try:
polygons = 0
+ me_temp_owner = None
if self.gen_modifiers:
- me_temp = ob0.evaluated_get(depsgraph).to_mesh()
+ me_temp_owner = ob0.evaluated_get(depsgraph)
+ me_temp = me_temp_owner.to_mesh()
else:
+ me_temp_owner = None
me_temp = ob0.data
for p in me_temp.polygons:
@@ -687,11 +700,18 @@ class tessellate(Operator):
else:
polygons += 1
+ if me_temp_owner:
+ me_temp_owner.to_mesh_clear()
+
if self.com_modifiers:
- me_temp = bpy.data.objects[self.component].evaluated_get(depsgraph).to_mesh()
+ me_temp_owner = bpy.data.objects[self.component].evaluated_get(depsgraph)
+ me_temp = me_temp_owner.to_mesh()
else:
+ me_temp_owner = None
me_temp = bpy.data.objects[self.component].data
polygons *= len(me_temp.polygons)
+ if me_temp_owner:
+ me_temp_owner.to_mesh_clear()
str_polygons = '{:0,.0f}'.format(polygons)
if polygons > 200000:
@@ -1239,9 +1259,12 @@ class settings_tessellate(Operator):
# Count number of faces
try:
polygons = 0
+ me_temp_owner = None
if self.gen_modifiers:
- me_temp = bpy.data.objects[self.generator].evaluated_get(depsgraph).to_mesh()
+ me_temp_owner = bpy.data.objects[self.generator].evaluated_get(depsgraph)
+ me_temp = me_temp_owner.to_mesh()
else:
+ me_temp_owner = None
me_temp = bpy.data.objects[self.generator].data
for p in me_temp.polygons:
@@ -1251,12 +1274,20 @@ class settings_tessellate(Operator):
else:
polygons += 1
+ if me_temp_owner:
+ me_temp_owner.to_mesh_clear()
+
if self.com_modifiers:
- me_temp = bpy.data.objects[self.component].evaluated_get(depsgraph).to_mesh()
+ me_temp_owner = bpy.data.objects[self.component].evaluated_get(depsgraph)
+ me_temp = me_temp_owner.to_mesh()
else:
+ me_temp_owner = None
me_temp = bpy.data.objects[self.component].data
polygons *= len(me_temp.polygons)
+ if me_temp_owner:
+ me_temp_owner.to_mesh_clear()
+
str_polygons = '{:0,.0f}'.format(polygons)
if polygons > 200000:
col.label(text=str_polygons + " polygons will be created!",
diff --git a/mesh_tissue/uv_to_mesh.py b/mesh_tissue/uv_to_mesh.py
index 8a69b4d3..bccee0ba 100644
--- a/mesh_tissue/uv_to_mesh.py
+++ b/mesh_tissue/uv_to_mesh.py
@@ -87,9 +87,9 @@ class uv_to_mesh(Operator):
if self.apply_modifiers:
depsgraph = context.evaluated_depsgraph_get()
- me0 = ob0.evaluated_get(depsgraph).to_mesh()
+ me0 = bpy.data.meshes.new_from_object(ob0.evaluated_get(depsgraph))
else:
- me0 = ob0.to_mesh()
+ me0 = bpy.data.new_from_meshed(ob0)
area = 0
verts = []
diff --git a/object_fracture_cell/fracture_cell_setup.py b/object_fracture_cell/fracture_cell_setup.py
index c3e47bbd..dc45c43c 100644
--- a/object_fracture_cell/fracture_cell_setup.py
+++ b/object_fracture_cell/fracture_cell_setup.py
@@ -66,15 +66,16 @@ def _points_from_object(obj, source):
points.extend([matrix * v.co for v in mesh.vertices])
else:
depsgraph = bpy.context.evaluated_depsgraph_get()
+ ob_eval = ob.evaluated_get(depsgraph)
try:
- mesh = ob.evaluated_get(depsgraph).to_mesh()
+ mesh = ob_eval.to_mesh()
except:
mesh = None
if mesh is not None:
matrix = obj.matrix_world.copy()
points.extend([matrix * v.co for v in mesh.vertices])
- bpy.data.meshes.remove(mesh)
+ ob_eval.to_mesh_clear()
def points_from_particles(obj):
points.extend([p.location.copy()
@@ -339,7 +340,8 @@ def cell_fracture_boolean(context, obj, objects,
if use_interior_hide:
obj_cell.data.polygons.foreach_set("hide", [True] * len(obj_cell.data.polygons))
- mesh_new = obj_cell.evaluated_get(depsgraph).to_mesh()
+ obj_cell_eval = obj_cell.evaluated_get(depsgraph)
+ mesh_new = bpy.data.meshes.new_from_object(obj_cell_eval)
mesh_old = obj_cell.data
obj_cell.data = mesh_new
obj_cell.modifiers.remove(mod)
diff --git a/object_print3d_utils/mesh_helpers.py b/object_print3d_utils/mesh_helpers.py
index 79e87774..0f444c09 100644
--- a/object_print3d_utils/mesh_helpers.py
+++ b/object_print3d_utils/mesh_helpers.py
@@ -33,10 +33,11 @@ def bmesh_copy_from_object(obj, transform=True, triangulate=True, apply_modifier
if apply_modifiers and obj.modifiers:
import bpy
depsgraph = bpy.context.evaluated_depsgraph_get()
- me = obj.evaluated_get(depsgraph).to_mesh()
+ obj_eval = obj.evaluated_get(depsgraph)
+ me = obj_eval.to_mesh()
bm = bmesh.new()
bm.from_mesh(me)
- bpy.data.meshes.remove(me)
+ obj_eval.to_mesh_clear()
del bpy
else:
me = obj.data
@@ -260,7 +261,8 @@ def object_merge(context, objects):
continue
# convert each to a mesh
- mesh_new = obj.evaluated_get(depsgraph).to_mesh()
+ obj_eval = obj.evaluated_get(depsgraph)
+ mesh_new = obj_eval.to_mesh()
# remove non-active uvs/vcols
cd_remove_all_but_active(mesh_new.vertex_colors)
@@ -282,7 +284,7 @@ def object_merge(context, objects):
# scene_collection.objects.unlink(obj_new)
# bpy.data.objects.remove(obj_new)
- bpy.data.meshes.remove(mesh_new)
+ obj_eval.to_mesh_clear()
scene.update()
diff --git a/object_scatter/operator.py b/object_scatter/operator.py
index eb5d4f9b..e040ef15 100644
--- a/object_scatter/operator.py
+++ b/object_scatter/operator.py
@@ -461,12 +461,13 @@ def bvhtree_from_object(object):
bm = bmesh.new()
depsgraph = context.evaluated_depsgraph_get()
- mesh = object.evaluated_get(depsgraph).to_mesh()
+ object_eval = object.evaluated_get(depsgraph)
+ mesh = object_eval.to_mesh()
bm.from_mesh(mesh)
bm.transform(object.matrix_world)
bvhtree = BVHTree.FromBMesh(bm)
- bpy.data.meshes.remove(mesh)
+ object_eval.to_mesh_clear()
return bvhtree
def shoot_region_2d_ray(bvhtree, position_2d):
diff --git a/oscurart_tools/mesh/shapes_to_objects.py b/oscurart_tools/mesh/shapes_to_objects.py
index c2af30ed..29a5babc 100644
--- a/oscurart_tools/mesh/shapes_to_objects.py
+++ b/oscurart_tools/mesh/shapes_to_objects.py
@@ -49,7 +49,8 @@ class ShapeToObjects(Operator):
print(SHAPE.name)
bpy.ops.object.shape_key_clear()
SHAPE.value = 1
- mesh = OBJACT.evaluated_get(depsgraph).to_mesh()
+ OBJACT_eval = OBJACT.evaluated_get(depsgraph)
+ mesh = bpy.data.meshes.new_from_object(OBJACT_eval)
object = bpy.data.objects.new(SHAPE.name, mesh)
bpy.context.scene.collection.objects.link(object)
else:
diff --git a/render_povray/render.py b/render_povray/render.py
index 02e05641..56e3f8ec 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -2680,8 +2680,9 @@ def write_pov(filename, scene=None, info_callback=None):
# TODO(sergey): PovRay is a render engine, so should be using dependency graph
# which was given to it via render engine API.
depsgraph = bpy.context.evaluated_depsgraph_get()
+ ob_eval = ob.evaluated_get(depsgraph)
try:
- me = ob.evaluated_get(depsgraph).to_mesh()
+ me = ob_eval.to_mesh()
#XXX Here? identify the specific exception for mesh object with no data
#XXX So that we can write something for the dataname !
@@ -3214,7 +3215,7 @@ def write_pov(filename, scene=None, info_callback=None):
- bpy.data.meshes.remove(me)
+ ob_eval.to_mesh_clear()
if csg:
duplidata_ref = []