Merge branch 'master' into blender2.8
[blender.git] / source / blender / modifiers / intern / MOD_lattice.c
index cff07dd15843ba660d961e5091b6373f09861a11..219d08fc0f643fc96d98c4d628ff3c3278bd3c6e 100644 (file)
 
 #include "BLI_utildefines.h"
 
-#include "BKE_cdderivedmesh.h"
+#include "BKE_editmesh.h"
 #include "BKE_lattice.h"
+#include "BKE_library.h"
 #include "BKE_library_query.h"
+#include "BKE_mesh.h"
 #include "BKE_modifier.h"
 
+#include "MEM_guardedalloc.h"
+
 #include "MOD_util.h"
 
 static void initData(ModifierData *md)
@@ -52,16 +56,6 @@ static void initData(ModifierData *md)
        lmd->strength = 1.0f;
 }
 
-static void copyData(ModifierData *md, ModifierData *target)
-{
-#if 0
-       LatticeModifierData *lmd = (LatticeModifierData *) md;
-       LatticeModifierData *tlmd = (LatticeModifierData *) target;
-#endif
-
-       modifier_copyData_generic(md, target);
-}
-
 static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
 {
        LatticeModifierData *lmd = (LatticeModifierData *)md;
@@ -99,32 +93,35 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
        DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Lattice Modifier");
 }
 
-static void deformVerts(ModifierData *md, struct Depsgraph *UNUSED(depsgraph),
-                        Object *ob, DerivedMesh *derivedData,
-                        float (*vertexCos)[3],
-                        int numVerts,
-                        ModifierApplyFlag UNUSED(flag))
+static void deformVerts(
+        ModifierData *md, const ModifierEvalContext *ctx,
+        struct Mesh *mesh,
+        float (*vertexCos)[3],
+        int numVerts)
 {
        LatticeModifierData *lmd = (LatticeModifierData *) md;
-
+       struct Mesh *mesh_src = get_mesh(ctx->object, NULL, mesh, NULL, false, false);
 
        modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
-       
-       lattice_deform_verts(lmd->object, ob, derivedData,
+
+       lattice_deform_verts(lmd->object, ctx->object, mesh_src,
                             vertexCos, numVerts, lmd->name, lmd->strength);
-}
+
+       if (mesh_src != mesh) {
+               BKE_id_free(NULL, mesh_src);
+       }}
 
 static void deformVertsEM(
-        ModifierData *md, struct Depsgraph *depsgraph, Object *ob, struct BMEditMesh *em,
-        DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+        ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em,
+        struct Mesh *mesh, float (*vertexCos)[3], int numVerts)
 {
-       DerivedMesh *dm = derivedData;
+       struct Mesh *mesh_src = get_mesh(ctx->object, em, mesh, NULL, false, false);
 
-       if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
+       deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
 
-       deformVerts(md, depsgraph, ob, dm, vertexCos, numVerts, 0);
-
-       if (!derivedData) dm->release(dm);
+       if (mesh_src != mesh) {
+               BKE_id_free(NULL, mesh_src);
+       }
 }
 
 
@@ -136,13 +133,23 @@ ModifierTypeInfo modifierType_Lattice = {
        /* flags */             eModifierTypeFlag_AcceptsCVs |
                                eModifierTypeFlag_AcceptsLattice |
                                eModifierTypeFlag_SupportsEditmode,
-       /* copyData */          copyData,
+
+       /* copyData */          modifier_copyData_generic,
+
+       /* deformVerts_DM */    NULL,
+       /* deformMatrices_DM */ NULL,
+       /* deformVertsEM_DM */  NULL,
+       /* deformMatricesEM_DM*/NULL,
+       /* applyModifier_DM */  NULL,
+       /* applyModifierEM_DM */NULL,
+
        /* deformVerts */       deformVerts,
        /* deformMatrices */    NULL,
        /* deformVertsEM */     deformVertsEM,
        /* deformMatricesEM */  NULL,
        /* applyModifier */     NULL,
        /* applyModifierEM */   NULL,
+
        /* initData */          initData,
        /* requiredDataMask */  requiredDataMask,
        /* freeData */          NULL,