[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52040] trunk/blender/source/blender: bmesh refactor - rename some of the BM_****_share_****_count() functions to BM_***_share_check()

Campbell Barton ideasman42 at gmail.com
Fri Nov 9 15:52:07 CET 2012


Revision: 52040
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52040
Author:   campbellbarton
Date:     2012-11-09 14:52:05 +0000 (Fri, 09 Nov 2012)
Log Message:
-----------
bmesh refactor - rename some of the BM_****_share_****_count() functions to BM_***_share_check()
some of these were only returning a boolean, others returned a count even though only a boolean was needed.

split some of the functions in two as well where check/count are both needed.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
    trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
    trunk/blender/source/blender/bmesh/intern/bmesh_queries.h
    trunk/blender/source/blender/bmesh/operators/bmo_create.c
    trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c
    trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c
    trunk/blender/source/blender/modifiers/intern/MOD_skin.c

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -828,8 +828,6 @@
 		mcol = DM_get_tessface_data_layer(dm, colType);
 	}
 
-	printf("%s: %p(%d/%d)\n", __func__, mcol, CD_ID_MCOL, colType);
-
 	cdDM_update_normals_from_pbvh(dm);
 
 	/* back-buffer always uses legacy since VBO's would need the

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mods.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mods.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -118,7 +118,7 @@
 		e = v->e;
 		do {
 			e = bmesh_disk_edge_next(e, v);
-			if (!(BM_edge_share_face_count(e, v->e))) {
+			if (!(BM_edge_share_face_check(e, v->e))) {
 				keepedge = e;
 				baseedge = v->e;
 				break;

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_queries.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_queries.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -725,6 +725,47 @@
 #endif
 
 /**
+ * Returns the number of faces that are adjacent to both f1 and f2,
+ * \note Could be sped up a bit by not using iterators and by tagging
+ * faces on either side, then count the tags rather then searching.
+ */
+int BM_face_share_face_count(BMFace *f1, BMFace *f2)
+{
+	BMIter iter1, iter2;
+	BMEdge *e;
+	BMFace *f;
+	int count = 0;
+
+	BM_ITER_ELEM (e, &iter1, f1, BM_EDGES_OF_FACE) {
+		BM_ITER_ELEM (f, &iter2, e, BM_FACES_OF_EDGE) {
+			if (f != f1 && f != f2 && BM_face_share_edge_check(f, f2))
+				count++;
+		}
+	}
+
+	return count;
+}
+
+/**
+ * same as #BM_face_share_face_count but returns a bool
+ */
+int BM_face_share_face_check(BMFace *f1, BMFace *f2)
+{
+	BMIter iter1, iter2;
+	BMEdge *e;
+	BMFace *f;
+
+	BM_ITER_ELEM (e, &iter1, f1, BM_EDGES_OF_FACE) {
+		BM_ITER_ELEM (f, &iter2, e, BM_FACES_OF_EDGE) {
+			if (f != f1 && f != f2 && BM_face_share_edge_check(f, f2))
+				return TRUE;
+		}
+	}
+
+	return FALSE;
+}
+
+/**
  *  Counts the number of edges two faces share (if any)
  */
 int BM_face_share_edge_count(BMFace *f1, BMFace *f2)
@@ -744,9 +785,27 @@
 }
 
 /**
+ *  Returns TRUE if the faces share an edge
+ */
+int BM_face_share_edge_check(BMFace *f1, BMFace *f2)
+{
+	BMLoop *l_iter;
+	BMLoop *l_first;
+
+	l_iter = l_first = BM_FACE_FIRST_LOOP(f1);
+	do {
+		if (bmesh_radial_face_find(l_iter->e, f2)) {
+			return TRUE;
+		}
+	} while ((l_iter = l_iter->next) != l_first);
+
+	return FALSE;
+}
+
+/**
  *	Test if e1 shares any faces with e2
  */
