//Rot.java
import com.sun.j3d.utils.geometry.ColorCube;
import java.applet.Applet;
import java.awt.BorderLayout;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.applet.*;

public class Rot extends Applet {
        
          
    private BranchGroup createSceneGraph() {
    	
    	float knot[] = {0.0f,0.25f,0.5f,0.75f,1.0f};
        Point3f pos[]  = {
          new Point3f(-.8f,-.6f,0.0f),
          new Point3f(-.8f,.6f, 0.0f),
          new Point3f(.8f, .6f, 0.0f),
          new Point3f(.8f, -.6f,0.0f),
          new Point3f(-.8f,-.6f,0.0f)    };
          
       Quat4f q = new Quat4f();
       AxisAngle4f aa = new AxisAngle4f( 0.0f ,1.0f ,0.0f ,0f);
       q.set(aa);
       Quat4f quat[ ] = {
          q,
          new Quat4f(0.0f ,1.0f ,0.0f ,0.78f ),
          new Quat4f(0.0f ,1.0f, 0.0f , 1.57f ),
          new Quat4f(0.0f, 1.0f ,0.0f, 0.78f ),
          q  };
       
       System.out.println("AxisAngle: " + aa);
       
       System.out.println("q: " + q);
       
       System.out.println("Quat Value: " + new Quat4f(0.0f ,1.0f ,0.0f ,0.0f));
    	
 BranchGroup objRoot = new BranchGroup();
        TransformGroup objTran=new TransformGroup();
        objTran.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        Transform3D t3d=new Transform3D();
        t3d.setScale(.3);
        objTran.setTransform(t3d);
        objRoot.addChild(objTran);

        BoundingSphere bound=new BoundingSphere(
           new Point3d(0.0,0.0,0.0),50.);

        Transform3D tr=new Transform3D();
        TransformGroup translation=new TransformGroup(tr);
        translation.addChild(new ColorCube(.2));

        objTran.addChild(translation);

        translation.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//        Alpha xtranAlpha = new Alpha(-1,
//
//Alpha.INCREASING_ENABLE,//|Alpha.DECREASING_ENABLE,
//                              0, 0,10000, 0, 2000, 10000, 0, 2000);
				Alpha xtranAlpha = new Alpha(-1,
                              0, 0,10000, 0, 2000);

        RotPosPathInterpolator tran =
            new RotPosPathInterpolator(xtranAlpha, translation, tr,
                                     knot,quat , pos);
        xtranAlpha.setStartTime(System.currentTimeMillis());

        tran.setSchedulingBounds(bound);
        translation.addChild(tran);

        return objRoot;
    }

    public Rot() {
 setLayout(new BorderLayout());
 Canvas3D c = new Canvas3D(null);
 add("Center", c);
        BranchGroup scene = createSceneGraph();
 SimpleUniverse u = new SimpleUniverse(c);
        u.getViewingPlatform().setNominalViewingTransform();
 u.addBranchGraph(scene);
    }

    public static void main(String[] args) {
        new MainFrame(new Rot(), 640,480);
    }
}

//end of Rot.java