[Bf-blender-cvs] [b0921d3] fracture_modifier: activate objects now when constraints are broken, this is an attempt to get rid of single shards stuck in the air, not being connected visually to other shards

Martin Felke noreply at git.blender.org
Thu Dec 18 20:20:40 CET 2014


Commit: b0921d3f99e86f7917accd1249ca78f5a6ec7d3f
Author: Martin Felke
Date:   Thu Dec 18 20:20:23 2014 +0100
Branches: fracture_modifier
https://developer.blender.org/rBb0921d3f99e86f7917accd1249ca78f5a6ec7d3f

activate objects now when constraints are broken, this is an attempt to get rid of single shards stuck in the air, not being connected visually to other shards

===================================================================

M	source/blender/blenkernel/intern/rigidbody.c

===================================================================

diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index fde1185..e3a9052 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -72,6 +72,14 @@
 
 #ifdef WITH_BULLET
 
+static void activateRigidbody(RigidBodyOb* rbo)
+{
+	rbo->flag &= ~RBO_FLAG_KINEMATIC;
+	RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
+	RB_body_set_kinematic_state(rbo->physics_object, false);
+	rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+}
+
 static void validateShard(RigidBodyWorld *rbw, MeshIsland *mi, Object *ob, int rebuild);
 
 static bool isModifierActive(FractureModifierData *rmd) {
@@ -1714,10 +1722,7 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
 					if ((rbo->flag & RBO_FLAG_KINEMATIC) && ((mi1 == mi)))
 					{
 						if (rbo->physics_object) {
-							rbo->flag &= ~RBO_FLAG_KINEMATIC;
-							RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
-							RB_body_set_kinematic_state(rbo->physics_object, false);
-							rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+							activateRigidbody(rbo);
 						}
 
 					}
@@ -1729,10 +1734,7 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
 
 				if (rbo)
 				{
-					rbo->flag &= ~RBO_FLAG_KINEMATIC;
-					RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
-					RB_body_set_kinematic_state(rbo->physics_object, false);
-					rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+					activateRigidbody(rbo);
 				}
 			}
 		}
@@ -1757,10 +1759,7 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
 					if ((rbo->flag & RBO_FLAG_KINEMATIC) && ((mi2 == mi)))
 					{
 						if (rbo->physics_object) {
-							rbo->flag &= ~RBO_FLAG_KINEMATIC;
-							RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
-							RB_body_set_kinematic_state(rbo->physics_object, false);
-							rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+							activateRigidbody(rbo);
 						}
 					}
 				}
@@ -1771,17 +1770,14 @@ static int filterCallback(void* world, void* island1, void* island2, void *blend
 
 				if (rbo)
 				{
-					rbo->flag &= ~RBO_FLAG_KINEMATIC;
-					RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
-					RB_body_set_kinematic_state(rbo->physics_object, false);
-					rbo->flag |= RBO_FLAG_NEEDS_VALIDATE;
+					activateRigidbody(rbo);
 				}
 			}
 		}
 	}
 
 	ret = colgroup_check(ob1->rigidbody_object->col_groups, ob2->rigidbody_object->col_groups);
-	return ret && !(ob1->rigidbody_object->flag & RBO_FLAG_IS_GHOST) && !(ob2->rigidbody_object->flag & RBO_FLAG_IS_GHOST);
+	return ret && (!(ob1->rigidbody_object->flag & RBO_FLAG_IS_GHOST) && !(ob2->rigidbody_object->flag & RBO_FLAG_IS_GHOST));
 }
 
 #if 0
@@ -2713,6 +2709,9 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
 													if (con->physics_constraint) {
 														RB_constraint_set_enabled(con->physics_constraint, false);
 													}
+
+													activateRigidbody(con->mi1->rigidbody);
+													activateRigidbody(con->mi2->rigidbody);
 												}
 											}
 										}
@@ -2734,6 +2733,9 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
 													if (con->physics_constraint) {
 														RB_constraint_set_enabled(con->physics_constraint, false);
 													}
+
+													activateRigidbody(con->mi1->rigidbody);
+													activateRigidbody(con->mi2->rigidbody);
 												}
 											}
 										}
@@ -2806,6 +2808,9 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
 									if (rbsc->physics_constraint) {
 										RB_constraint_set_enabled(rbsc->physics_constraint, false);
 									}
+
+									activateRigidbody(rbsc->mi1->rigidbody);
+									activateRigidbody(rbsc->mi2->rigidbody);
 								}
 							}
 						}
@@ -2821,6 +2826,9 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
 								if (rbsc->physics_constraint) {
 									RB_constraint_set_enabled(rbsc->physics_constraint, false);
 								}
+
+								activateRigidbody(rbsc->mi1->rigidbody);
+								activateRigidbody(rbsc->mi2->rigidbody);
 							}
 						}
 
@@ -2840,6 +2848,9 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
 									if (rbsc->physics_constraint) {
 										RB_constraint_set_enabled(rbsc->physics_constraint, false);
 									}
+
+									activateRigidbody(rbsc->mi1->rigidbody);
+									activateRigidbody(rbsc->mi2->rigidbody);
 								}
 							}
 						}
@@ -2855,6 +2866,9 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
 								if (rbsc->physics_constraint) {
 									RB_constraint_set_enabled(rbsc->physics_constraint, false);
 								}
+
+								activateRigidbody(rbsc->mi1->rigidbody);
+								activateRigidbody(rbsc->mi2->rigidbody);
 							}
 						}
 					}




More information about the Bf-blender-cvs mailing list