//<pre>

public class Shape3D {

	double vertices[][];
	int faces[][];
	double transformedVertices[][];
	Matrix3D transformationMatrix;
	Matrix3D stateMatrix;

	public Shape3D() {

		transformationMatrix = new Matrix3D();
		transformationMatrix.identity();
		stateMatrix = new Matrix3D();
		stateMatrix.identity();
	}
	
	public void transform( ) {
		
		for (int i = 0; i < vertices.length; i++) {
			for (int j = 0; j < vertices[i].length; j++) {
				transformationMatrix.transform(vertices[i],transformedVertices[i]);
			}
		}
	}
	
	public int size() {
		return faces.length;
	}
	
	public void setVertices( double[][] v ) {
	
		vertices = v;
	
	}

	public void setFaces( int[][] f) {
	
		faces = f;
	}
	
	public void update() {
	}

	public void animate() {
	}

	public void centerAt(double a, double b, double c) {
	}

	public void update(Matrix3D wMatrix) {
		transformationMatrix.copy(wMatrix);
		this.transform();
	}
	
	public void scale(double a, double b, double c) {
		transformationMatrix.scale(a, b, c);
	}

	public void translate(double a, double b, double c) {
		transformationMatrix.translate(a, b, c);
	}
	
	public void rotateX(double theta) {
		transformationMatrix.rotateX(theta);
	}

	public void rotateY(double theta) {
		transformationMatrix.rotateY(theta);
	}

	public void rotateZ(double theta) {
		transformationMatrix.rotateZ(theta);
	}

	public void print() {
	
		System.out.println(vertices.length + " vertices are... x,y,z,nx,ny,nz");
		for (int i = 0; i < vertices.length; i++) {
			System.out.println(vertices[i][0] + ", " + vertices[i][1] + ", " + vertices[i][2]);
		}
		System.out.println("\n" + faces.length + "faces are...");

		String aFace;
		for (int i = 0; i < faces.length; i++) {
			aFace = "";
			for (int j = 0; j < faces[i].length; j++) {
				aFace = aFace + "\t\t" + faces[i][j];
			}
			System.out.println(aFace);
		}
		System.out.println("<printing complete>");
	}
}
