import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;
import java.util.TimerTask;

public class CaptureHelloUniverse extends Applet {

    private SimpleUniverse u = null;
    TimerTask task;

    public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();

        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objRoot.addChild(objTrans);

        objTrans.addChild(new ColorCube(0.4));
        Transform3D yAxis = new Transform3D();
        Alpha rotationAlpha = new Alpha(-1, 4000);

        RotationInterpolator rotator =
        new RotationInterpolator(rotationAlpha, objTrans, yAxis,
        0.0f, (float) Math.PI*2.0f);
        BoundingSphere bounds =
        new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
        rotator.setSchedulingBounds(bounds);
        objRoot.addChild(rotator);
        objRoot.compile();

        return objRoot;
    }

    public CaptureHelloUniverse() {
    }

    public void init() {
        setLayout(new BorderLayout());
        GraphicsConfiguration config =
        SimpleUniverse.getPreferredConfiguration();

        final CaptureCanvas3D c = new CaptureCanvas3D(config);
        add("Center", c);
        JButton startButton = new JButton( "Start Capturing" );
        startButton.addActionListener( new ActionListener(){
            public void actionPerformed( ActionEvent e ){
                task = c.startCapturing( new java.io.File( "C:/CaptureHelloUniverse" ), "image", 1000, 0 );
            }
        });

        add( "North", startButton );
        JButton stopButton = new JButton( "Stop Capturing" );
        stopButton.addActionListener( new ActionListener(){
            public void actionPerformed( ActionEvent e ){
                c.stopCapturing( task );
            }
        });
        add( "South", stopButton );

        BranchGroup scene = createSceneGraph();
        u = new SimpleUniverse(c);

        u.getViewingPlatform().setNominalViewingTransform();

        u.addBranchGraph(scene);
    }

    public void destroy() {
        u.removeAllLocales();
    }

    public static void main(String[] args) {
        new MainFrame(new CaptureHelloUniverse(), 256, 256);
    }
}
