[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44489] trunk/blender/source/blender/ editors/transform: Fix: confirming edge slide with factor 0 and automerge turned on would delete the selected edges .

Antony Riakiotakis kalast at gmail.com
Mon Feb 27 17:45:53 CET 2012


Revision: 44489
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44489
Author:   psy-fi
Date:     2012-02-27 16:45:48 +0000 (Mon, 27 Feb 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-02-27 16:14:08 UTC (rev 44488)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-02-27 16:45:48 UTC (rev 44489)
@@ -4631,6 +4631,7 @@
 		BLI_smallhash_insert(&sld->vhash, (uintptr_t)tempsv->v, tempsv);
 	}
 	
+	sld->origfaces_init = TRUE;
 	sld->em = em;
 	
 	/*zero out start*/
@@ -4742,11 +4743,26 @@
 	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 @@
 		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);

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2012-02-27 16:14:08 UTC (rev 44488)
+++ trunk/blender/source/blender/editors/transform/transform.h	2012-02-27 16:45:48 UTC (rev 44489)
@@ -203,6 +203,8 @@
 	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 @@
 
 int getTransformOrientation(const struct bContext *C, float normal[3], float plane[3], int activeOnly);
 
+void freeSlideTempFaces(SlideData *sld);
 void freeSlideVerts(TransInfo *t);
 
 #endif

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-02-27 16:14:08 UTC (rev 44488)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-02-27 16:45:48 UTC (rev 44489)
@@ -4873,6 +4873,11 @@
 	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);
 			}
 		}




More information about the Bf-blender-cvs mailing list