[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20262] branches/bmesh/blender/source/ blender: add primitives works again.

Joseph Eagar joeedh at gmail.com
Mon May 18 17:13:11 CEST 2009


Revision: 20262
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20262
Author:   joeedh
Date:     2009-05-18 17:13:11 +0200 (Mon, 18 May 2009)

Log Message:
-----------
add primitives works again.  also switching selection modes almost works correctly, going from edge mode to vert messes up selection though.

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

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c	2009-05-18 14:55:34 UTC (rev 20261)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c	2009-05-18 15:13:11 UTC (rev 20262)
@@ -27,23 +27,40 @@
  *
 */
 
+static void recount_totsels(BMesh *bm)
+{
+	BMIter iter;
+	BMHeader *ele;
+	int types[3] = {BM_VERTS_OF_MESH, BM_EDGES_OF_MESH, BM_FACES_OF_MESH};
+	int *tots[3];
+	int i;
+
+	/*recount tot*sel variables*/
+	bm->totvertsel = bm->totedgesel = bm->totfacesel = 0;
+	tots[0] = &bm->totvertsel;
+	tots[1] = &bm->totedgesel;
+	tots[2] = &bm->totfacesel;
+
+	for (i=0; i<3; i++) {
+		ele = BMIter_New(&iter, bm, types[i], NULL);
+		for ( ; ele; ele=BMIter_Step(&iter)) {
+			if (BM_TestHFlag(ele, BM_SELECT)) *tots[i] += 1;
+		}
+	}
+}
+
 void BM_SelectMode_Flush(BMesh *bm)
 {
 	BMEdge *e;
 	BMLoop *l;
 	BMFace *f;
-	BMHeader *ele;
 
 	BMIter edges;
 	BMIter faces;
-	BMIter iter;
-	
-	int types[3] = {BM_VERTS_OF_MESH, BM_EDGES_OF_MESH, BM_FACES_OF_MESH};
-	int *tots[3];
-	int i;
+
 	int totsel;
 
-	if(bm->selectmode & BM_VERT){
+	if(bm->selectmode & SCE_SELECT_VERTEX){
 		for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges)){
 			if(BM_TestHFlag(e->v1, BM_SELECT) && BM_TestHFlag(e->v2, BM_SELECT)) BM_SetHFlag(e, 1);
 			else BM_ClearHFlag(e, 0);
@@ -63,7 +80,7 @@
 				BM_ClearHFlag(f, 0);
 		}
 	}
-	else if(bm->selectmode & BM_EDGE) {
+	else if(bm->selectmode & SCE_SELECT_EDGE) {
 		for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces)){
 			totsel = 0;
 			l=f->loopbase;
@@ -80,18 +97,7 @@
 		}
 	}
 
-	/*recount tot*sel variables*/
-	bm->totvertsel = bm->totedgesel = bm->totfacesel = 0;
-	tots[0] = &bm->totvertsel;
-	tots[1] = &bm->totedgesel;
-	tots[2] = &bm->totfacesel;
-
-	for (i=0; i<3; i++) {
-		ele = BMIter_New(&iter, bm, types[i], NULL);
-		for ( ; ele; ele=BMIter_Step(&iter)) {
-			if (BM_TestHFlag(ele, BM_SELECT)) *tots[i] += 1;
-		}
-	}
+	recount_totsels(bm);
 }
 
 /*
@@ -164,8 +170,8 @@
 		if (!BM_TestHFlag(e, BM_SELECT)) bm->totedgesel += 1;
 
 		BM_SetHFlag(&(e->head), BM_SELECT);
-		BM_SetHFlag(&(e->v1->head), BM_SELECT);
-		BM_SetHFlag(&(e->v2->head), BM_SELECT);
+		BM_SetHFlag(e->v1, BM_SELECT);
+		BM_SetHFlag(e->v2, BM_SELECT);
 	}
 	else{ 
 		if (BM_TestHFlag(e, BM_SELECT)) bm->totedgesel -= 1;
@@ -232,29 +238,30 @@
 	
 	bm->selectmode = selectmode;
 
-	if(bm->selectmode & BM_VERT){
+	if(bm->selectmode & SCE_SELECT_VERTEX) {
 		for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges))
-			BM_Select_Edge(bm, e, 0);
+			BM_ClearHFlag(e, 0);
 		for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces))
-			BM_Select_Face(bm, f, 0);
+			BM_ClearHFlag(f, 0);
 		BM_SelectMode_Flush(bm);
 	}
-	else if(bm->selectmode & BM_EDGE){
+	else if(bm->selectmode & SCE_SELECT_EDGE) {
 		for(v= BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v= BMIter_Step(&verts))
-			BM_Select_Vert(bm, v, 0);
+			BM_ClearHFlag(v, 0);
 		for(e= BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges)){
 			if(BM_TestHFlag(&(e->head), BM_SELECT))
 				BM_Select_Edge(bm, e, 1);
 		}
 		BM_SelectMode_Flush(bm);
 	}
-	else if(bm->selectmode & BM_FACE){
+	else if(bm->selectmode & SCE_SELECT_FACE) {
 		for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges))
-			BM_Select_Edge(bm, e, 0);
+			BM_ClearHFlag(e, 0);
 		for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces)){
 			if(BM_TestHFlag(&(f->head), BM_SELECT))
 				BM_Select_Face(bm, f, 1);
 		}
+		BM_SelectMode_Flush(bm);
 	}
 }
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/editmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/editmesh.c	2009-05-18 14:55:34 UTC (rev 20261)
+++ branches/bmesh/blender/source/blender/editors/mesh/editmesh.c	2009-05-18 15:13:11 UTC (rev 20262)
@@ -804,15 +804,9 @@
 	em->totedge= me->totedge;
 	em->totface= me->totface;
 	
-	if(tot==0) {
-		return NULL;
-	}
-	
 	actkey = ob_get_keyblock(ob);
 	if(actkey) {
 		tot= actkey->totelem;
-		/* undo-ing in past for previous editmode sessions gives corrupt 'keyindex' values */
-		undo_editmode_clear();
 	}
 
 	





More information about the Bf-blender-cvs mailing list