[Bf-blender-cvs] [e3cdc364294] fracture_modifier: refinement for plastic deformation
Martin Felke
noreply at git.blender.org
Sun Jun 18 13:41:51 CEST 2017
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);
}
}
}
More information about the Bf-blender-cvs
mailing list