From 9996188791f1e18351ad2c115c4bb98aa34f54be Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 15 Dec 2011 08:57:48 +0000 Subject: New fix for [#29543] Hook modifier: falloff + vgroup influence broken Don't know why, but creating a dm when there was none broke multi hooks on curves (see #29567)... So as a valid dm is only mandatory for meshes when a vgroup is set, only create it in those cases! --- source/blender/modifiers/intern/MOD_hook.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'source') diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index b5cf289f4ce..9948a1a462d 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -249,15 +249,25 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, int UNUSED(useRenderParams), int UNUSED(isFinalCalc)) { HookModifierData *hmd = (HookModifierData*) md; - - deformVerts_do(hmd, ob, derivedData, vertexCos, numVerts); + DerivedMesh *dm = derivedData; + /* We need a valid dm for meshes when a vgroup is set... */ + if(!dm && ob->type == OB_MESH && hmd->name[0] != '\0') + dm = get_dm(ob, NULL, dm, NULL, 0); + + 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); + DerivedMesh *dm = derivedData; + /* We need a valid dm for meshes when a vgroup is set... */ + if(!dm && ob->type == OB_MESH && hmd->name[0] != '\0') + dm = get_dm(ob, editData, dm, NULL, 0); deformVerts_do(hmd, ob, dm, vertexCos, numVerts); -- cgit v1.2.3