diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2012-02-27 20:45:48 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2012-02-27 20:45:48 +0400 |
commit | d55c1d59f91a919c8d4b935136454200adb0b8e8 (patch) | |
tree | ce36a1aff7544ca37b09432a4894e1b4fbbdd022 /source/blender/editors/transform/transform.c | |
parent | d8403875ccc422c88e6d46090033e3e31a0da02b (diff) |
Fix: confirming edge slide with factor 0 and automerge turned on would delete the selected edges. Caused by automerging the edges with temporary geometry used for the operation, that was getting deleted later. Now deleting the temporary geometry before automerging.
Diffstat (limited to 'source/blender/editors/transform/transform.c')
-rw-r--r-- | source/blender/editors/transform/transform.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 9b971376846..c9cb6c79066 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4631,6 +4631,7 @@ static int createSlideVerts(TransInfo *t) BLI_smallhash_insert(&sld->vhash, (uintptr_t)tempsv->v, tempsv); } + sld->origfaces_init = TRUE; sld->em = em; /*zero out start*/ @@ -4742,11 +4743,26 @@ void projectSVData(TransInfo *t, int final) BLI_smallhash_release(&visit); } +void freeSlideTempFaces(SlideData *sld){ + if(sld->origfaces_init){ + SmallHashIter hiter; + BMFace *copyf; + + copyf = BLI_smallhash_iternew(&sld->origfaces, &hiter, NULL); + for (; copyf; copyf=BLI_smallhash_iternext(&hiter, NULL)) { + BM_face_verts_kill(sld->em->bm, copyf); + } + + BLI_smallhash_release(&sld->origfaces); + + sld->origfaces_init = FALSE; + } +} + + void freeSlideVerts(TransInfo *t) { SlideData *sld = t->customData; - SmallHashIter hiter; - BMFace *copyf; #if 0 /*BMESH_TODO*/ if(me->drawflag & ME_DRAWEXTRA_EDGELEN) { @@ -4776,17 +4792,13 @@ void freeSlideVerts(TransInfo *t) sld->perc = 0.0; projectSVData(t, 0); } - - copyf = BLI_smallhash_iternew(&sld->origfaces, &hiter, NULL); - for (; copyf; copyf=BLI_smallhash_iternext(&hiter, NULL)) { - BM_face_verts_kill(sld->em->bm, copyf); - } - + + freeSlideTempFaces(sld); + sld->em->bm->ob = t->obedit; bmesh_edit_end(sld->em->bm, BMO_OP_FLAG_UNTAN_MULTIRES); BLI_smallhash_release(&sld->vhash); - BLI_smallhash_release(&sld->origfaces); MEM_freeN(sld->sv); MEM_freeN(sld); |