Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-07-26 15:15:22 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-07-26 15:15:22 +0400
commit5dc3cfc983da11ead73c079096cd21e9592ce612 (patch)
tree8201441aef3795df1ed756aa69eec5f3b2ea8708 /source/blender/bmesh/operators
parent7c58ec9337761291f9489996f2e9d630b0f6ad4e (diff)
fix [#36282] Spin error with non uniform scale
add support for passing object matrix to bmesh transform operators.
Diffstat (limited to 'source/blender/bmesh/operators')
-rw-r--r--source/blender/bmesh/operators/bmo_dupe.c12
-rw-r--r--source/blender/bmesh/operators/bmo_utils.c14
2 files changed, 16 insertions, 10 deletions
diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c
index 48103969474..59e018eccf1 100644
--- a/source/blender/bmesh/operators/bmo_dupe.c
+++ b/source/blender/bmesh/operators/bmo_dupe.c
@@ -489,8 +489,8 @@ void bmo_spin_exec(BMesh *bm, BMOperator *op)
BMO_op_initf(bm, &dupop, op->flag, "duplicate geom=%S", op, "geom_last.out");
BMO_op_exec(bm, &dupop);
BMO_op_callf(bm, op->flag,
- "rotate cent=%v matrix=%m3 verts=%S",
- cent, rmat, &dupop, "geom.out");
+ "rotate cent=%v matrix=%m3 space=%s verts=%S",
+ cent, rmat, op, "space", &dupop, "geom.out");
BMO_slot_copy(&dupop, slots_out, "geom.out",
op, slots_out, "geom_last.out");
BMO_op_finish(bm, &dupop);
@@ -500,8 +500,8 @@ void bmo_spin_exec(BMesh *bm, BMOperator *op)
op, "geom_last.out");
BMO_op_exec(bm, &extop);
BMO_op_callf(bm, op->flag,
- "rotate cent=%v matrix=%m3 verts=%S",
- cent, rmat, &extop, "geom.out");
+ "rotate cent=%v matrix=%m3 space=%s verts=%S",
+ cent, rmat, op, "space", &extop, "geom.out");
BMO_slot_copy(&extop, slots_out, "geom.out",
op, slots_out, "geom_last.out");
BMO_op_finish(bm, &extop);
@@ -510,8 +510,8 @@ void bmo_spin_exec(BMesh *bm, BMOperator *op)
if (usedvec) {
mul_m3_v3(rmat, dvec);
BMO_op_callf(bm, op->flag,
- "translate vec=%v verts=%S",
- dvec, op, "geom_last.out");
+ "translate vec=%v space=%s verts=%S",
+ dvec, op, "space", op, "geom_last.out");
}
}
}
diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c
index 053e4da6e02..85bd8a85376 100644
--- a/source/blender/bmesh/operators/bmo_utils.c
+++ b/source/blender/bmesh/operators/bmo_utils.c
@@ -55,9 +55,15 @@ void bmo_transform_exec(BMesh *UNUSED(bm), BMOperator *op)
{
BMOIter iter;
BMVert *v;
- float mat[4][4];
+ float mat[4][4], mat_space[4][4], imat_space[4][4];
BMO_slot_mat4_get(op->slots_in, "matrix", mat);
+ BMO_slot_mat4_get(op->slots_in, "space", mat_space);
+
+ if (!is_zero_m4(mat_space)) {
+ invert_m4_m4(imat_space, mat_space);
+ mul_serie_m4(mat, imat_space, mat, mat_space, NULL, NULL, NULL, NULL, NULL);
+ }
BMO_ITER (v, &iter, op->slots_in, "verts", BM_VERT) {
mul_m4_v3(mat, v->co);
@@ -73,7 +79,7 @@ void bmo_translate_exec(BMesh *bm, BMOperator *op)
unit_m4(mat);
copy_v3_v3(mat[3], vec);
- BMO_op_callf(bm, op->flag, "transform matrix=%m4 verts=%s", mat, op, "verts");
+ BMO_op_callf(bm, op->flag, "transform matrix=%m4 space=%s verts=%s", mat, op, "space", op, "verts");
}
void bmo_scale_exec(BMesh *bm, BMOperator *op)
@@ -87,7 +93,7 @@ void bmo_scale_exec(BMesh *bm, BMOperator *op)
mat[1][1] = vec[1];
mat[2][2] = vec[2];
- BMO_op_callf(bm, op->flag, "transform matrix=%m3 verts=%s", mat, op, "verts");
+ BMO_op_callf(bm, op->flag, "transform matrix=%m3 space=%s verts=%s", mat, op, "space", op, "verts");
}
void bmo_rotate_exec(BMesh *bm, BMOperator *op)
@@ -99,7 +105,7 @@ void bmo_rotate_exec(BMesh *bm, BMOperator *op)
BMO_slot_mat4_get(op->slots_in, "matrix", mat);
pivot_m4(mat, center);
- BMO_op_callf(bm, op->flag, "transform matrix=%m4 verts=%s", mat, op, "verts");
+ BMO_op_callf(bm, op->flag, "transform matrix=%m4 space=%s verts=%s", mat, op, "space", op, "verts");
}
void bmo_reverse_faces_exec(BMesh *bm, BMOperator *op)