From ad87d47fdb7f394219848ea66d55ce71c616821f Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 15 May 2014 17:45:35 +0200 Subject: Fix T39978: Sculpting shapekeys - Using Smooth tool, turns shapekey into Basis. Smooth brush requires deformed coordinates array to present. --- source/blender/blenkernel/intern/paint.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'source/blender/blenkernel/intern/paint.c') diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 1b8c4e084cf..24616d88852 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -658,14 +658,28 @@ void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob, BKE_free_sculptsession_deformMats(ss); } - /* if pbvh is deformed, key block is already applied to it */ - if (ss->kb && !BKE_pbvh_isDeformed(ss->pbvh)) { - float (*vertCos)[3] = BKE_key_convert_to_vertcos(ob, ss->kb); + if (ss->kb != NULL && ss->deform_cos == NULL) { + ss->deform_cos = BKE_key_convert_to_vertcos(ob, ss->kb); + } - if (vertCos) { - /* apply shape keys coordinates to PBVH */ - BKE_pbvh_apply_vertCos(ss->pbvh, vertCos); - MEM_freeN(vertCos); + /* if pbvh is deformed, key block is already applied to it */ + if (ss->kb) { + bool pbvh_deformd = BKE_pbvh_isDeformed(ss->pbvh); + if (!pbvh_deformd || ss->deform_cos == NULL) { + float (*vertCos)[3] = BKE_key_convert_to_vertcos(ob, ss->kb); + + if (vertCos) { + if (!pbvh_deformd) { + /* apply shape keys coordinates to PBVH */ + BKE_pbvh_apply_vertCos(ss->pbvh, vertCos); + } + if (ss->deform_cos == NULL) { + ss->deform_cos = vertCos; + } + if (vertCos != ss->deform_cos) { + MEM_freeN(vertCos); + } + } } } } -- cgit v1.2.3