[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40981] branches/bmesh/blender/source/ blender: Add nodoubles arg to BM_Make_Face

Andrew Wiggin ender79bl at gmail.com
Thu Oct 13 06:58:37 CEST 2011


Revision: 40981
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40981
Author:   ender79
Date:     2011-10-13 04:58:34 +0000 (Thu, 13 Oct 2011)
Log Message:
-----------
Add nodoubles arg to BM_Make_Face

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
    branches/bmesh/blender/source/blender/bmesh/operators/bevel.c
    branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
    branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-10-13 04:58:34 UTC (rev 40981)
@@ -131,7 +131,7 @@
 struct BMEdge *BM_Make_Edge ( struct BMesh *bm, struct BMVert *v1, struct BMVert *v2, const struct BMEdge *example, int nodouble );
 struct BMFace *BM_Make_Quadtriangle ( struct BMesh *bm, struct BMVert **verts, BMEdge **edges, int len, const struct BMFace *example, int nodouble );
 
-BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len);
+BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len, int nodouble);
 
 /*more easier to use version of BM_Make_Quadtriangle.
   creates edges if necassary.*/

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -207,7 +207,7 @@
 			if(!edar[2]) edar[2] = BM_Make_Edge(bm, verts[2], verts[0], NULL, 0);
 		}
 	
-		f = BM_Make_Face(bm, verts, edar, len);
+		f = BM_Make_Face(bm, verts, edar, len, 0);
 	
 		if(example && f)
 			BM_Copy_Attributes(bm, bm, example, f);
@@ -353,16 +353,8 @@
 			goto err;
 	}
 
-	/*check if face already exists*/
-	if(nodouble)
-		overlap = BM_Face_Exists(bm, verts, len, &f);
+	f = BM_Make_Face(bm, verts, edges2, len, nodouble);
 
-	/*create the face, if necassary*/
-	if (!f && !overlap)
-		f = BM_Make_Face(bm, verts, edges2, len);
-	else if (!overlap)
-		f = NULL;
-
 	/*clean up flags*/
 	for (i=0; i<len; i++) {
 		bmesh_api_clearflag(edges2[i], _FLAG_MF);

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -470,7 +470,7 @@
 			l = l->next;
 		} while (l != bm_firstfaceloop(f));
 		
-		f2 = BM_Make_Face(bm, verts, edges, BLI_array_count(verts));
+		f2 = BM_Make_Face(bm, verts, edges, BLI_array_count(verts), 0);
 		l = bm_firstfaceloop(f2);
 		i = 0;
 		do {

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -179,7 +179,7 @@
 		l = l->next;
 	} while (l != bm_firstfaceloop(f));
 	
-	f2 = BM_Make_Face(bm, verts, edges, f->len);
+	f2 = BM_Make_Face(bm, verts, edges, f->len, 0);
 	
 	BM_Copy_Attributes(bm, bm, f, f2);
 	
@@ -194,16 +194,27 @@
 	return f2;
 }
 
-BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len) {
-	BMFace *f;
+BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len, int nodouble) {
+	BMFace *f = NULL;
 	BMLoop *l, *startl, *lastl;
-	int i;
+	int i, overlap;
 	
 	if (len == 0) {
 		/*just return NULL for now*/
 		return NULL;
 	}
 
+	if (nodouble) {
+		/* Check if face already exists */
+		overlap = BM_Face_Exists(bm, verts, len, &f);
+		if (overlap) {
+			return f;
+		}
+		else {
+			BLI_assert(f == NULL);
+		}
+	}
+	
 	f = BLI_mempool_calloc(bm->fpool);
 	bm->totface += 1;
 	f->head.type = BM_FACE;
@@ -1752,7 +1763,7 @@
 /*
  * BMESH UNGLUE REGION MAKE VERT
  *
- * Disconnects a face from its vertex fan at loop sl.
+ * Disconnects sf from the vertex fan at sv
  */
 BMVert *bmesh_urmv(BMesh *bm, BMFace *sf, BMVert *sv)
 {

Modified: branches/bmesh/blender/source/blender/bmesh/operators/bevel.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bevel.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bevel.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -128,10 +128,8 @@
 	}
 #else
 	/*oddly, this simplistic method seems to work the best*/
-	mul_v3_fl(vec1, fac);
-	mul_v3_fl(vec2, fac);
 	add_v3_v3(vec1, vec2);
-	mul_v3_fl(vec1, 0.5);
+	mul_v3_fl(vec1, fac * 0.5);
 
 	if (inv)
 		negate_v3(vec1);
@@ -151,7 +149,7 @@
 	BMVert *v;
 	BMFace **faces = NULL, *f;
 	LoopTag *tags=NULL, *tag;
-	EdgeTag *etags = NULL, *etag;
+	EdgeTag *etags = NULL;
 	BMVert **verts = NULL;
 	BMEdge **edges = NULL;
 	BLI_array_declare(faces);
@@ -186,7 +184,7 @@
 			BMEdge *edges[2] = {e, BM_Make_Edge(bm, e->v1, e->v2, e, 0)};
 			
 			BMO_SetFlag(bm, edges[1], BEVEL_FLAG);
-			BM_Make_Face(bm, verts, edges, 2);
+			BM_Make_Face(bm, verts, edges, 2, 0);
 		}
 #endif
 	}
@@ -383,7 +381,7 @@
 		}
 	}
 	
