diff options
-rw-r--r-- | source/blender/blenkernel/BKE_pbvh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/pbvh.c | 6 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt.c | 11 |
3 files changed, 17 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h index a26148d11bf..3971b248a2e 100644 --- a/source/blender/blenkernel/BKE_pbvh.h +++ b/source/blender/blenkernel/BKE_pbvh.h @@ -470,6 +470,8 @@ void BKE_pbvh_parallel_range(const int start, PBVHParallelRangeFunc func, const struct PBVHParallelSettings *settings); +struct MVert *BKE_pbvh_get_verts(const PBVH *bvh); + #ifdef __cplusplus } #endif diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c index efe13fc8817..95e7218a920 100644 --- a/source/blender/blenkernel/intern/pbvh.c +++ b/source/blender/blenkernel/intern/pbvh.c @@ -2885,3 +2885,9 @@ void BKE_pbvh_parallel_range_settings(PBVHParallelSettings *settings, memset(settings, 0, sizeof(*settings)); settings->use_threading = use_threading && totnode > 1; } + +MVert *BKE_pbvh_get_verts(const PBVH *bvh) +{ + BLI_assert(bvh->type == PBVH_FACES); + return bvh->verts; +} diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 7c51ddd597a..55ddc82c3f8 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -129,8 +129,15 @@ static int sculpt_vertex_count_get(SculptSession *ss) const float *sculpt_vertex_co_get(SculptSession *ss, int index) { switch (BKE_pbvh_type(ss->pbvh)) { - case PBVH_FACES: - return ss->mvert[index].co; + case PBVH_FACES: { + if (ss->shapekey_active || ss->deform_modifiers_active) { + const MVert *mverts = BKE_pbvh_get_verts(ss->pbvh); + return mverts[index].co; + } + else { + return ss->mvert[index].co; + } + } case PBVH_BMESH: return BM_vert_at_index(BKE_pbvh_get_bmesh(ss->pbvh), index)->co; case PBVH_GRIDS: { |