diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-10-07 07:39:06 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-07 07:40:32 +0300 |
commit | e4e8e359a15401a90f54db7131c1690a1bff385a (patch) | |
tree | 0e09b72cd0f875a43f4b93769fedd409e62c43f3 /source/blender | |
parent | 077b4ab846c37ad2456ec6f8f3501d55f42c4ccc (diff) |
BMesh: maintain select-history when sorting
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mesh.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index 115330cb25a..9036e882b0b 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -1665,6 +1665,40 @@ void BM_mesh_remap( } } + /* Selection history */ + { + BMEditSelection *ese; + for (ese = bm->selected.first; ese; ese = ese->next) { + switch (ese->htype) { + case BM_VERT: + if (vptr_map) { + ese->ele = BLI_ghash_lookup(vptr_map, ese->ele); + BLI_assert(ese->ele); + } + break; + case BM_EDGE: + if (eptr_map) { + ese->ele = BLI_ghash_lookup(eptr_map, ese->ele); + BLI_assert(ese->ele); + } + break; + case BM_FACE: + if (fptr_map) { + ese->ele = BLI_ghash_lookup(fptr_map, ese->ele); + BLI_assert(ese->ele); + } + break; + } + } + } + + if (fptr_map) { + if (bm->act_face) { + bm->act_face = BLI_ghash_lookup(fptr_map, bm->act_face); + BLI_assert(bm->act_face); + } + } + if (vptr_map) BLI_ghash_free(vptr_map, NULL, NULL); if (eptr_map) |