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

Reply via email to