[Bf-blender-cvs] [55df8ba] fracture_modifier: fix: sub object groups should work a bit more reliable now, did crash very often before
Martin Felke
noreply at git.blender.org
Mon Feb 23 14:21:14 CET 2015
Commit: 55df8ba2319a9fd7f1d390301198903109fee2dc
Author: Martin Felke
Date: Mon Feb 23 10:51:07 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rB55df8ba2319a9fd7f1d390301198903109fee2dc
fix: sub object groups should work a bit more reliable now, did crash very often before
===================================================================
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 dafe5a8..4f71b52 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -602,7 +602,17 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm)
for (i = 0; i < totgroup; i++)
{
Object *o = go[i];
- dm_ob = o->derivedFinal;
+ /*ensure o->derivedFinal*/
+ FractureModifierData* fmd2 = (FractureModifierData*) modifiers_findByType(o, eModifierType_Fracture);
+ if (fmd2)
+ {
+ dm_ob = fmd2->visible_mesh_cached;
+ }
+ else
+ {
+ dm_ob = o->derivedFinal;
+ }
+
if (dm_ob == NULL) continue;
num_verts += dm_ob->getNumVerts(dm_ob);
@@ -633,7 +643,17 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm)
MVert *mv;
Object *o = go[i];
- dm_ob = o->derivedFinal; /* not very reliable... hmm */
+
+ /*ensure o->derivedFinal*/
+ FractureModifierData* fmd2 = (FractureModifierData*) modifiers_findByType(o, eModifierType_Fracture);
+ if (fmd2)
+ {
+ dm_ob = fmd2->visible_mesh_cached;
+ }
+ else
+ {
+ dm_ob = o->derivedFinal;
+ }
if (dm_ob == NULL)
{ /* avoid crash atleast...*/
@@ -645,8 +665,12 @@ static DerivedMesh *get_group_dm(FractureModifierData *fmd, DerivedMesh *dm)
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);
+ if (CustomData_has_layer(&dm_ob->polyData, CD_MTEXPOLY))
+ {
+ MTexPoly *mtp = CustomData_get(&dm_ob->polyData, j, CD_MTEXPOLY);
+ if (mtp)
+ CustomData_set(&result->polyData, polystart + j, CD_MTEXPOLY, mtp);
+ }
mp->loopstart += loopstart;
}
@@ -654,15 +678,23 @@ 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);
+ if (CustomData_has_layer(&dm_ob->loopData, CD_MLOOPUV))
+ {
+ MLoopUV *mluv = CustomData_get(&dm_ob->loopData, j, CD_MLOOPUV);
+ if (mluv)
+ CustomData_set(&result->loopData, loopstart + j, CD_MLOOPUV, mluv);
+ }
ml->v += vertstart;
}
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);
+ if (CustomData_has_layer(&dm_ob->vertData, CD_MDEFORMVERT))
+ {
+ MDeformVert *mdv = CustomData_get(&dm_ob->vertData, v, CD_MDEFORMVERT);
+ if (mdv)
+ CustomData_set(&result->vertData, vertstart + v, CD_MDEFORMVERT, mdv);
+ }
mul_m4_v3(o->obmat, mv->co);
}
More information about the Bf-blender-cvs
mailing list