Fixes for undo when suclpting on deformed mesh:
- Invalid shape when deformation mesh was disabled befoe undoing - Crash when deformation modifier was enabled before undoing Still got problems with undoing multires changes when toggling modifiers.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user