BGE Python API
* fixed segfaults in CListValue.index(val) and CListValue.count(val) when the pyTypes could not be converted into a CValue. * added scene.objects to replace scene.getObjectList() * added function names to PyArg_ParseTuple() so errors will include the function names * removed cases of PyArg_ParseTuple(args,"O",&pyobj) where METH_O ensures a single argument. * Made PyObjectFrom use ugly python api rather then Py_BuildValue(), approx %40 speedup for functions that return Python vector and matrix types like ob.orientation.
This commit is contained in:
@@ -77,35 +77,92 @@ bool PyObject_IsMT_Matrix(PyObject *pymat, unsigned int rank)
|
||||
|
||||
PyObject* PyObjectFrom(const MT_Matrix4x4 &mat)
|
||||
{
|
||||
#if 0
|
||||
return Py_BuildValue("[[ffff][ffff][ffff][ffff]]",
|
||||
mat[0][0], mat[0][1], mat[0][2], mat[0][3],
|
||||
mat[1][0], mat[1][1], mat[1][2], mat[1][3],
|
||||
mat[2][0], mat[2][1], mat[2][2], mat[2][3],
|
||||
mat[3][0], mat[3][1], mat[3][2], mat[3][3]);
|
||||
#else
|
||||
PyObject *list = PyList_New(4);
|
||||
PyObject *sublist;
|
||||
int i;
|
||||
|
||||
for(i=0; i < 4; i++) {
|
||||
sublist = PyList_New(4);
|
||||
PyList_SET_ITEM(sublist, 0, PyFloat_FromDouble(mat[i][0]));
|
||||
PyList_SET_ITEM(sublist, 1, PyFloat_FromDouble(mat[i][1]));
|
||||
PyList_SET_ITEM(sublist, 2, PyFloat_FromDouble(mat[i][2]));
|
||||
PyList_SET_ITEM(sublist, 2, PyFloat_FromDouble(mat[i][3]));
|
||||
PyList_SET_ITEM(list, i, sublist);
|
||||
}
|
||||
|
||||
return list;
|
||||
#endif
|
||||
}
|
||||
|
||||
PyObject* PyObjectFrom(const MT_Matrix3x3 &mat)
|
||||
{
|
||||
#if 0
|
||||
return Py_BuildValue("[[fff][fff][fff]]",
|
||||
mat[0][0], mat[0][1], mat[0][2],
|
||||
mat[1][0], mat[1][1], mat[1][2],
|
||||
mat[2][0], mat[2][1], mat[2][2]);
|
||||
#else
|
||||
PyObject *list = PyList_New(3);
|
||||
PyObject *sublist;
|
||||
int i;
|
||||
|
||||
for(i=0; i < 3; i++) {
|
||||
sublist = PyList_New(3);
|
||||
PyList_SET_ITEM(sublist, 0, PyFloat_FromDouble(mat[i][0]));
|
||||
PyList_SET_ITEM(sublist, 1, PyFloat_FromDouble(mat[i][1]));
|
||||
PyList_SET_ITEM(sublist, 2, PyFloat_FromDouble(mat[i][2]));
|
||||
PyList_SET_ITEM(list, i, sublist);
|
||||
}
|
||||
|
||||
return list;
|
||||
#endif
|
||||
}
|
||||
|
||||
PyObject* PyObjectFrom(const MT_Tuple4 &vec)
|
||||
{
|
||||
#if 0
|
||||
return Py_BuildValue("[ffff]",
|
||||
vec[0], vec[1], vec[2], vec[3]);
|
||||
#else
|
||||
PyObject *list = PyList_New(4);
|
||||
PyList_SET_ITEM(list, 0, PyFloat_FromDouble(vec[0]));
|
||||
PyList_SET_ITEM(list, 1, PyFloat_FromDouble(vec[1]));
|
||||
PyList_SET_ITEM(list, 2, PyFloat_FromDouble(vec[2]));
|
||||
PyList_SET_ITEM(list, 3, PyFloat_FromDouble(vec[3]));
|
||||
return list;
|
||||
#endif
|
||||
}
|
||||
|
||||
PyObject* PyObjectFrom(const MT_Tuple3 &vec)
|
||||
{
|
||||
#if 0
|
||||
return Py_BuildValue("[fff]",
|
||||
vec[0], vec[1], vec[2]);
|
||||
#else
|
||||
PyObject *list = PyList_New(3);
|
||||
PyList_SET_ITEM(list, 0, PyFloat_FromDouble(vec[0]));
|
||||
PyList_SET_ITEM(list, 1, PyFloat_FromDouble(vec[1]));
|
||||
PyList_SET_ITEM(list, 2, PyFloat_FromDouble(vec[2]));
|
||||
return list;
|
||||
#endif
|
||||
}
|
||||
|
||||
PyObject* PyObjectFrom(const MT_Tuple2 &vec)
|
||||
{
|
||||
#if 0
|
||||
return Py_BuildValue("[ff]",
|
||||
vec[0], vec[1]);
|
||||
#else
|
||||
PyObject *list = PyList_New(2);
|
||||
PyList_SET_ITEM(list, 0, PyFloat_FromDouble(vec[0]));
|
||||
PyList_SET_ITEM(list, 1, PyFloat_FromDouble(vec[1]));
|
||||
return list;
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user