Commit: e52c7c4676ad87dcbf3c52e9fe04bd2f27d13ea4
Author: Martin Felke
Date:   Mon Dec 3 20:14:37 2018 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rBe52c7c4676ad87dcbf3c52e9fe04bd2f27d13ea4

attempt to add more detail for dynamic fracturing

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

M       source/blender/blenkernel/intern/fracture_rigidbody.c
M       source/blender/depsgraph/intern/builder/deg_builder_relations.cc

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

diff --git a/source/blender/blenkernel/intern/fracture_rigidbody.c 
b/source/blender/blenkernel/intern/fracture_rigidbody.c
index b12c2d452fa..f22b113c75b 100644
--- a/source/blender/blenkernel/intern/fracture_rigidbody.c
+++ b/source/blender/blenkernel/intern/fracture_rigidbody.c
@@ -1408,7 +1408,7 @@ static bool check_constraints(FractureModifierData *fmd, 
Shard *mi, RigidBodyWor
        return false;
 }
 
-static void check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, 
Object* ob1, Object* ob2,
+static void check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, 
Shard *s, Object* ob1, Object* ob2,
                                       RigidBodyWorld *rbw, float 
contact_pos[3], float force)
 {
        bool canbreak = false;
@@ -1423,7 +1423,9 @@ static void 
check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, Obje
        if (canbreak && check_constraints(fmd, mi, rbw))
        {
                float size[3] =  {1.0f, 1.0f, 1.0f};
+               float own_size[3];
 
+#if 0
                if (ob1 == ob2 || (ob2 && ob2->rigidbody_object && 
ob1->rigidbody_object->type == RBO_TYPE_PASSIVE)) {
                        //todo calculate shard...
                        size[0] = size[1] = size[2] = -1.0f;
@@ -1431,6 +1433,26 @@ static void 
check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, Obje
                else if (ob2) {
                        BKE_object_dimensions_get(ob2, size);
                }
+#endif
+
+
+               sub_v3_v3v3(own_size, mi->max, mi->min);
+
+               if (s) {
+                       sub_v3_v3v3(size, s->max, s->min);
+               }
+               else if (ob2) {
+                       BKE_object_dimensions_get(ob2, size);
+               }
+
+               if (size[0] > own_size[0])
+                       size[0] = own_size[0];
+
+               if (size[1] > own_size[1])
+                       size[1] = own_size[1];
+
+               if (size[2] > own_size[2])
+                       size[2] = own_size[2];
 
                copy_v3_v3(mi->impact_loc, contact_pos);
                copy_v3_v3(mi->impact_size, size);
@@ -1478,15 +1500,17 @@ static void check_fracture(rbContactPoint* cp, Scene 
*scene)
        if (fmd1 && (fmd1->flag & MOD_FRACTURE_USE_DYNAMIC))
        {
                mi1 = (Shard*)cp->contact_islandA;
-               check_fracture_meshisland(fmd1, mi1, ob1, ob2, rbw, 
cp->contact_pos_world_onA, force);
+               mi2 = (Shard*)cp->contact_islandB;
+               check_fracture_meshisland(fmd1, mi1, mi2, ob1, ob2, rbw, 
cp->contact_pos_world_onA, force);
        }
 
        fmd2 = (FractureModifierData*)modifiers_findByType(ob2, 
eModifierType_Fracture);
        if (fmd2 && (fmd2->flag & MOD_FRACTURE_USE_DYNAMIC))
        {
                mi2 = (Shard*)cp->contact_islandB;
-               check_fracture_meshisland(fmd2, mi2, ob2, ob1, rbw, 
cp->contact_pos_world_onB, force);
-       }
+               mi1 = (Shard*)cp->contact_islandA;
+               check_fracture_meshisland(fmd2, mi2, mi1, ob2, ob1, rbw, 
cp->contact_pos_world_onB, force);
+       }               
 
        //free contact point ?
        cp = NULL;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 8b3f35f7519..32593d401f9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1649,16 +1649,20 @@ void DepsgraphRelationBuilder::build_rigidbody(Scene 
*scene)
                                add_relation(rbo_key, uber_key, "RBO Sync -> 
Uber (Temp)");
                        }
 
-                       /* Needed to get correct base values. */
-                       add_relation(trans_op, sim_key, "Base Ob Transform -> 
Rigidbody Sim Eval");
+                       if (!fmd) {
 
-                       if (fmd)
+                               /* Needed to get correct base values. */
+                               add_relation(trans_op, sim_key, "Base Ob 
Transform -> Rigidbody Sim Eval");
+                       }
+#if 0
+                       else
                        {
                                OperationKey uber_geom_key(&object->id,
                                                      DEG_NODE_TYPE_GEOMETRY,
                                                      
DEG_OPCODE_GEOMETRY_UBEREVAL);
                                add_relation(rbo_key, uber_geom_key, "RBO Sync 
-> Uber Geom (Fracture)");
                        }
+#endif
                }
                FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
        }

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

Reply via email to