Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2008-07-27 23:21:10 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2008-07-27 23:21:10 +0400
commit5a3572beecf86bdbdc8fe1589567f5d4d66b095b (patch)
treedd71e5b7d7f855ddb959f541818e58e60d42a9cf /source/blender/blenkernel/intern
parent495a8d393745e65d4c0e2e72734871955cb8b20a (diff)
Somewhat hacky support for undo in sculptmode; does a copy of MVert DerivedMesh data when pushing undo, but not for regular save/load.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c9
-rw-r--r--source/blender/blenkernel/intern/modifier.c18
2 files changed, 23 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index e48d159ba2f..c7d37610254 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1263,8 +1263,6 @@ DerivedMesh *MultiresDM_new(MultiresSubsurf *ms, DerivedMesh *orig, int numVerts
mrdm->subco = MEM_callocN(sizeof(float)*3*numVerts, "multires subdivided coords");
mrdm->block_update = 0;
- MultiresDM_calc_norm(mrdm);
-
dm->release = MultiresDM_release;
return dm;
@@ -1277,7 +1275,12 @@ Mesh *MultiresDM_get_mesh(DerivedMesh *dm)
void *MultiresDM_get_vertnorm(DerivedMesh *dm)
{
- return ((MultiresDM*)dm)->norm;
+ MultiresDM *mrdm = (MultiresDM*)dm;
+
+ if(!mrdm->norm)
+ MultiresDM_calc_norm(mrdm);
+
+ return mrdm->norm;
}
void *MultiresDM_get_orco(DerivedMesh *dm)
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index a7c7abf305f..4f0960c73f2 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -7224,12 +7224,28 @@ static DerivedMesh *multiresModifier_applyModifier(ModifierData *md, Object *ob,
int useRenderParams, int isFinalCalc)
{
MultiresModifierData *mmd = (MultiresModifierData*)md;
+ Mesh *me = get_mesh(ob);
+ DerivedMesh *final;
/* TODO: for now just skip a level1 mesh */
if(mmd->lvl == 1)
return dm;
- return multires_dm_create_from_derived(mmd, dm, get_mesh(ob), useRenderParams, isFinalCalc);
+ final = multires_dm_create_from_derived(mmd, dm, me, useRenderParams, isFinalCalc);
+ if(me->mr_undo_state && me->mr_undo && me->mr_undo_tot == final->getNumVerts(final)) {
+ int i;
+ MVert *dst = CDDM_get_verts(final);
+ for(i = 0; i < me->mr_undo_tot; ++i) {
+ VecCopyf(dst[i].co, me->mr_undo[i].co);
+ }
+ CDDM_calc_normals(final);
+ }
+ if(me->mr_undo && me->mr_undo_state)
+ MEM_freeN(me->mr_undo);
+ me->mr_undo_state = 0;
+ me->mr_undo = NULL;
+
+ return final;
}
/***/