29 bpy_bmeditselseq_active_doc,
30 "The last selected element or None (read-only).\n"
32 ":type: :class:`bmesh.types.BMVert`, "
33 ":class:`bmesh.types.BMEdge` or :class:`bmesh.types.BMFace`\n");
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");
89 const char *error_prefix =
"select_history.add(...)";
93 PyErr_Format(PyExc_TypeError,
94 "%s: expected a BMVert/BMedge/BMFace not a %.200s",
96 Py_TYPE(value)->tp_name);
109 bpy_bmeditselseq_remove_doc,
110 ".. method:: remove(element)\n"
112 " Remove an element from the selection history.\n");
115 const char *error_prefix =
"select_history.remove(...)";
119 PyErr_Format(PyExc_TypeError,
120 "%s: expected a BMVert/BMedge/BMFace not a %.200s",
122 Py_TYPE(value)->tp_name);
129 PyErr_Format(PyExc_ValueError,
"%s: element not found in selection history", error_prefix);
138 bpy_bmeditselseq_discard_doc,
139 ".. method:: discard(element)\n"
141 " Discard an element from the selection history.\n"
143 " Like remove but doesn't raise an error when the elements not in the selection list.\n");
146 const char *error_prefix =
"select_history.discard()";
150 PyErr_Format(PyExc_TypeError,
151 "%s: expected a BMVert/BMedge/BMFace not a %.200s",
153 Py_TYPE(value)->tp_name);
166# pragma clang diagnostic push
167# pragma clang diagnostic ignored "-Wcast-function-type"
169# pragma GCC diagnostic push
170# pragma GCC diagnostic ignored "-Wcast-function-type"
178 bpy_bmeditselseq_validate_doc},
184 {
nullptr,
nullptr, 0,
nullptr},
189# pragma clang diagnostic pop
191# pragma GCC diagnostic pop
222 PyErr_Format(PyExc_IndexError,
"BMElemSeq[index]: index %d out of range", keynum);
237 list = PyList_New(0);
241 if (
count == start) {
248 for (; ese; ese = ese->
next) {
262 if (PyIndex_Check(key)) {
263 const Py_ssize_t
i = PyNumber_AsSsize_t(key, PyExc_IndexError);
264 if (
i == -1 && PyErr_Occurred()) {
269 if (PySlice_Check(key)) {
270 PySliceObject *key_slice = (PySliceObject *)key;
273 if (key_slice->step != Py_None && !_PyEval_SliceIndex(key, &
step)) {
277 PyErr_SetString(PyExc_TypeError,
"BMElemSeq[slice]: slice steps not supported");
280 if (key_slice->start == Py_None && key_slice->stop == Py_None) {
284 Py_ssize_t start = 0, stop = PY_SSIZE_T_MAX;
287 if (key_slice->start != Py_None && !_PyEval_SliceIndex(key_slice->start, &start)) {
290 if (key_slice->stop != Py_None && !_PyEval_SliceIndex(key_slice->stop, &stop)) {
294 if (start < 0 || stop < 0) {
307 if (stop - start <= 0) {
308 return PyList_New(0);
314 PyErr_SetString(PyExc_AttributeError,
"BMElemSeq[key]: invalid key, key must be an int");
325 if (value_bm_ele->
bm ==
self->bm) {
349 (objobjargproc)
nullptr,
362 return (PyObject *)py_iter;
368 if (ese ==
nullptr) {
369 PyErr_SetNone(PyExc_StopIteration);
385 return (PyObject *)
self;
393 return (PyObject *)
self;
439 const char *error_prefix =
"BMesh.select_history = value";
444 Py_ssize_t value_num;
456 if (value_array ==
nullptr) {
462 for (Py_ssize_t
i = 0;
i < value_num;
i++) {
466 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_seq_num, 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)
PyDoc_STRVAR(bpy_bmeditselseq_active_doc, "The last selected element or None (read-only).\n" "\n" ":type: :class:`bmesh.types.BMVert`, " ":class:`bmesh.types.BMEdge` or :class:`bmesh.types.BMFace`\n")
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)
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