[Bf-extensions-cvs] [901868a4] master: Update for Depsgraph API changes

Sergey Sharybin noreply at git.blender.org
Thu May 16 16:49:17 CEST 2019


Commit: 901868a4b2fc6e70d9c74119d97c57de132859a3
Author: Sergey Sharybin
Date:   Thu May 16 15:01:17 2019 +0200
Branches: master
https://developer.blender.org/rBA901868a4b2fc6e70d9c74119d97c57de132859a3

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

===================================================================

M	add_curve_ivygen.py
M	animation_add_corrective_shape_key.py
M	blenderkit/asset_inspector.py
M	blenderkit/ui.py
M	blenderkit/utils.py
M	io_export_dxf/primitive_exporters/mesh_exporter.py
M	io_export_pc2.py
M	io_export_unreal_psk_psa.py
M	io_mesh_ply/export_ply.py
M	io_mesh_raw/export_raw.py
M	io_mesh_stl/blender_utils.py
M	io_scene_3ds/export_3ds.py
M	io_scene_fbx/export_fbx_bin.py
M	io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
M	io_scene_ms3d/ms3d_export.py
M	io_scene_obj/export_obj.py
M	io_scene_vrml2/export_vrml2.py
M	io_scene_x/export_x.py
M	io_scene_x3d/export_x3d.py
M	io_shape_mdd/export_mdd.py
M	mesh_looptools.py
M	mesh_tissue/lattice.py
M	mesh_tissue/tessellate_numpy.py
M	mesh_tissue/uv_to_mesh.py
M	object_fracture_cell/fracture_cell_setup.py
M	object_print3d_utils/mesh_helpers.py
M	object_scatter/operator.py
M	oscurart_tools/mesh/shapes_to_objects.py
M	render_povray/render.py

===================================================================

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:
            

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list