diff options
Diffstat (limited to 'source/blender/python/mathutils')
-rw-r--r-- | source/blender/python/mathutils/mathutils_Matrix.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c index 4079d69b87d..f5f54356680 100644 --- a/source/blender/python/mathutils/mathutils_Matrix.c +++ b/source/blender/python/mathutils/mathutils_Matrix.c @@ -2230,6 +2230,27 @@ static PyObject *Matrix_is_orthogonal_get(MatrixObject *self, void *UNUSED(closu } } +PyDoc_STRVAR(Matrix_is_orthonormal_doc, +"True if this matrix is orthonormal, 3x3 and 4x4 only, (read-only).\n\n:type: bool" +); +static PyObject *Matrix_is_orthonormal_get(MatrixObject *self, void *UNUSED(closure)) +{ + if (BaseMath_ReadCallback(self) == -1) + return NULL; + + /*must be 3-4 cols, 3-4 rows, square matrix*/ + if (self->num_row == 4 && self->num_col == 4) + return PyBool_FromLong(is_orthonormal_m4((float (*)[4])self->matrix)); + else if (self->num_row == 3 && self->num_col == 3) + return PyBool_FromLong(is_orthonormal_m3((float (*)[3])self->matrix)); + else { + PyErr_SetString(PyExc_AttributeError, + "Matrix.is_orthonormal: " + "inappropriate matrix size - expects 3x3 or 4x4 matrix"); + return NULL; + } +} + /*****************************************************************************/ /* Python attributes get/set structure: */ /*****************************************************************************/ @@ -2240,6 +2261,7 @@ static PyGetSetDef Matrix_getseters[] = { {(char *)"col", (getter)Matrix_col_get, (setter)NULL, Matrix_col_doc, NULL}, {(char *)"is_negative", (getter)Matrix_is_negative_get, (setter)NULL, Matrix_is_negative_doc, NULL}, {(char *)"is_orthogonal", (getter)Matrix_is_orthogonal_get, (setter)NULL, Matrix_is_orthogonal_doc, NULL}, + {(char *)"is_orthonormal", (getter)Matrix_is_orthonormal_get, (setter)NULL, Matrix_is_orthonormal_doc, NULL}, {(char *)"is_wrapped", (getter)BaseMathObject_is_wrapped_get, (setter)NULL, BaseMathObject_is_wrapped_doc, NULL}, {(char *)"owner", (getter)BaseMathObject_owner_get, (setter)NULL, BaseMathObject_owner_doc, NULL}, {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ |