[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59348] trunk/blender/source/blender: bmesh api cleanup, face creation args now accept an example face ( as with vertex and edge),

Campbell Barton ideasman42 at gmail.com
Wed Aug 21 09:51:48 CEST 2013


Revision: 59348
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59348
Author:   campbellbarton
Date:     2013-08-21 07:51:47 +0000 (Wed, 21 Aug 2013)
Log Message:
-----------
bmesh api cleanup, face creation args now accept an example face (as with vertex and edge),
also replace BM_face_create_quad_tri_v with BM_face_create_verts

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c
    trunk/blender/source/blender/bmesh/bmesh.h
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.h
    trunk/blender/source/blender/bmesh/intern/bmesh_core.c
    trunk/blender/source/blender/bmesh/intern/bmesh_core.h
    trunk/blender/source/blender/bmesh/intern/bmesh_log.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
    trunk/blender/source/blender/bmesh/operators/bmo_bridge.c
    trunk/blender/source/blender/bmesh/operators/bmo_create.c
    trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
    trunk/blender/source/blender/bmesh/operators/bmo_extrude.c
    trunk/blender/source/blender/bmesh/operators/bmo_fill_edgeloop.c
    trunk/blender/source/blender/bmesh/operators/bmo_fill_grid.c
    trunk/blender/source/blender/bmesh/operators/bmo_hull.c
    trunk/blender/source/blender/bmesh/operators/bmo_inset.c
    trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c
    trunk/blender/source/blender/bmesh/operators/bmo_symmetrize.c
    trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
    trunk/blender/source/blender/bmesh/tools/bmesh_edgenet.c
    trunk/blender/source/blender/editors/mesh/editmesh_rip.c
    trunk/blender/source/blender/modifiers/intern/MOD_skin.c
    trunk/blender/source/blender/python/bmesh/bmesh_py_types.c

Modified: trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2013-08-21 07:40:19 UTC (rev 59347)
+++ trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2013-08-21 07:51:47 UTC (rev 59348)
@@ -52,7 +52,7 @@
 		edges[j] = etable[ml->e];
 	}
 
-	return BM_face_create(bm, verts, edges, mp->totloop, BM_CREATE_SKIP_CD);
+	return BM_face_create(bm, verts, edges, mp->totloop, NULL, BM_CREATE_SKIP_CD);
 }
 
 /**

Modified: trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c	2013-08-21 07:40:19 UTC (rev 59347)
+++ trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c	2013-08-21 07:51:47 UTC (rev 59348)
@@ -302,9 +302,7 @@
 	/* ensure we never add existing face */
 	BLI_assert(BM_face_exists(v_tri, 3, NULL) == false);
 
-	f = BM_face_create(bvh->bm, v_tri, e_tri, 3, BM_CREATE_NOP);
-	// BM_elem_attrs_copy(bvh->bm, bvh->bm, f_example, f);
-	f->mat_nr = f_example->mat_nr;
+	f = BM_face_create(bvh->bm, v_tri, e_tri, 3, f_example, BM_CREATE_NOP);
 
 	if (!BLI_ghash_haskey(bvh->bm_face_to_node, f)) {
 

Modified: trunk/blender/source/blender/bmesh/bmesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh.h	2013-08-21 07:40:19 UTC (rev 59347)
+++ trunk/blender/source/blender/bmesh/bmesh.h	2013-08-21 07:51:47 UTC (rev 59348)
@@ -251,8 +251,8 @@
 #include "intern/bmesh_operator_api.h"
 #include "intern/bmesh_error.h"
 
+#include "intern/bmesh_core.h"
 #include "intern/bmesh_construct.h"
-#include "intern/bmesh_core.h"
 #include "intern/bmesh_edgeloop.h"
 #include "intern/bmesh_interp.h"
 #include "intern/bmesh_iterators.h"

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-08-21 07:40:19 UTC (rev 59347)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-08-21 07:51:47 UTC (rev 59348)
@@ -65,66 +65,12 @@
 
 BMFace *BM_face_create_quad_tri(BMesh *bm,
                                 BMVert *v1, BMVert *v2, BMVert *v3, BMVert *v4,
-                                const BMFace *example, const bool no_double)
+                                const BMFace *f_example, const eBMCreateFlag create_flag)
 {
 	BMVert *vtar[4] = {v1, v2, v3, v4};
-	return BM_face_create_quad_tri_v(bm, vtar, v4 ? 4 : 3, example, no_double);
+	return BM_face_create_verts(bm, vtar, v4 ? 4 : 3, f_example, create_flag, true);
 }
 
