import java.awt.*;
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.Timer;


public class TestCase extends Frame implements ActionListener
{

        Group testGroup = null;
        boolean bool = false;
        Bounds bounds;
	
  public TestCase(String name, int w, int h) 
  {
                super(name);
                setSize(w, h);
                addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent we)
                        {
                                System.exit(0);	
                        }
                });
                setLayout(new BorderLayout());
          GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
	
                Canvas3D c = new Canvas3D(config);
                add("Center", c);
                setVisible(true);
                BranchGroup scene = createSceneGraph();
                SimpleUniverse u = new SimpleUniverse(c);
	
                u.getViewingPlatform().setNominalViewingTransform();
                u.addBranchGraph(scene);
        	
System.out.println("TestGroup: " + testGroup +  "  Bounds: " + testGroup.getBounds() + "  autoCompute: " + testGroup.getBoundsAutoCompute());

                Timer timer = new Timer(2000, this);
                timer.start();
  
  }
  
  public void actionPerformed(ActionEvent e)
        {
                //to do
                testGroup.setBoundsAutoCompute(bool = ! bool);
                if(bool) testGroup.setBounds(bounds);
System.out.println("TestGroup: " + testGroup +  "  Bounds: " + testGroup.getBounds() + "  autoCompute: " + testGroup.getBoundsAutoCompute());      	
        }
	
  public static void main(String[] args) 
  {
                        Frame testFrame = new TestCase("TestCase", 256, 256);
  }
  
  public BranchGroup createSceneGraph() 
  {
                BranchGroup objRoot = new BranchGroup();
                testGroup = new Group();
                testGroup.setCapability(Group.ALLOW_BOUNDS_READ);
                testGroup.setCapability(Group.ALLOW_AUTO_COMPUTE_BOUNDS_READ);
                testGroup.setCapability(Group.ALLOW_BOUNDS_WRITE);
                testGroup.setCapability(Group.ALLOW_AUTO_COMPUTE_BOUNDS_WRITE);

                testGroup.setBoundsAutoCompute(false);
                bounds = new BoundingBox(new Point3d(-1,-1,-10), new Point3d(1,1,10));
                testGroup.setBounds(bounds);    	
	
                objRoot.addChild(testGroup);
        	
        	
                TransformGroup objTrans = new TransformGroup();
                objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                testGroup.addChild(objTrans);
	
                objTrans.addChild(new ColorCube(0.4));
	
          AxisAngle4f axisAngle = new AxisAngle4f(0.0f, 0.0f, 1.0f, 
                                                        -(float)Math.PI / 2.0f);
                Transform3D yAxis = new Transform3D();
                Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,
                                                0, 0,
                                                4000, 0, 0,
                                                0, 0, 0);
	
                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);
                objTrans.addChild(rotator);
	
    objRoot.compile();

                return objRoot;
        }

}

