Commit: 30acaddb6cd3b4407c26f5c85ee19846d32ee20f
Author: Martin Felke
Date:   Tue Mar 7 21:34:12 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rB30acaddb6cd3b4407c26f5c85ee19846d32ee20f

fixes for constraint behavior in dynamic_external mode

===================================================================

M       source/blender/blenkernel/intern/rigidbody.c
M       source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index dbc0c13dc7..4e78360234 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -4049,10 +4049,13 @@ 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);
-                               rbsc->flag |= RBC_FLAG_NEEDS_VALIDATE;
+                               if (!fmd->is_dynamic_external) {
+                                       
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 || fmd->fracture_mode == MOD_FRACTURE_DYNAMIC) && 
rbsc->type == RBC_TYPE_6DOF_SPRING)
+                               if (((fmd->fracture_mode == 
MOD_FRACTURE_EXTERNAL) || ((fmd->fracture_mode == MOD_FRACTURE_DYNAMIC) && 
fmd->is_dynamic_external))
+                                   && (rbsc->type == RBC_TYPE_6DOF_SPRING))
                                {
                                        if (rbsc->plastic_angle >= 0.0f || 
rbsc->plastic_dist >= 0.0f)
                                        {
@@ -4095,7 +4098,7 @@ static bool do_update_modifier(Scene* scene, Object* ob, 
RigidBodyWorld *rbw, bo
                                handle_regular_breaking(fmd, ob, rbw, rbsc, 
max_con_mass, rebuild);
                        }
 
-                       if ((fmd->fracture_mode == MOD_FRACTURE_EXTERNAL || 
fmd->fracture_mode == MOD_FRACTURE_DYNAMIC && fmd->is_dynamic_external) &&
+                       if (((fmd->fracture_mode == MOD_FRACTURE_EXTERNAL) || 
(fmd->fracture_mode == MOD_FRACTURE_DYNAMIC && fmd->is_dynamic_external)) &&
                            (rbsc->flag & RBC_FLAG_USE_BREAKING) && !rebuild)
                        {
                                handle_plastic_breaking(rbsc, rbw, laststeps, 
lastscale);
diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index 8f525053d7..3385481f04 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -516,7 +516,7 @@ static void freeData_internal(FractureModifierData *fmd, 
bool do_free_seq, bool
                if (fmd->fracture_mode != MOD_FRACTURE_DYNAMIC)
                        free_simulation(fmd, false, do_free_rigidbody); // in 
this case keep the meshisland sequence!
        }
-       else if (fmd->refresh_constraints) {
+       else if (fmd->refresh_constraints && !fmd->is_dynamic_external) {
                /* refresh constraints only */
                BKE_free_constraints(fmd);
        }
@@ -4353,7 +4353,11 @@ static int do_modifier(FractureModifierData *fmd, Object 
*ob, DerivedMesh *dm, c
                        {
                                if (fmd->update_dynamic)
                                {
-                                       BKE_free_constraints(fmd);
+                                       if (!fmd->is_dynamic_external)
+                                       {
+                                               BKE_free_constraints(fmd);
+                                       }
+
                                        printf("ADD NEW 2: %s \n", ob->id.name);
                                        fmd->update_dynamic = false;
                                        add_new_entries(fmd, dm, ob);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to