[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