Commit: 91f02a80f545800cd514706506069f846fbc9348 Author: Martin Felke Date: Sat Aug 5 19:22:13 2017 +0200 Branches: fracture_modifier https://developer.blender.org/rB91f02a80f545800cd514706506069f846fbc9348
fix for wrong centroid calculation when re-using existing mesh-islands this affected the physics mesh and the convert to keyframes function, which created incorrect results. =================================================================== M source/blender/editors/object/object_modifier.c M source/blender/modifiers/intern/MOD_fracture.c =================================================================== diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 81d80f535ba..86172c26b7d 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -3512,13 +3512,16 @@ static int rigidbody_convert_keyframes_exec(bContext *C, wmOperator *op) } } +#if 0 + //this check might be wrong in case a passive shard (no sim data then) is first if (rmd && (rmd->fracture_mode != MOD_FRACTURE_DYNAMIC) && rmd->meshIslands.first) { MeshIsland* mi = rmd->meshIslands.first; convertable = mi->frame_count > 0; } +#endif - if (rmd && convertable) { + if (rmd /*&& convertable*/) { int count = BLI_listbase_count(&rmd->meshIslands); if (count == 0) diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c index 900868a9a20..a8b4ae61c1d 100644 --- a/source/blender/modifiers/intern/MOD_fracture.c +++ b/source/blender/modifiers/intern/MOD_fracture.c @@ -1961,7 +1961,7 @@ static int BM_mesh_minmax(BMesh *bm, float r_min[3], float r_max[3], int tagged) } //XXX BKE -static int do_shard_to_island(FractureModifierData *fmd, BMesh* bm_new, ShardID par_id) +static int do_shard_to_island(FractureModifierData *fmd, BMesh* bm_new, ShardID par_id, float centroid[3]) { DerivedMesh *dmtemp; Shard *s; @@ -2003,6 +2003,8 @@ static int do_shard_to_island(FractureModifierData *fmd, BMesh* bm_new, ShardID BLI_addtail(&fmd->islandShards, s); } + copy_v3_v3(centroid, s->centroid); + dmtemp->needsFree = 1; dmtemp->release(dmtemp); dmtemp = NULL; @@ -2199,7 +2201,8 @@ static float mesh_separate_tagged(FractureModifierData *fmd, Object *ob, BMVert BM_calc_center_centroid(bm_new, centroid, false); BM_mesh_elem_index_ensure(bm_new, BM_VERT | BM_EDGE | BM_FACE); - id = do_shard_to_island(fmd, bm_new, par_id); + //overwrite centroid with shard centroid here if we have a valid shard + id = do_shard_to_island(fmd, bm_new, par_id, centroid); BM_ITER_MESH (v, &iter, bm_new, BM_VERTS_OF_MESH) { /* eliminate centroid in vertex coords */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs