From 052ab934aa3adb3ab3ce8e875618986fb69f0d57 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 5 Jul 2010 11:48:13 +0000 Subject: Fix #20383: mesh deform modifier wasn't working on lattices. --- source/blender/editors/armature/meshlaplacian.c | 2 +- source/blender/editors/armature/meshlaplacian.h | 2 +- source/blender/editors/include/ED_armature.h | 2 +- source/blender/makesdna/DNA_modifier_types.h | 2 +- source/blender/modifiers/intern/MOD_meshdeform.c | 18 +++++------------- 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c index 546a15467c4..0325232e5b9 100644 --- a/source/blender/editors/armature/meshlaplacian.c +++ b/source/blender/editors/armature/meshlaplacian.c @@ -1922,7 +1922,7 @@ static void heat_weighting_bind(Scene *scene, DerivedMesh *dm, MeshDeformModifie } #endif -void mesh_deform_bind(Scene *scene, DerivedMesh *dm, MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4]) +void mesh_deform_bind(Scene *scene, MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4]) { MeshDeformBind mdb; MVert *mvert; diff --git a/source/blender/editors/armature/meshlaplacian.h b/source/blender/editors/armature/meshlaplacian.h index 4e5fbec9c82..640eb33c945 100644 --- a/source/blender/editors/armature/meshlaplacian.h +++ b/source/blender/editors/armature/meshlaplacian.h @@ -78,7 +78,7 @@ void rigid_deform_end(int cancel); /* Harmonic Coordinates */ -void mesh_deform_bind(struct Scene *scene, struct DerivedMesh *dm, +void mesh_deform_bind(struct Scene *scene, struct MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4]); diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 67387dc2e08..d2d1e2a1d69 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -165,7 +165,7 @@ void BDR_drawSketch(const struct bContext *vc); int BDR_drawSketchNames(struct ViewContext *vc); /* meshlaplacian.c */ -void mesh_deform_bind(struct Scene *scene, struct DerivedMesh *dm, +void mesh_deform_bind(struct Scene *scene, struct MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4]); diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 528f06882a2..722adba1136 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -538,7 +538,7 @@ typedef struct MeshDeformModifierData { float *bindcos; /* deprecated storage of cage coords */ /* runtime */ - void (*bindfunc)(struct Scene *scene, struct DerivedMesh *dm, + void (*bindfunc)(struct Scene *scene, struct MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4]); } MeshDeformModifierData; diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c index 623f4a5ddeb..9ae86ac4ec0 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -227,7 +227,7 @@ static void meshdeformModifier_do( /* progress bar redraw can make this recursive .. */ if(!recursive) { recursive = 1; - mmd->bindfunc(md->scene, dm, mmd, (float*)vertexCos, numVerts, cagemat); + mmd->bindfunc(md->scene, mmd, (float*)vertexCos, numVerts, cagemat); recursive = 0; } } @@ -275,7 +275,7 @@ static void meshdeformModifier_do( defgrp_index = defgroup_name_index(ob, mmd->defgrp_name); - if (defgrp_index >= 0) + if(dm && defgrp_index >= 0) dvert= dm->getVertDataArray(dm, CD_MDEFORMVERT); /* do deformation */ @@ -343,14 +343,11 @@ static void deformVerts( { DerivedMesh *dm= get_dm(md->scene, ob, NULL, derivedData, NULL, 0);; - if(!dm) - return; - modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ meshdeformModifier_do(md, ob, dm, vertexCos, numVerts); - if(dm != derivedData) + if(dm && dm != derivedData) dm->release(dm); } @@ -358,16 +355,11 @@ static void deformVertsEM( ModifierData *md, Object *ob, struct EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) { - DerivedMesh *dm; - - if(!derivedData && ob->type == OB_MESH) - dm = CDDM_from_editmesh(editData, ob->data); - else - dm = derivedData; + DerivedMesh *dm= get_dm(md->scene, ob, NULL, derivedData, NULL, 0);; meshdeformModifier_do(md, ob, dm, vertexCos, numVerts); - if(dm != derivedData) + if(dm && dm != derivedData) dm->release(dm); } -- cgit v1.2.3