diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2018-05-08 12:05:49 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2018-05-08 12:05:49 +0300 |
commit | fdc967e616132448e71101fd875101cbb53ebb9e (patch) | |
tree | 24f06c767015ccf13b5191f06b3027b6d326b12b /source/blender | |
parent | 50e31136fd5b0d26d1a2880a1c895c2809317d50 (diff) |
Modifiers stack: port Curve to new Mesh-based system.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_lattice.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/lattice.c | 6 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_curve.c | 47 |
3 files changed, 34 insertions, 24 deletions
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h index 6e9f83cf8a9..d5c241d43e4 100644 --- a/source/blender/blenkernel/BKE_lattice.h +++ b/source/blender/blenkernel/BKE_lattice.h @@ -63,9 +63,8 @@ void end_latt_deform(struct LatticeDeformData *lattice_deform_data); bool object_deform_mball(struct Object *ob, struct ListBase *dispbase); void outside_lattice(struct Lattice *lt); -void curve_deform_verts( - struct Object *cuOb, struct Object *target, - struct DerivedMesh *dm, float (*vertexCos)[3], +void curve_deform_verts(struct Object *cuOb, struct Object *target, + struct Mesh *mesh, float (*vertexCos)[3], int numVerts, const char *vgroup, short defaxis); void curve_deform_vector(struct Object *cuOb, struct Object *target, float orco[3], float vec[3], float mat[3][3], int no_rot_axis); diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index 609c4b95dab..30c839bf766 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -699,7 +699,7 @@ static bool calc_curve_deform(Object *par, float co[3], } void curve_deform_verts( - Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3], + Object *cuOb, Object *target, Mesh *mesh, float (*vertexCos)[3], int numVerts, const char *vgroup, short defaxis) { Curve *cu; @@ -735,8 +735,8 @@ void curve_deform_verts( if (defgrp_index != -1) { /* if there's derived data without deformverts, don't use vgroups */ - if (dm) { - dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); + if (mesh) { + dvert = CustomData_get_layer(&mesh->vdata, CD_MDEFORMVERT); } else if (target->type == OB_LATTICE) { dvert = ((Lattice *)target->data)->dvert; diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c index 7d10d6f687a..d03d5cbf006 100644 --- a/source/blender/modifiers/intern/MOD_curve.c +++ b/source/blender/modifiers/intern/MOD_curve.c @@ -34,15 +34,17 @@ #include <string.h> +#include "DNA_mesh_types.h" #include "DNA_scene_types.h" #include "DNA_object_types.h" #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 "DEG_depsgraph.h" @@ -111,30 +113,39 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Curve Modifier"); } -static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, - DerivedMesh *derivedData, - float (*vertexCos)[3], - int numVerts) +static void deformVerts( + ModifierData *md, + const ModifierEvalContext *ctx, + Mesh *mesh, + float (*vertexCos)[3], + int numVerts) { CurveModifierData *cmd = (CurveModifierData *) md; /* silly that defaxis and curve_deform_verts are off by 1 * but leave for now to save having to call do_versions */ - curve_deform_verts(cmd->object, ctx->object, derivedData, vertexCos, numVerts, - cmd->name, cmd->defaxis - 1); + curve_deform_verts(cmd->object, ctx->object, mesh, vertexCos, numVerts, cmd->name, cmd->defaxis - 1); } static void deformVertsEM( - ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em, - DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) + ModifierData *md, + const ModifierEvalContext *ctx, + struct BMEditMesh *em, + Mesh *mesh, + float (*vertexCos)[3], + int numVerts) { - DerivedMesh *dm = derivedData; + Mesh *mesh_src = mesh; - if (!derivedData) dm = CDDM_from_editbmesh(em, false, false); + if (mesh_src == NULL) { + mesh_src = BKE_bmesh_to_mesh_nomain(em->bm, &(struct BMeshToMeshParams){0}); + } - deformVerts(md, ctx, dm, vertexCos, numVerts); + deformVerts(md, ctx, mesh_src, vertexCos, numVerts); - if (!derivedData) dm->release(dm); + if (!mesh) { + BKE_id_free(NULL, mesh_src); + } } @@ -149,16 +160,16 @@ ModifierTypeInfo modifierType_Curve = { /* copyData */ copyData, - /* deformVerts_DM */ deformVerts, + /* deformVerts_DM */ NULL, /* deformMatrices_DM */ NULL, - /* deformVertsEM_DM */ deformVertsEM, + /* deformVertsEM_DM */ NULL, /* deformMatricesEM_DM*/NULL, /* applyModifier_DM */ NULL, /* applyModifierEM_DM */NULL, - /* deformVerts */ NULL, + /* deformVerts */ deformVerts, /* deformMatrices */ NULL, - /* deformVertsEM */ NULL, + /* deformVertsEM */ deformVertsEM, /* deformMatricesEM */ NULL, /* applyModifier */ NULL, /* applyModifierEM */ NULL, |