-	/*create new faces*/
+	/*create new faces inset from original faces*/
 	for (i=0; i<BLI_array_count(faces); i++) {
 		BMLoop *l;
 		BMIter liter;
@@ -411,8 +409,7 @@
 			}
 			lastv=tag->newv;
 			
-			etag = etags + BM_GetIndex(l->e);
-			v2 = l->next->v == l->e->v1 ? etag->newv1 : etag->newv2;
+			v2 = ETAG_GET(l->e, l->next->v);
 			
 			tag = tags + BM_GetIndex(l->next);
 			if (!BMO_TestFlag(bm, l->e, BEVEL_FLAG) && v2 && v2 != tag->newv) {
@@ -431,9 +428,9 @@
 			BM_Copy_Attributes(bm, bm, bm_firstfaceloop(faces[i])->prev->e, e);
 		BLI_array_append(edges, e);
 		
-		f = BM_Make_Ngon(bm, verts[0], verts[1], edges, BLI_array_count(verts), 0);
+		f = BM_Make_Ngon(bm, verts[0], verts[1], edges, BLI_array_count(edges), 0);
 		if (!f) {
-			printf("eck!!\n");
+			printf("eek!!\n");
 			continue;
 		}
 			
@@ -463,6 +460,7 @@
 					v4 = tags[BM_GetIndex(l->radial_next->next)].newv;
 				}
 			} else {
+				/*the loop is on a boundary*/
 				v3 = l->next->v;
 				v4 = l->v;
 				
@@ -628,7 +626,7 @@
 		}
 		
 		/*find edges that exist between vertices in verts.  this is basically
-          a topological walk of the edges connecting them.*/
+		  a topological walk of the edges connecting them.*/
 		vstart = vstart ? vstart : verts[0];
 		vv = vstart;
 		do {
@@ -661,8 +659,8 @@
 			continue;
 		
 		/*there may not be a complete loop of edges, so start again and make
-          final edge afterwards.  in this case, the previous loop worked to
-          find one of the two edges at the extremes.*/
+		  final edge afterwards.  in this case, the previous loop worked to
+		  find one of the two edges at the extremes.*/
 		if (vv != vstart) {
 			/*undo previous tagging*/
 			for (i=0; i<BLI_array_count(verts); i++) {
@@ -791,7 +789,7 @@
 		}
 	}
 #if 0
-	/*clean up any remainin 2-edged faces*/
+	/*clean up any remaining 2-edged faces*/
 	BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
 		if (f->len == 2) {
 			BMFace *faces[2] = {f, bm_firstfaceloop(f)->radial_next->f};

Modified: branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -124,7 +124,7 @@
 	}
 	
 	/*create new face*/
-	target_face = BM_Make_Face(target_mesh, vtar, edar, source_face->len);
+	target_face = BM_Make_Face(target_mesh, vtar, edar, source_face->len, 0);
 	BMO_Insert_MapPointer(source_mesh, op, 
 	         "facemap", source_face, target_face);
 	BMO_Insert_MapPointer(source_mesh, op, 
@@ -259,6 +259,7 @@
 	if (edar) {
 		MEM_freeN(edar);
 	}
+	/*free vert pointer array*/
 	if (vtar) {
 		MEM_freeN(vtar);
 	}

Modified: branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -90,7 +90,7 @@
 
 	edges_tmp[i] = BM_Make_Edge(bm, lastv1, lastv2, NULL, 1);
 
-	f2 = BM_Make_Face(bm, verts, edges_tmp, f->len);
+	f2 = BM_Make_Face(bm, verts, edges_tmp, f->len, 0);
 	if (!f2) {
 		return NULL;
 	}

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -59,7 +59,7 @@
 	float (*keyco)[3]= NULL;
 	int *keyi;
 	int set_key = BMO_Get_Int(op, "set_shapekey");
-	int totuv, i, j, li, allocsize[4] = {512, 512, 2048, 512};
+	int totuv, i, j, allocsize[4] = {512, 512, 2048, 512};
 
 	if (!me || !me->totvert) return; /*sanity check*/
 	
@@ -191,7 +191,6 @@
 	}
 
 	mpoly = me->mpoly;
-	li = 0;
 	for (i=0; i<me->totpoly; i++, mpoly++) {
 		BMVert *v1, *v2;
 		BMIter iter;
@@ -220,7 +219,7 @@
 			v2 = fedges[0]->v1;
 		}
 	
-		f = BM_Make_Face(bm, verts, fedges, mpoly->totloop);
+		f = BM_Make_Face(bm, verts, fedges, mpoly->totloop, 0);
 
 		if (!f) {
 			printf("Warning! Bad face in mesh"
@@ -241,7 +240,6 @@
 		j = 0;
 		BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) {
 			CustomData_to_bmesh_block(&me->ldata, &bm->ldata, mpoly->loopstart+j, &l->head.data);
-			li++;
 			j++;
 		}
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-10-13 04:58:34 UTC (rev 40981)
@@ -2355,7 +2355,6 @@
 	BMLoop *l;
 	BMEdge *e, *e2, *closest = NULL;
 	BMVert *v, *ripvert = NULL;
-	BMFace *f;
 	int side = 0, i, singlesel = 0;
 	float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]};
 	float dist = FLT_MAX, d;




More information about the Bf-blender-cvs mailing list