diff options
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform.c | 30 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.h | 3 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 5 |
3 files changed, 29 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); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 3397230b080..42a8ebef692 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -203,6 +203,8 @@ typedef struct SlideData { int start[2], end[2]; struct BMEditMesh *em; float perc; + /* flag that is set when origfaces is initialized */ + int origfaces_init; } SlideData; typedef struct TransData { @@ -692,6 +694,7 @@ void applyTransformOrientation(const struct bContext *C, float mat[3][3], char * int getTransformOrientation(const struct bContext *C, float normal[3], float plane[3], int activeOnly); +void freeSlideTempFaces(SlideData *sld); void freeSlideVerts(TransInfo *t); #endif diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 5598d70ee70..fe4574921ca 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -4873,6 +4873,11 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (t->spacetype==SPACE_VIEW3D) { if (t->obedit) { if (cancelled==0) { + /* we need to delete the temporary faces before automerging */ + if(t->mode == TFM_EDGE_SLIDE){ + SlideData *sld = t->customData; + freeSlideTempFaces(sld); + } EDBM_automerge(t->scene, t->obedit, 1); } } |