Commit: e3cdc36429453c72c7d9eda33fce3b20315b8dbf
Author: Martin Felke
Date: Sun Jun 18 13:41:38 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rBe3cdc36429453c72c7d9eda33fce3b20315b8dbf
refinement for plastic deformation
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c
b/source/blender/blenkernel/intern/rigidbody.c
index 6d7fffffe55..543edc3f6b7 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -3738,6 +3738,27 @@ static void
handle_breaking_percentage(FractureModifierData* fmd, Object *ob, Me
}
}
+static void deactivateRigidbody(RigidBodyOb *rbo)
+{
+ //make kinematic again (un-trigger)
+ //RB_body_set_kinematic_state(rbo->physics_object, true);
+ //RB_body_set_mass(rbo->physics_object, 0.0f);
+ //rbo->flag |= RBO_FLAG_IS_GHOST;
+ RB_body_deactivate(rbo->physics_object);
+}
+
+static void deform_constraint(FractureModifierData *fmd, Object *ob,
RigidBodyShardCon* rbsc, RigidBodyWorld *rbw)
+{
+ RB_dworld_remove_constraint(rbw->physics_world,
rbsc->physics_constraint);
+ BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
+ BKE_rigidbody_start_dist_angle(rbsc, fmd->fracture_mode ==
MOD_FRACTURE_EXTERNAL ||
+ (fmd->fracture_mode ==
MOD_FRACTURE_DYNAMIC && fmd->is_dynamic_external));
+
+ //rbsc->flag |= RBC_FLAG_DISABLE_COLLISIONS;
+ deactivateRigidbody(rbsc->mi1->rigidbody);
+ deactivateRigidbody(rbsc->mi2->rigidbody);
+}
+
static void handle_breaking_angle(FractureModifierData *fmd, Object *ob,
RigidBodyShardCon *rbsc, RigidBodyWorld *rbw,
float anglediff, float weight, float
breaking_angle)
{
@@ -3760,7 +3781,7 @@ static void handle_breaking_angle(FractureModifierData
*fmd, Object *ob, RigidBo
else {
//attempt to make plastic deform by
reconstraining the shards
if (rbsc->physics_constraint) {
-
BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
+ deform_constraint(fmd, ob, rbsc, rbw);
}
}
}
@@ -3780,7 +3801,7 @@ static void handle_breaking_angle(FractureModifierData
*fmd, Object *ob, RigidBo
else {
//attempt to make plastic deform by reconstraining the
shards
if (rbsc->physics_constraint) {
-
BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
+ deform_constraint(fmd, ob, rbsc, rbw);
}
}
}
@@ -3807,7 +3828,7 @@ static void handle_breaking_distance(FractureModifierData
*fmd, Object *ob, Rigi
else {
//attempt to make plastic deform by
reconstraining the shards
if (rbsc->physics_constraint) {
-
BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
+ deform_constraint(fmd, ob, rbsc, rbw);
}
}
}
@@ -3827,7 +3848,7 @@ static void handle_breaking_distance(FractureModifierData
*fmd, Object *ob, Rigi
else {
//attempt to make plastic deform by reconstraining the
shards
if (rbsc->physics_constraint) {
-
BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
+ deform_constraint(fmd, ob, rbsc, rbw);
}
}
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs