bugfix [#24665] mathutils.Matrix initialization is counter-intuitive and generates bugs

was printing transposed, also nicer printing.

>>> from mathutils import Matrix
>>> Matrix()
Matrix((1.0, 0.0, 0.0, 0.0),
       (0.0, 1.0, 0.0, 0.0),
       (0.0, 0.0, 1.0, 0.0),
       (0.0, 0.0, 0.0, 1.0))

was...
Matrix((1.000000, 0.000000, 0.000000, 0.000000), (0.000000, 1.000000, 0.000000, 0.000000), (0.000000, 0.000000, 1.000000, 0.000000), (0.000000, 0.000000, 0.000000, 1.000000))
This commit is contained in:
Campbell Barton 2010-11-12 02:50:57 +00:00
parent a34f525a21
commit 4f4bd27512

@ -1193,28 +1193,35 @@ PyObject *Matrix_copy(MatrixObject *self)
static PyObject *Matrix_repr(MatrixObject * self)
{
int x, y;
char str[1024]="Matrix((", *str_p;
PyObject *rows[MATRIX_MAX_DIM]= {0};
if(!BaseMath_ReadCallback(self))
return NULL;
str_p= &str[8];
for(x = 0; x < self->colSize; x++){
for(y = 0; y < (self->rowSize - 1); y++) {
str_p += sprintf(str_p, "%f, ", self->matrix[y][x]);
}
if(x < (self->colSize-1)){
str_p += sprintf(str_p, "%f), (", self->matrix[y][x]);
}
else{
str_p += sprintf(str_p, "%f)", self->matrix[y][x]);
for(x = 0; x < self->rowSize; x++){
rows[x]= PyTuple_New(self->rowSize);
for(y = 0; y < self->colSize; y++) {
PyTuple_SET_ITEM(rows[x], y, PyFloat_FromDouble(self->matrix[x][y]));
}
}
strcat(str_p, ")");
switch(self->rowSize) {
case 2: return PyUnicode_FromFormat("Matrix(%R,\n"
" %R)", rows[0], rows[1]);
return PyUnicode_FromString(str);
case 3: return PyUnicode_FromFormat("Matrix(%R,\n"
" %R,\n"
" %R)", rows[0], rows[1], rows[2]);
case 4: return PyUnicode_FromFormat("Matrix(%R,\n"
" %R,\n"
" %R,\n"
" %R)", rows[0], rows[1], rows[2], rows[3]);
}
PyErr_SetString(PyExc_RuntimeError, "invalid matrix size");
return NULL;
}
/*------------------------tp_richcmpr*/
/*returns -1 execption, 0 false, 1 true*/
static PyObject* Matrix_richcmpr(PyObject *objectA, PyObject *objectB, int comparison_type)