[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59344] trunk/blender/source/blender/bmesh : bmesh api:

Campbell Barton ideasman42 at gmail.com
Wed Aug 21 07:20:57 CEST 2013


Revision: 59344
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59344
Author:   campbellbarton
Date:     2013-08-21 05:20:57 +0000 (Wed, 21 Aug 2013)
Log Message:
-----------
bmesh api:
- use heap for BM_face_create_ngon_vcloud allocations.
- replace BM_face_create_ngon_verts with more efficient BM_face_create_verts

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
    trunk/blender/source/blender/bmesh/operators/bmo_bridge.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-08-21 05:11:11 UTC (rev 59343)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2013-08-21 05:20:57 UTC (rev 59344)
@@ -441,6 +441,9 @@
  */
 BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len, const int create_flag)
 {
+	AngleIndexPair *vang = BLI_array_alloca(vang, len);
+	BMVert **vert_arr_map = BLI_array_alloca(vert_arr_map, len);
+
 	BMFace *f;
 
 	float totv_inv = 1.0f / (float)len;
@@ -457,10 +460,6 @@
 	float far_dist, far_best;
 	float far_cross_dist, far_cross_best = 0.0f;
 
-	AngleIndexPair *vang;
-
-	BMVert **vert_arr_map;
-
 	/* get the center point and collect vector array since we loop over these a lot */
 	zero_v3(cent);
 	for (i = 0; i < len; i++) {
@@ -520,8 +519,6 @@
 	/* --- */
 
 	/* now calculate every points angle around the normal (signed) */
-	vang = MEM_mallocN(sizeof(AngleIndexPair) * len, __func__);
-
 	for (i = 0; i < len; i++) {
 		float co[3];
 		float proj_vec[3];
@@ -551,17 +548,12 @@
 	/* --- */
 
 	/* create edges and find the winding (if faces are attached to any existing edges) */
-	vert_arr_map = MEM_mallocN(sizeof(BMVert *) * len, __func__);
-
 	for (i = 0; i < len; i++) {
 		vert_arr_map[i] = vert_arr[vang[i].index];
 	}
-	MEM_freeN(vang);
 
 	f = BM_face_create_ngon_verts(bm, vert_arr_map, len, create_flag, true, true);
 
-	MEM_freeN(vert_arr_map);
-
 	return f;
 }
 

Modified: trunk/blender/source/blender/bmesh/operators/bmo_bridge.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_bridge.c	2013-08-21 05:11:11 UTC (rev 59343)
+++ trunk/blender/source/blender/bmesh/operators/bmo_bridge.c	2013-08-21 05:20:57 UTC (rev 59344)
@@ -343,7 +343,7 @@
 				BMVert *v_arr[4] = {v_a, v_b, v_b_next, v_a_next};
 				if (BM_face_exists(v_arr, 4, &f) == false) {
 					/* copy if loop data if its is missing on one ring */
-					f = BM_face_create_ngon_verts(bm, v_arr, 4, 0, false, true);
+					f = BM_face_create_verts(bm, v_arr, 4, BM_CREATE_NOP, true);
 
 					l_iter = BM_FACE_FIRST_LOOP(f);
 					if (l_b)      BM_elem_attrs_copy(bm, bm, l_b,      l_iter); l_iter = l_iter->next;
@@ -356,7 +356,7 @@
 				BMVert *v_arr[3] = {v_a, v_b, v_a_next};
 				if (BM_face_exists(v_arr, 3, &f) == false) {
 					/* fan-fill a triangle */
-					f = BM_face_create_ngon_verts(bm, v_arr, 3, 0, false, true);
+					f = BM_face_create_verts(bm, v_arr, 3, BM_CREATE_NOP, true);
 
 					l_iter = BM_FACE_FIRST_LOOP(f);
 					if (l_b)      BM_elem_attrs_copy(bm, bm, l_b,      l_iter); l_iter = l_iter->next;




More information about the Bf-blender-cvs mailing list