[Bf-blender-cvs] [9c2ca73575f] fracture_modifier: clamped distortion and keep shared groups with autohide distance = 0 as well
Martin Felke
noreply at git.blender.org
Sat Jun 10 21:41:02 CEST 2017
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) {
More information about the Bf-blender-cvs
mailing list