-BMFace *BM_face_create_quad_tri_v(BMesh *bm, BMVert **verts, int len, const BMFace *example, const bool no_double)
-{
-	BMFace *f = NULL;
-	bool is_overlap = false;
-
-	/* sanity check - debug mode only */
-	if (len == 3) {
-		BLI_assert(verts[0] != verts[1]);
-		BLI_assert(verts[0] != verts[2]);
-		BLI_assert(verts[1] != verts[2]);
-	}
-	else if (len == 4) {
-		BLI_assert(verts[0] != verts[1]);
-		BLI_assert(verts[0] != verts[2]);
-		BLI_assert(verts[0] != verts[3]);
-
-		BLI_assert(verts[1] != verts[2]);
-		BLI_assert(verts[1] != verts[3]);
-
-		BLI_assert(verts[2] != verts[3]);
-	}
-	else {
-		BLI_assert(0);
-	}
-
-
-	if (no_double) {
-		/* check if face exists or overlaps */
-		is_overlap = BM_face_exists(verts, len, &f);
-	}
-
-	/* make new face */
-	if ((f == NULL) && (!is_overlap)) {
-		BMEdge *edar[4] = {NULL};
-		edar[0] = BM_edge_create(bm, verts[0], verts[1], NULL, BM_CREATE_NO_DOUBLE);
-		edar[1] = BM_edge_create(bm, verts[1], verts[2], NULL, BM_CREATE_NO_DOUBLE);
-		if (len == 4) {
-			edar[2] = BM_edge_create(bm, verts[2], verts[3], NULL, BM_CREATE_NO_DOUBLE);
-			edar[3] = BM_edge_create(bm, verts[3], verts[0], NULL, BM_CREATE_NO_DOUBLE);
-		}
-		else {
-			edar[2] = BM_edge_create(bm, verts[2], verts[0], NULL, BM_CREATE_NO_DOUBLE);
-		}
-
-		f = BM_face_create(bm, verts, edar, len, BM_CREATE_NOP);
-
-		if (example && f) {
-			BM_elem_attrs_copy(bm, bm, example, f);
-		}
-	}
-
-	return f;
-}
-
 /**
  * \brief copies face loop data from shared adjacent faces.
  *
@@ -199,7 +145,8 @@
  * #BM_face_create should be considered over this function as it
  * avoids some unnecessary work.
  */
-BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, const int len, const int create_flag)
+BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, const int len,
+                            const BMFace *f_example, const eBMCreateFlag create_flag)
 {
 	BMEdge **edges_sort = BLI_array_alloca(edges_sort, len);
 	BMVert **verts_sort = BLI_array_alloca(verts_sort, len + 1);
@@ -318,7 +265,7 @@
 		BM_ELEM_API_FLAG_DISABLE(verts_sort[i], _FLAG_MV);
 	}
 
-	f = BM_face_create(bm, verts_sort, edges_sort, len, create_flag);
+	f = BM_face_create(bm, verts_sort, edges_sort, len, f_example, create_flag);
 
 	/* clean up flags */
 	for (i = 0; i < len; i++) {
@@ -346,7 +293,8 @@
  * - Optionally create edges between vertices.
  * - Uses verts so no need to find edges (handy when you only have verts)
  */
-BMFace *BM_face_create_ngon_verts(BMesh *bm, BMVert **vert_arr, const int len, const int create_flag,
+BMFace *BM_face_create_ngon_verts(BMesh *bm, BMVert **vert_arr, const int len,
+                                  const BMFace *f_example, const eBMCreateFlag create_flag,
                                   const bool calc_winding, const bool create_edges)
 {
 	BMEdge **edge_arr = BLI_array_alloca(edge_arr, len);
@@ -406,7 +354,8 @@
 	        bm,
 	        v_winding[winding[0]],
 	        v_winding[winding[1]],
-	        edge_arr, len, create_flag);
+	        edge_arr, len,
+	        f_example, create_flag);
 }
 
 
@@ -439,7 +388,8 @@
  *
  * \note Since this is a vcloud there is no direction.
  */
-BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len, const int create_flag)
+BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len,
+                                   const BMFace *f_example, const eBMCreateFlag create_flag)
 {
 	AngleIndexPair *vang = BLI_array_alloca(vang, len);
 	BMVert **vert_arr_map = BLI_array_alloca(vert_arr_map, len);
@@ -552,7 +502,7 @@
 		vert_arr_map[i] = vert_arr[vang[i].index];
 	}
 
-	f = BM_face_create_ngon_verts(bm, vert_arr_map, len, create_flag, true, true);
+	f = BM_face_create_ngon_verts(bm, vert_arr_map, len, f_example, create_flag, true, true);
 
 	return f;
 }
@@ -923,7 +873,7 @@
 		j++;
 	} while ((l_iter = l_iter->next) != l_first);
 
-	f_new = BM_face_create(bm_new, verts, edges, f->len, BM_CREATE_SKIP_CD);
+	f_new = BM_face_create(bm_new, verts, edges, f->len, NULL, BM_CREATE_SKIP_CD);
 
 	if (UNLIKELY(f_new == NULL)) {
 		return NULL;

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.h	2013-08-21 07:40:19 UTC (rev 59347)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.h	2013-08-21 07:51:47 UTC (rev 59348)
@@ -29,21 +29,20 @@
 
 struct BMAllocTemplate;
 
-BMFace *BM_face_create_quad_tri_v(BMesh *bm,
-                                  BMVert **verts, int len,
-                                  const BMFace *example, const bool no_double);
-
 BMFace *BM_face_create_quad_tri(BMesh *bm, BMVert *v1, BMVert *v2, BMVert *v3, BMVert *v4,
-                                const BMFace *example, const bool no_double);
+                                const BMFace *f_example, const eBMCreateFlag create_flag);
 
 void BM_face_copy_shared(BMesh *bm, BMFace *f,
                          BMElemFilterFunc filter_fn, void *user_data);
 
-BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, const int len, const int create_flag);
-BMFace *BM_face_create_ngon_verts(BMesh *bm, BMVert **vert_arr, const int len, const int create_flag,
+BMFace *BM_face_create_ngon(BMesh *bm, BMVert *v1, BMVert *v2, BMEdge **edges, const int len,
+                            const BMFace *f_example, const eBMCreateFlag create_flag);
+BMFace *BM_face_create_ngon_verts(BMesh *bm, BMVert **vert_arr, const int len,
+                                  const BMFace *f_example, const eBMCreateFlag create_flag,
                                   const bool calc_winding, const bool create_edges);
 
-BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len, const int create_flag);
+BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len,
+                                   const BMFace *f_example, const eBMCreateFlag create_flag);
 
 void BMO_remove_tagged_faces(BMesh *bm, const short oflag);
 void BMO_remove_tagged_edges(BMesh *bm, const short oflag);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_core.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_core.c	2013-08-21 07:40:19 UTC (rev 59347)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_core.c	2013-08-21 07:51:47 UTC (rev 59348)
@@ -56,7 +56,8 @@
 /**
  * \brief Main function for creating a new vertex.
  */
-BMVert *BM_vert_create(BMesh *bm, const float co[3], const BMVert *example, const eBMCreateFlag create_flag)
+BMVert *BM_vert_create(BMesh *bm, const float co[3],
+                       const BMVert *v_example, const eBMCreateFlag create_flag)
 {
 	BMVert *v = BLI_mempool_calloc(bm->vpool);
 
@@ -86,10 +87,10 @@
 	}
 
 	if (!(create_flag & BM_CREATE_SKIP_CD)) {
-		if (example) {
+		if (v_example) {
 			int *keyi;
 
-			BM_elem_attrs_copy(bm, bm, example, v);
+			BM_elem_attrs_copy(bm, bm, v_example, v);
 
 			/* exception: don't copy the original shapekey index */
 			keyi = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_SHAPE_KEYINDEX);
@@ -113,7 +114,8 @@
  * \note Duplicate edges are supported by the API however users should _never_ see them.
  * so unless you need a unique edge or know the edge won't exist, you should call with \a no_double = true
  */
-BMEdge *BM_edge_create(BMesh *bm, BMVert *v1, BMVert *v2, const BMEdge *example, const eBMCreateFlag create_flag)
+BMEdge *BM_edge_create(BMesh *bm, BMVert *v1, BMVert *v2,
+                       const BMEdge *e_example, const eBMCreateFlag create_flag)
 {
 	BMEdge *e;
 	
@@ -148,8 +150,8 @@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list