/*
* SVGMatrix.java
*
* Created on April 12, 2007, 1:35 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package com.kitfox.salamander.svg.coordSystems;
import com.kitfox.salamander.svg.SVGException;
import com.kitfox.salamander.svg.basic.SVGDataType;
/**
* Many of SVG's graphics operations utilize 2x3 matrices of the form:
*
*
* [a c e]
* [b d f]
*
*
* which, when expanded into a 3x3 matrix for the purposes of matrix arithmetic, become:
*
*
* [a c e]
* [b d f]
* [0 0 1]
*
* @author kitfox
*/
public interface SVGMatrix extends SVGDataType
{
/**
* The a component of the matrix.
*/
public float getA();
/**
* The b component of the matrix.
*/
public float getB();
/**
* The c component of the matrix.
*/
public float getC();
/**
* The d component of the matrix.
*/
public float getD();
/**
* The e component of the matrix.
*/
public float getE();
/**
* The f component of the matrix.
*/
public float getF();
/**
* Performs matrix multiplication. This matrix is post-multiplied by another matrix, returning the resulting new matrix.
* @param secondMatrix The matrix which is post-multiplied to this matrix.
* @return The resulting matrix.
*/
public SVGMatrix multiply(SVGMatrix secondMatrix);
/**
* Returns the inverse matrix.
* @return The inverse matrix.
* @throws com.kitfox.salamander.svg.SVGException SVG_MATRIX_NOT_INVERTABLE: Raised if this matrix is not invertable.
*/
public SVGMatrix inverse() throws SVGException;
/**
* Post-multiplies a translation transformation on the current matrix and returns the resulting matrix.
* @param x The distance to translate along the x-axis.
* @param y The distance to translate along the y-axis.
* @return The resulting matrix.
*/
public SVGMatrix translate(float x, float y);
/**
* Post-multiplies a uniform scale transformation on the current matrix and returns the resulting matrix.
* @param scaleFactor Scale factor in both X and Y.
* @return The resulting matrix.
*/
public SVGMatrix scale(float scaleFactor);
/**
* Post-multiplies a non-uniform scale transformation on the current matrix and returns the resulting matrix.
* @param scaleFactorX Scale factor in X.
* @param scaleFactorY Scale factor in Y.
* @return The resulting matrix.
*/
public SVGMatrix scaleNonUniform(float scaleFactorX, float scaleFactorY);
/**
* Post-multiplies a rotation transformation on the current matrix and returns the resulting matrix.
* @param angle Rotation angle.
* @return The resulting matrix.
*/
public SVGMatrix rotate(float angle);
/**
* Post-multiplies a rotation transformation on the current matrix and returns the resulting matrix. The rotation angle is determined by taking (+/-) atan(y/x). The direction of the vector (x,y) determines whether the positive or negative angle value is used.
* @param x The X coordinate of the vector (x,y). Must not be zero.
* @param y The Y coordinate of the vector (x,y). Must not be zero.
* @return The resulting matrix.
* @throws com.kitfox.salamander.svg.SVGException SVG_INVALID_VALUE_ERR: Raised if one of the parameters has an invalid value.
*/
public SVGMatrix rotateFromVector(float x, float y) throws SVGException;
/**
* Post-multiplies the transformation [-1 0 0 1 0 0] and returns the resulting matrix.
* @return The resulting matrix.
*/
public SVGMatrix flipX();
/**
* Post-multiplies the transformation [1 0 0 -1 0 0] and returns the resulting matrix.
* @return The resulting matrix.
*/
public SVGMatrix flipY();
/**
* Post-multiplies a skewX transformation on the current matrix and returns the resulting matrix.
* @param angle Skew angle.
* @return The resulting matrix.
*/
public SVGMatrix skewX(float angle);
/**
* Post-multiplies a skewY transformation on the current matrix and returns the resulting matrix.
* @param angle Skew angle.
* @return The resulting matrix.
*/
public SVGMatrix skewY(float angle);
}