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:
Sergey Sharybin
2011-02-27 16:49:28 +00:00
parent fc0c016940
commit b1ef977eff

View File

@@ -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;
}
}