
public class KM
{
   double S[][][] = new double[100][4][4];
   int sp = 0;

   void initFrame() {
      sp = 0;
      Matrix.identity(S[sp]);
   }
   void push() {
      Matrix.copy(S[sp], S[sp+1]);
      sp++;
   }
   void pop() {
      --sp;
   }
   void translate(double x,double y,double z) {
      Matrix.translate(S[sp], x, y, z);
   }
   void rotateX(double theta) {
      Matrix.rotateX(S[sp], theta);
   }
   void rotateY(double theta) {
      Matrix.rotateY(S[sp], theta);
   }
   void rotateZ(double theta) {
      Matrix.rotateZ(S[sp], theta);
   }
   void scale(double x,double y,double z) {
      Matrix.scale(S[sp], x, y, z);
   }
   void transform(double src[], double dst[]) {
      Matrix.transform(S[sp], src, dst);
   }
   double[][] get() {
      return S[sp];
   }
}


