import java.applet.Applet;
import java.awt.*;
import com.sun.j3d.utils.picking.PickTool;
import com.sun.j3d.utils.picking.behaviors.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.picking.*;
import java.util.Enumeration;
import javax.media.j3d.GeometryStripArray.*;
import java.awt.event.*;
import com.sun.j3d.utils.behaviors.picking.PickObject;
import com.sun.j3d.utils.picking.behaviors.PickMouseBehavior;
import java.util.*;
import java.awt.*;
import java.awt.Event;
import java.awt.AWTEvent;
import java.awt.event.MouseEvent;
import javax.vecmath.*;


public class test extends Applet 
{
public BranchGroup createSceneGraph(Canvas3D canvas) 
{

      BranchGroup objRoot = new BranchGroup();
      objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
      objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
      objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
      BoundingSphere bounds;
      bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);
      Vector3f ldir = new Vector3f(1.0F,1.0F,-1.0F);
      Color3f lcouldl = new Color3f(1.0F,1.0F,1.0F);
      DirectionalLight dl = new DirectionalLight(lcouldl,ldir);
      dl.setInfluencingBounds(bounds);
      objRoot.addChild(dl);
      Color3f lcoulal = new Color3f(0.3F,0.3F,0.1F);
      AmbientLight al = new AmbientLight(lcoulal);
      al.setInfluencingBounds(bounds);
      objRoot.addChild(al);
      
      TransformGroup objTran1= new TransformGroup();
      objTran1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
      objTran1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
      objTran1.setCapability(Group.ALLOW_CHILDREN_EXTEND);
      objTran1.setCapability(Group.ALLOW_CHILDREN_READ);
      objTran1.setCapability(Group.ALLOW_CHILDREN_WRITE);
      objRoot.addChild(objTran1);
 
      TransformGroup objTran= new TransformGroup();
      objTran.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
      objTran.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
      objTran.setCapability(Group.ALLOW_CHILDREN_EXTEND);
      objTran.setCapability(Group.ALLOW_CHILDREN_READ);
      objTran.setCapability(Group.ALLOW_CHILDREN_WRITE);
      objRoot.addChild(objTran);

      BranchGroup bg4 = new BranchGroup();
      bg4.setCapability(BranchGroup.ALLOW_DETACH);
      bg4.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
      bg4.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
      bg4.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
      bg4.setCapability(BranchGroup.ENABLE_PICK_REPORTING);
      TransformGroup objTrans4 = new TransformGroup();
      Transform3D t4 = new Transform3D();
      t4.setTranslation(new Vector3d(0.7,0.0,0.0)) ;
      objTrans4.setTransform(t4);
      objTrans4.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
      objTrans4.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
      objTrans4.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
      Appearance a4 = new Appearance();
      Material m4 = new Material();
      m4.setDiffuseColor(0.9f,0.8f,0.4f);
      m4.setAmbientColor(0.6f,0.0f,0.6f);
      a4.setMaterial(m4);
Box b = new Box(0.05F,0.13F,0.22F,Box.GENERATE_NORMALS|Box.ENABLE_GEOMETRY_PICKING,a4);
      b.setCapability(Geometry.ALLOW_INTERSECT);
      Shape3D shape1,shape2,shape3,shape4,shape5,shape6;
      shape1 = b.getShape(0);
      shape2 = b.getShape(1);
	shape3 = b.getShape(2);
	shape4 = b.getShape(3);
	shape5 = b.getShape(4);
	shape6 = b.getShape(5);

      objTran.addChild(bg4);
      Group gp4=new Group();
      bg4.addChild(objTrans4);
      objTrans4.addChild(gp4);
      gp4.addChild(b);
      
      /*gp4.addChild(shape1);
 	gp4.addChild(shape1);
      gp4.addChild(shape2);
	gp4.addChild(shape3);
	gp4.addChild(shape4);
	gp4.addChild(shape5);
	gp4.addChild(shape6);*/
      
    MouseRotate behavior2 = new MouseRotate(objTran);
    MouseTranslate behavior3 = new MouseTranslate(objTran);
    objTran.addChild(behavior2);
    objTran.addChild(behavior3);
    behavior2.setSchedulingBounds(bounds);
    behavior3.setSchedulingBounds(bounds);

    objRoot.compile();
    return objRoot;
    }
 
 public test() 
{
    setLayout(new BorderLayout());
    GraphicsConfiguration config;
    config = SimpleUniverse.getPreferredConfiguration();
    Canvas3D c = new Canvas3D(config);
    add("Center",c);
    SimpleUniverse u = new SimpleUniverse(c);
    BranchGroup scene = createSceneGraph(c);
    u.getViewingPlatform().setNominalViewingTransform();
    u.addBranchGraph(scene);
}

  public static void main(String[] args) 
{
    new MainFrame(new test(),600,150);
}
}