Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-12-27 10:03:20 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-12-27 10:05:34 +0300
commitd020b4ca91e1097573a439fdab16e707922fd5a8 (patch)
tree2fdcc86a0d5b4e9611da716474b2fc09dacce3c8 /source/blender/editors/mesh/editmesh_select.c
parentf820c45534c653c7a2baa799b99067710def136b (diff)
BMesh: extract int/bmesh element access funcs.
Support getting an vert/edge/face from a single index, useful for operator redo.
Diffstat (limited to 'source/blender/editors/mesh/editmesh_select.c')
-rw-r--r--source/blender/editors/mesh/editmesh_select.c37
1 files changed, 12 insertions, 25 deletions
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index fba775518c7..8240f29d7f9 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -2798,21 +2798,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmE
edbm_select_linked_pick_ex(em, eve, eed, efa, sel, delimit);
/* to support redo */
- if ((em->selectmode & SCE_SELECT_VERTEX) && eve) {
- BM_mesh_elem_index_ensure(bm, BM_VERT);
- index = BM_elem_index_get(eve);
- }
- else if ((em->selectmode & SCE_SELECT_EDGE) && eed) {
- BM_mesh_elem_index_ensure(bm, BM_EDGE);
- index = BM_elem_index_get(eed) + bm->totvert;
- }
- else if ((em->selectmode & SCE_SELECT_FACE) && efa) {
- BM_mesh_elem_index_ensure(bm, BM_FACE);
- index = BM_elem_index_get(efa) + bm->totvert + bm->totedge;
- }
- else {
- index = -1;
- }
+ index = EDBM_elem_to_index_any_selectmode(em, eve, eed, efa);
RNA_int_set(op->ptr, "index", index);
@@ -2838,16 +2824,17 @@ static int edbm_select_linked_pick_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- if (index < bm->totvert) {
- eve = BM_vert_at_index_find_or_table(bm, index);
- }
- else if (index < (bm->totvert + bm->totedge)) {
- index -= bm->totvert;
- eed = BM_edge_at_index_find_or_table(bm, index);
- }
- else if (index < (bm->totvert + bm->totedge + bm->totface)) {
- index -= (bm->totvert + bm->totedge);
- efa = BM_face_at_index_find_or_table(bm, index);
+ BMElem *ele = EDBM_elem_from_index_any(em, index);
+ switch (ele->head.htype) {
+ case BM_VERT:
+ eve = (BMVert *)ele;
+ break;
+ case BM_EDGE:
+ eed = (BMEdge *)ele;
+ break;
+ case BM_FACE:
+ efa = (BMFace *)ele;
+ break;
}
#ifdef USE_LINKED_SELECT_DEFAULT_HACK