29 bpy_bmeditselseq_active_doc,
30 "The last selected element or None (read-only).\n"
32 ":type: :class:`BMVert`, "
33 ":class:`BMEdge` or :class:`BMFace`");
50 bpy_bmeditselseq_active_doc,
52 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr}
57 bpy_bmeditselseq_validate_doc,
58 ".. method:: validate()\n"
60 " Ensures all elements in the selection history are selected.\n");
70 bpy_bmeditselseq_clear_doc,
71 ".. method:: clear()\n"
73 " Empties the selection history.\n");
83 bpy_bmeditselseq_add_doc,
84 ".. method:: add(element)\n"
86 " Add an element to the selection history (no action taken if its already added).\n");
93 PyExc_TypeError,
"Expected a BMVert/BMedge/BMFace not a %.200s", Py_TYPE(value)->tp_name);
106 bpy_bmeditselseq_remove_doc,
107 ".. method:: remove(element)\n"
109 " Remove an element from the selection history.\n");
116 PyExc_TypeError,
"Expected a BMVert/BMedge/BMFace not a %.200s", Py_TYPE(value)->tp_name);
123 PyErr_SetString(PyExc_ValueError,
"Element not found in selection history");
132 bpy_bmeditselseq_discard_doc,
133 ".. method:: discard(element)\n"
135 " Discard an element from the selection history.\n"
137 " Like remove but doesn't raise an error when the elements not in the selection list.\n");
144 PyExc_TypeError,
"Expected a BMVert/BMedge/BMFace not a %.200s", Py_TYPE(value)->tp_name);
157# pragma clang diagnostic push
158# pragma clang diagnostic ignored "-Wcast-function-type"
160# pragma GCC diagnostic push
161# pragma GCC diagnostic ignored "-Wcast-function-type"
169 bpy_bmeditselseq_validate_doc},
175 {
nullptr,
nullptr, 0,
nullptr},
180# pragma clang diagnostic pop
182# pragma GCC diagnostic pop
213 PyErr_Format(PyExc_IndexError,
"BMElemSeq[index]: index %d out of range", keynum);
228 list = PyList_New(0);
232 if (
count == start) {
239 for (; ese; ese = ese->
next) {
253 if (PyIndex_Check(key)) {
254 const Py_ssize_t
i = PyNumber_AsSsize_t(key, PyExc_IndexError);
255 if (
i == -1 && PyErr_Occurred()) {
260 if (PySlice_Check(key)) {
261 PySliceObject *key_slice = (PySliceObject *)key;
264 if (key_slice->step != Py_None && !_PyEval_SliceIndex(key, &
step)) {
268 PyErr_SetString(PyExc_TypeError,
"BMElemSeq[slice]: slice steps not supported");
271 if (key_slice->start == Py_None && key_slice->stop == Py_None) {
275 Py_ssize_t start = 0,
stop = PY_SSIZE_T_MAX;
278 if (key_slice->start != Py_None && !_PyEval_SliceIndex(key_slice->start, &start)) {
281 if (key_slice->stop != Py_None && !_PyEval_SliceIndex(key_slice->stop, &
stop)) {
285 if (start < 0 ||
stop < 0) {
298 if (
stop - start <= 0) {
299 return PyList_New(0);
305 PyErr_SetString(PyExc_AttributeError,
"BMElemSeq[key]: invalid key, key must be an int");
316 if (value_bm_ele->
bm ==
self->bm) {
340 (objobjargproc)
nullptr,
353 return (PyObject *)py_iter;
359 if (ese ==
nullptr) {
360 PyErr_SetNone(PyExc_StopIteration);
376 return (PyObject *)
self;
384 return (PyObject *)
self;
431 Py_ssize_t value_len;
433 BMElem **value_array =
nullptr;
447 "BMesh.select_history = value"));
449 if (value_array ==
nullptr) {
455 for (
i = 0;
i < value_len;
i++) {
459 PyMem_FREE(value_array);
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_rfindlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BM_select_history_clear(BMesh *bm)
void BM_select_history_validate(BMesh *bm)
#define BM_select_history_store_notest(bm, ele)
#define BM_select_history_store(bm, ele)
#define BM_select_history_check(bm, ele)
#define BM_select_history_remove(bm, ele)
PyObject * BPy_BMElem_CreatePyObject(BMesh *bm, BMHeader *ele)
void * BPy_BMElem_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_size, const char htype, const bool do_unique_check, const bool do_bm_check, const char *error_prefix)
#define BPy_BMFace_Check(v)
#define BPY_BM_CHECK_OBJ(obj)
#define BPy_BMVert_Check(v)
#define BPy_BMEdge_Check(v)
#define BPY_BM_CHECK_SOURCE_OBJ(bm, errmsg,...)
#define BPY_BM_CHECK_INT(obj)
static int bpy_bmeditselseq_contains(BPy_BMEditSelSeq *self, PyObject *value)
static PyObject * bpy_bmeditselseq_remove(BPy_BMEditSelSeq *self, BPy_BMElem *value)
static PyObject * bpy_bmeditselseq_discard(BPy_BMEditSelSeq *self, BPy_BMElem *value)
static PyMethodDef bpy_bmeditselseq_methods[]
int BPy_BMEditSel_Assign(BPy_BMesh *self, PyObject *value)
static PyObject * bpy_bmeditselseq_active_get(BPy_BMEditSelSeq *self, void *)
void BPy_BM_init_types_select()
static PyObject * bpy_bmeditselseq_add(BPy_BMEditSelSeq *self, BPy_BMElem *value)
static PyObject * bpy_bmeditselseq_clear(BPy_BMEditSelSeq *self)
static PyMappingMethods bpy_bmeditselseq_as_mapping
static PyObject * bpy_bmeditselseq_iter(BPy_BMEditSelSeq *self)
static PyObject * bpy_bmeditselseq_subscript(BPy_BMEditSelSeq *self, PyObject *key)
static PyObject * bpy_bmeditselseq_subscript_int(BPy_BMEditSelSeq *self, Py_ssize_t keynum)
PyTypeObject BPy_BMEditSelSeq_Type
static PyGetSetDef bpy_bmeditselseq_getseters[]
static PyObject * bpy_bmeditseliter_next(BPy_BMEditSelIter *self)
PyObject * BPy_BMEditSelIter_CreatePyObject(BMesh *bm)
static Py_ssize_t bpy_bmeditselseq_length(BPy_BMEditSelSeq *self)
static PyObject * bpy_bmeditselseq_subscript_slice(BPy_BMEditSelSeq *self, Py_ssize_t start, Py_ssize_t stop)
static PyObject * bpy_bmeditselseq_validate(BPy_BMEditSelSeq *self)
PyTypeObject BPy_BMEditSelIter_Type
PyObject * BPy_BMEditSel_CreatePyObject(BMesh *bm)
PyDoc_STRVAR(bpy_bmeditselseq_active_doc, "The last selected element or None (read-only).\n" "\n" ":type: :class:`BMVert`, " ":class:`BMEdge` or :class:`BMFace`")
static PySequenceMethods bpy_bmeditselseq_as_sequence
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
struct BMEditSelection * next
PyObject_VAR_HEAD BMesh * bm