
import java.applet.Applet;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.applet.MainFrame;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.media.j3d.*;
import javax.vecmath.*;

public class TestOrbit extends Applet implements ActionListener
{
   public TestOrbit()
   {
      m_Frame = new MainFrame(this, 300, 300);
   }
   public Canvas3D createCanvas()
   {
      Canvas3D  canvas;
      GraphicsConfigTemplate3D template = new GraphicsConfigTemplate3D();
      GraphicsConfiguration gc1 =
           GraphicsEnvironment.
           getLocalGraphicsEnvironment().
           getDefaultScreenDevice().
           getBestConfiguration(template);
      canvas = new Canvas3D( gc1  );
      canvas.setDoubleBufferEnable(true);
      return canvas;
   }
   public void init()
   {
      try {

      setLayout(new BorderLayout());
      setSize( 300, 300 );

      // Create Canvas3D
      m_Canvas = createCanvas();
      add("Center", m_Canvas);

      // Create the viewing model
      m_Universe = new SimpleUniverse( m_Canvas );

      ViewingPlatform viewingPlatform = m_Universe.getViewingPlatform();
      viewingPlatform.setNominalViewingTransform();
      OrbitBehavior orbit = new OrbitBehavior( m_Canvas, 
          OrbitBehavior.REVERSE_TRANSLATE | OrbitBehavior.REVERSE_ROTATE );
      orbit.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 10000.0));
      viewingPlatform.setViewPlatformBehavior( orbit );

      // Create the Scene
      BranchGroup  scene = new BranchGroup();
      scene.addChild( new ColorCube() );


      m_Universe.addBranchGraph( scene );

      // create the gui
      Button b = new Button ("Print");
      b.addActionListener(this);
      Panel p = new Panel();
      p.add(b);
      add("North", p);

      }
      catch( Exception e )
      {
         System.out.println( e.getMessage() ); 
      }
   }
   public void actionPerformed( ActionEvent evt )
   {
      Canvas3D offScreenCanvas  = createOffScreenCanvas();
      View view = m_Universe.getViewer().getView();
      CanvasToJPEG c2jpg = new CanvasToJPEG( m_Universe.getCanvas(),
                                             offScreenCanvas );
      File  file = new File( "Test1.jpg" );
      c2jpg.toJPEG( file, view );
   }
   public Canvas3D  createOffScreenCanvas()
   {
      Canvas3D  canvas = null;
      GraphicsConfiguration config = m_Universe.getPreferredConfiguration();
      canvas = new Canvas3D( config, true );
      return canvas;
   }
   public static void main( String[] args )
   {
      new TestOrbit();
   }
   private Canvas3D          m_Canvas;
   private MainFrame         m_Frame;
   private SimpleUniverse    m_Universe;
}
