From 69240a66e0a9914b8bfafb7a401c43cc757ad9ae Mon Sep 17 00:00:00 2001 From: Antonioya Date: Sun, 20 Jan 2019 17:57:13 +0100 Subject: GP: Fix mirror modifier with parent object Still problems when local rotation. Some cleanup done. --- .../gpencil_modifiers/intern/MOD_gpencilmirror.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'source/blender/gpencil_modifiers') diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c index 52de1529b72..00ffabe3c36 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c @@ -84,24 +84,26 @@ static void update_position(Object *ob, MirrorGpencilModifierData *mmd, bGPDstro clear[axis] = 1.0f; float ob_origin[3]; - float mirror_origin[3]; float pt_origin[3]; - copy_v3_v3(ob_origin, ob->loc); + 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]); + } + else { + copy_v3_v3(ob_origin, ob->obmat[3]); + } + /* only works with current axis */ mul_v3_v3(ob_origin, clear); - zero_v3(mirror_origin); - if (mmd->object) { - mul_v3_v3v3(mirror_origin, mmd->object->loc, clear); - } + mul_v3_v3fl(pt_origin, ob_origin, -2.0f); - /* clear other axis */ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) { mul_v3_v3(&pt->x, factor); if (mmd->object) { - sub_v3_v3v3(pt_origin, ob_origin, mirror_origin); - mul_v3_fl(pt_origin, -2.0f); add_v3_v3(&pt->x, pt_origin); } } -- cgit v1.2.3