More warning cleanups...
[blender.git] / source / gameengine / Ketsji / KX_PyMath.cpp
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  * Initialize Python thingies.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 #include <config.h>
36 #endif
37
38 #ifdef WIN32
39 #pragma warning (disable : 4786)
40 #endif //WIN32
41
42 #include "MT_Vector3.h"
43 #include "MT_Vector4.h"
44 #include "MT_Matrix4x4.h"
45 #include "MT_Point2.h"
46
47 #include "ListValue.h"
48
49 #include "KX_Python.h"
50
51 bool PyObject_IsMT_Matrix(PyObject *pymat, unsigned int rank)
52 {
53         if (!pymat)
54                 return false;
55                 
56         unsigned int y;
57         if (PySequence_Check(pymat))
58         {
59                 unsigned int rows = PySequence_Size(pymat);
60                 if (rows != rank)
61                         return false;
62                 
63                 bool ismatrix = true;
64                 for (y = 0; y < rank && ismatrix; y++)
65                 {
66                         PyObject *pyrow = PySequence_GetItem(pymat, y); /* new ref */
67                         if (PySequence_Check(pyrow))
68                         {
69                                 if (PySequence_Size(pyrow) != rank)
70                                         ismatrix = false;
71                         } else 
72                                 ismatrix = false;
73                         Py_DECREF(pyrow);
74                 }
75                 return ismatrix;
76         }
77         return false;
78 }
79
80
81 PyObject* PyObjectFrom(const MT_Matrix4x4 &mat)
82 {
83         return Py_BuildValue("[[ffff][ffff][ffff][ffff]]",
84                 mat[0][0], mat[0][1], mat[0][2], mat[0][3], 
85                 mat[1][0], mat[1][1], mat[1][2], mat[1][3], 
86                 mat[2][0], mat[2][1], mat[2][2], mat[2][3], 
87                 mat[3][0], mat[3][1], mat[3][2], mat[3][3]);
88 }
89
90 PyObject* PyObjectFrom(const MT_Matrix3x3 &mat)
91 {
92         return Py_BuildValue("[[fff][fff][fff]]",
93                 mat[0][0], mat[0][1], mat[0][2], 
94                 mat[1][0], mat[1][1], mat[1][2], 
95                 mat[2][0], mat[2][1], mat[2][2]);
96 }
97
98 PyObject* PyObjectFrom(const MT_Tuple4 &vec)
99 {
100         return Py_BuildValue("[ffff]", 
101                 vec[0], vec[1], vec[2], vec[3]);
102 }
103
104 PyObject* PyObjectFrom(const MT_Tuple3 &vec)
105 {
106         return Py_BuildValue("[fff]", 
107                 vec[0], vec[1], vec[2]);
108 }
109
110 PyObject* PyObjectFrom(const MT_Tuple2 &vec)
111 {
112         return Py_BuildValue("[ff]",
113                 vec[0], vec[1]);
114 }