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:
authorAntonioya <blendergit@gmail.com>2019-06-05 16:54:22 +0300
committerAntonio Vazquez <blendergit@gmail.com>2019-06-05 16:55:28 +0300
commit806d4fbc5e4070209b9aa6942dc345aa1d61f20c (patch)
tree94c3271f7246f65c4ed98dcfb4b40109f9271001
parentf5908e45d5b121de1ded0b32a4ae517da5be87a4 (diff)
GPencil: Fix mirror modifier rotation around object
Still pending when the original object is rotated or scaled.
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
index a3052b4f6b6..058f60a69ac 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
@@ -78,12 +78,15 @@ static void update_position(Object *ob, MirrorGpencilModifierData *mmd, bGPDstro
float ob_origin[3];
float pt_origin[3];
+ float half_origin[3];
+ float rot_mat[3][3];
if (mmd->object) {
- float inv_mat[4][4];
-
- invert_m4_m4(inv_mat, mmd->object->obmat);
- mul_v3_m4v3(ob_origin, inv_mat, ob->obmat[3]);
+ float eul[3];
+ mat4_to_eul(eul, mmd->object->obmat);
+ mul_v3_fl(eul, 2.0f);
+ eul_to_mat3(rot_mat, eul);
+ sub_v3_v3v3(ob_origin, ob->obmat[3], mmd->object->obmat[3]);
}
else {
copy_v3_v3(ob_origin, ob->obmat[3]);
@@ -93,11 +96,18 @@ static void update_position(Object *ob, MirrorGpencilModifierData *mmd, bGPDstro
mul_v3_v3(ob_origin, clear);
mul_v3_v3fl(pt_origin, ob_origin, -2.0f);
+ mul_v3_v3fl(half_origin, pt_origin, 0.5f);
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
mul_v3_v3(&pt->x, factor);
if (mmd->object) {
+ /* apply location */
add_v3_v3(&pt->x, pt_origin);
+
+ /* apply rotation (around new center) */
+ sub_v3_v3(&pt->x, half_origin);
+ mul_m3_v3(rot_mat, &pt->x);
+ add_v3_v3(&pt->x, half_origin);
}
}
}