From 328f7e13653b7521fed5b92a630d9d9e7be2ce2a Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 5 Jun 2019 15:17:53 +0200 Subject: Fix T63384: Vertices are moving in different directions --- source/blender/blenkernel/BKE_crazyspace.h | 1 - source/blender/blenkernel/intern/crazyspace.c | 28 +++++++++++----------- .../editors/transform/transform_conversions.c | 2 +- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/source/blender/blenkernel/BKE_crazyspace.h b/source/blender/blenkernel/BKE_crazyspace.h index 0a57a99ca60..6ac6b17d468 100644 --- a/source/blender/blenkernel/BKE_crazyspace.h +++ b/source/blender/blenkernel/BKE_crazyspace.h @@ -35,7 +35,6 @@ struct Scene; /* crazyspace.c */ float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, - struct Scene *scene, struct Object *obedit))[3]; void BKE_crazyspace_set_quats_editmesh(struct BMEditMesh *em, float (*origcos)[3], diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c index a55579d9b61..09bbc6c0d13 100644 --- a/source/blender/blenkernel/intern/crazyspace.c +++ b/source/blender/blenkernel/intern/crazyspace.c @@ -99,30 +99,30 @@ static int modifiers_disable_subsurf_temporary(Object *ob) } /* disable subsurf temporal, get mapped cos, and enable it */ -float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, - Scene *scene, - Object *obedit))[3] +float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, Object *obedit))[3] { - Mesh *me = obedit->data; - Mesh *me_eval; - float(*vertexcos)[3]; - int nverts = me->edit_mesh->bm->totvert; + Scene *scene = DEG_get_input_scene(depsgraph); + Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); + Object *obedit_eval = DEG_get_evaluated_object(depsgraph, obedit); + Mesh *mesh_eval = obedit_eval->data; + BMEditMesh *editmesh_eval = mesh_eval->edit_mesh; /* disable subsurf temporal, get mapped cos, and enable it */ - if (modifiers_disable_subsurf_temporary(obedit)) { + if (modifiers_disable_subsurf_temporary(obedit_eval)) { /* need to make new derivemesh */ - makeDerivedMesh(depsgraph, scene, obedit, me->edit_mesh, &CD_MASK_BAREMESH); + makeDerivedMesh(depsgraph, scene_eval, obedit_eval, editmesh_eval, &CD_MASK_BAREMESH); } /* now get the cage */ - vertexcos = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map"); - - me_eval = editbmesh_get_eval_cage_from_orig(depsgraph, scene, obedit, &CD_MASK_BAREMESH); + Mesh *mesh_eval_cage = editbmesh_get_eval_cage_from_orig( + depsgraph, scene, obedit, &CD_MASK_BAREMESH); - mesh_get_mapped_verts_coords(me_eval, vertexcos, nverts); + const int nverts = editmesh_eval->bm->totvert; + float(*vertexcos)[3] = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map"); + mesh_get_mapped_verts_coords(mesh_eval_cage, vertexcos, nverts); /* set back the flag, no new cage needs to be built, transform does it */ - modifiers_disable_subsurf_temporary(obedit); + modifiers_disable_subsurf_temporary(obedit_eval); return vertexcos; } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 52a3763b836..e766709cdf1 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -3074,7 +3074,7 @@ static void createTransEditVerts(TransInfo *t) if (totleft > 0) #endif { - mappedcos = BKE_crazyspace_get_mapped_editverts(t->depsgraph, t->scene, tc->obedit); + mappedcos = BKE_crazyspace_get_mapped_editverts(t->depsgraph, tc->obedit); quats = MEM_mallocN(em->bm->totvert * sizeof(*quats), "crazy quats"); BKE_crazyspace_set_quats_editmesh(em, defcos, mappedcos, quats, !prop_mode); if (mappedcos) { -- cgit v1.2.3