GP: Fix mirror modifier with parent object
authorAntonioya <blendergit@gmail.com>
Sun, 20 Jan 2019 16:57:13 +0000 (17:57 +0100)
committerAntonioya <blendergit@gmail.com>
Sun, 20 Jan 2019 18:20:09 +0000 (19:20 +0100)
Still problems when local rotation.

Some cleanup done.

source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c

index 52de152..00ffabe 100644 (file)
@@ -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);
                }
        }