[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53518] trunk/blender/source: fix [#33682] Animation not updated when the active shape index isnt set

Campbell Barton ideasman42 at gmail.com
Thu Jan 3 07:47:48 CET 2013


Revision: 53518
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53518
Author:   campbellbarton
Date:     2013-01-03 06:47:44 +0000 (Thu, 03 Jan 2013)
Log Message:
-----------
fix [#33682] Animation not updated when the active shape index isnt set

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_key.h
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/blenkernel/intern/key.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/modifiers/intern/MOD_shapekey.c
    trunk/blender/source/creator/CMakeLists.txt

Modified: trunk/blender/source/blender/blenkernel/BKE_key.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_key.h	2013-01-03 00:35:42 UTC (rev 53517)
+++ trunk/blender/source/blender/blenkernel/BKE_key.h	2013-01-03 06:47:44 UTC (rev 53518)
@@ -59,7 +59,7 @@
 void key_curve_tangent_weights(float t, float data[4], int type);
 void key_curve_normal_weights(float t, float data[4], int type);
 
-float *do_ob_key(struct Scene *scene, struct Object *ob);
+float *BKE_key_evaluate_object(struct Scene *scene, struct Object *ob, int *r_totelem);
 
 struct Key      *BKE_key_from_object(struct Object *ob);
 struct KeyBlock *BKE_keyblock_from_object(struct Object *ob);

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2013-01-03 00:35:42 UTC (rev 53517)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2013-01-03 06:47:44 UTC (rev 53518)
@@ -799,7 +799,7 @@
 		required_mode |= eModifierMode_Editmode;
 
 	if (cu->editnurb == NULL) {
-		keyVerts = do_ob_key(scene, ob);
+		keyVerts = BKE_key_evaluate_object(scene, ob, &numVerts);
 
 		if (keyVerts) {
 			/* split coords from key data, the latter also includes
@@ -808,7 +808,7 @@
 			 * shape key modifier yet. */
 			deformedVerts = BKE_curve_keyVertexCos_get(cu, nurb, keyVerts);
 			originalVerts = MEM_dupallocN(deformedVerts);
-			numVerts = BKE_nurbList_verts_count(nurb);
+			BLI_assert(BKE_nurbList_verts_count(nurb) == numVerts);
 		}
 	}
 

Modified: trunk/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/key.c	2013-01-03 00:35:42 UTC (rev 53517)
+++ trunk/blender/source/blender/blenkernel/intern/key.c	2013-01-03 06:47:44 UTC (rev 53518)
@@ -1300,13 +1300,13 @@
 }
 
 /* returns key coordinates (+ tilt) when key applied, NULL otherwise */
-float *do_ob_key(Scene *scene, Object *ob)
+float *BKE_key_evaluate_object(Scene *scene, Object *ob, int *r_totelem)
 {
 	Key *key = BKE_key_from_object(ob);
 	KeyBlock *actkb = BKE_keyblock_from_object(ob);
 	char *out;
 	int tot = 0, size = 0;
-	
+
 	if (key == NULL || key->block.first == NULL)
 		return NULL;
 
@@ -1344,7 +1344,7 @@
 		return NULL;
 	
 	/* allocate array */
-	out = MEM_callocN(size, "do_ob_key out");
+	out = MEM_callocN(size, "BKE_key_evaluate_object out");
 
 	/* prevent python from screwing this up? anyhoo, the from pointer could be dropped */
 	key->from = (ID *)ob->data;
@@ -1383,6 +1383,9 @@
 		else if (ob->type == OB_SURF) do_curve_key(scene, ob, key, out, tot);
 	}
 	
+	if (r_totelem) {
+		*r_totelem = tot;
+	}
 	return (float *)out;
 }
 
@@ -1732,7 +1735,7 @@
 }
 
 /************************* vert coords ************************/
-float (*BKE_key_convert_to_vertcos(Object * ob, KeyBlock * kb))[3]
+float (*BKE_key_convert_to_vertcos(Object *ob, KeyBlock *kb))[3]
 {
 	float (*vertCos)[3], *co;
 	float *fp = kb->data;

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2013-01-03 00:35:42 UTC (rev 53517)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2013-01-03 06:47:44 UTC (rev 53518)
@@ -2981,12 +2981,13 @@
 	}
 	else {
 		/* copy from current values */
-		float *data = do_ob_key(scene, ob);
+		int totelem;
+		float *data = BKE_key_evaluate_object(scene, ob, &totelem);
 
 		/* create new block with prepared data */
 		kb = BKE_keyblock_add_ctime(key, name, FALSE);
 		kb->data = data;
-		kb->totelem = me->totvert;
+		kb->totelem = totelem;
 	}
 
 	return kb;
@@ -3018,11 +3019,12 @@
 	}
 	else {
 		/* copy from current values */
-		float *data = do_ob_key(scene, ob);
+		int totelem;
+		float *data = BKE_key_evaluate_object(scene, ob, &totelem);
 
 		/* create new block with prepared data */
 		kb = BKE_keyblock_add_ctime(key, name, FALSE);
-		kb->totelem = lt->pntsu * lt->pntsv * lt->pntsw;
+		kb->totelem = totelem;
 		kb->data = data;
 	}
 
@@ -3057,11 +3059,12 @@
 	}
 	else {
 		/* copy from current values */
-		float *data = do_ob_key(scene, ob);
+		int totelem;
+		float *data = BKE_key_evaluate_object(scene, ob, &totelem);
 
 		/* create new block with prepared data */
 		kb = BKE_keyblock_add_ctime(key, name, FALSE);
-		kb->totelem = BKE_nurbList_verts_count(lb);
+		kb->totelem = totelem;
 		kb->data = data;
 	}
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_shapekey.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_shapekey.c	2013-01-03 00:35:42 UTC (rev 53517)
+++ trunk/blender/source/blender/modifiers/intern/MOD_shapekey.c	2013-01-03 06:47:44 UTC (rev 53518)
@@ -54,13 +54,16 @@
                         int numVerts,
                         ModifierApplyFlag UNUSED(flag))
 {
-	KeyBlock *kb = BKE_keyblock_from_object(ob);
+	Key *key = BKE_key_from_object(ob);
 	float (*deformedVerts)[3];
 
-	if (kb && kb->totelem == numVerts) {
-		deformedVerts = (float(*)[3])do_ob_key(md->scene, ob);
+	if (key && key->block.first) {
+		int deformedVerts_tot;
+		deformedVerts = (float(*)[3])BKE_key_evaluate_object(md->scene, ob, &deformedVerts_tot);
 		if (deformedVerts) {
-			memcpy(vertexCos, deformedVerts, sizeof(float) * 3 * numVerts);
+			if (numVerts == deformedVerts_tot) {
+				memcpy(vertexCos, deformedVerts, sizeof(float) * 3 * numVerts);
+			}
 			MEM_freeN(deformedVerts);
 		}
 	}

Modified: trunk/blender/source/creator/CMakeLists.txt
===================================================================
--- trunk/blender/source/creator/CMakeLists.txt	2013-01-03 00:35:42 UTC (rev 53517)
+++ trunk/blender/source/creator/CMakeLists.txt	2013-01-03 06:47:44 UTC (rev 53518)
@@ -779,8 +779,7 @@
 
 get_property(BLENDER_LINK_LIBS GLOBAL PROPERTY BLENDER_LINK_LIBS)
 
-set(BLENDER_LINK_LIBS
-	${BLENDER_LINK_LIBS}
+list(APPEND BLENDER_LINK_LIBS
 	bf_windowmanager
 	bf_render
 )




More information about the Bf-blender-cvs mailing list