diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2011-12-08 19:50:28 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2011-12-08 19:50:28 +0400 |
commit | 46626e4f5f3d7e56b83d51829491cb5fe9ed98a6 (patch) | |
tree | 10921fdf0cf3b0819cfccdd0f418a9ffae65a66f /source | |
parent | edcc68b3d0acb45d4c6125d5e53bdd3f0e3dc403 (diff) |
Fix [#29543] Hook modifier: falloff + vgroup influence broken
A valid derivedmesh is needed for modifier_get_vgroup to work, and it wasn’t take care of when not in edit mode... Checked quickly the other deform modifiers, they all seem to handle this correctly.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/modifiers/intern/MOD_hook.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index 30e801c9b42..9e48c5d29e2 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -143,14 +143,9 @@ static float hook_falloff(float *co_1, float *co_2, const float falloff_squared, return fac; } -static void deformVerts(ModifierData *md, Object *ob, - DerivedMesh *dm, - float (*vertexCos)[3], - int numVerts, - int UNUSED(useRenderParams), - int UNUSED(isFinalCalc)) +static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm, + float (*vertexCos)[3], int numVerts) { - HookModifierData *hmd = (HookModifierData*) md; bPoseChannel *pchan= get_pose_channel(hmd->object->pose, hmd->subtarget); float vec[3], mat[4][4], dmat[4][4]; int i, *index_pt; @@ -251,17 +246,29 @@ static void deformVerts(ModifierData *md, Object *ob, } } -static void deformVertsEM( - ModifierData *md, Object *ob, struct EditMesh *editData, - DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) +static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, + float (*vertexCos)[3], int numVerts, + int UNUSED(useRenderParams), int UNUSED(isFinalCalc)) { - DerivedMesh *dm = derivedData; + HookModifierData *hmd = (HookModifierData*) md; + DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0); - if(!derivedData) dm = CDDM_from_editmesh(editData, ob->data); + deformVerts_do(hmd, ob, dm, vertexCos, numVerts); + + if(derivedData != dm) + dm->release(dm); +} + +static void deformVertsEM(ModifierData *md, Object *ob, struct EditMesh *editData, + DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) +{ + HookModifierData *hmd = (HookModifierData*) md; + DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0); - deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0); + deformVerts_do(hmd, ob, dm, vertexCos, numVerts); - if(!derivedData) dm->release(dm); + if(derivedData != dm) + dm->release(dm); } |