From 49ff0eeec443ebe5003ec09bc655d73abc69a327 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 22 Apr 2012 10:19:24 +0000 Subject: bmesh py api: expose BM_face_split_n() to the python api; face_fill(..., coords=(v1, v2, ...)) This is the same function the knife tool uses. should be handy for dicing up geometry in py. --- source/blender/python/mathutils/mathutils.c | 35 +++++++++++++++++++++++++++++ source/blender/python/mathutils/mathutils.h | 1 + 2 files changed, 36 insertions(+) (limited to 'source/blender/python/mathutils') diff --git a/source/blender/python/mathutils/mathutils.c b/source/blender/python/mathutils/mathutils.c index f78050a7639..8b79301f264 100644 --- a/source/blender/python/mathutils/mathutils.c +++ b/source/blender/python/mathutils/mathutils.c @@ -186,6 +186,41 @@ int mathutils_array_parse_alloc(float **array, int array_min, PyObject *value, c } } +/* parse an array of vectors */ +int mathutils_array_parse_alloc_v(float **array, int array_dim, PyObject *value, const char *error_prefix) +{ + PyObject *value_fast = NULL; + int i, size; + + /* non list/tuple cases */ + if (!(value_fast = PySequence_Fast(value, error_prefix))) { + /* PySequence_Fast sets the error */ + return -1; + } + + size = PySequence_Fast_GET_SIZE(value_fast); + + if (size != 0) { + float *fp; + + fp = *array = PyMem_Malloc(size * array_dim * sizeof(float)); + + for (i = 0; i < size; i++, fp += array_dim) { + PyObject *item = PySequence_Fast_GET_ITEM(value, i); + + if (mathutils_array_parse(fp, array_dim, array_dim, item, error_prefix) == -1) { + PyMem_Free(*array); + *array = NULL; + size = -1; + break; + } + } + } + + Py_DECREF(value_fast); + return size; +} + int mathutils_any_to_rotmat(float rmat[3][3], PyObject *value, const char *error_prefix) { if (EulerObject_Check(value)) { diff --git a/source/blender/python/mathutils/mathutils.h b/source/blender/python/mathutils/mathutils.h index b98928eb79d..e8d128b431e 100644 --- a/source/blender/python/mathutils/mathutils.h +++ b/source/blender/python/mathutils/mathutils.h @@ -118,6 +118,7 @@ int _BaseMathObject_WriteIndexCallback(BaseMathObject *self, int index); /* utility func */ int mathutils_array_parse(float *array, int array_min, int array_max, PyObject *value, const char *error_prefix); int mathutils_array_parse_alloc(float **array, int array_min, PyObject *value, const char *error_prefix); +int mathutils_array_parse_alloc_v(float **array, int array_dim, PyObject *value, const char *error_prefix); int mathutils_any_to_rotmat(float rmat[3][3], PyObject *value, const char *error_prefix); int column_vector_multiplication(float rvec[4], VectorObject *vec, MatrixObject *mat); -- cgit v1.2.3