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:
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform.c30
-rw-r--r--source/blender/editors/transform/transform.h3
-rw-r--r--source/blender/editors/transform/transform_conversions.c5
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);
}
}