Update Mathutils for py3k
[blender.git] / source / blender / python / generic / matrix.h
1 /* 
2  * $Id: matrix.h 20248 2009-05-18 04:11:54Z campbellbarton $
3  * ***** BEGIN GPL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  *
19  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
20  * All rights reserved.
21  *
22  * The Original Code is: all of this file.
23  *
24  * Contributor(s): Joseph Gilbert
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  *
28  */
29
30 #ifndef EXPP_matrix_h
31 #define EXPP_matrix_h
32
33 #include <Python.h>
34
35 extern PyTypeObject matrix_Type;
36
37 #define MatrixObject_Check(v) ((v)->ob_type == &matrix_Type)
38
39 typedef float **ptRow;
40 typedef struct _Matrix {
41         PyObject_VAR_HEAD 
42         struct{
43                 float *py_data;         /*python managed*/
44                 float *blend_data;      /*blender managed*/
45         }data;
46         ptRow matrix;                   /*ptr to the contigPtr (accessor)*/
47         float *contigPtr;               /*1D array of data (alias)*/
48         int rowSize;
49         int colSize;
50         int wrapped;                    /*is wrapped data?*/
51 } MatrixObject;
52
53 /*struct data contains a pointer to the actual data that the
54 object uses. It can use either PyMem allocated data (which will
55 be stored in py_data) or be a wrapper for data allocated through
56 blender (stored in blend_data). This is an either/or struct not both*/
57
58 /*prototypes*/
59 PyObject *Matrix_Zero( MatrixObject * self );
60 PyObject *Matrix_Identity( MatrixObject * self );
61 PyObject *Matrix_Transpose( MatrixObject * self );
62 PyObject *Matrix_Determinant( MatrixObject * self );
63 PyObject *Matrix_Invert( MatrixObject * self );
64 PyObject *Matrix_TranslationPart( MatrixObject * self );
65 PyObject *Matrix_RotationPart( MatrixObject * self );
66 PyObject *Matrix_scalePart( MatrixObject * self );
67 PyObject *Matrix_Resize4x4( MatrixObject * self );
68 PyObject *Matrix_toEuler( MatrixObject * self, PyObject *args );
69 PyObject *Matrix_toQuat( MatrixObject * self );
70 PyObject *Matrix_copy( MatrixObject * self );
71 PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type);
72
73 #endif                          /* EXPP_matrix_H */