diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-07-26 10:12:49 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-07-26 10:12:49 +0400 |
commit | 29df776b89691cc44b6d88afd5956a64aba88058 (patch) | |
tree | 858ed9eff812b2a72ef710d47f10f1d9c82b7ba7 /source/blender/bmesh/operators/bmo_utils.c | |
parent | 501649a806db6b1175694254f4be3fe249f90163 (diff) |
optimization: call one bmesh operator for rotate (not 3).
added pivot_m4() utility function since rotating about an arbitrary point is handy.
Diffstat (limited to 'source/blender/bmesh/operators/bmo_utils.c')
-rw-r--r-- | source/blender/bmesh/operators/bmo_utils.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index 2a0a7864499..053e4da6e02 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -92,20 +92,14 @@ void bmo_scale_exec(BMesh *bm, BMOperator *op) void bmo_rotate_exec(BMesh *bm, BMOperator *op) { - float vec[3]; - - BMO_slot_vec_get(op->slots_in, "cent", vec); - - /* there has to be a proper matrix way to do this, but - * this is how editmesh did it and I'm too tired to think - * through the math right now. */ - mul_v3_fl(vec, -1.0f); - BMO_op_callf(bm, op->flag, "translate verts=%s vec=%v", op, "verts", vec); + float center[3]; + float mat[4][4]; - BMO_op_callf(bm, op->flag, "transform matrix=%s verts=%s", op, "matrix", op, "verts"); + BMO_slot_vec_get(op->slots_in, "cent", center); + BMO_slot_mat4_get(op->slots_in, "matrix", mat); + pivot_m4(mat, center); - mul_v3_fl(vec, -1.0f); - BMO_op_callf(bm, op->flag, "translate verts=%s vec=%v", op, "verts", vec); + BMO_op_callf(bm, op->flag, "transform matrix=%m4 verts=%s", mat, op, "verts"); } void bmo_reverse_faces_exec(BMesh *bm, BMOperator *op) |