Modifiers: pass the ob->data to the modifier if the mesh param is NULL

This enables the modifiers to access things like vertex groups. Care should
be taken to not modifier the mesh itself in this case.
This commit is contained in:
Sybren A. Stüvel 2018-05-08 12:34:01 +02:00
parent 9a79178c2e
commit 002dcd2001
2 changed files with 13 additions and 5 deletions

View File

@ -109,11 +109,11 @@ static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
int numVerts)
{
LatticeModifierData *lmd = (LatticeModifierData *) md;
struct Mesh *mesh_src = mesh ? mesh : ctx->object->data;
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
lattice_deform_verts(lmd->object, ctx->object, mesh,
lattice_deform_verts(lmd->object, ctx->object, mesh_src,
vertexCos, numVerts, lmd->name, lmd->strength);
}

View File

@ -40,6 +40,7 @@
#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_editmesh.h"
#include "BKE_mesh.h"
#include "BKE_library_query.h"
#include "BKE_modifier.h"
@ -47,6 +48,8 @@
#include "MOD_util.h"
#include "bmesh.h"
#define BEND_EPS 0.000001f
/* Re-maps the indicies for X Y Z by shifting them up and wrapping, such that
@ -389,16 +392,21 @@ static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx,
float (*vertexCos)[3],
int numVerts)
{
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh, vertexCos, numVerts);
Mesh *mesh_src = mesh ? mesh : ctx->object->data;
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts);
}
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx,
struct BMEditMesh *UNUSED(editData),
struct BMEditMesh *editData,
struct Mesh *mesh,
float (*vertexCos)[3],
int numVerts)
{
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh, vertexCos, numVerts);
Mesh *mesh_src = mesh;
if (!mesh) {
mesh_src = BKE_bmesh_to_mesh_nomain(editData->bm, &(struct BMeshToMeshParams){0});
}
SimpleDeformModifier_do((SimpleDeformModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts);
}