[Bf-blender-cvs] [d3cdd5c] fracture_modifier: fix for different constraint behavior after refracturing / reloading / param change
Martin Felke
noreply at git.blender.org
Wed Mar 30 15:18:37 CEST 2016
Commit: d3cdd5c237dd2daea1d891e0ccb13d5e376ebdb1
Author: Martin Felke
Date: Wed Mar 30 15:05:21 2016 +0200
Branches: fracture_modifier
https://developer.blender.org/rBd3cdd5c237dd2daea1d891e0ccb13d5e376ebdb1
fix for different constraint behavior after refracturing / reloading / param change
constraint enabled flags were changed during sim and next sim started with pre-broken
constraints this way... thus different behavior.
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
M source/blender/blenloader/intern/readfile.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index ee1d92a..ad3dabc 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -3216,9 +3216,6 @@ static void handle_breaking_percentage(FractureModifierData* fmd, Object *ob, Me
if (con && con->mi1->particle_index != con->mi2->particle_index) {
if (fmd->use_breaking)
{
- con->flag &= ~RBC_FLAG_ENABLED;
- con->flag |= RBC_FLAG_NEEDS_VALIDATE;
-
if (con->physics_constraint) {
RB_constraint_set_enabled(con->physics_constraint, false);
activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
@@ -3238,9 +3235,6 @@ static void handle_breaking_percentage(FractureModifierData* fmd, Object *ob, Me
con = mi->participating_constraints[i];
if (con && fmd->use_breaking)
{
- con->flag &= ~RBC_FLAG_ENABLED;
- con->flag |= RBC_FLAG_NEEDS_VALIDATE;
-
if (con->physics_constraint) {
RB_constraint_set_enabled(con->physics_constraint, false);
activateRigidbody(con->mi1->rigidbody, rbw, con->mi1, ob);
@@ -3264,9 +3258,6 @@ static void handle_breaking_angle(FractureModifierData *fmd, Object *ob, RigidBo
{
if (fmd->use_breaking)
{
- rbsc->flag &= ~RBC_FLAG_ENABLED;
- rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
-
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
@@ -3281,9 +3272,6 @@ static void handle_breaking_angle(FractureModifierData *fmd, Object *ob, RigidBo
{
if (fmd->use_breaking)
{
- rbsc->flag &= ~RBC_FLAG_ENABLED;
- rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
-
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
@@ -3305,9 +3293,6 @@ static void handle_breaking_distance(FractureModifierData *fmd, Object *ob, Rigi
{
if (fmd->use_breaking)
{
- rbsc->flag &= ~RBC_FLAG_ENABLED;
- rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
-
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
@@ -3322,9 +3307,6 @@ static void handle_breaking_distance(FractureModifierData *fmd, Object *ob, Rigi
{
if (fmd->use_breaking)
{
- rbsc->flag &= ~RBC_FLAG_ENABLED;
- rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
-
if (rbsc->physics_constraint) {
RB_constraint_set_enabled(rbsc->physics_constraint, false);
activateRigidbody(rbsc->mi1->rigidbody, rbw, rbsc->mi1, ob);
@@ -3435,9 +3417,9 @@ static void handle_regular_breaking(FractureModifierData *fmd, Object *ob, Rigid
BKE_rigidbody_calc_threshold(max_con_mass, fmd, rbsc);
}
- if (((fmd->breaking_angle) > 0) || (fmd->breaking_angle_weighted && weight > 0) ||
- (((fmd->breaking_distance > 0) || (fmd->breaking_distance_weighted && weight > 0)) ||
- (fmd->cluster_breaking_angle > 0 || fmd->cluster_breaking_distance > 0)) && !rebuild)
+ if ((((fmd->breaking_angle) > 0) || (fmd->breaking_angle_weighted && weight > 0) ||
+ (fmd->breaking_distance > 0) || (fmd->breaking_distance_weighted && weight > 0) ||
+ (fmd->cluster_breaking_angle > 0 || (fmd->cluster_breaking_distance > 0))) /*&& !rebuild*/)
{
float dist, angle, distdiff, anglediff;
calc_dist_angle(rbsc, &dist, &angle, false);
@@ -3450,7 +3432,6 @@ static void handle_regular_breaking(FractureModifierData *fmd, Object *ob, Rigid
/* Treat distances here */
handle_breaking_distance(fmd, ob, rbsc, rbw, distdiff, weight, breaking_distance);
-
}
}
@@ -3573,8 +3554,8 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
if (rbsc->physics_constraint && rbw && (rbw->flag & RBW_FLAG_REBUILD_CONSTRAINTS) && !rebuild) {
- printf("Rebuilding constraints\n");
- //RB_constraint_set_enabled(rbsc->physics_constraint, rbsc->flag & RBC_FLAG_ENABLED);
+ //printf("Rebuilding constraints\n");
+ RB_constraint_set_enabled(rbsc->physics_constraint, rbsc->flag & RBC_FLAG_ENABLED);
rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
if (fmd->fracture_mode == MOD_FRACTURE_EXTERNAL && rbsc->type == RBC_TYPE_6DOF_SPRING)
@@ -3603,7 +3584,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
if (rebuild || rbsc->mi1->rigidbody->flag & RBO_FLAG_KINEMATIC_REBUILD ||
rbsc->mi2->rigidbody->flag & RBO_FLAG_KINEMATIC_REBUILD) {
/* World has been rebuilt so rebuild constraint */
- BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
+ BKE_rigidbody_validate_sim_shard_constraint(rbw, fmd, ob, rbsc, true);
BKE_rigidbody_start_dist_angle(rbsc, fmd->fracture_mode == MOD_FRACTURE_EXTERNAL);
//TODO ensure evaluation on transform change too
}
@@ -3614,7 +3595,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
// BKE_rigidbody_start_dist_angle(rbsc, true);
}
- if (fmd->fracture_mode != MOD_FRACTURE_EXTERNAL)
+ if (fmd->fracture_mode != MOD_FRACTURE_EXTERNAL && !rebuild)
{
handle_regular_breaking(fmd, ob, rbw, rbsc, max_con_mass, rebuild);
}
@@ -3628,20 +3609,6 @@ static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, bo
lastscale = rbw->time_scale;
laststeps = rbw->steps_per_second;
-#if 0
- if (i < 10 && !rebuild)
- {
- print_v3("Con Loc", rbsc->pos);
- print_qt("Con Rot", rbsc->orn);
-
- print_v3("Mi1 Loc", rbsc->mi1->rigidbody->pos);
- print_qt("Mi1 Rot", rbsc->mi1->rigidbody->orn);
-
- print_v3("Mi2 Loc", rbsc->mi2->rigidbody->pos);
- print_qt("Mi2 Rot", rbsc->mi2->rigidbody->orn);
- }
-#endif
-
i++;
}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 27bd0ec..4acb213 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5058,13 +5058,10 @@ static void read_meshIsland(FileData *fd, MeshIsland **address)
mi->vertices = NULL;
mi->vertices_cached = NULL;
mi->vertco = newdataadr(fd, mi->vertco);
+ //legacy crap...
mi->temp = newdataadr(fd, mi->temp);
-#if 0
- read_shard(fd, &(mi->temp));
- mi->physics_mesh = BKE_shard_create_dm(mi->temp, true);
- BKE_shard_free(mi->temp, true);
-#endif
mi->temp = NULL;
+ //end legacy crap
mi->vertno = newdataadr(fd, mi->vertno);
mi->rigidbody = newdataadr(fd, mi->rigidbody);
More information about the Bf-blender-cvs
mailing list