[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