forked from bartvdbraak/blender
fix for own bad mistake using alloca in a loop, also knife project wasnt selecting correctly.
This commit is contained in:
parent
03f02019f2
commit
87919be4f6
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user