Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-04-29 14:41:28 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-04-29 14:41:28 +0400
commit94bf67b78eb1738e4a34f168508e08d0ebe29f2f (patch)
tree77f10dbd6e459b22280e2da97f8e19f5c86362a0 /source
parent232f19f0c216d827f506005aaa858963812f6798 (diff)
Error in last commit
Diffstat (limited to 'source')
-rw-r--r--source/blender/python/mathutils/mathutils_Matrix.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c
index 28aa187e101..baadd4dde29 100644
--- a/source/blender/python/mathutils/mathutils_Matrix.c
+++ b/source/blender/python/mathutils/mathutils_Matrix.c
@@ -42,6 +42,7 @@ typedef enum eMatrixAccess_t {
MAT_ACCESS_COL
} eMatrixAccess_t;
+static PyObject *Matrix_copy_notest(MatrixObject *self, const float *matrix);
static PyObject *Matrix_copy(MatrixObject *self);
static PyObject *Matrix_deepcopy(MatrixObject *self, PyObject *args);
static int Matrix_ass_slice(MatrixObject *self, int begin, int end, PyObject *value);
@@ -893,7 +894,7 @@ static void matrix_copy(MatrixObject *mat_dst, const MatrixObject *mat_src)
}
/* assumes rowsize == colsize is checked and the read callback has run */
-static float matrix_determinant_internal(MatrixObject *self)
+static float matrix_determinant_internal(const MatrixObject *self)
{
if (self->num_col == 2) {
return determinant_m2(MATRIX_ITEM(self, 0, 0), MATRIX_ITEM(self, 0, 1),
@@ -909,7 +910,9 @@ static float matrix_determinant_internal(MatrixObject *self)
}
}
-static bool matrix_invert_internal(MatrixObject *self)
+/**
+ * \param r_mat can be from ``self->matrix`` or not. */
+static bool matrix_invert_internal(const MatrixObject *self, float *r_mat)
{
float det;
@@ -947,7 +950,7 @@ static bool matrix_invert_internal(MatrixObject *self)
z = 0;
for (x = 0; x < self->num_col; x++) {
for (y = 0; y < self->num_row; y++) {
- MATRIX_ITEM(self, y, x) = mat[z];
+ r_mat[MATRIX_ITEM_INDEX(self, y, x)] = mat[z];
z++;
}
}
@@ -1306,7 +1309,7 @@ static PyObject *Matrix_invert(MatrixObject *self, PyObject *args)
return NULL;
}
- if (matrix_invert_internal(self)) {
+ if (matrix_invert_internal(self, self->matrix)) {
/* pass */
}
else {
@@ -1316,7 +1319,9 @@ static PyObject *Matrix_invert(MatrixObject *self, PyObject *args)
if (BaseMath_ReadCallback(fallback) == -1)
return NULL;
- matrix_copy(self, fallback);
+ if (self != fallback) {
+ matrix_copy(self, fallback);
+ }
}
else {
matrix_invert_raise_degenerate();
@@ -1341,6 +1346,8 @@ PyDoc_STRVAR(Matrix_inverted_doc,
);
static PyObject *Matrix_inverted(MatrixObject *self, PyObject *args)
{
+ float mat[MATRIX_MAX_DIM * MATRIX_MAX_DIM];
+
if (BaseMath_ReadCallback(self) == -1)
return NULL;
@@ -1352,7 +1359,7 @@ static PyObject *Matrix_inverted(MatrixObject *self, PyObject *args)
return NULL;
}
- if (matrix_invert_internal(self)) {
+ if (matrix_invert_internal(self, mat)) {
/* pass */
}
else {
@@ -1367,8 +1374,7 @@ static PyObject *Matrix_inverted(MatrixObject *self, PyObject *args)
}
}
- (void)BaseMath_WriteCallback(self);
- Py_RETURN_NONE;
+ return Matrix_copy_notest(self, mat);
}
static PyObject *Matrix_inverted_noargs(MatrixObject *self)
@@ -1380,7 +1386,7 @@ static PyObject *Matrix_inverted_noargs(MatrixObject *self)
return NULL;
}
- if (matrix_invert_internal(self)) {
+ if (matrix_invert_internal(self, self->matrix)) {
/* pass */
}
else {
@@ -1768,6 +1774,12 @@ static PyObject *Matrix_identity(MatrixObject *self)
}
/*---------------------------Matrix.copy() ------------------*/
+
+static PyObject *Matrix_copy_notest(MatrixObject *self, const float *matrix)
+{
+ return Matrix_CreatePyObject((float *)matrix, self->num_col, self->num_row, Py_NEW, Py_TYPE(self));
+}
+
PyDoc_STRVAR(Matrix_copy_doc,
".. method:: copy()\n"
"\n"
@@ -1781,7 +1793,7 @@ static PyObject *Matrix_copy(MatrixObject *self)
if (BaseMath_ReadCallback(self) == -1)
return NULL;
- return Matrix_CreatePyObject((float (*))self->matrix, self->num_col, self->num_row, Py_NEW, Py_TYPE(self));
+ return Matrix_copy_notest(self, self->matrix);
}
static PyObject *Matrix_deepcopy(MatrixObject *self, PyObject *args)
{