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
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to