diff options
author | Jacques Guignot <guignot@wanadoo.fr> | 2003-08-01 23:47:01 +0400 |
---|---|---|
committer | Jacques Guignot <guignot@wanadoo.fr> | 2003-08-01 23:47:01 +0400 |
commit | 08c1fe681830c660df9a21e7824b83d21c4164da (patch) | |
tree | f1a4f5bf9f45f359ea50cb387f2be3810fb74d1a | |
parent | 4ebd7f6301d5fdaab3c7d14415cacb743249eb47 (diff) |
Added a new function (member of the Ipo object) EvaluateCurveOn(int pos, float time) which returns the value of the ipo curve number pos at the given time.
Updated doc accordingly.
-rw-r--r-- | source/blender/python/api2_2x/Ipo.c | 44 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Ipo.h | 3 | ||||
-rw-r--r-- | source/blender/python/api2_2x/doc/Ipo.py | 11 |
3 files changed, 47 insertions, 11 deletions
diff --git a/source/blender/python/api2_2x/Ipo.c b/source/blender/python/api2_2x/Ipo.c index 9673a1ae44e..1c506199324 100644 --- a/source/blender/python/api2_2x/Ipo.c +++ b/source/blender/python/api2_2x/Ipo.c @@ -141,12 +141,11 @@ static PyObject *M_Ipo_Get(PyObject *self, PyObject *args) static PyObject * M_Ipo_Recalc(PyObject *self, PyObject *args) { void testhandles_ipocurve(IpoCurve *icu); - -IpoCurve *icu; - //C_IpoCurve *p = (C_IpoCurve*)args; - icu = IpoCurve_FromPyObject(args); - printf("%d\n",IpoCurve_CheckPyObject(args)); - printf("%p\n",icu); + PyObject *a; +IpoCurve *icu; +if (!PyArg_ParseTuple(args, "O", &a)) + return (EXPP_ReturnPyObjError (PyExc_TypeError,"expected ipo argument)")); +icu = IpoCurve_FromPyObject(a); testhandles_ipocurve(icu); Py_INCREF(Py_None); @@ -412,8 +411,9 @@ static PyObject *Ipo_setCurveBeztriple(C_Ipo *self, PyObject *args) PyObject *listargs=0; if (!PyArg_ParseTuple(args, "iiO",&num,&pos,&listargs)) - return (EXPP_ReturnPyObjError (PyExc_TypeError, - "expected int argument")); + return (EXPP_ReturnPyObjError (PyExc_TypeError,"expected int int object argument")); + if(!PyTuple_Check(listargs)) +return (EXPP_ReturnPyObjError (PyExc_TypeError,"3rd arg should be a tuple")); icu =self->ipo->curve.first; if(!icu) return (EXPP_ReturnPyObjError (PyExc_TypeError,"No IPO curve")); for(i = 0;i<num;i++) @@ -430,7 +430,8 @@ static PyObject *Ipo_setCurveBeztriple(C_Ipo *self, PyObject *args) for(i=0;i<9;i++) { - PyObject * xx = PyList_GetItem(listargs,i); + PyObject * xx = PyTuple_GetItem(listargs,i); + printf("%f\n", PyFloat_AsDouble(xx)); ptrbt->vec[i/3][i%3] = PyFloat_AsDouble(xx); } @@ -441,14 +442,35 @@ static PyObject *Ipo_setCurveBeztriple(C_Ipo *self, PyObject *args) +static PyObject *Ipo_EvaluateCurveOn(C_Ipo *self, PyObject *args) +{ + float eval_icu(IpoCurve *icu, float ipotime) ; + + int num = 0,i; + IpoCurve *icu; + float time = 0; + + if (!PyArg_ParseTuple(args, "if",&num,&time)) + return (EXPP_ReturnPyObjError (PyExc_TypeError,"expected int argument")); + icu =self->ipo->curve.first; + if(!icu) return (EXPP_ReturnPyObjError (PyExc_TypeError,"No IPO curve")); + for(i = 0;i<num;i++) + { + if(!icu) return (EXPP_ReturnPyObjError (PyExc_TypeError,"Bad ipo number")); + icu=icu->next; + + } + return PyFloat_FromDouble(eval_icu(icu,time)); +} + + static PyObject *Ipo_getCurvecurval(C_Ipo *self, PyObject *args) { int num = 0,i; IpoCurve *icu; if (!PyArg_ParseTuple(args, "i",&num)) - return (EXPP_ReturnPyObjError (PyExc_TypeError, - "expected int argument")); + return (EXPP_ReturnPyObjError (PyExc_TypeError,"expected int argument")); icu =self->ipo->curve.first; if(!icu) return (EXPP_ReturnPyObjError (PyExc_TypeError,"No IPO curve")); for(i = 0;i<num;i++) diff --git a/source/blender/python/api2_2x/Ipo.h b/source/blender/python/api2_2x/Ipo.h index eaa71dbe4d1..1b36c725449 100644 --- a/source/blender/python/api2_2x/Ipo.h +++ b/source/blender/python/api2_2x/Ipo.h @@ -99,6 +99,7 @@ static PyObject *Ipo_getNBezPoints(C_Ipo *self, PyObject *args); static PyObject *Ipo_DeleteBezPoints(C_Ipo *self, PyObject *args); static PyObject *Ipo_getCurveBP(C_Ipo *self, PyObject *args); static PyObject *Ipo_getCurvecurval(C_Ipo *self, PyObject *args); +static PyObject *Ipo_EvaluateCurveOn(C_Ipo *self, PyObject *args); static PyObject *Ipo_setCurveBeztriple(C_Ipo *self, PyObject *args); @@ -131,6 +132,8 @@ static PyMethodDef C_Ipo_methods[] = { "() - Return curve number of Bez points"}, {"getCurveBP", (PyCFunction)Ipo_getCurveBP, METH_VARARGS, "() - Return Ipo ncurves"}, + {"EvaluateCurveOn", (PyCFunction)Ipo_EvaluateCurveOn, METH_VARARGS, + "() - Return curve value at given time"}, {"getCurveCurval", (PyCFunction)Ipo_getCurvecurval, METH_VARARGS, "() - Return curval"}, {"getCurveBeztriple", (PyCFunction)Ipo_getCurveBeztriple, METH_VARARGS, diff --git a/source/blender/python/api2_2x/doc/Ipo.py b/source/blender/python/api2_2x/doc/Ipo.py index fc2cb144eff..0368e0209e1 100644 --- a/source/blender/python/api2_2x/doc/Ipo.py +++ b/source/blender/python/api2_2x/doc/Ipo.py @@ -137,3 +137,14 @@ class Ipo: @rtype: float @return: the current value of the selected curve of the Ipo. """ + + def EvaluateCurveOn(curvepos,time): + """ + Gets the current value of a curve of the Ipo. + @type curvepos: int + @param curvepos: the position of the curve in the ipo + @type time: float + @param time: the position of the curve in the ipo + @rtype: float + @return: the current value of the selected curve of the Ipo at the given time. + """ |