diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-05-15 19:45:35 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-05-15 19:45:35 +0400 |
commit | ad87d47fdb7f394219848ea66d55ce71c616821f (patch) | |
tree | b59a3628e26c8023aeed3edf0423d73b0dead770 /source/blender/blenkernel/intern/paint.c | |
parent | 3889483b1fa23911e58cff4d7d195d16e83760b0 (diff) |
Fix T39978: Sculpting shapekeys - Using Smooth tool, turns shapekey into Basis.
Smooth brush requires deformed coordinates array to present.
Diffstat (limited to 'source/blender/blenkernel/intern/paint.c')
-rw-r--r-- | source/blender/blenkernel/intern/paint.c | 28 |
1 files changed, 21 insertions, 7 deletions
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); + } + } } } } |