diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-02-15 03:26:31 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-02-15 06:01:59 +0300 |
commit | a9d979c8ef2b6de25c1953da341dd5e207416540 (patch) | |
tree | 8647bedb1815977967694b302e9d6d2fd98573e6 /source/blender/python/mathutils/mathutils_Euler.c | |
parent | ce85aef0d9f2df094f2859236dc75a2c7f70bfcd (diff) |
mathutils: add freeze() method, is_frozen attr
This allows you to make any mathutils object immutable.
Diffstat (limited to 'source/blender/python/mathutils/mathutils_Euler.c')
-rw-r--r-- | source/blender/python/mathutils/mathutils_Euler.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/source/blender/python/mathutils/mathutils_Euler.c b/source/blender/python/mathutils/mathutils_Euler.c index 24aca88e0f6..ad761baf1ae 100644 --- a/source/blender/python/mathutils/mathutils_Euler.c +++ b/source/blender/python/mathutils/mathutils_Euler.c @@ -182,6 +182,9 @@ PyDoc_STRVAR(Euler_zero_doc, ); static PyObject *Euler_zero(EulerObject *self) { + if (BaseMath_Prepare_ForWrite(self) == -1) + return NULL; + zero_v3(self->eul); if (BaseMath_WriteCallback(self) == -1) @@ -220,7 +223,7 @@ static PyObject *Euler_rotate_axis(EulerObject *self, PyObject *args) return NULL; } - if (BaseMath_ReadCallback(self) == -1) + if (BaseMath_ReadCallback_ForWrite(self) == -1) return NULL; @@ -243,7 +246,7 @@ static PyObject *Euler_rotate(EulerObject *self, PyObject *value) { float self_rmat[3][3], other_rmat[3][3], rmat[3][3]; - if (BaseMath_ReadCallback(self) == -1) + if (BaseMath_ReadCallback_ForWrite(self) == -1) return NULL; if (mathutils_any_to_rotmat(other_rmat, value, "euler.rotate(value)") == -1) @@ -270,7 +273,7 @@ static PyObject *Euler_make_compatible(EulerObject *self, PyObject *value) { float teul[EULER_SIZE]; - if (BaseMath_ReadCallback(self) == -1) + if (BaseMath_ReadCallback_ForWrite(self) == -1) return NULL; if (mathutils_array_parse(teul, EULER_SIZE, EULER_SIZE, value, @@ -416,8 +419,12 @@ static PyObject *Euler_item(EulerObject *self, int i) /* sequence accessor (set) */ static int Euler_ass_item(EulerObject *self, int i, PyObject *value) { - float f = PyFloat_AsDouble(value); + float f; + if (BaseMath_Prepare_ForWrite(self) == -1) + return -1; + + f = PyFloat_AsDouble(value); if (f == -1 && PyErr_Occurred()) { /* parsed item not a number */ PyErr_SetString(PyExc_TypeError, "euler[attribute] = x: " @@ -470,7 +477,7 @@ static int Euler_ass_slice(EulerObject *self, int begin, int end, PyObject *seq) int i, size; float eul[EULER_SIZE]; - if (BaseMath_ReadCallback(self) == -1) + if (BaseMath_ReadCallback_ForWrite(self) == -1) return -1; CLAMP(begin, 0, EULER_SIZE); @@ -618,6 +625,9 @@ static int Euler_order_set(EulerObject *self, PyObject *value, void *UNUSED(clos const char *order_str; short order; + if (BaseMath_Prepare_ForWrite(self) == -1) + return -1; + if (((order_str = _PyUnicode_AsString(value)) == NULL) || ((order = euler_order_from_string(order_str, "euler.order")) == -1)) { @@ -655,6 +665,9 @@ static struct PyMethodDef Euler_methods[] = { {"copy", (PyCFunction) Euler_copy, METH_NOARGS, Euler_copy_doc}, {"__copy__", (PyCFunction) Euler_copy, METH_NOARGS, Euler_copy_doc}, {"__deepcopy__", (PyCFunction) Euler_deepcopy, METH_VARARGS, Euler_copy_doc}, + + /* base-math methods */ + {"freeze", (PyCFunction)BaseMathObject_freeze, METH_NOARGS, BaseMathObject_freeze_doc}, {NULL, NULL, 0, NULL} }; |