-int BM_edge_share_face_count(BMEdge *e1, BMEdge *e2)
+int BM_edge_share_face_check(BMEdge *e1, BMEdge *e2)
 {
 	BMLoop *l;
 	BMFace *f;
@@ -767,7 +826,7 @@
 /**
  *	Tests to see if e1 shares a vertex with e2
  */
-int BM_edge_share_vert_count(BMEdge *e1, BMEdge *e2)
+int BM_edge_share_vert_check(BMEdge *e1, BMEdge *e2)
 {
 	return (e1->v1 == e2->v1 ||
 	        e1->v1 == e2->v2 ||

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_queries.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_queries.h	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_queries.h	2012-11-09 14:52:05 UTC (rev 52040)
@@ -84,10 +84,14 @@
 int     BM_face_exists_multi(BMVert **varr, BMEdge **earr, int len);
 int     BM_face_exists_multi_edge(BMEdge **earr, int len);
 
+int     BM_face_share_face_count(BMFace *f1, BMFace *f2);
 int     BM_face_share_edge_count(BMFace *f1, BMFace *f2);
-int     BM_edge_share_face_count(BMEdge *e1, BMEdge *e2);
-int     BM_edge_share_vert_count(BMEdge *e1, BMEdge *e2);
 
+int     BM_face_share_face_check(BMFace *f1, BMFace *f2);
+int     BM_face_share_edge_check(BMFace *f1, BMFace *f2);
+int     BM_edge_share_face_check(BMEdge *e1, BMEdge *e2);
+int     BM_edge_share_vert_check(BMEdge *e1, BMEdge *e2);
+
 BMVert *BM_edge_share_vert(BMEdge *e1, BMEdge *e2);
 BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v);
 BMLoop *BM_face_edge_share_loop(BMFace *f, BMEdge *e);

Modified: trunk/blender/source/blender/bmesh/operators/bmo_create.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_create.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/bmesh/operators/bmo_create.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -1177,10 +1177,10 @@
 	}
 
 	if (edges1 && BLI_array_count(edges1) > 2 &&
-	    BM_edge_share_vert_count(edges1[0], edges1[BLI_array_count(edges1) - 1]))
+	    BM_edge_share_vert_check(edges1[0], edges1[BLI_array_count(edges1) - 1]))
 	{
 		if (edges2 && BLI_array_count(edges2) > 2 &&
-		    BM_edge_share_vert_count(edges2[0], edges2[BLI_array_count(edges2) - 1]))
+		    BM_edge_share_vert_check(edges2[0], edges2[BLI_array_count(edges2) - 1]))
 		{
 			BLI_array_free(edges1);
 			BLI_array_free(edges2);
@@ -1193,7 +1193,7 @@
 	}
 
 	if (edges2 && BLI_array_count(edges2) > 2 &&
-	    BM_edge_share_vert_count(edges2[0], edges2[BLI_array_count(edges2) - 1]))
+	    BM_edge_share_vert_check(edges2[0], edges2[BLI_array_count(edges2) - 1]))
 	{
 		edges2 = NULL;
 	}

Modified: trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/bmesh/operators/bmo_subdivide.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -825,7 +825,7 @@
 		}
 
 		/* make sure the two edges have a valid angle to each other */
-		if (totesel == 2 && BM_edge_share_vert_count(e1, e2)) {
+		if (totesel == 2 && BM_edge_share_vert_check(e1, e2)) {
 			sub_v3_v3v3(vec1, e1->v2->co, e1->v1->co);
 			sub_v3_v3v3(vec2, e2->v2->co, e2->v1->co);
 			normalize_v3(vec1);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/editors/mesh/editmesh_loopcut.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -261,7 +261,7 @@
 		lasteed = eed;
 	}
 	
-	if (lasteed != startedge && BM_edge_share_face_count(lasteed, startedge)) {
+	if (lasteed != startedge && BM_edge_share_face_check(lasteed, startedge)) {
 		v[1][0] = v[0][0];
 		v[1][1] = v[0][1];
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_skin.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_skin.c	2012-11-09 13:57:09 UTC (rev 52039)
+++ trunk/blender/source/blender/modifiers/intern/MOD_skin.c	2012-11-09 14:52:05 UTC (rev 52040)
@@ -1354,24 +1354,6 @@
 	add_poly(so, quad[0], quad[1], quad[2], quad[3]);
 }
 
-/* Returns the number of faces that are adjacent to both f1 and f2 */
-static int BM_face_share_face_count(BMFace *f1, BMFace *f2)
-{
-	BMIter iter1, iter2;
-	BMEdge *e;
-	BMFace *f;
-	int count = 0;
-
-	BM_ITER_ELEM (e, &iter1, f1, BM_EDGES_OF_FACE) {
-		BM_ITER_ELEM (f, &iter2, e, BM_FACES_OF_EDGE) {
-			if (f != f1 && f != f2 && BM_face_share_edge_count(f, f2))
-				count++;
-		}
-	}
-
-	return count;
-}
-
 static void hull_merge_triangles(SkinOutput *so, const SkinModifierData *smd)
 {
 	BMIter iter;
@@ -1434,7 +1416,7 @@
 			 * share a border with another face, output as a quad */
 			if (!BM_elem_flag_test(adj[0], BM_ELEM_TAG) &&
 			    !BM_elem_flag_test(adj[1], BM_ELEM_TAG) &&
-			    !BM_face_share_face_count(adj[0], adj[1]))
+			    !BM_face_share_face_check(adj[0], adj[1]))
 			{
 				add_quad_from_tris(so, e, adj);
 				BM_elem_flag_enable(adj[0], BM_ELEM_TAG);




More information about the Bf-blender-cvs mailing list