Revision: 29029
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29029
Author:   nazgul
Date:     2010-05-27 16:00:32 +0200 (Thu, 27 May 2010)

Log Message:
-----------
Fix #22422: Adding a new shape key with unchecked 'Relative' checkbox crashes 
blender

Reorder callning of add_keyblock and do_ob_key in insert_*key.
do_ob_key shouldn't be called for object with uninitialized key blocks.

NOTE: this commit not fixing problems with slurph

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/object.c

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c     2010-05-27 
12:46:42 UTC (rev 29028)
+++ trunk/blender/source/blender/blenkernel/intern/object.c     2010-05-27 
14:00:32 UTC (rev 29029)
@@ -2879,15 +2879,18 @@
                newkey= 1;
        }
 
-       kb= add_keyblock(key, name);
-
        if(newkey || from_mix==FALSE) {
                /* create from mesh */
+               kb= add_keyblock(key, name);
                mesh_to_key(me, kb);
        }
        else {
                /* copy from current values */
-               kb->data= do_ob_key(scene, ob);
+               float *data= do_ob_key(scene, ob);
+
+               /* create new block with prepared data */
+               kb= add_keyblock(key, name);
+               kb->data= data;
                kb->totelem= me->totvert;
        }
 
@@ -2907,16 +2910,20 @@
                newkey= 1;
        }
 
-       kb= add_keyblock(key, name);
+       if(newkey || from_mix==FALSE) {
+               kb= add_keyblock(key, name);
 
-       if(newkey || from_mix==FALSE) {
                /* create from lattice */
                latt_to_key(lt, kb);
        }
        else {
                /* copy from current values */
+               float *data= do_ob_key(scene, ob);
+
+               /* create new block with prepared data */
+               kb= add_keyblock(key, name);
                kb->totelem= lt->pntsu*lt->pntsv*lt->pntsw;
-               kb->data= do_ob_key(scene, ob);
+               kb->data= data;
        }
 
        return kb;
@@ -2936,16 +2943,19 @@
                newkey= 1;
        }
 
-       kb= add_keyblock(key, name);
-
        if(newkey || from_mix==FALSE) {
                /* create from curve */
+               kb= add_keyblock(key, name);
                curve_to_key(cu, kb, lb);
        }
        else {
                /* copy from current values */
+               float *data= do_ob_key(scene, ob);
+
+               /* create new block with prepared data */
+               kb= add_keyblock(key, name);
                kb->totelem= count_curveverts(lb);
-               kb->data= do_ob_key(scene, ob);
+               kb->data= data;
        }
 
        return kb;


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

Reply via email to