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.
This commit is contained in:
2011-12-08 15:50:28 +00:00
parent edcc68b3d0
commit 46626e4f5f

View File

@@ -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);
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
if(derivedData != dm)
dm->release(dm);
}
if(!derivedData) 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_do(hmd, ob, dm, vertexCos, numVerts);
if(derivedData != dm)
dm->release(dm);
}