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