Index: source/blender/blenkernel/intern/key.c =================================================================== --- source/blender/blenkernel/intern/key.c (revision 57691) +++ source/blender/blenkernel/intern/key.c (working copy) @@ -280,6 +280,16 @@ data[2] = (fc - 2.0f) * t3 + (3.0f - 2.0f * fc) * t2 + fc * t; data[3] = fc * t3 - fc * t2; } + else if (type == KEY_CATMULL_ROM) { + t2 = t * t; + t3 = t2 * t; + fc = 0.5f; + + data[0] = -fc * t3 + 2.0f * fc * t2 - fc * t; + data[1] = (2.0f - fc) * t3 + (fc - 3.0f) * t2 + 1.0f; + data[2] = (fc - 2.0f) * t3 + (3.0f - 2.0f * fc) * t2 + fc * t; + data[3] = fc * t3 - fc * t2; + } else if (type == KEY_BSPLINE) { t2 = t * t; t3 = t2 * t; @@ -311,6 +321,15 @@ data[2] = 3.0f * (fc - 2.0f) * t2 + 2.0f * (3.0f - 2.0f * fc) * t + fc; data[3] = 3.0f * fc * t2 - 2.0f * fc * t; } + else if (type == KEY_CATMULL_ROM) { + t2 = t * t; + fc = 0.5f; + + data[0] = -3.0f * fc * t2 + 4.0f * fc * t - fc; + data[1] = 3.0f * (2.0f - fc) * t2 + 2.0f * (fc - 3.0f) * t; + data[2] = 3.0f * (fc - 2.0f) * t2 + 2.0f * (3.0f - 2.0f * fc) * t + fc; + data[3] = 3.0f * fc * t2 - 2.0f * fc * t; + } else if (type == KEY_BSPLINE) { t2 = t * t; @@ -337,6 +356,14 @@ data[0] = -6.0f * fc * t + 4.0f * fc; data[1] = 6.0f * (2.0f - fc) * t + 2.0f * (fc - 3.0f); + data[2] = 6.0f * (fc - 2.0f) * t + 2.0f * (3.0f - 2.0f * fc); + data[3] = 6.0f * fc * t - 2.0f * fc; + } + else if (type == KEY_CATMULL_ROM) { + fc = 0.5f; + + data[0] = -6.0f * fc * t + 4.0f * fc; + data[1] = 6.0f * (2.0f - fc) * t + 2.0f * (fc - 3.0f); data[2] = 6.0f * (fc - 2.0f) * t + 2.0f * (3.0f - 2.0f * fc); data[3] = 6.0f * fc * t - 2.0f * fc; } Index: source/blender/makesdna/DNA_key_types.h =================================================================== --- source/blender/makesdna/DNA_key_types.h (revision 57691) +++ source/blender/makesdna/DNA_key_types.h (working copy) @@ -125,7 +125,8 @@ enum { KEY_LINEAR = 0, KEY_CARDINAL = 1, - KEY_BSPLINE = 2 + KEY_CATMULL_ROM = 2, + KEY_BSPLINE = 3 }; /* KeyBlock->flag */ Index: source/blender/makesrna/intern/rna_key.c =================================================================== --- source/blender/makesrna/intern/rna_key.c (revision 57691) +++ source/blender/makesrna/intern/rna_key.c (working copy) @@ -458,6 +458,7 @@ EnumPropertyItem keyblock_type_items[] = { {KEY_LINEAR, "KEY_LINEAR", 0, "Linear", ""}, {KEY_CARDINAL, "KEY_CARDINAL", 0, "Cardinal", ""}, + {KEY_CATMULL_ROM, "KEY_CATMULL_ROM", 0, "Catmull-Rom", ""}, {KEY_BSPLINE, "KEY_BSPLINE", 0, "BSpline", ""}, {0, NULL, 0, NULL, NULL} };