Vec3r *Vec3r_ptr_from_PyTuple(PyObject *obj) { float v[3]; if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 3) return NULL; if (!float_array_from_PyTuple(obj, v, 3)) return NULL; return new Vec3r(v[0], v[1], v[2]); }
Vec2f *Vec2f_ptr_from_PyTuple(PyObject *obj) { float v[2]; if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 2) return NULL; if (!float_array_from_PyTuple(obj, v, 2)) return NULL; return new Vec2f(v[0], v[1]); }
bool Vec2f_ptr_from_PyTuple(PyObject *obj, Vec2f &vec) { float v[2]; if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj) != 2) return false; if (!float_array_from_PyTuple(obj, v, 2)) return false; vec[0] = v[0]; vec[1] = v[1]; return true; }
int float_array_from_PyObject(PyObject *obj, float *v, int n) { if (VectorObject_Check(obj) && ((VectorObject *)obj)->size == n) { for (int i = 0; i < n; i++) v[i] = ((VectorObject *)obj)->vec[i]; return 1; } else if (PyList_Check(obj) && PyList_Size(obj) == n) { return float_array_from_PyList(obj, v, n); } else if (PyTuple_Check(obj) && PyTuple_Size(obj) == n) { return float_array_from_PyTuple(obj, v, n); } return 0; }
bool float_array_from_PyObject(PyObject *obj, float *v, int n) { if (VectorObject_Check(obj) && ((VectorObject *)obj)->size == n) { if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) return 0; for (int i = 0; i < n; i++) v[i] = ((VectorObject *)obj)->vec[i]; return 1; } else if (ColorObject_Check(obj) && n == 3) { if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1) return 0; for (int i = 0; i < n; i++) v[i] = ((ColorObject *)obj)->col[i]; return 1; } else if (PyList_Check(obj) && PyList_GET_SIZE(obj) == n) { return float_array_from_PyList(obj, v, n); } else if (PyTuple_Check(obj) && PyTuple_GET_SIZE(obj) == n) { return float_array_from_PyTuple(obj, v, n); } return 0; }