[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