// Why do I get a negative radius when I enquire about the bounds of the shape3D object in this
// simple test program?  Thanks for all the help.  Geometry consists of  triangular facets of a cube.
//                                                           Ram P Kochhar

//

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.GeometryInfo;
import com.sun.j3d.utils.geometry.Triangulator;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.BorderLayout;

public class test4 extends Applet
{
        Geometry    voGeometry;

        public test4() 
        {
                setLayout(new BorderLayout());
                Canvas3D   canv3D = new Canvas3D(null);
                add("Center", canv3D);

                voGeometry = createGeometry();
                BranchGroup scene = CreateSceneGraph(voGeometry);

                scene.compile();

                SimpleUniverse simpU=new SimpleUniverse(canv3D);

                simpU.getViewingPlatform().setNominalViewingTransform();

                simpU.addBranchGraph(scene);
        }


        public BranchGroup CreateSceneGraph(Geometry geom) 
        {
                BranchGroup objRoot = new BranchGroup();

                Shape3D shape = new Shape3D();
                shape.setCapability(shape.ALLOW_BOUNDS_READ);
                shape.setGeometry(geom);

                //BoundingSphere sceneBounds = (BoundingSphere) shape.getBounds();
                BoundingSphere sceneBounds = new BoundingSphere(shape.getBounds());

                System.out.println(" " + sceneBounds);
                Point3d center = new  Point3d();
                sceneBounds.getCenter(center);
                double radius = sceneBounds.getRadius();
                Vector3d temp = new Vector3d(center);

                //To draw polygon outline
                Appearance appearance = new Appearance();

                PolygonAttributes polyAttrib = new PolygonAttributes();
                polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
                polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
                appearance.setPolygonAttributes(polyAttrib);

                shape.setAppearance(appearance);

                Transform3D rotate = new Transform3D();
                Transform3D tempRotate = new Transform3D();

                rotate.rotX(Math.PI/4.0d);
                tempRotate.rotY(Math.PI/5.0d);

                rotate.mul(tempRotate);
                rotate.setScale(0.4);

                TransformGroup objRotate = new TransformGroup(rotate);

                objRoot.addChild(objRotate);

                objRotate.addChild(shape);

                return(objRoot);
        }

        public Geometry createGeometry() 
        {

                Point3f[]  coord = new Point3f[10];
                int[] stripCount ={3,3,4};

                coord[0] = new Point3f(0.0f,0.0f,0.0f);
                coord[1] = new Point3f(1.0f,0.0f,0.0f);
                coord[2] = new Point3f(1.0f,1.0f,0.0f);

                coord[3] = new Point3f(0.0f,0.0f,0.0f);
                coord[4] = new Point3f(1.0f,1.0f,0.0f);
                coord[5] = new Point3f(0.0f,0.0f,1.0f);

                coord[6] = new Point3f(0.0f,0.0f,0.0f);
                coord[7] = new Point3f(0.0f,0.0f,1.0f);
                coord[8] = new Point3f(1.0f,0.0f,1.0f);

                coord[9] = new Point3f(1.0f,0.0f,0.0f);

                TriangleFanArray tfa = new TriangleFanArray(10, TriangleFanArray.COORDINATES,stripCount);
                tfa.setCoordinates(0,coord);
                return(tfa);
        }

        public static void main(String[] args) 
        {
                Frame frame = new MainFrame(new test4(),500,500);
        }
}
