[Bf-blender-cvs] [07d652a] fracture_modifier: crash fix for convert to objects and fix for invalid positions after conversion as well (was all zeroed out)
Martin Felke
noreply at git.blender.org
Fri Nov 21 15:42:02 CET 2014
Commit: 07d652a84080ec82e7e3196aada61dc8b95ed545
Author: Martin Felke
Date: Fri Nov 21 15:41:54 2014 +0100
Branches: fracture_modifier
https://developer.blender.org/rB07d652a84080ec82e7e3196aada61dc8b95ed545
crash fix for convert to objects and fix for invalid positions after conversion as well (was all zeroed out)
===================================================================
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 4ffef72..b87d2d2 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2309,8 +2309,10 @@ void BKE_rigidbody_remove_object(Scene *scene, Object *ob)
}
/* this SHOULD be the correct global index*/
- if (rbw->cache_index_map)
+ if ((rbw->cache_index_map != NULL) && (rbw->numbodies > 0))
+ {
rbw->cache_index_map[mi->linear_index] = NULL;
+ }
MEM_freeN(mi->rigidbody);
mi->rigidbody = NULL;
}
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 0e1a79c..e85d6b0 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -2471,6 +2471,7 @@ static void convert_modifier_to_objects(ReportList *reports, Scene* scene, Objec
MeshIsland *mi;
RigidBodyShardCon* con;
int i = 0;
+ RigidBodyWorld *rbw = scene->rigidbody_world;
int count = BLI_countlist(&rmd->meshIslands);
KDTree* objtree = BLI_kdtree_new(count);
@@ -2478,6 +2479,9 @@ static void convert_modifier_to_objects(ReportList *reports, Scene* scene, Objec
float max_con_mass = 0;
rmd->refresh = false;
+ if (rbw)
+ rbw->pointcache->flag |= PTCACHE_OUTDATED;
+
for (mi = rmd->meshIslands.first; mi; mi = mi->next) {
float cent[3];
Mesh* me;
@@ -2490,13 +2494,12 @@ static void convert_modifier_to_objects(ReportList *reports, Scene* scene, Objec
ob_new = base_new->object;
}
else {
- RigidBodyWorld *rbw = NULL;
- ob_new = BKE_object_add(G.main, scene, OB_MESH);
- rbw = scene->rigidbody_world;
+ ob_new = BKE_object_add(G.main, scene, OB_MESH);
if (rbw) {
+ rbw->pointcache->flag |= PTCACHE_OUTDATED;
/* make rigidbody object settings */
if (ob_new->rigidbody_object == NULL) {
ob_new->rigidbody_object = BKE_rigidbody_create_object(scene, ob_new, RBO_TYPE_ACTIVE);
@@ -2604,6 +2607,10 @@ static void convert_modifier_to_objects(ReportList *reports, Scene* scene, Objec
/* free array and kdtree*/
MEM_freeN(objs);
BLI_kdtree_free(objtree);
+
+ /*argh, need to trigger a world rebuild, by all means */
+ if (rbw)
+ BKE_rigidbody_rebuild_world(scene, rbw->pointcache->startframe+1);
}
static int rigidbody_convert_exec(bContext *C, wmOperator *op)
More information about the Bf-blender-cvs
mailing list