Index: trunk/src/obj_common.c =================================================================== --- trunk/src/obj_common.c (revision 19594) +++ trunk/src/obj_common.c (revision 19595) @@ -305,6 +305,25 @@ mmult(mx, tr); } +void pcb_xform_mx_shear(pcb_xform_mx_t mx, double sx, double sy) +{ + pcb_xform_mx_t tr; + + tr[0] = 1; + tr[1] = sx; + tr[2] = 0; + + tr[3] = sy; + tr[4] = 1; + tr[5] = 0; + + tr[6] = 0; + tr[7] = 0; + tr[8] = 1; + + mmult(mx, tr); +} + void pcb_xform_mx_mirrorx(pcb_xform_mx_t mx) { pcb_xform_mx_scale(mx, 0, -1); Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 19594) +++ trunk/src/obj_common.h (revision 19595) @@ -116,6 +116,7 @@ void pcb_xform_mx_rotate(pcb_xform_mx_t mx, double deg); void pcb_xform_mx_translate(pcb_xform_mx_t mx, double xt, double yt); void pcb_xform_mx_scale(pcb_xform_mx_t mx, double st, double sy); +void pcb_xform_mx_shear(pcb_xform_mx_t mx, double sx, double sy); void pcb_xform_mx_mirrorx(pcb_xform_mx_t mx); /* mirror over the x axis (flip y coords) */ /* Return the user readable name of an object type in a string; never NULL */