From: G B. <gb...@us...> - 2006-04-27 16:42:07
|
Update of /cvsroot/playerstage/code/player/client_libs/libplayerc/bindings/python In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22774 Modified Files: playerc.i Log Message: Added a typemap for player_point_2d_t pts[] so that the graphics2d proxy works Index: playerc.i =================================================================== RCS file: /cvsroot/playerstage/code/player/client_libs/libplayerc/bindings/python/playerc.i,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** playerc.i 22 Feb 2006 21:21:46 -0000 1.18 --- playerc.i 27 Apr 2006 23:42:01 -0000 1.19 *************** *** 26,39 **** return NULL; } ! for (i = 0; i < $1_dim0; i++) { PyObject *o = PySequence_GetItem($input,i); ! if (PyNumber_Check(o)) { temp[i] = (float) PyFloat_AsDouble(o); ! } ! else { ! PyErr_SetString(PyExc_ValueError,"Sequence elements must be numbers"); return NULL; } --- 26,39 ---- return NULL; } ! for (i = 0; i < $1_dim0; i++) { PyObject *o = PySequence_GetItem($input,i); ! if (PyNumber_Check(o)) { temp[i] = (float) PyFloat_AsDouble(o); ! } ! else { ! PyErr_SetString(PyExc_ValueError,"Sequence elements must be numbers"); return NULL; } *************** *** 42,45 **** --- 42,89 ---- } + // typemap for passing points into the graphics2d interface + %typemap(python,in) player_point_2d_t pts[] + { + // Check if is a list + if (PyList_Check ($input)) + { + int size = PyList_Size ($input); + int ii = 0; + $1 = (player_point_2d_t*) malloc (size * sizeof (player_point_2d_t)); + for (ii = 0; ii < size; ii++) + { + PyObject *o = PyList_GetItem ($input, ii); + if (PyTuple_Check (o)) + { + if (PyTuple_GET_SIZE (o) != 2) + { + PyErr_SetString (PyExc_ValueError, "tuples must have 2 items"); + free ($1); + return NULL; + } + $1[ii].px = PyFloat_AsDouble (PyTuple_GET_ITEM (o, 0)); + $1[ii].py = PyFloat_AsDouble (PyTuple_GET_ITEM (o, 1)); + } + else + { + PyErr_SetString (PyExc_TypeError, "list must contain tuples"); + free ($1); + return NULL; + } + } + } + else + { + PyErr_SetString (PyExc_TypeError, "not a list"); + return NULL; + } + } + + // typemap to free the array created in the previous typemap + %typemap(python,freearg) player_point2d_t pts[] + { + free ((player_point2d_t*) $input); + } + // Provide array (write) access %typemap(in) double [ANY][ANY] (double temp[$1_dim0][$1_dim1]) *************** *** 55,59 **** return NULL; } ! for (i = 0; i < $1_dim0; i++) { PyObject *olist = PySequence_GetItem($input,i); --- 99,103 ---- return NULL; } ! for (i = 0; i < $1_dim0; i++) { PyObject *olist = PySequence_GetItem($input,i); *************** *** 68,82 **** } ! for (j = 0; j < $1_dim1; j++) { PyObject *o = PySequence_GetItem(olist,j); ! if (PyNumber_Check(o)) { temp[i][j] = (float) PyFloat_AsDouble(o); ! } ! else { ! PyErr_SetString(PyExc_ValueError,"Sequence elements must be numbers"); return NULL; } --- 112,126 ---- } ! for (j = 0; j < $1_dim1; j++) { PyObject *o = PySequence_GetItem(olist,j); ! if (PyNumber_Check(o)) { temp[i][j] = (float) PyFloat_AsDouble(o); ! } ! else { ! PyErr_SetString(PyExc_ValueError,"Sequence elements must be numbers"); return NULL; } *************** *** 108,116 **** // Provide array access ! %typemap(out) double [ANY] { int i; $result = PyList_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *o = PyFloat_FromDouble((double) $1[i]); --- 152,160 ---- // Provide array access ! %typemap(out) double [ANY] { int i; $result = PyList_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *o = PyFloat_FromDouble((double) $1[i]); *************** *** 119,127 **** } ! %typemap(out) uint8_t [ANY] { int i; $result = PyList_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *o = PyInt_FromLong((long) (unsigned char) $1[i]); --- 163,171 ---- } ! %typemap(out) uint8_t [ANY] { int i; $result = PyList_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *o = PyInt_FromLong((long) (unsigned char) $1[i]); *************** *** 131,139 **** // Provide array access doubly-dimensioned arrays ! %typemap(out) double [ANY][ANY] { int i, j; $result = PyList_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *l = PyList_New($1_dim1); --- 175,183 ---- // Provide array access doubly-dimensioned arrays ! %typemap(out) double [ANY][ANY] { int i, j; $result = PyList_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *l = PyList_New($1_dim1); *************** *** 153,157 **** int i; $result = PyTuple_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *o = SWIG_NewPointerObj($1 + i, $1_descriptor, 0); --- 197,201 ---- int i; $result = PyTuple_New($1_dim0); ! for (i = 0; i < $1_dim0; i++) { PyObject *o = SWIG_NewPointerObj($1 + i, $1_descriptor, 0); |