/* makes a new euler for you to play with */ static PyObject *Euler_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyObject *seq = NULL; const char *order_str = NULL; float eul[EULER_SIZE] = {0.0f, 0.0f, 0.0f}; short order = EULER_ORDER_XYZ; if (kwds && PyDict_Size(kwds)) { PyErr_SetString(PyExc_TypeError, "mathutils.Euler(): " "takes no keyword args"); return NULL; } if (!PyArg_ParseTuple(args, "|Os:mathutils.Euler", &seq, &order_str)) return NULL; switch (PyTuple_GET_SIZE(args)) { case 0: break; case 2: if ((order = euler_order_from_string(order_str, "mathutils.Euler()")) == -1) return NULL; /* fall-through */ case 1: if (mathutils_array_parse(eul, EULER_SIZE, EULER_SIZE, seq, "mathutils.Euler()") == -1) return NULL; break; } return Euler_CreatePyObject(eul, order, Py_NEW, type); }
static PyObject *Euler_copy(EulerObject *self) { if (BaseMath_ReadCallback(self) == -1) return NULL; return Euler_CreatePyObject(self->eul, self->order, Py_NEW, Py_TYPE(self)); }
PyObject *Euler_CreatePyObject_cb(PyObject *cb_user, short order, int cb_type, int cb_subtype) { EulerObject *self = (EulerObject *)Euler_CreatePyObject(NULL, order, Py_NEW, NULL); if (self) { Py_INCREF(cb_user); self->cb_user = cb_user; self->cb_type = (unsigned char)cb_type; self->cb_subtype = (unsigned char)cb_subtype; PyObject_GC_Track(self); } return (PyObject *)self; }
static PyObject *Quaternion_to_euler(QuaternionObject *self, PyObject *args) { float tquat[4]; float eul[3]; const char *order_str = NULL; short order = EULER_ORDER_XYZ; EulerObject *eul_compat = NULL; if (!PyArg_ParseTuple(args, "|sO!:to_euler", &order_str, &euler_Type, &eul_compat)) return NULL; if (BaseMath_ReadCallback(self) == -1) return NULL; if (order_str) { order = euler_order_from_string(order_str, "Matrix.to_euler()"); if (order == -1) return NULL; } normalize_qt_qt(tquat, self->quat); if (eul_compat) { float mat[3][3]; if (BaseMath_ReadCallback(eul_compat) == -1) return NULL; quat_to_mat3(mat, tquat); if (order == EULER_ORDER_XYZ) mat3_to_compatible_eul(eul, eul_compat->eul, mat); else mat3_to_compatible_eulO(eul, eul_compat->eul, order, mat); } else { if (order == EULER_ORDER_XYZ) quat_to_eul(eul, tquat); else quat_to_eulO(eul, order, tquat); } return Euler_CreatePyObject(eul, order, Py_NEW, NULL); }