From e0a6d273d015d1196661da010b676acdf5d4baf5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Feb 2012 10:41:07 +0000 Subject: bmesh py api - generalize bmesg sequences to use the iterator type and optionally another bmesh element. This allows BMFace.verts to be added without defining a new sequence type. --- source/blender/python/bmesh/bmesh_py_types.h | 30 +++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'source/blender/python/bmesh/bmesh_py_types.h') diff --git a/source/blender/python/bmesh/bmesh_py_types.h b/source/blender/python/bmesh/bmesh_py_types.h index 51d5e6aa5ee..541e93306ba 100644 --- a/source/blender/python/bmesh/bmesh_py_types.h +++ b/source/blender/python/bmesh/bmesh_py_types.h @@ -35,9 +35,7 @@ extern PyTypeObject BPy_BMVert_Type; extern PyTypeObject BPy_BMEdge_Type; extern PyTypeObject BPy_BMFace_Type; extern PyTypeObject BPy_BMLoop_Type; -extern PyTypeObject BPy_BMVertSeq_Type; -extern PyTypeObject BPy_BMEdgeSeq_Type; -extern PyTypeObject BPy_BMFaceSeq_Type; +extern PyTypeObject BPy_BMElemSeq_Type; extern PyTypeObject BPy_BMIter_Type; #define BPy_BMesh_Check(v) (Py_TYPE(v) == &BPy_BMesh_Type) @@ -45,9 +43,7 @@ extern PyTypeObject BPy_BMIter_Type; #define BPy_BMEdge_Check(v) (Py_TYPE(v) == &BPy_BMEdge_Type) #define BPy_BMFace_Check(v) (Py_TYPE(v) == &BPy_BMFace_Type) #define BPy_BMLoop_Check(v) (Py_TYPE(v) == &BPy_BMLoop_Type) -#define BPy_BMVertSeq_Check(v) (Py_TYPE(v) == &BPy_BMVertSeq_Type) -#define BPy_BMEdgeSeq_Check(v) (Py_TYPE(v) == &BPy_BMEdgeSeq_Type) -#define BPy_BMFaceSeq_Check(v) (Py_TYPE(v) == &BPy_BMFaceSeq_Type) +#define BPy_BMElemSeq_Check(v) (Py_TYPE(v) == &BPy_BMElemSeq_Type) #define BPy_BMIter_Check(v) (Py_TYPE(v) == &BPy_BMIter_Type) /* cast from _any_ bmesh type - they all have BMesh first */ @@ -95,6 +91,24 @@ typedef struct BPy_BMLoop { /* iterators */ + +typedef struct BPy_BMElemSeq { + PyObject_VAR_HEAD + struct BMesh *bm; /* keep first */ + + /* if this is a sequence on an existing element, + * loops of faces for eg. + * If this veriable is set, it will be used */ + + /* we hold a reference to this. + * check incase the owner becomes invalid on access */ + /* TODO - make this a GC'd object!, will function OK without this though */ + BPy_BMElem *py_ele; + + /* iterator type */ + short itype; +} BPy_BMElemSeq; + typedef struct BPy_BMIter { PyObject_VAR_HEAD struct BMesh *bm; /* keep first */ @@ -108,9 +122,7 @@ PyObject *BPy_BMVert_CreatePyObject(BMesh *bm, BMVert *v); PyObject *BPy_BMEdge_CreatePyObject(BMesh *bm, BMEdge *e); PyObject *BPy_BMFace_CreatePyObject(BMesh *bm, BMFace *f); PyObject *BPy_BMLoop_CreatePyObject(BMesh *bm, BMLoop *l); -PyObject *BPy_BMVertSeq_CreatePyObject(BMesh *bm); -PyObject *BPy_BMEdgeSeq_CreatePyObject(BMesh *bm); -PyObject *BPy_BMFaceSeq_CreatePyObject(BMesh *bm); +PyObject *BPy_BMElemSeq_CreatePyObject(BMesh *bm, BPy_BMElem *py_ele, const char itype); PyObject *BPy_BMIter_CreatePyObject(BMesh *bm); PyObject *BPy_BMElem_CreatePyObject(BMesh *bm, BMHeader *ele); /* just checks type and creates v/e/f/l */ -- cgit v1.2.3