private void Transform(DrawableAffine affine) { double scaleX = ScaleX; double scaleY = ScaleY; double shearX = ShearX; double shearY = ShearY; double translateX = TranslateX; double translateY = TranslateY; ScaleX = (scaleX * affine.ScaleX) + (shearY * affine.ShearX); ScaleY = (shearX * affine.ShearY) + (scaleY * affine.ScaleY); ShearX = (shearX * affine.ScaleX) + (scaleY * affine.ShearX); ShearY = (scaleX * affine.ShearY) + (shearY * affine.ScaleY); TranslateX = (scaleX * affine.TranslateX) + (shearY * affine.TranslateY) + translateX; TranslateY = (shearX * affine.TranslateX) + (scaleY * affine.TranslateY) + translateY; }
private void Transform(DrawableAffine affine) { double scaleX = ScaleX; double scaleY = ScaleY; double shearX = ShearX; double shearY = ShearY; double translateX = TranslateX; double translateY = TranslateY; ScaleX = scaleX * affine.ScaleX + shearY * affine.ShearX; ScaleY = shearX * affine.ShearY + scaleY * affine.ScaleY; ShearX = shearX * affine.ScaleX + scaleY * affine.ShearX; ShearY = scaleX * affine.ShearY + shearY * affine.ScaleY; TranslateX = scaleX * affine.TranslateX + shearY * affine.TranslateY + translateX; TranslateY = shearX * affine.TranslateX + scaleY * affine.TranslateY + translateY; }
public void Test_Constructor_Matrix() { Matrix matrix = null; ExceptionAssert.Throws<ArgumentNullException>(() => { new DrawableAffine(matrix); }); matrix = new Matrix(11, 12, 21, 22, 0, 1); DrawableAffine affine = new DrawableAffine(matrix); Assert.AreEqual(11, affine.ScaleX); Assert.AreEqual(12, affine.ScaleY); Assert.AreEqual(21, affine.ShearX); Assert.AreEqual(22, affine.ShearY); Assert.AreEqual(0, affine.TranslateX); Assert.AreEqual(1, affine.TranslateY); }
/// <summary> /// Skew to use in Y axis /// </summary> /// <param name="skewY">The Y skewing element.</param> public void TransformSkewY(double skewY) { DrawableAffine affine = new DrawableAffine(); affine.ShearY = Math.Tan(DegreesToRadians(Math.IEEERemainder(skewY, 360.0))); Transform(affine); }
/// <summary> /// Sets the scale to use. /// </summary> /// <param name="scaleX">The X coordinate scaling element.</param> /// <param name="scaleY">The Y coordinate scaling element.</param> public void TransformScale(double scaleX, double scaleY) { DrawableAffine affine = new DrawableAffine(); affine.ScaleX = scaleX; affine.ScaleY = scaleY; Transform(affine); }
/// <summary> /// Rotation to use. /// </summary> /// <param name="angle">The angle of the rotation.</param> public void TransformRotation(double angle) { DrawableAffine affine = new DrawableAffine(); affine.ScaleX = Math.Cos(DegreesToRadians(Math.IEEERemainder(angle, 360.0))); affine.ScaleY = Math.Cos(DegreesToRadians(Math.IEEERemainder(angle, 360.0))); affine.ShearX = -Math.Sin(DegreesToRadians(Math.IEEERemainder(angle, 360.0))); affine.ShearY = Math.Sin(DegreesToRadians(Math.IEEERemainder(angle, 360.0))); Transform(affine); }
/// <summary> /// Sets the origin of coordinate system. /// </summary> /// <param name="translateX">The X coordinate of the translation element.</param> /// <param name="translateY">The Y coordinate of the translation element.</param> public void TransformOrigin(double translateX, double translateY) { DrawableAffine affine = new DrawableAffine(); affine.TranslateX = translateX; affine.TranslateY = translateY; Transform(affine); }
public void Test_AffineTransform() { using (MagickImage image = new MagickImage(Files.Builtin.Wizard)) { DrawableAffine affineMatrix = new DrawableAffine(1, 0.5, 0, 0, 0, 0); image.AffineTransform(affineMatrix); Assert.AreEqual(482, image.Width); Assert.AreEqual(322, image.Height); } }