[Bf-blender-cvs] [3bc11a9] fracture_modifier: fix: crasher when removing the modifier on frame > 1 and trying to rerun the sim , fix: crasher when reverting the file with fracture modifier on it

Martin Felke noreply at git.blender.org
Sun Feb 1 18:45:49 CET 2015


Commit: 3bc11a9cf2362d172244d3f81464b6957144fbaf
Author: Martin Felke
Date:   Sun Feb 1 18:44:44 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rB3bc11a9cf2362d172244d3f81464b6957144fbaf

fix: crasher when removing the modifier on frame > 1 and trying to rerun the sim , fix: crasher when reverting the file with fracture modifier on it

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

M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/editors/object/object_modifier.c

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

diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 895d784..515bf99 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -3266,6 +3266,12 @@ void BKE_rigidbody_rebuild_world(Scene *scene, float ctime)
 	int startframe, endframe;
 	int shards = 0, objects = 0;
 
+	if (ctime == -1)
+	{
+		rigidbody_update_simulation(scene, rbw, true);
+		return;
+	}
+
 	BKE_ptcache_id_from_rigidbody(&pid, NULL, rbw);
 	BKE_ptcache_id_time(&pid, scene, ctime, &startframe, &endframe, NULL);
 	cache = rbw->pointcache;
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index aa8a14a..25814a1 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -284,6 +284,10 @@ static bool object_modifier_safe_to_delete(Main *bmain, Object *ob,
 static bool object_modifier_remove(Main *bmain, Object *ob, ModifierData *md,
                                    bool *r_sort_depsgraph)
 {
+	/* keep some data from modifier which is necessary for the afterwards cleanup */
+	bool do_rigidbody_cleanup = (md->type == eModifierType_Fracture);
+	Scene *scene = md->scene;
+
 	/* It seems on rapid delete it is possible to
 	 * get called twice on same modifier, so make
 	 * sure it is in list. */
@@ -335,6 +339,14 @@ static bool object_modifier_remove(Main *bmain, Object *ob, ModifierData *md,
 	BLI_remlink(&ob->modifiers, md);
 	modifier_free(md);
 
+	if (do_rigidbody_cleanup)
+	{
+		/* need to clean up modifier remainders inside the rigidbody world
+		 * AFTER the modifier is gone...  but only from the operator ?*/
+		BKE_rigidbody_rebuild_world(scene, -1);
+		BKE_scene_frame_set(scene, 1.0);
+	}
+
 	return 1;
 }




More information about the Bf-blender-cvs mailing list