[Bf-blender-cvs] [d125e777b33] blender2.8: Cleanup: remove some DM from editor's Object vgroup code.

Bastien Montagne noreply at git.blender.org
Thu Jun 28 11:06:45 CEST 2018


Commit: d125e777b330921067ac06d14d8cf271f2f00def
Author: Bastien Montagne
Date:   Wed Jun 27 11:24:39 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd125e777b330921067ac06d14d8cf271f2f00def

Cleanup: remove some DM from editor's Object vgroup code.

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

M	source/blender/editors/object/object_vgroup.c

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

diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index a6f688c49fb..1c1c67c9da4 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -63,7 +63,6 @@
 #include "BKE_layer.h"
 #include "BKE_modifier.h"
 #include "BKE_report.h"
-#include "BKE_DerivedMesh.h"
 #include "BKE_object_deform.h"
 #include "BKE_object.h"
 #include "BKE_lattice.h"
@@ -1258,27 +1257,6 @@ static void getVerticalAndHorizontalChange(
 	changes[index][1] = len_v3v3(projA, projB);
 }
 
-/* I need the derived mesh to be forgotten so the positions are recalculated
- * with weight changes (see dm_deform_recalc) */
-static void dm_deform_clear(DerivedMesh *dm, Object *ob)
-{
-	if (ob->derivedDeform && (ob->derivedDeform) == dm) {
-		ob->derivedDeform->needsFree = 1;
-		ob->derivedDeform->release(ob->derivedDeform);
-		ob->derivedDeform = NULL;
-	}
-	else if (dm) {
-		dm->needsFree = 1;
-		dm->release(dm);
-	}
-}
-
-/* recalculate the deformation */
-static DerivedMesh *dm_deform_recalc(Depsgraph *depsgraph, Scene *scene, Object *ob)
-{
-	return mesh_get_derived_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
-}
-
 /* by changing nonzero weights, try to move a vertex in me->mverts with index 'index' to
  * distToBe distance away from the provided plane strength can change distToBe so that it moves
  * towards distToBe by that percentage cp changes how much the weights are adjusted
@@ -1292,7 +1270,7 @@ static void moveCloserToDistanceFromPlane(
         Depsgraph *depsgraph, Scene *scene, Object *ob, Mesh *me, int index, float norm[3],
         float coord[3], float d, float distToBe, float strength, float cp)
 {
-	DerivedMesh *dm;
+	Mesh *me_deform;
 	MDeformWeight *dw;
 	MVert m;
 	MDeformVert *dvert = me->dvert + index;
@@ -1316,8 +1294,8 @@ static void moveCloserToDistanceFromPlane(
 	float originalDistToBe = distToBe;
 	do {
 		wasChange = false;
-		dm = dm_deform_recalc(depsgraph, scene, ob);
-		dm->getVert(dm, index, &m);
+		me_deform = mesh_get_eval_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
+		m = me_deform->mvert[index];
 		copy_v3_v3(oldPos, m.co);
 		distToStart = dot_v3v3(norm, oldPos) + d;
 
@@ -1335,8 +1313,10 @@ static void moveCloserToDistanceFromPlane(
 				continue;
 			}
 			for (k = 0; k < 2; k++) {
-				if (dm) {
-					dm_deform_clear(dm, ob); dm = NULL;
+				if (me_deform) {
+					/* DO NOT try to do own cleanup here, this is call for dramatic failures and bugs!
+					 * Better to over-free and recompute a bit. */
+					BKE_object_free_derived_caches(ob);
 				}
 				oldw = dw->weight;
 				if (k) {
@@ -1354,8 +1334,8 @@ static void moveCloserToDistanceFromPlane(
 				if (dw->weight > 1) {
 					dw->weight = 1;
 				}
-				dm = dm_deform_recalc(depsgraph, scene, ob);
-				dm->getVert(dm, index, &m);
+				me_deform = mesh_get_eval_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
+				m = me_deform->mvert[index];
 				getVerticalAndHorizontalChange(norm, d, coord, oldPos, distToStart, m.co, changes, dists, i);
 				dw->weight = oldw;
 				if (!k) {
@@ -1449,8 +1429,10 @@ static void moveCloserToDistanceFromPlane(
 			if (oldw == dw->weight) {
 				wasChange = false;
 			}
-			if (dm) {
-				dm_deform_clear(dm, ob); dm = NULL;
+			if (me_deform) {
+				/* DO NOT try to do own cleanup here, this is call for dramatic failures and bugs!
+				 * Better to over-free and recompute a bit. */
+				BKE_object_free_derived_caches(ob);
 			}
 		}
 	} while (wasChange && ((distToStart - distToBe) / fabsf(distToStart - distToBe) ==
@@ -1482,11 +1464,10 @@ static void vgroup_fix(const bContext *C, Scene *scene, Object *ob, float distTo
 				MVert *p = MEM_callocN(sizeof(MVert) * (count), "deformedPoints");
 				int k;
 
-				DerivedMesh *dm = mesh_get_derived_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
+				Mesh *me_deform = mesh_get_eval_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
 				k = count;
 				while (k--) {
-					dm->getVert(dm, verts[k], &m);
-					p[k] = m;
+					p[k] = me_deform->mvert[verts[k]];
 				}
 
 				if (count >= 3) {
@@ -1494,7 +1475,7 @@ static void vgroup_fix(const bContext *C, Scene *scene, Object *ob, float distTo
 					float coord[3];
 					float norm[3];
 					getSingleCoordinate(p, count, coord);
-					dm->getVert(dm, i, &m);
+					m = me_deform->mvert[i];
 					sub_v3_v3v3(norm, m.co, coord);
 					mag = normalize_v3(norm);
 					if (mag) { /* zeros fix */



More information about the Bf-blender-cvs mailing list