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
This commit is contained in:
parent
2e5b7a4a04
commit
901868a4b2
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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!",
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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 = []
|
||||
|
|
Loading…
Reference in New Issue