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;
	}
}
Пример #2
0
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;
	}
}