fix for own bad mistake using alloca in a loop, also knife project wasnt selecting correctly.

This commit is contained in:
Campbell Barton 2013-03-15 13:18:35 +00:00
parent 03f02019f2
commit 87919be4f6
2 changed files with 24 additions and 18 deletions

@ -1655,14 +1655,8 @@ bool BM_face_is_any_edge_flag_test(BMFace *f, const char hflag)
return false;
}
float BM_mesh_calc_volume(BMesh *bm)
static void bm_mesh_calc_volume_face(BMFace *f, float *r_vol)
{
/* warning, calls own tessellation function, may be slow */
float vol = 0.0f;
BMFace *f;
BMIter fiter;
BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
const int tottri = f->len - 2;
BMLoop **loops = BLI_array_alloca(loops, f->len);
int (*index)[3] = BLI_array_alloca(index, tottri);
@ -1678,9 +1672,19 @@ float BM_mesh_calc_volume(BMesh *bm)
/* co1.dot(co2.cross(co3)) / 6.0 */
float cross[3];
cross_v3_v3v3(cross, p2, p3);
vol += (1.0f / 6.0f) * dot_v3v3(p1, cross);
*r_vol += (1.0f / 6.0f) * dot_v3v3(p1, cross);
}
}
float BM_mesh_calc_volume(BMesh *bm)
{
/* warning, calls own tessellation function, may be slow */
float vol = 0.0f;
BMFace *f;
BMIter fiter;
BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
bm_mesh_calc_volume_face(f, &vol);
}
return fabsf(vol);
}

@ -133,9 +133,11 @@ static int knifeproject_exec(bContext *C, wmOperator *op)
EDBM_mesh_knife(C, polys, true);
/* select only tagged faces */
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_TAG, false);
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false);
BM_mesh_elem_hflag_enable_test(em->bm, BM_FACE, BM_ELEM_SELECT, true, BM_ELEM_TAG);
BM_mesh_select_mode_flush(em->bm);
BLI_linklist_freeN(polys);
return OPERATOR_FINISHED;