/*

Transform

*/

//---- Transform -------------------------------------------------------------//

public class Transform
{
  //---- Data
  
  private Matrix m;

  //---- Transform() - Creates new transformation

  public Transform()
  {
    m = Matrix.transformation();
  }

  //---- Transform(Transform t) - Creates new transformation

  public Transform(Transform t)
  {
    m = new Matrix(t.m);
  }

  //---- identity() - Resets the transformation
  
  public void identity()
  {
    m = null;
    m = Matrix.transformation();
  }

  //---- scale(sx, sy, sz) - Scales the current transformation
  
  public void scale(double sx, double sy, double sz)
  {
    m = Matrix.scaling(sx, sy, sz).multiply(m);
  }

  //---- translate(x, y, z) - Translates the current transformation
  
  public void translate(double x, double y, double z)
  {
    m = Matrix.translate(x, y, z).multiply(m);
  }

  //---- rotateX
  
  public void rotateX(double r)
  {
    m = Matrix.rotateX(r).multiply(m);
  }

  //---- rotateY
  
  public void rotateY(double r)
  {
    m = Matrix.rotateY(r).multiply(m);
  }

  //---- rotateZ
  
  public void rotateZ(double r)
  {
    m = Matrix.rotateZ(r).multiply(m);
  }

  //---- multiply - multiplies a vector by the transformation

  public double[] multiply(double[] v)
  {
    return m.multiply(v);
  }

  public void multiply(double src[], double dest[])
  {
    m.multiply(src, dest);
  }

  //---- transform
  
  public void transform(Transform t)
  {
    m = m.multiply(t.m);
  }

}
