[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16534] trunk/blender/source/blender/src/ keyframing.c: Delete Key Tool - Bugfixes:

Joshua Leung aligorith at gmail.com
Mon Sep 15 06:15:37 CEST 2008


Revision: 16534
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16534
Author:   aligorith
Date:     2008-09-15 06:15:37 +0200 (Mon, 15 Sep 2008)

Log Message:
-----------
Delete Key Tool - Bugfixes:

* Available option would crash
* 'Visual' options are now not available for this tool (are not relevant)

Modified Paths:
--------------
    trunk/blender/source/blender/src/keyframing.c

Modified: trunk/blender/source/blender/src/keyframing.c
===================================================================
--- trunk/blender/source/blender/src/keyframing.c	2008-09-15 02:18:37 UTC (rev 16533)
+++ trunk/blender/source/blender/src/keyframing.c	2008-09-15 04:15:37 UTC (rev 16534)
@@ -886,6 +886,19 @@
 
 /* --- */
 
+/* check if option not available for deleting keys */
+static short incl_non_del_keys (bKeyingSet *ks, const char mode[])
+{
+	/* as optimisation, assume that it is sufficient to check only first letter
+	 * of mode (int comparison should be faster than string!)
+	 */
+	//if (strcmp(mode, "Delete")==0)
+	if (mode && mode[0]=='D')
+		return 0;
+	
+	return 1;
+}
+
 /* Object KeyingSets  ------ */
 
 /* check if include shapekey entry  */
@@ -946,12 +959,12 @@
 		{OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
 		 OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
 	
-	{NULL, "%l", 0, -1, 0, {0}}, // separator
+	{incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
 	
-	{NULL, "VisualLoc", ID_OB, INSERTKEY_MATRIX, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
-	{NULL, "VisualRot", ID_OB, INSERTKEY_MATRIX, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+	{incl_non_del_keys, "VisualLoc", ID_OB, INSERTKEY_MATRIX, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
+	{incl_non_del_keys, "VisualRot", ID_OB, INSERTKEY_MATRIX, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
 	
-	{NULL, "VisualLocRot", ID_OB, INSERTKEY_MATRIX, 6, 
+	{incl_non_del_keys, "VisualLocRot", ID_OB, INSERTKEY_MATRIX, 6, 
 		{OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
 		 OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
 	
@@ -992,12 +1005,12 @@
 		{AC_QUAT_W,AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z,
 		 AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
 	
-	{NULL, "%l", 0, -1, 0, {0}}, // separator
+	{incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
 	
-	{NULL, "VisualLoc", ID_PO, INSERTKEY_MATRIX, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
-	{NULL, "VisualRot", ID_PO, INSERTKEY_MATRIX, 3, {AC_QUAT_W,AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
+	{incl_non_del_keys, "VisualLoc", ID_PO, INSERTKEY_MATRIX, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
+	{incl_non_del_keys, "VisualRot", ID_PO, INSERTKEY_MATRIX, 3, {AC_QUAT_W,AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
 	
-	{NULL, "VisualLocRot", ID_PO, INSERTKEY_MATRIX, 7, 
+	{incl_non_del_keys, "VisualLocRot", ID_PO, INSERTKEY_MATRIX, 7, 
 		{AC_LOC_X,AC_LOC_Y,AC_LOC_Z,AC_QUAT_W,
 		 AC_QUAT_X,AC_QUAT_Y,AC_QUAT_Z}},
 	
@@ -1689,7 +1702,7 @@
 		
 		/* special hacks for 'available' option */
 		if (ks->flag == -2) {
-			IpoCurve *icu= NULL;
+			IpoCurve *icu= NULL, *icn= NULL;
 			
 			/* get first IPO-curve */
 			if (cks->act && cks->actname) {
@@ -1703,9 +1716,12 @@
 				icu= cks->ipo->curve.first;
 				
 			/* we get adrcodes directly from IPO curves (see method below...) */
-			for (; icu; icu= icu->next) {
+			for (; icu; icu= icn) {
 				short flag;
 				
+				/* get next ipo-curve in case current is deleted */
+				icn= icu->next;
+				
 				/* insert mode or delete mode */
 				if (mode == COMMONKEY_MODE_DELETE) {
 					/* local flags only add on to global flags */





More information about the Bf-blender-cvs mailing list