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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-06-13 16:21:16 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-06-13 16:23:47 +0300
commit9d269a97be52a65728387255fbcf692192a505ad (patch)
treec976bea7f1dec35a17cb84fb3e907028a319ff8f /source/blender/editors/object/object_vgroup.c
parent64b759ba88aa8e1c0c5d88d1b273e4e9c3176507 (diff)
Fix "Fix Deform" not working in Blender 2.8
Need to copy changes to the evaluated mesh before requesting new deformed mesh. Tested on a file from T32406.
Diffstat (limited to 'source/blender/editors/object/object_vgroup.c')
-rw-r--r--source/blender/editors/object/object_vgroup.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index 94c456110bc..678f6f50096 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -1315,7 +1315,7 @@ static void getVerticalAndHorizontalChange(const float norm[3],
* coord is a point on the plane
*/
static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
- Scene *scene,
+ Scene *UNUSED(scene),
Object *ob,
Mesh *me,
int index,
@@ -1328,11 +1328,13 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
{
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
Object *object_eval = DEG_get_evaluated_object(depsgraph, ob);
+ Mesh *mesh_eval = (Mesh *)object_eval->data;
Mesh *me_deform;
- MDeformWeight *dw;
+ MDeformWeight *dw, *dw_eval;
MVert m;
MDeformVert *dvert = me->dvert + index;
+ MDeformVert *dvert_eval = mesh_eval->dvert + index;
int totweight = dvert->totweight;
float oldw = 0;
float oldPos[3] = {0};
@@ -1364,6 +1366,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
for (i = 0; i < totweight; i++) {
dwIndices[i] = i;
dw = (dvert->dw + i);
+ dw_eval = (dvert_eval->dw + i);
vc = hc = 0;
if (!dw->weight) {
changes[i][0] = 0;
@@ -1375,7 +1378,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
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);
+ BKE_object_free_derived_caches(object_eval);
}
oldw = dw->weight;
if (k) {
@@ -1393,11 +1396,13 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
if (dw->weight > 1) {
dw->weight = 1;
}
+ dw_eval->weight = dw->weight;
me_deform = mesh_get_eval_deform(depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH);
m = me_deform->mvert[index];
getVerticalAndHorizontalChange(
norm, d, coord, oldPos, distToStart, m.co, changes, dists, i);
dw->weight = oldw;
+ dw_eval->weight = oldw;
if (!k) {
vc = changes[i][0];
hc = changes[i][1];
@@ -1492,7 +1497,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
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);
+ BKE_object_free_derived_caches(object_eval);
}
}
} while (wasChange && ((distToStart - distToBe) / fabsf(distToStart - distToBe) ==
@@ -1507,7 +1512,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
/* this is used to try to smooth a surface by only adjusting the nonzero weights of a vertex
* but it could be used to raise or lower an existing 'bump.' */
static void vgroup_fix(
- const bContext *C, Scene *scene, Object *ob, float distToBe, float strength, float cp)
+ const bContext *C, Scene *UNUSED(scene), Object *ob, float distToBe, float strength, float cp)
{
Depsgraph *depsgraph = CTX_data_depsgraph(C);
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);