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)

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

Reply via email to