diff options
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_undo.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index d88d7a5ac49..a7ea78d8df5 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -70,8 +70,10 @@ static void update_cb(PBVHNode *node, void *unused) static void sculpt_restore_deformed(SculptSession *ss, SculptUndoNode *unode, int uindex, int oindex, float coord[3]) { - swap_v3_v3(coord, unode->orig_co[uindex]); - copy_v3_v3(unode->co[uindex], ss->deform_cos[oindex]); + if(unode->orig_co) { + swap_v3_v3(coord, unode->orig_co[uindex]); + copy_v3_v3(unode->co[uindex], ss->deform_cos[oindex]); + } else swap_v3_v3(coord, unode->co[uindex]); } static void sculpt_undo_restore(bContext *C, ListBase *lb) @@ -126,7 +128,10 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb) for(i=0; i<unode->totvert; i++) { if(ss->modifiers_active) sculpt_restore_deformed(ss, unode, i, index[i], vertCos[index[i]]); - else swap_v3_v3(vertCos[index[i]], unode->co[i]); + else { + if(unode->orig_co) swap_v3_v3(vertCos[index[i]], unode->orig_co[i]); + else swap_v3_v3(vertCos[index[i]], unode->co[i]); + } } /* propagate new coords to keyblock */ @@ -140,7 +145,10 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb) } else { for(i=0; i<unode->totvert; i++) { if(ss->modifiers_active) sculpt_restore_deformed(ss, unode, i, index[i], mvert[index[i]].co); - else swap_v3_v3(mvert[index[i]].co, unode->co[i]); + else { + if(unode->orig_co) swap_v3_v3(mvert[index[i]].co, unode->orig_co[i]); + else swap_v3_v3(mvert[index[i]].co, unode->co[i]); + } mvert[index[i]].flag |= ME_VERT_PBVH_UPDATE; } } |