[Bf-blender-cvs] [e5fc421] fracture_modifier: fix for constraint loop detection (meshislands indirectly connected by a loop should get the same constraint index now)
Martin Felke
noreply at git.blender.org
Wed Dec 14 01:40:15 CET 2016
Commit: e5fc4218c784bac8c9903ad59831a87d954815d4
Author: Martin Felke
Date: Wed Dec 14 01:40:05 2016 +0100
Branches: fracture_modifier
https://developer.blender.org/rBe5fc4218c784bac8c9903ad59831a87d954815d4
fix for constraint loop detection (meshislands indirectly connected by a loop should get the same constraint index now)
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 9a436d0..3d442a5 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2112,15 +2112,7 @@ static void fake_dynamic_collide(Object *ob1, Object *ob2, MeshIsland *mi1, Mesh
static bool check_constraint_island(MeshIsland *mi1, MeshIsland *mi2)
{
if (mi1 && mi2) {
- RigidBodyShardCon *con;
- int i;
- for (i = 0; i < mi1->participating_constraint_count; i++)
- {
- con = mi1->participating_constraints[i];
- if ((con->mi1 == mi2 || con->mi2 == mi2) && (con->flag & RBC_FLAG_DISABLE_COLLISIONS)) {
- return mi1->constraint_index != mi2->constraint_index;
- }
- }
+ return mi1->constraint_index != mi2->constraint_index;
}
return true;
@@ -2223,7 +2215,7 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
fake_dynamic_collide(ob1, ob2, mi1, mi2, rbw);
fake_dynamic_collide(ob2, ob1, mi2, mi1, rbw);
- return check_colgroup_ghost(ob1, ob2) && check_constraint_island(mi1, mi2) && check_constraint_island(mi2, mi1);
+ return check_colgroup_ghost(ob1, ob2) && (check_constraint_island(mi1, mi2) && check_constraint_island(mi2, mi1) || (ob1 != ob2));
}
static bool can_break(Object* collider, Object* ob, bool limit)
@@ -3622,7 +3614,6 @@ static void set_constraint_index(FractureModifierData *fmd, RigidBodyShardCon *c
}
else
{
- fmd->constraint_island_count++;
con->mi1->constraint_index = fmd->constraint_island_count;
con->mi2->constraint_index = fmd->constraint_island_count;
}
@@ -3967,9 +3958,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
}
BKE_object_where_is_calc(scene, ob);
- if (rebuild) {
- fmd->constraint_island_count = 0;
- }
+ fmd->constraint_island_count = 1;
for (mi = fmd->meshIslands.first; mi; mi = mi->next) {
if (mi->rigidbody == NULL) {
@@ -4003,9 +3992,9 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
}
validateShard(rbw, is_empty ? NULL : mi, ob, do_rebuild, fmd->fracture_mode == MOD_FRACTURE_DYNAMIC, bbsize);
- if (rebuild) {
- mi->constraint_index = 0;
- }
+
+ mi->constraint_index = mi->id;
+
}
/* update simulation object... */
More information about the Bf-blender-cvs
mailing list