Commit: 9c2ca73575f43ceabc98075d9dddc07aa15323a2
Author: Martin Felke
Date:   Sat Jun 10 21:40:53 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rB9c2ca73575f43ceabc98075d9dddc07aa15323a2

clamped distortion and keep shared groups with autohide distance = 0 as well

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

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

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

diff --git a/source/blender/modifiers/intern/MOD_fracture.c 
b/source/blender/modifiers/intern/MOD_fracture.c
index ba58461030c..1119341ccac 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -3243,6 +3243,15 @@ static void calc_delta(SharedVert* sv, BMVert *v)
        copy_v3_v3(v->co, co);
 }
 
+static void clamp_delta(SharedVert *sv, FractureModifierData *fmd)
+{
+       float factor = (fmd->automerge_dist * fmd->automerge_dist) / 
len_squared_v3(sv->delta);
+       if (factor < 1.0f)
+       {
+               mul_v3_fl(sv->delta, factor);
+       }
+}
+
 static void prepare_automerge(FractureModifierData *fmd, BMesh *bm)
 {
        SharedVert *sv;
@@ -3313,6 +3322,7 @@ static void prepare_automerge(FractureModifierData *fmd, 
BMesh *bm)
 
                                        if (!sv->deltas_set){
                                                sub_v3_v3v3(sv->delta, co, 
v2->co);
+                                               clamp_delta(sv, fmd);
                                                sv->deltas_set = true;
                                        }
                                }
@@ -3326,6 +3336,7 @@ static void prepare_automerge(FractureModifierData *fmd, 
BMesh *bm)
 
                                if (!vg->deltas_set){
                                        sub_v3_v3v3(vg->delta, co, v1->co);
+                                       clamp_delta((SharedVert*)vg, fmd);
                                        vg->deltas_set = true;
                                }
                        }
@@ -3369,23 +3380,26 @@ static DerivedMesh *do_autoHide(FractureModifierData 
*fmd, DerivedMesh *dm, Obje
                prepare_automerge(fmd, bm);
        }
 
-       if (fmd->autohide_dist > 0 && fmd->face_pairs)
+       if (fmd->face_pairs)
        {
-               for (i = 0; i < totpoly; i++) {
-                       find_other_face(fmd, i, bm, ob,  &faces, &del_faces);
-               }
+               if (fmd->autohide_dist > 0)
+               {
+                       for (i = 0; i < totpoly; i++) {
+                               find_other_face(fmd, i, bm, ob,  &faces, 
&del_faces);
+                       }
 
-               for (i = 0; i < del_faces; i++) {
-                       BMFace *f = faces[i];
-                       if (f->l_first->e != NULL) { /* a lame check.... */
-                               BMIter iter;
-                               BMVert *v;
-                               BM_ITER_ELEM(v, &iter, f, BM_VERTS_OF_FACE)
-                               {
-                                       BM_elem_flag_enable(v, BM_ELEM_SELECT);
-                               }
+                       for (i = 0; i < del_faces; i++) {
+                               BMFace *f = faces[i];
+                               if (f->l_first->e != NULL) { /* a lame 
check.... */
+                                       BMIter iter;
+                                       BMVert *v;
+                                       BM_ITER_ELEM(v, &iter, f, 
BM_VERTS_OF_FACE)
+                                       {
+                                               BM_elem_flag_enable(v, 
BM_ELEM_SELECT);
+                                       }
 
-                               BM_elem_flag_enable(f, BM_ELEM_SELECT);
+                                       BM_elem_flag_enable(f, BM_ELEM_SELECT);
+                               }
                        }
                }
 
@@ -4296,7 +4310,10 @@ static DerivedMesh *doSimulate(FractureModifierData 
*fmd, Object *ob, DerivedMes
 
        if (fmd->refresh_autohide) {
                do_refresh_autohide(fmd, ob);
-               do_refresh_automerge(fmd, ob);
+
+               if (fmd->autohide_dist > 0) {
+                       do_refresh_automerge(fmd, ob);
+               }
        }
 
        if (fmd->refresh_constraints) {

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

Reply via email to