From d0ce73c5483af62b79b4c5f3f754a26e2494c97d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Jul 2013 21:56:59 +0000 Subject: fix [#35939] [Edit - Vertex mode] [Select]-[Mirror] did not returns right result. --- source/blender/editors/mesh/editmesh_utils.c | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'source/blender/editors/mesh/editmesh_utils.c') diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 834db3f9ad1..effbe3a619d 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -35,6 +35,7 @@ #include "DNA_object_types.h" #include "BLI_math.h" +#include "BLI_array.h" #include "BKE_DerivedMesh.h" #include "BKE_context.h" @@ -1270,6 +1271,38 @@ BMVert *EDBM_verts_mirror_get(BMEditMesh *em, BMVert *v) return NULL; } +BMEdge *EDBM_verts_mirror_get_edge(BMEditMesh *em, BMEdge *e) +{ + BMVert *v1_mirr = EDBM_verts_mirror_get(em, e->v1); + if (v1_mirr) { + BMVert *v2_mirr = EDBM_verts_mirror_get(em, e->v2); + if (v2_mirr) { + return BM_edge_exists(v1_mirr, v2_mirr); + } + } + + return NULL; +} + +BMFace *EDBM_verts_mirror_get_face(BMEditMesh *em, BMFace *f) +{ + BMFace *f_mirr = NULL; + BMVert **v_mirr_arr = BLI_array_alloca(v_mirr_arr, f->len); + + BMLoop *l_iter, *l_first; + unsigned int i = 0; + + l_iter = l_first = BM_FACE_FIRST_LOOP(f); + do { + if ((v_mirr_arr[i++] = EDBM_verts_mirror_get(em, l_iter->v)) == NULL) { + return NULL; + } + } while ((l_iter = l_iter->next) != l_first); + + BM_face_exists(v_mirr_arr, f->len, &f_mirr); + return f_mirr; +} + void EDBM_verts_mirror_cache_clear(BMEditMesh *em, BMVert *v) { int *mirr = CustomData_bmesh_get_layer_n(&em->bm->vdata, v->head.data, em->mirror_cdlayer); -- cgit v1.2.3