[Bf-blender-cvs] [d7bc7de] fracture_modifier: customdata support with sub object groups

Martin Felke noreply at git.blender.org
Fri Oct 31 11:46:28 CET 2014


Commit: d7bc7de7a97a5da45651ce7815a84147985cb9cb
Author: Martin Felke
Date:   Fri Oct 31 11:46:12 2014 +0100
Branches: fracture_modifier
https://developer.blender.org/rBd7bc7de7a97a5da45651ce7815a84147985cb9cb

customdata support with sub object groups

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

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

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

diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 0f561e0..d854a8c 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -517,10 +517,9 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm)
 		mloops = CDDM_get_loops(result);
 		mpolys = CDDM_get_polys(result);
 
-		/* XXX doesnt work, see below (customData copy).... but is needed for textures and weightpaints */
-		/*CustomData_add_layer(&result->vertData, CD_MDEFORMVERT, CD_CALLOC, NULL, num_verts);
+		CustomData_add_layer(&result->vertData, CD_MDEFORMVERT, CD_CALLOC, NULL, num_verts);
 		CustomData_add_layer(&result->loopData, CD_MLOOPUV, CD_CALLOC, NULL, num_loops);
-		CustomData_add_layer(&result->polyData, CD_MTEXPOLY, CD_CALLOC, NULL, num_polys);*/
+		CustomData_add_layer(&result->polyData, CD_MTEXPOLY, CD_CALLOC, NULL, num_polys);
 
 		vertstart = polystart = loopstart = 0;
 		for (i = 0; i < totgroup; i++)
@@ -541,9 +540,10 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm)
 			memcpy(mverts + vertstart, dm_ob->getVertArray(dm_ob), dm_ob->getNumVerts(dm_ob) * sizeof(MVert));
 			memcpy(mpolys + polystart, dm_ob->getPolyArray(dm_ob), dm_ob->getNumPolys(dm_ob) * sizeof(MPoly));
 
-
 			for (j = 0, mp = mpolys + polystart; j < dm_ob->getNumPolys(dm_ob); ++j, ++mp) {
 				/* adjust loopstart index */
+				MTexPoly *mtp = CustomData_get(&dm_ob->polyData, j, CD_MTEXPOLY);
+				CustomData_set(&result->polyData, polystart + j, CD_MTEXPOLY, mtp);
 				mp->loopstart += loopstart;
 			}
 
@@ -551,19 +551,16 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm)
 
 			for (j = 0, ml = mloops + loopstart; j < dm_ob->getNumLoops(dm_ob); ++j, ++ml) {
 				/* adjust vertex index */
+				MLoopUV *mluv = CustomData_get(&dm_ob->loopData, j, CD_MLOOPUV);
+				CustomData_set(&result->loopData, loopstart + j, CD_MLOOPUV, mluv);
 				ml->v += vertstart;
 			}
 
-			/* XXX doesnt work for moving verts to appropriate object locations... WHY ?
-			 * .... but is needed for textures and weightpaints */
-			/*CustomData_copy_data(&dm_ob->vertData, &result->vertData, 0, vertstart, dm_ob->getNumVerts(dm_ob));
-			CustomData_copy_data(&dm_ob->loopData, &result->loopData, 0, loopstart, dm_ob->getNumLoops(dm_ob));
-			CustomData_copy_data(&dm_ob->polyData, &result->polyData, 0, polystart, dm_ob->getNumPolys(dm_ob));*/
-
 			for (v = 0, mv = mverts + vertstart; v < dm_ob->getNumVerts(dm_ob); v++, mv++)
 			{
+				MDeformVert *mdv = CustomData_get(&dm_ob->vertData, v, CD_MDEFORMVERT);
+				CustomData_set(&result->vertData, vertstart + v, CD_MDEFORMVERT, mdv);
 				mul_m4_v3(o->obmat, mv->co);
-				//CustomData_set(&result->vertData, vertstart + v, CD_MVERT, mv);
 			}
 
 			vertstart += dm_ob->getNumVerts(dm_ob);
@@ -2075,7 +2072,7 @@ static DerivedMesh *doSimulate(FractureModifierData *fmd, Object *ob, DerivedMes
 			 * shards = fracture datastructure
 			 * meshisland = simulation datastructure */
 			if (fmd->frac_mesh && fmd->frac_mesh->shard_count > 0 && fmd->dm && fmd->dm->numVertData > 0 &&
-			    !fmd->shards_to_islands && !fmd->dm_group)
+			    !fmd->shards_to_islands /*&& !fmd->dm_group*/)
 			{
 				Shard *s;
 				MeshIsland *mi; /* can be created without shards even, when using fracturemethod = NONE (re-using islands)*/
@@ -2493,7 +2490,7 @@ static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
 			}
 		}
 
-		if (fmd->dm && fmd->frac_mesh && (fmd->dm->getNumPolys(fmd->dm) > 0) && (fmd->dm_group == NULL)) {
+		if (fmd->dm && fmd->frac_mesh && (fmd->dm->getNumPolys(fmd->dm) > 0)) {
 			final_dm = doSimulate(fmd, ob, fmd->dm, clean_dm);
 		}
 		else {
@@ -2587,7 +2584,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 				return derivedData;
 			}
 		}
-		if (fmd->dm && fmd->frac_mesh && (fmd->dm->getNumPolys(fmd->dm) > 0) && (fmd->dm_group == NULL)) {
+		if (fmd->dm && fmd->frac_mesh && (fmd->dm->getNumPolys(fmd->dm) > 0)) {
 			final_dm = doSimulate(fmd, ob, fmd->dm, clean_dm);
 		}
 		else {




More information about the Bf-blender-cvs mailing list