[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39973] branches/bmesh/blender/source/ blender/bmesh/intern/bmesh_marking.c: Turned back on restricted deselect

Geoffrey Bantle hairbat at yahoo.com
Tue Sep 6 18:17:28 CEST 2011


Revision: 39973
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39973
Author:   briggs
Date:     2011-09-06 16:17:27 +0000 (Tue, 06 Sep 2011)
Log Message:
-----------
Turned back on restricted deselect
----------------------------------------------
Fixed restricted deselect for edge select. Not
sure if face deselect is working properly, will
follow up with any reports on the tracker.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c	2011-09-06 15:44:44 UTC (rev 39972)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c	2011-09-06 16:17:27 UTC (rev 39973)
@@ -26,7 +26,7 @@
  *   edges that line up to form a path, then try to
  *   deselect the middle edge
 */
-/*#define RESTRICTED_DESELECT*/
+#define RESTRICTED_DESELECT
 
 /*
  * BM_MARK.C
@@ -157,65 +157,50 @@
 
 void BM_Select_Edge(BMesh *bm, BMEdge *e, int select)
 {
-#if defined(RESTRICTED_DESELECT)
-	int candesel;
-	int testiso = 1;
 
-	/*I might move this logic to editors/mesh/bmesh_select.c, where it'd be invoked
-	  by the selection tools.  in that case, we'd still retain the checks
-	  for if an edge's verts can be deselected.*/
+	if(select){
+		if (!BM_TestHFlag(e, BM_SELECT)) bm->totedgesel += 1;
 
-	/*ensure vert selections are valid, only if not in a multiselect
-	  mode that shares SCE_SELECT_VERT*/
-	switch (bm->selectmode) {
-		case SCE_SELECT_VERTEX:
-		case SCE_SELECT_EDGE:
-		case SCE_SELECT_FACE:
-		case SCE_SELECT_EDGE|SCE_SELECT_FACE:
-			testiso = 1;
-			break;
-		default:
-			testiso = 0;
-			break;
-	}
+		BM_SetHFlag(&(e->head), BM_SELECT);
+		BM_Select(bm, e->v1, 1);
+		BM_Select(bm, e->v2, 1);
+	}else{ 
+		if (BM_TestHFlag(e, BM_SELECT)) bm->totedgesel -= 1;
+		BM_ClearHFlag(&(e->head), BM_SELECT);
 
-	if (testiso && !select) {
-		BMIter eiter;
-		BMEdge *e2;
-		int i;
+		if(
+		        bm->selectmode == SCE_SELECT_EDGE ||
+		        bm->selectmode == SCE_SELECT_FACE ||
+		        bm->selectmode == (SCE_SELECT_EDGE | SCE_SELECT_FACE)){
 
-		for (i=0; i<2; i++) {
-			candesel = 1;
-			e2 = BMIter_New(&eiter, bm, BM_EDGES_OF_VERT, !i?e->v1:e->v2);
-			for (; e2; e2=BMIter_Step(&eiter)) {
-				if (e2 == e) continue;
-				if (BM_TestHFlag(e2, BM_SELECT)) {
-					candesel = 0;
-					break;
+			BMIter iter;
+			BMVert *verts[2] = {e->v1, e->v2};
+			BMEdge *e2;
+			int i;
+
+			for(i = 0; i < 2; i++){
+				int deselect = 1;
+
+				for(e2 = BMIter_New(&iter, bm, BM_EDGES_OF_VERT, verts[i]);
+				    e2; e2 = BMIter_Step(&iter)){
+					if(e2 == e){
+						continue;
+					}
+
+					if (BM_TestHFlag(e2, BM_SELECT)){
+						deselect = 0;
+						break;
+					}
 				}
-			}
 
-			if (candesel) BM_Select_Vert(bm, !i?e->v1:e->v2, 0);			
+				if(deselect) BM_Select_Vert(bm, verts[i], 0);
+			}
+		}else{
+			BM_Select(bm, e->v1, 0);
+			BM_Select(bm, e->v2, 0);
 		}
-	}
-#endif
 
-	if(select) { 
-		if (!BM_TestHFlag(e, BM_SELECT)) bm->totedgesel += 1;
-
-		BM_SetHFlag(&(e->head), BM_SELECT);
-		BM_Select(bm, e->v1, 1);
-		BM_Select(bm, e->v2, 1);
 	}
-	else{ 
-		if (BM_TestHFlag(e, BM_SELECT)) bm->totedgesel -= 1;
-
-		BM_ClearHFlag(&(e->head), BM_SELECT);
-#if !defined(RESTRICTED_DESELECT)
-		BM_Select(bm, e->v1, 0);
-		BM_Select(bm, e->v2, 0);
-#endif
-	}
 }
 
 /*
@@ -251,7 +236,6 @@
 
 		/*flush down to edges*/
 		BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
-#if defined(RESTRICTED_DESELECT)
 			BMIter fiter;
 			BMFace *f2;
 			BM_ITER(f2, &fiter, bm, BM_FACES_OF_EDGE, l->e) {
@@ -260,7 +244,6 @@
 			}
 
 			if (!f2)
-#endif
 			{
 				BM_Select(bm, l->e, 0);
 			}
@@ -268,7 +251,6 @@
 
 		/*flush down to verts*/
 		BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
-#if defined(RESTRICTED_DESELECT)
 			BMIter eiter;
 			BMEdge *e;
 			BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, l->v) {
@@ -277,7 +259,6 @@
 			}
 
 			if (!e)
-#endif
 			{
 				BM_Select(bm, l->v, 0);
 			}




More information about the Bf-blender-cvs mailing list