From 0f27f8f0d277f503e91c2446d39bf1f9c3b8475b Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Wed, 24 Oct 2012 15:20:54 -0700 Subject: [PATCH] Shearing support from Mike T. --- .../java/pythagoras/f/AbstractTransform.java | 17 +++++++++++++++++ src/main/java/pythagoras/f/AffineTransform.java | 15 +++++++++++++++ src/main/java/pythagoras/f/Transform.java | 15 +++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/main/java/pythagoras/f/AbstractTransform.java b/src/main/java/pythagoras/f/AbstractTransform.java index 0b5fe66..f70baf0 100644 --- a/src/main/java/pythagoras/f/AbstractTransform.java +++ b/src/main/java/pythagoras/f/AbstractTransform.java @@ -97,6 +97,23 @@ public abstract class AbstractTransform implements Transform throw new UnsupportedOperationException(); } + @Override // from Transform + public Transform shear (float sx, float sy) { + shearX(sx); + shearY(sy); + return this; + } + + @Override // from Transform + public Transform shearX (float sx) { + throw new UnsupportedOperationException(); + } + + @Override // from Transform + public Transform shearY (float sy) { + throw new UnsupportedOperationException(); + } + @Override // from Transform public Transform setTx (float tx) { throw new UnsupportedOperationException(); diff --git a/src/main/java/pythagoras/f/AffineTransform.java b/src/main/java/pythagoras/f/AffineTransform.java index 94ae044..c82193e 100644 --- a/src/main/java/pythagoras/f/AffineTransform.java +++ b/src/main/java/pythagoras/f/AffineTransform.java @@ -225,6 +225,21 @@ public class AffineTransform extends AbstractTransform return Transforms.multiply(this, 1, 0, 0, 1, 0, ty, this); } + @Override // from Transform + public Transform shear (float sx, float sy) { + return Transforms.multiply(this, 1, sy, sx, 1, 0, 0, this); + } + + @Override // from Transform + public Transform shearX (float sx) { + return Transforms.multiply(this, 1, 0, sx, 1, 0, 0, this); + } + + @Override // from Transform + public Transform shearY (float sy) { + return Transforms.multiply(this, 1, sy, 0, 1, 0, 0, this); + } + @Override // from Transform public Transform invert () { // compute the determinant, storing the subdeterminants for later use diff --git a/src/main/java/pythagoras/f/Transform.java b/src/main/java/pythagoras/f/Transform.java index a96a39b..3fe1fd3 100644 --- a/src/main/java/pythagoras/f/Transform.java +++ b/src/main/java/pythagoras/f/Transform.java @@ -137,6 +137,21 @@ public interface Transform * @throws UnsupportedOperationException if the transform is not rigid body or greater. */ Transform translateY (float ty); + /** Shears this transform. + * @return this instance, for chaining. + * @throws UnsupportedOperationException if the transform is not affine or greater. */ + Transform shear (float tx, float ty); + + /** Shears this transform in the x dimension. + * @return this instance, for chaining. + * @throws UnsupportedOperationException if the transform is not affine or greater. */ + Transform shearX (float tx); + + /** Shears this transform in the y dimension. + * @return this instance, for chaining. + * @throws UnsupportedOperationException if the transform is not affine or greater. */ + Transform shearY (float ty); + /** Returns a new transform that represents the inverse of this transform. * @throws NoninvertibleTransformException if the transform is not invertible. */ Transform invert ();