[Bf-blender-cvs] [91f02a80f54] fracture_modifier: fix for wrong centroid calculation when re-using existing mesh-islands
Martin Felke
noreply at git.blender.org
Sat Aug 5 19:22:39 CEST 2017
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 */
More information about the Bf-blender-cvs
mailing list