[Bf-blender-cvs] [fdc967e6161] blender2.8: Modifiers stack: port Curve to new Mesh-based system.

Bastien Montagne noreply at git.blender.org
Tue May 8 11:06:32 CEST 2018


Commit: fdc967e616132448e71101fd875101cbb53ebb9e
Author: Bastien Montagne
Date:   Tue May 8 11:05:49 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBfdc967e616132448e71101fd875101cbb53ebb9e

Modifiers stack: port Curve to new Mesh-based system.

===================================================================

M	source/blender/blenkernel/BKE_lattice.h
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/modifiers/intern/MOD_curve.c

===================================================================

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,



More information about the Bf-blender-cvs mailing list