[Bf-blender-cvs] [8c221fb] soc-2014-shapekey: Fixed a crash when renaming shapes in editmode

Grigory Revzin noreply at git.blender.org
Fri Jul 25 13:49:03 CEST 2014


Commit: 8c221fb0bbb831954b53d1ec924704aad682b511
Author: Grigory Revzin
Date:   Fri Jul 25 15:47:48 2014 +0400
Branches: soc-2014-shapekey
https://developer.blender.org/rB8c221fb0bbb831954b53d1ec924704aad682b511

Fixed a crash when renaming shapes in editmode

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

M	source/blender/editors/mesh/editmesh_utils.c

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

diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index 6166db9..d7a64d6 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -506,17 +506,18 @@ static void update_bmesh_shapes(Object *ob)
 		int i, j, index;
 		float (*kbco)[3] = NULL;
 		float *cdco = NULL;
-		int cd_origindex_offset = CustomData_get_offset(&bm->vdata, CD_SHAPE_KEYINDEX);
+		int cd_vindex_offset = -1;
 
 		LISTBASE_ITER_FWD_INDEX(key->block, kb, i) {
-			/* find any keyblocks that don't have a corresponding CD_SHAPEKEY */
-			index = CustomData_get_named_layer_index(vdata, CD_SHAPEKEY, kb->name);
-			if (index == -1) {
-				/* this code can hardly ever be ran, but theoretically, if there's a new keyblock somehow... */
-				CustomData_add_layer_named(vdata, CD_SHAPEKEY, CD_ASSIGN, NULL, kb->totelem, kb->name);
-				index = CustomData_get_named_layer_index(vdata, CD_SHAPEKEY, kb->name);
+			index = -1;
+			for (j = 0; j < vdata->totlayer; ++j) {
+				if (kb->uid == vdata->layers[j].uid) {
+					index = j;
+					break;
+				}
 			}
-			vdata->layers[index].uid = kb->uid;
+
+			BLI_assert(index != -1); 
 
 			kbco = kb->data;
 
@@ -530,8 +531,9 @@ static void update_bmesh_shapes(Object *ob)
 		kb = BLI_findlink(&key->block, ob->shapenr - 1);
 		kbco = kb->data;
 		/* fix up the editcos along the CD_SHAPEKEY too */
+		cd_vindex_offset = CustomData_get_offset(&bm->vdata, CD_SHAPE_KEYINDEX);
 		BM_ITER_MESH(v, &iter, bm, BM_VERTS_OF_MESH) {
-			index = BM_ELEM_CD_GET_INT(v, cd_origindex_offset);
+			index = BM_ELEM_CD_GET_INT(v, cd_vindex_offset);
 			if (index != ORIGINDEX_NONE) {
 				copy_v3_v3(v->co, kbco[index]);
 			}




More information about the Bf-blender-cvs mailing list