[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34737] trunk/blender/source/blender/ python/generic: use static functions rather then defines for internal matrix__apply_to_copy () and similar.

Campbell Barton ideasman42 at gmail.com
Wed Feb 9 10:20:17 CET 2011


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. @@



More information about the Bf-blender-cvs mailing list