diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-01-30 16:15:39 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-01-30 16:15:39 +0300 |
commit | ec48cbd267818f444e942aebd876897314165762 (patch) | |
tree | c2548c58f90ade1ce0be637cd9bb828f2107bbc9 /source/blender/python/generic/matrix.c | |
parent | 7a76bc9a361e6cb45e4292c0ac5c7bb08936b829 (diff) |
utility functions is_negative_m3 & is_negative_m4, added python Mathutils access Matrix.is_negative
renamed Mathutils attribute wrapped -> is_wrapped
Diffstat (limited to 'source/blender/python/generic/matrix.c')
-rw-r--r-- | source/blender/python/generic/matrix.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/source/blender/python/generic/matrix.c b/source/blender/python/generic/matrix.c index a61cf4a2d41..0928a93f13d 100644 --- a/source/blender/python/generic/matrix.c +++ b/source/blender/python/generic/matrix.c @@ -1231,14 +1231,34 @@ static PyObject *Matrix_getMedianScale( MatrixObject * self, void *type ) return PyFloat_FromDouble(mat3_to_scale(mat)); } +static PyObject *Matrix_getIsNegative( MatrixObject * self, void *type ) +{ + float vec[3]; + + if(!BaseMath_ReadCallback(self)) + return NULL; + + /*must be 3-4 cols, 3-4 rows, square matrix*/ + if(self->colSize == 4 && self->rowSize == 4) + return PyBool_FromLong(is_negative_m4((float (*)[4])*self->matrix)); + else if(self->colSize == 3 && self->rowSize == 3) + return PyBool_FromLong(is_negative_m3((float (*)[3])*self->matrix)); + else { + PyErr_SetString(PyExc_AttributeError, "Matrix.is_negative: inappropriate matrix size - expects 3x3 or 4x4 matrix\n"); + return NULL; + } +} + + /*****************************************************************************/ /* Python attributes get/set structure: */ /*****************************************************************************/ static PyGetSetDef Matrix_getseters[] = { {"row_size", (getter)Matrix_getRowSize, (setter)NULL, "The row size of the matrix (readonly). **type** int", NULL}, {"col_size", (getter)Matrix_getColSize, (setter)NULL, "The column size of the matrix (readonly). **type** int", NULL}, - {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly). **type** float", NULL}, - {"wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL}, + {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly). **type** float", NULL}, + {"is_negative", (getter)Matrix_getIsNegative, (setter)NULL, "True if this matrix results in a negative scale, (3x3, 4x4 only) (readonly). **type** bool", NULL}, + {"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL}, {"_owner",(getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL}, {NULL,NULL,NULL,NULL,NULL} /* Sentinel */ }; |