[Bf-blender-cvs] [d7b094a8076] fracture_modifier: fix attempt for "merge cache"
Martin Felke
noreply at git.blender.org
Fri Aug 18 18:45:44 CEST 2017
Commit: d7b094a8076912ca2f1f35c401fbb137a836c21f
Author: Martin Felke
Date: Fri Aug 18 18:45:25 2017 +0200
Branches: fracture_modifier
https://developer.blender.org/rBd7b094a8076912ca2f1f35c401fbb137a836c21f
fix attempt for "merge cache"
===================================================================
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 12be142b9ce..4654fc10677 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -100,7 +100,7 @@ static void free_shards(FractureModifierData *fmd);
typedef struct SharedVertGroup {
struct SharedVertGroup* next, *prev;
- int index;
+ int index, excession_frame;
bool exceeded, deltas_set, moved;
float rest_co[3];
float delta[3];
@@ -109,7 +109,7 @@ typedef struct SharedVertGroup {
typedef struct SharedVert {
struct SharedVert* next, *prev;
- int index;
+ int index, excession_frame;
bool exceeded, deltas_set, moved;
float rest_co[3];
float delta[3];
@@ -3188,12 +3188,14 @@ static void reset_automerge(FractureModifierData *fmd)
for (vg = fmd->shared_verts.first; vg; vg = vg->next) {
vg->exceeded = false;
+ //vg->excession_frame = -1;
//vg->moved = false;
zero_v3(vg->delta);
vg->deltas_set = false;
for (sv = vg->verts.first; sv; sv = sv->next)
{
+ //sv->excession_frame = -1;
sv->exceeded = false;
//sv->moved = false;
zero_v3(sv->delta);
@@ -3232,6 +3234,8 @@ static void handle_vertex(FractureModifierData *fmd, BMesh* bm, SharedVert *sv,
bool do_calc_delta = fmd->keep_distort;
float dist = fmd->autohide_dist;
BMEdge *e = NULL;
+ Scene *sc = fmd->modifier.scene;
+ int frame = sc ? (int)BKE_scene_frame_get(sc) : 1;
BMVert *v = bm->vtable[sv->index];
@@ -3242,7 +3246,7 @@ static void handle_vertex(FractureModifierData *fmd, BMesh* bm, SharedVert *sv,
if ((len_squared_v3v3(co, v->co) <= fmd->automerge_dist * fmd->automerge_dist))
{
- if (!sv->exceeded)
+ if (!sv->exceeded || frame < sv->excession_frame)
{
copy_v3_v3(v->co, co);
copy_v3_v3(v->no, no);
@@ -3251,6 +3255,11 @@ static void handle_vertex(FractureModifierData *fmd, BMesh* bm, SharedVert *sv,
else {
sv->exceeded = true;
+ if (sv->excession_frame == -1)
+ {
+ sv->excession_frame = frame;
+ }
+
if (!sv->deltas_set) {
sub_v3_v3v3(sv->delta, co, v->co);
clamp_delta(sv, fmd);
@@ -4044,6 +4053,7 @@ static void make_shared_vert_groups(FractureModifierData* fmd, DerivedMesh* dm,
gvert->exceeded = false;
gvert->deltas_set = false;
gvert->moved = false;
+ gvert->excession_frame = -1;
zero_v3(gvert->delta);
copy_v3_v3(gvert->rest_co, mvert[i].co);
@@ -4061,6 +4071,7 @@ static void make_shared_vert_groups(FractureModifierData* fmd, DerivedMesh* dm,
svert->exceeded = false;
svert->deltas_set = false;
svert->moved = false;
+ svert->excession_frame = -1;
zero_v3(svert->delta);
copy_v3_v3(svert->rest_co, mvert[index].co);
BLI_addtail(&gvert->verts, svert);
@@ -4288,7 +4299,7 @@ static void do_reset_automerge(FractureModifierData* fmd)
RigidBodyWorld *rbw = sc->rigidbody_world;
int frame = (int)BKE_scene_frame_get(sc);
int start = (rbw && rbw->pointcache ) ? MAX2(rbw->pointcache->startframe, sc->r.sfra) : sc->r.sfra;
- if (frame == start || frame > fmd->last_frame + 1 || frame < fmd->last_frame - 1) {
+ if (frame == start) { // || frame > fmd->last_frame + 1 || frame < fmd->last_frame - 1) {
reset_automerge(fmd);
}
}
More information about the Bf-blender-cvs
mailing list