#ifndef __TRANSFORM_H__
#define __TRANSFORM_H__

#include <Matrix.H>

Matrix Translate(double, double);
Matrix Scale(double, double);
Matrix Rotate(double, double, double);

Matrix Translate(double x, double y, double z);
Matrix Scale(double x, double y, double z);
Matrix RotateX(double t, double x, double y, double z);
Matrix RotateY(double t, double x, double y, double z);
Matrix RotateZ(double t, double x, double y, double z);

Matrix Translate(Matrix&, int);

/* bjaspan's transformations started with different names... */
inline Matrix Translator(double x, double y)
{ return Translate(x, y); }

inline Matrix Translator(double x, double y, double z)
{ return Translate(x, y, z); }

inline Matrix Translator(int x, int y)
{ return Translate(double(x), double(y)); }

inline Matrix Translator(int x, int y, int z)
{ return Translate(double(x), double(y), double(z)); }

inline Matrix Scaler(double x, double y)
{ return Scale(x, y); }

inline Matrix Scaler(double x, double y, double z)
{ return Scale(x, y, z); }

inline Matrix Scaler(int x, int y)
{ return Scale(double(x), double(y)); }

inline Matrix Scaler(int x, int y, int z)
{ return Scale(double(x), double(y), double(z)); }

#define Rotator_X(theta) RotateX(theta, 0.0, 0.0, 0.0)
#define Rotator_Y(theta) RotateY(theta, 0.0, 0.0, 0.0)
#define Rotator_Z(theta) RotateZ(theta, 0.0, 0.0, 0.0)

#endif /* __TRANSFORM_H__ */
