[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56958] trunk/blender/source/blender/bmesh /intern: utility bmesh functions, for edge loop creation, optionally pass array BM_edge_split_n() to get verts created.

Campbell Barton ideasman42 at gmail.com
Wed May 22 08:00:26 CEST 2013


Revision: 56958
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56958
Author:   campbellbarton
Date:     2013-05-22 06:00:26 +0000 (Wed, 22 May 2013)
Log Message:
-----------
utility bmesh functions, for edge loop creation, optionally pass array BM_edge_split_n() to get verts created.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.c
    trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.h
    trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mods.h

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.c	2013-05-22 05:41:39 UTC (rev 56957)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.c	2013-05-22 06:00:26 UTC (rev 56958)
@@ -448,6 +448,7 @@
 /* -------------------------------------------------------------------- */
 /* BM_edgeloop_*** functions */
 
+/* return new edgeloops */
 BMEdgeLoopStore *BM_edgeloop_copy(BMEdgeLoopStore *el_store)
 {
 	BMEdgeLoopStore *el_store_copy = MEM_mallocN(sizeof(*el_store), __func__);
@@ -456,6 +457,22 @@
 	return el_store_copy;
 }
 
+BMEdgeLoopStore *BM_edgeloop_from_verts(BMVert **v_arr, const int v_arr_tot, bool is_closed)
+{
+	BMEdgeLoopStore *el_store = MEM_callocN(sizeof(*el_store), __func__);
+	int i;
+	for (i = 0; i < v_arr_tot; i++) {
+		LinkData *node = MEM_callocN(sizeof(*node), __func__);
+		node->data = v_arr[i];
+		BLI_addtail(&el_store->verts, node);
+	}
+	el_store->len = v_arr_tot;
+	if (is_closed) {
+		el_store->flag |= BM_EDGELOOP_IS_CLOSED;
+	}
+	return el_store;
+}
+
 void BM_edgeloop_free(BMEdgeLoopStore *el_store)
 {
 	BLI_freelistN(&el_store->verts);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.h	2013-05-22 05:41:39 UTC (rev 56957)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_edgeloop.h	2013-05-22 06:00:26 UTC (rev 56958)
@@ -46,6 +46,8 @@
 
 /* single edgeloop */
 struct BMEdgeLoopStore *BM_edgeloop_copy(struct BMEdgeLoopStore *el_store);
+struct BMEdgeLoopStore *BM_edgeloop_from_verts(BMVert **v_arr, const int v_arr_tot, bool is_closed);
+
 void                BM_edgeloop_free(struct BMEdgeLoopStore *el_store);
 bool                BM_edgeloop_is_closed(struct BMEdgeLoopStore *el_store);
 int                 BM_edgeloop_length_get(struct BMEdgeLoopStore *el_store);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mods.c	2013-05-22 05:41:39 UTC (rev 56957)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mods.c	2013-05-22 06:00:26 UTC (rev 56958)
@@ -747,8 +747,10 @@
 
 /**
  * \brief Split an edge multiple times evenly
+ *
+ * \param r_varr  Optional array, verts in between (v1 -> v2)
  */
-BMVert  *BM_edge_split_n(BMesh *bm, BMEdge *e, int numcuts)
+BMVert  *BM_edge_split_n(BMesh *bm, BMEdge *e, int numcuts, BMVert **r_varr)
 {
 	int i;
 	float percent;
@@ -757,6 +759,10 @@
 	for (i = 0; i < numcuts; i++) {
 		percent = 1.0f / (float)(numcuts + 1 - i);
 		v_new = BM_edge_split(bm, e, e->v2, NULL, percent);
+		if (r_varr) {
+			/* fill in reverse order (v1 -> v2) */
+			r_varr[numcuts - i - 1] = v_new;
+		}
 	}
 	return v_new;
 }

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mods.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mods.h	2013-05-22 05:41:39 UTC (rev 56957)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mods.h	2013-05-22 06:00:26 UTC (rev 56958)
@@ -55,7 +55,7 @@
 
 BMVert *BM_edge_split(BMesh *bm, BMEdge *e, BMVert *v, BMEdge **r_e, float percent);
 
-BMVert *BM_edge_split_n(BMesh *bm, BMEdge *e, int numcuts);
+BMVert *BM_edge_split_n(BMesh *bm, BMEdge *e, int numcuts, BMVert **r_varr);
 
 bool    BM_face_validate(BMFace *face, FILE *err);
 




More information about the Bf-blender-cvs mailing list