Revision: 34737
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34737
Author:   campbellbarton
Date:     2011-02-09 09:20:17 +0000 (Wed, 09 Feb 2011)
Log Message:
-----------
use static functions rather then defines for internal matrix__apply_to_copy() 
and similar.
+ other minor internal changes.

Modified Paths:
--------------
    trunk/blender/source/blender/python/generic/mathutils.c
    trunk/blender/source/blender/python/generic/mathutils_matrix.c
    trunk/blender/source/blender/python/generic/mathutils_matrix.h
    trunk/blender/source/blender/python/generic/mathutils_quat.c
    trunk/blender/source/blender/python/generic/mathutils_vector.c

Modified: trunk/blender/source/blender/python/generic/mathutils.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils.c     2011-02-09 
04:45:53 UTC (rev 34736)
+++ trunk/blender/source/blender/python/generic/mathutils.c     2011-02-09 
09:20:17 UTC (rev 34737)
@@ -191,7 +191,7 @@
                if(!BaseMath_ReadCallback((BaseMathObject *)value)) {
                        return -1;
                }
-               else if(((MatrixObject *)value)->colSize < 3 || ((MatrixObject 
*)value)->rowSize < 3) {
+               else if(((MatrixObject *)value)->col_size < 3 || ((MatrixObject 
*)value)->row_size < 3) {
                        PyErr_Format(PyExc_ValueError, "%.200s: matrix must 
have minimum 3x3 dimensions", error_prefix);
                        return -1;
                }

Modified: trunk/blender/source/blender/python/generic/mathutils_matrix.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils_matrix.c      
2011-02-09 04:45:53 UTC (rev 34736)
+++ trunk/blender/source/blender/python/generic/mathutils_matrix.c      
2011-02-09 09:20:17 UTC (rev 34737)
@@ -31,21 +31,9 @@
 #include "BLI_blenlib.h"
 #include "BLI_utildefines.h"
 
-#define MATRIX_APPLY_TO_COPY(matrix_meth_noargs, _self) \
-       MatrixObject *ret= (MatrixObject *)Matrix_copy(_self); \
-       PyObject *ret_dummy= matrix_meth_noargs(ret); \
-       if(ret_dummy) { \
-               Py_DECREF(ret_dummy); \
-               return (PyObject *)ret; \
-       } \
-       else { /* error */ \
-               Py_DECREF(ret); \
-               return NULL; \
-       } \
-
-
 static PyObject *Matrix_copy(MatrixObject *self);
 static int Matrix_ass_slice(MatrixObject *self, int begin, int end, PyObject 
*value);
+static PyObject *matrix__apply_to_copy(PyNoArgsFunction matrix_func, 
MatrixObject *self);
 
 /* matrix vector callbacks */
 int mathutils_matrix_vector_cb_index= -1;
@@ -64,7 +52,7 @@
        if(!BaseMath_ReadCallback(self))
                return 0;
 
-       for(i=0; i < self->colSize; i++)
+       for(i=0; i < self->col_size; i++)
                bmo->data[i]= self->matrix[subtype][i];
 
        return 1;
@@ -78,7 +66,7 @@
        if(!BaseMath_ReadCallback(self))
                return 0;
 
-       for(i=0; i < self->colSize; i++)
+       for(i=0; i < self->col_size; i++)
                self->matrix[subtype][i]= bmo->data[i];
 
        (void)BaseMath_WriteCallback(self);
@@ -161,6 +149,20 @@
        return NULL;
 }
 
+static PyObject *matrix__apply_to_copy(PyNoArgsFunction matrix_func, 
MatrixObject *self)
+{
+       PyObject *ret= Matrix_copy(self);
+       PyObject *ret_dummy= matrix_func(ret);
+       if(ret_dummy) {
+               Py_DECREF(ret_dummy);
+               return (PyObject *)ret;
+       }
+       else { /* error */
+               Py_DECREF(ret);
+               return NULL;
+       }
+}
+
 /* when a matrix is 4x4 size but initialized as a 3x3, re-assign values for 
4x4 */
 static void matrix_3x3_as_4x4(float mat[16])
 {
@@ -598,10 +600,10 @@
 /* assumes rowsize == colsize is checked and the read callback has run */
 static float matrix_determinant_internal(MatrixObject *self)
 {
-       if(self->rowSize == 2) {
+       if(self->row_size == 2) {
                return determinant_m2(self->matrix[0][0], self->matrix[0][1],
                                         self->matrix[1][0], 
self->matrix[1][1]);
-       } else if(self->rowSize == 3) {
+       } else if(self->row_size == 3) {
                return determinant_m3(self->matrix[0][0], self->matrix[0][1],
                                         self->matrix[0][2], self->matrix[1][0],
                                         self->matrix[1][1], self->matrix[1][2],
@@ -630,11 +632,11 @@
                return NULL;
 
        /*must be 3-4 cols, 3-4 rows, square matrix*/
-       if((self->colSize < 3) || (self->rowSize < 3) || (self->colSize != 
self->rowSize)) {
+       if((self->col_size < 3) || (self->row_size < 3) || (self->col_size != 
self->row_size)) {
                PyErr_SetString(PyExc_AttributeError, "Matrix.to_quat(): 
inappropriate matrix size - expects 3x3 or 4x4 matrix");
                return NULL;
        }
-       if(self->colSize == 3){
+       if(self->col_size == 3){
                mat3_to_quat( quat,(float (*)[3])self->contigPtr);
        }else{
                mat4_to_quat( quat,(float (*)[4])self->contigPtr);
@@ -680,9 +682,9 @@
        }
 
        /*must be 3-4 cols, 3-4 rows, square matrix*/
-       if(self->colSize ==3 && self->rowSize ==3) {
+       if(self->col_size ==3 && self->row_size ==3) {
                mat= (float (*)[3])self->contigPtr;
-       }else if (self->colSize ==4 && self->rowSize ==4) {
+       }else if (self->col_size ==4 && self->row_size ==4) {
                copy_m3_m4(tmat, (float (*)[4])self->contigPtr);
                mat= tmat;
        }else {
@@ -737,9 +739,9 @@
                self->matrix[x] = self->contigPtr + (x * 4);
        }
        /*move data to new spot in array + clean*/
-       for(blank_rows = (4 - self->rowSize); blank_rows > 0; blank_rows--){
+       for(blank_rows = (4 - self->row_size); blank_rows > 0; blank_rows--){
                for(x = 0; x < 4; x++){
-                       index = (4 * (self->rowSize + (blank_rows - 1))) + x;
+                       index = (4 * (self->row_size + (blank_rows - 1))) + x;
                        if (index == 10 || index == 15){
                                self->contigPtr[index] = 1.0f;
                        }else{
@@ -747,11 +749,11 @@
                        }
                }
        }
-       for(x = 1; x <= self->rowSize; x++){
-               first_row_elem = (self->colSize * (self->rowSize - x));
-               curr_pos = (first_row_elem + (self->colSize -1));
-               new_pos = (4 * (self->rowSize - x )) + (curr_pos - 
first_row_elem);
-               for(blank_columns = (4 - self->colSize); blank_columns > 0; 
blank_columns--){
+       for(x = 1; x <= self->row_size; x++){
+               first_row_elem = (self->col_size * (self->row_size - x));
+               curr_pos = (first_row_elem + (self->col_size -1));
+               new_pos = (4 * (self->row_size - x )) + (curr_pos - 
first_row_elem);
+               for(blank_columns = (4 - self->col_size); blank_columns > 0; 
blank_columns--){
                        self->contigPtr[new_pos + blank_columns] = 0.0f;
                }
                for(curr_pos = curr_pos; curr_pos >= first_row_elem; 
curr_pos--){
@@ -759,8 +761,8 @@
                        new_pos--;
                }
        }
-       self->rowSize = 4;
-       self->colSize = 4;
+       self->row_size = 4;
+       self->col_size = 4;
 
        Py_RETURN_NONE;
 }
@@ -778,10 +780,10 @@
        if(!BaseMath_ReadCallback(self))
                return NULL;
 
-       if(self->colSize==4 && self->rowSize==4) {
+       if(self->col_size==4 && self->row_size==4) {
                return (PyObject *)newMatrixObject(self->contigPtr, 4, 4, 
Py_NEW, Py_TYPE(self));
        }
-       else if(self->colSize==3 && self->rowSize==3) {
+       else if(self->col_size==3 && self->row_size==3) {
                float mat[4][4];
                copy_m4_m3(mat, (float (*)[3])self->contigPtr);
                return (PyObject *)newMatrixObject((float *)mat, 4, 4, Py_NEW, 
Py_TYPE(self));
@@ -807,7 +809,7 @@
        if(!BaseMath_ReadCallback(self))
                return NULL;
 
-       if((self->colSize < 3) || (self->rowSize < 3)) {
+       if((self->col_size < 3) || (self->row_size < 3)) {
                PyErr_SetString(PyExc_AttributeError, "Matrix.to_3x3(): 
inappropriate matrix size");
                return NULL;
        }
@@ -830,7 +832,7 @@
        if(!BaseMath_ReadCallback(self))
                return NULL;
 
-       if((self->colSize < 3) || self->rowSize < 4){
+       if((self->col_size < 3) || self->row_size < 4){
                PyErr_SetString(PyExc_AttributeError, "Matrix.to_translation(): 
inappropriate matrix size");
                return NULL;
        }
@@ -858,7 +860,7 @@
                return NULL;
 
        /*must be 3-4 cols, 3-4 rows, square matrix*/
-       if((self->colSize < 3) || (self->rowSize < 3)) {
+       if((self->col_size < 3) || (self->row_size < 3)) {
                PyErr_SetString(PyExc_AttributeError, "Matrix.to_scale(): 
inappropriate matrix size, 3x3 minimum size");
                return NULL;
        }
@@ -895,7 +897,7 @@
        if(!BaseMath_ReadCallback(self))
                return NULL;
 
-       if(self->rowSize != self->colSize){
+       if(self->row_size != self->col_size){
                PyErr_SetString(PyExc_AttributeError, "Matrix.invert(ed): only 
square matrices are supported");
                return NULL;
        }
@@ -905,23 +907,23 @@
 
        if(det != 0) {
                /*calculate the classical adjoint*/
-               if(self->rowSize == 2) {
+               if(self->row_size == 2) {
                        mat[0] = self->matrix[1][1];
                        mat[1] = -self->matrix[0][1];
                        mat[2] = -self->matrix[1][0];
                        mat[3] = self->matrix[0][0];
-               } else if(self->rowSize == 3) {
+               } else if(self->row_size == 3) {
                        adjoint_m3_m3((float (*)[3]) mat,(float 
(*)[3])self->contigPtr);
-               } else if(self->rowSize == 4) {
+               } else if(self->row_size == 4) {
                        adjoint_m4_m4((float (*)[4]) mat, (float 
(*)[4])self->contigPtr);
                }
                /*divide by determinate*/
-               for(x = 0; x < (self->rowSize * self->colSize); x++) {
+               for(x = 0; x < (self->row_size * self->col_size); x++) {
                        mat[x] /= det;
                }
                /*set values*/
-               for(x = 0; x < self->rowSize; x++) {
-                       for(y = 0; y < self->colSize; y++) {
+               for(x = 0; x < self->row_size; x++) {
+                       for(y = 0; y < self->col_size; y++) {
                                self->matrix[x][y] = mat[z];
                                z++;
                        }
@@ -938,7 +940,7 @@
 }
 
 static char Matrix_inverted_doc[] =
-".. method:: invert()\n"
+".. method:: inverted()\n"
 "\n"
 "   Return an inverted copy of the matrix.\n"
 "\n"
@@ -949,7 +951,7 @@
 ;
 static PyObject *Matrix_inverted(MatrixObject *self)
 {
-       MATRIX_APPLY_TO_COPY(Matrix_invert, self);
+       return matrix__apply_to_copy((PyNoArgsFunction)Matrix_invert, self);
 }
 
 static char Matrix_rotate_doc[] =
@@ -972,7 +974,7 @@
        if(mathutils_any_to_rotmat(other_rmat, value, "matrix.rotate(value)") 
== -1)
                return NULL;
 
-       if(self->colSize != 3 || self->rowSize != 3) {
+       if(self->col_size != 3 || self->row_size != 3) {
                PyErr_SetString(PyExc_ValueError, "Matrix must have 3x3 
dimensions");
                return NULL;
        }
@@ -1003,7 +1005,7 @@
        float quat[4];
        float size[3];
 
-       if(self->colSize != 4 || self->rowSize != 4) {
+       if(self->col_size != 4 || self->row_size != 4) {
                PyErr_SetString(PyExc_AttributeError, "Matrix.decompose(): 
inappropriate matrix size - expects 4x4 matrix");
                return NULL;
        }
@@ -1044,7 +1046,7 @@
        if(!PyArg_ParseTuple(args, "O!f:lerp", &matrix_Type, &mat2, &fac))
                return NULL;
 
-       if(self->rowSize != mat2->rowSize || self->colSize != mat2->colSize) {
+       if(self->row_size != mat2->row_size || self->col_size != 
mat2->col_size) {
                PyErr_SetString(PyExc_AttributeError, "matrix.lerp(): expects 
both matrix objects of the same dimensions");
                return NULL;
        }
@@ -1053,10 +1055,10 @@
                return NULL;
 
        /* TODO, different sized matrix */
-       if(self->rowSize==4 && self->colSize==4) {
+       if(self->row_size==4 && self->col_size==4) {
                blend_m4_m4m4((float (*)[4])mat, (float (*)[4])self->contigPtr, 
(float (*)[4])mat2->contigPtr, fac);
        }
-       else if (self->rowSize==3 && self->colSize==3) {
+       else if (self->row_size==3 && self->col_size==3) {
                blend_m3_m3m3((float (*)[3])mat, (float (*)[3])self->contigPtr, 
(float (*)[3])mat2->contigPtr, fac);
        }
        else {
@@ -1064,7 +1066,7 @@
                return NULL;
        }
 
-       return (PyObject*)newMatrixObject(mat, self->rowSize, self->colSize, 
Py_NEW, Py_TYPE(self));
+       return (PyObject*)newMatrixObject(mat, self->row_size, self->col_size, 
Py_NEW, Py_TYPE(self));
 }
 
 /*---------------------------Matrix.determinant() ----------------*/
@@ -1083,7 +1085,7 @@
        if(!BaseMath_ReadCallback(self))
                return NULL;
 

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to