[Bf-blender-cvs] [d3ea2d3] temp-array-modifier: Replace mesh_get_derived_deform with get_dm_for_modifier

Campbell Barton noreply at git.blender.org
Tue Aug 12 04:14:16 CEST 2014


Commit: d3ea2d3541980bfb33d34620ec530b571cfaab7b
Author: Campbell Barton
Date:   Tue Aug 12 11:45:28 2014 +1000
Branches: temp-array-modifier
https://developer.blender.org/rBd3ea2d3541980bfb33d34620ec530b571cfaab7b

Replace mesh_get_derived_deform with get_dm_for_modifier

to match master.

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

M	source/blender/modifiers/intern/MOD_array.c

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

diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 660e33c..7100a5d 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -314,7 +314,7 @@ static void dm_mvert_map_doubles(
 }
 
 
-static void bm_merge_dm_transform(
+static void dm_merge_transform(
         DerivedMesh *result_dm, DerivedMesh *cap_dm, float cap_offset[4][4],
         unsigned int cap_verts_index, unsigned int cap_edges_index, int cap_loops_index, int cap_polys_index,
         int cap_nverts, int cap_nedges, int cap_nloops, int cap_npolys)
@@ -325,6 +325,12 @@ static void bm_merge_dm_transform(
 	MLoop *ml;
 	MPoly *mp;
 
+	/* needed for subsurf so arrays are allocated */
+	cap_dm->getVertArray(cap_dm);
+	cap_dm->getEdgeArray(cap_dm);
+	cap_dm->getNumLoops(cap_dm);
+	cap_dm->getNumPolys(cap_dm);
+
 	DM_copy_vert_data(cap_dm, result_dm, 0, cap_verts_index, cap_nverts);
 	DM_copy_edge_data(cap_dm, result_dm, 0, cap_edges_index, cap_nedges);
 	DM_copy_loop_data(cap_dm, result_dm, 0, cap_loops_index, cap_nloops);
@@ -362,7 +368,7 @@ static void bm_merge_dm_transform(
 static DerivedMesh *arrayModifier_doArray(
         ArrayModifierData *amd,
         Scene *scene, Object *ob, DerivedMesh *dm,
-        ModifierApplyFlag UNUSED(flag))
+        ModifierApplyFlag flag)
 {
 	const float eps = 1e-6f;
 	MVert *mv, *mv_prev, *result_dm_verts, *src_mvert;
@@ -397,7 +403,7 @@ static DerivedMesh *arrayModifier_doArray(
 	count = amd->count;
 
 	if (amd->start_cap && amd->start_cap != ob && amd->start_cap->type == OB_MESH) {
-		start_cap_dm = mesh_get_derived_deform(scene, amd->start_cap, CD_MASK_MESH);
+		start_cap_dm = get_dm_for_modifier(amd->start_cap, flag);
 		if (start_cap_dm) {
 			start_cap_nverts = start_cap_dm->getNumVerts(start_cap_dm);
 			start_cap_nedges = start_cap_dm->getNumEdges(start_cap_dm);
@@ -406,7 +412,7 @@ static DerivedMesh *arrayModifier_doArray(
 		}
 	}
 	if (amd->end_cap && amd->end_cap != ob && amd->end_cap->type == OB_MESH) {
-		end_cap_dm = mesh_get_derived_deform(scene, amd->end_cap, CD_MASK_MESH);
+		end_cap_dm = get_dm_for_modifier(amd->end_cap, flag);
 		if (end_cap_dm) {
 			end_cap_nverts = end_cap_dm->getNumVerts(end_cap_dm);
 			end_cap_nedges = end_cap_dm->getNumEdges(end_cap_dm);
@@ -619,12 +625,13 @@ static DerivedMesh *arrayModifier_doArray(
 		float start_offset[4][4];
 		int start_cap_start = result_nverts - start_cap_nverts - end_cap_nverts;
 		invert_m4_m4(start_offset, offset);
-		bm_merge_dm_transform(result_dm, start_cap_dm, start_offset,
-		                      result_nverts - start_cap_nverts - end_cap_nverts,
-		                      result_nedges - start_cap_nedges - end_cap_nedges,
-		                      result_nloops - start_cap_nloops - end_cap_nloops,
-		                      result_npolys - start_cap_npolys - end_cap_npolys,
-		                      start_cap_nverts, start_cap_nedges, start_cap_nloops, start_cap_npolys);
+		dm_merge_transform(
+		        result_dm, start_cap_dm, start_offset,
+		        result_nverts - start_cap_nverts - end_cap_nverts,
+		        result_nedges - start_cap_nedges - end_cap_nedges,
+		        result_nloops - start_cap_nloops - end_cap_nloops,
+		        result_npolys - start_cap_npolys - end_cap_npolys,
+		        start_cap_nverts, start_cap_nedges, start_cap_nloops, start_cap_npolys);
 		/* Identify doubles with first chunk */
 		if (amd->flags & MOD_ARR_MERGE) {
 			dm_mvert_map_doubles(
@@ -643,12 +650,13 @@ static DerivedMesh *arrayModifier_doArray(
 		float end_offset[4][4];
 		int end_cap_start = result_nverts - end_cap_nverts;
 		mul_m4_m4m4(end_offset, current_offset, offset);
-		bm_merge_dm_transform(result_dm, end_cap_dm, end_offset,
-		                      result_nverts - end_cap_nverts,
-		                      result_nedges - end_cap_nedges,
-		                      result_nloops - end_cap_nloops,
-		                      result_npolys - end_cap_npolys,
-		                      end_cap_nverts, end_cap_nedges, end_cap_nloops, end_cap_npolys);
+		dm_merge_transform(
+		        result_dm, end_cap_dm, end_offset,
+		        result_nverts - end_cap_nverts,
+		        result_nedges - end_cap_nedges,
+		        result_nloops - end_cap_nloops,
+		        result_npolys - end_cap_npolys,
+		        end_cap_nverts, end_cap_nedges, end_cap_nloops, end_cap_npolys);
 		/* Identify doubles with last chunk */
 		if (amd->flags & MOD_ARR_MERGE) {
 			dm_mvert_map_doubles(




More information about the Bf-blender-cvs mailing list