static PyObject *bpy_bmeditselseq_active_get(BPy_BMEditSelSeq *self, void *UNUSED(closure)) { BMEditSelection *ese; BPY_BM_CHECK_OBJ(self); if ((ese = self->bm->selected.last)) { return BPy_BMElem_CreatePyObject(self->bm, &ese->ele->head); } else { Py_RETURN_NONE; } }
static PyObject *bpy_bmeditseliter_next(BPy_BMEditSelIter *self) { BMEditSelection *ese = self->ese; if (ese == NULL) { PyErr_SetNone(PyExc_StopIteration); return NULL; } else { self->ese = ese->next; return (PyObject *)BPy_BMElem_CreatePyObject(self->bm, &ese->ele->head); } }
static PyObject *bpy_bmeditselseq_subscript_slice(BPy_BMEditSelSeq *self, Py_ssize_t start, Py_ssize_t stop) { int count = 0; int ok; PyObject *list; PyObject *item; BMEditSelection *ese; BPY_BM_CHECK_OBJ(self); list = PyList_New(0); ese = self->bm->selected.first; ok = (ese != NULL); if (UNLIKELY(ok == FALSE)) { return list; } /* first loop up-until the start */ for (ok = TRUE; ok; ok = ((ese = ese->next) != NULL)) { if (count == start) { break; } count++; } /* add items until stop */ while ((ese = ese->next)) { item = BPy_BMElem_CreatePyObject(self->bm, &ese->ele->head); PyList_Append(list, item); Py_DECREF(item); count++; if (count == stop) { break; } } return list; }
static PyObject *bpy_bmeditselseq_subscript_int(BPy_BMEditSelSeq *self, int keynum) { BMEditSelection *ese; BPY_BM_CHECK_OBJ(self); if (keynum < 0) { ese = BLI_rfindlink(&self->bm->selected, -1 - keynum); } else { ese = BLI_findlink(&self->bm->selected, keynum); } if (ese) { return BPy_BMElem_CreatePyObject(self->bm, &ese->ele->head); } else { PyErr_Format(PyExc_IndexError, "BMElemSeq[index]: index %d out of range", keynum); return NULL; } }