bmesh api cleanup
* better type safety for BM_elem_flag_* and BM_elem_index_* functions. * add BMElem type to be used where BMFace/Edge/Vert/Loop can be interchanged. * fix bug in select manifold, found when making functions more strict.
This commit is contained in:
		@@ -164,8 +164,8 @@ static int bpy_bm_elem_index_set(BPy_BMElem *self, PyObject *value, void *UNUSED
 | 
			
		||||
		BM_elem_index_set(self->ele, param); /* set_dirty! */
 | 
			
		||||
 | 
			
		||||
		/* when setting the index assume its set invalid */
 | 
			
		||||
		if (self->ele->htype & (BM_VERT | BM_EDGE | BM_FACE)) {
 | 
			
		||||
			self->bm->elem_index_dirty |= self->ele->htype;
 | 
			
		||||
		if (self->ele->head.htype & (BM_VERT | BM_EDGE | BM_FACE)) {
 | 
			
		||||
			self->bm->elem_index_dirty |= self->ele->head.htype;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -1500,7 +1500,7 @@ static PyObject *bpy_bmelemseq_index_update(BPy_BMElemSeq *self)
 | 
			
		||||
		default:
 | 
			
		||||
		{
 | 
			
		||||
			BMIter iter;
 | 
			
		||||
			BMHeader *ele;
 | 
			
		||||
			BMElem *ele;
 | 
			
		||||
			int index = 0;
 | 
			
		||||
			const char htype = bm_iter_itype_htype_map[self->itype];
 | 
			
		||||
 | 
			
		||||
@@ -1790,7 +1790,7 @@ static int bpy_bmelemseq_contains(BPy_BMElemSeq *self, PyObject *value)
 | 
			
		||||
	if (Py_TYPE(value) == bpy_bm_itype_as_pytype(self->itype)) {
 | 
			
		||||
		BPy_BMElem *value_bm_ele = (BPy_BMElem *)value;
 | 
			
		||||
		if (value_bm_ele->bm == self->bm) {
 | 
			
		||||
			BMHeader *ele, *ele_test = value_bm_ele->ele;
 | 
			
		||||
			BMElem *ele, *ele_test = value_bm_ele->ele;
 | 
			
		||||
			BMIter iter;
 | 
			
		||||
			BM_ITER_BPY_BM_SEQ(ele, &iter, self) {
 | 
			
		||||
				if (ele == ele_test) {
 | 
			
		||||
@@ -1870,7 +1870,7 @@ static void bpy_bmvert_dealloc(BPy_BMElem *self)
 | 
			
		||||
{
 | 
			
		||||
	BMesh *bm = self->bm;
 | 
			
		||||
	if (bm) {
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->vdata, self->ele->data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->vdata, self->ele->head.data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		*ptr = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	PyObject_DEL(self);
 | 
			
		||||
@@ -1880,7 +1880,7 @@ static void bpy_bmedge_dealloc(BPy_BMElem *self)
 | 
			
		||||
{
 | 
			
		||||
	BMesh *bm = self->bm;
 | 
			
		||||
	if (bm) {
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->edata, self->ele->data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->edata, self->ele->head.data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		*ptr = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	PyObject_DEL(self);
 | 
			
		||||
@@ -1890,7 +1890,7 @@ static void bpy_bmface_dealloc(BPy_BMElem *self)
 | 
			
		||||
{
 | 
			
		||||
	BMesh *bm = self->bm;
 | 
			
		||||
	if (bm) {
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->pdata, self->ele->data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->pdata, self->ele->head.data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		*ptr = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	PyObject_DEL(self);
 | 
			
		||||
@@ -1900,7 +1900,7 @@ static void bpy_bmloop_dealloc(BPy_BMElem *self)
 | 
			
		||||
{
 | 
			
		||||
	BMesh *bm = self->bm;
 | 
			
		||||
	if (bm) {
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->ldata, self->ele->data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		void **ptr = CustomData_bmesh_get(&bm->ldata, self->ele->head.data, CD_BM_ELEM_PYPTR);
 | 
			
		||||
		*ptr = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	PyObject_DEL(self);
 | 
			
		||||
@@ -2304,7 +2304,7 @@ void *BPy_BMElem_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_
 | 
			
		||||
		Py_ssize_t i;
 | 
			
		||||
 | 
			
		||||
		BPy_BMElem *item;
 | 
			
		||||
		BMHeader **alloc;
 | 
			
		||||
		BMElem **alloc;
 | 
			
		||||
 | 
			
		||||
		seq_len = PySequence_Fast_GET_SIZE(seq_fast);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ typedef struct BPy_BMGeneric {
 | 
			
		||||
typedef struct BPy_BMElem {
 | 
			
		||||
	PyObject_VAR_HEAD
 | 
			
		||||
	struct BMesh *bm; /* keep first */
 | 
			
		||||
	struct BMHeader *ele;
 | 
			
		||||
	struct BMElem *ele;
 | 
			
		||||
} BPy_BMElem;
 | 
			
		||||
 | 
			
		||||
typedef struct BPy_BMesh {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user