samer@1: /* samer@1: hello7.java samer@1: samer@1: Construct universe without using SimpleUniverse samer@1: utility class - this puts together the view samer@1: group explicitly. samer@1: samer@1: Now has dynamically creatable views all on the same samer@1: view platform. Left and right eye views available! samer@1: */ samer@1: samer@1: import samer.core.*; samer@1: import java.awt.event.*; samer@1: import javax.media.j3d.*; samer@1: import javax.vecmath.*; samer@1: samer@1: import samer.core.Node; samer@1: samer@1: public class hello7 extends util implements Agent samer@1: { samer@1: // create universe samer@1: LocalUniverse U=new LocalUniverse(); samer@1: BranchGroup root=new BranchGroup(); samer@1: ViewPlatform VP=new ViewPlatform(); samer@1: samer@1: public static void main(String[] arse) { init(); new hello7(); } samer@1: samer@1: public hello7() samer@1: { samer@1: // create scene samer@1: root.addChild(createSceneGraph()); samer@1: // addBackground(root,new Background(0.1f,0.2f,0.15f)); samer@1: // addLights(root); samer@1: samer@1: { // view platform placement samer@1: TransformGroup VT=new TransformGroup(); samer@1: Transform3D t=new Transform3D(); samer@1: samer@1: t.lookAt(new Point3d(0,16,20), new Point3d(0,0,0),new Vector3d(0,1,0)); samer@1: t.invert(); samer@1: VT.setTransform(t); samer@1: samer@1: // !!! all key navigators seem to be slaved! samer@1: addKeyNavigator(VT,readwrite(VT)); samer@1: VT.addChild(VP); samer@1: root.addChild(VT); samer@1: } samer@1: // setCapability(ALLOW_DETACH); samer@1: // setCapability(ALLOW_CHILDREN_WRITE); samer@1: // compile(); samer@1: samer@1: samer@1: // add two Views on same platform samer@1: new view("left",VP); samer@1: new view("right",VP); samer@1: samer@1: // root.setCapability(Group.ALLOW_CHILDREN_EXTEND); samer@1: // root.setCapability(Group.ALLOW_CHILDREN_WRITE); samer@1: root.compile(); samer@1: samer@1: U.addGroup(root); samer@1: samer@1: Shell.registerAgent(this); samer@1: Shell.exposeCommands(this); samer@1: } samer@1: samer@1: public void getCommands(Agent.Registry r) { samer@1: r.add("view"); samer@1: r.setTarget(null); r.add("start").add("stop"); samer@1: } samer@1: samer@1: public void execute(String cmd, Environment env) throws Exception samer@1: { samer@1: if (cmd.equals("view")) { samer@1: new view(X.string(env.datum("name"),"view"),VP); samer@1: } samer@1: } samer@1: samer@1: private static TransformGroup createSceneGraph() samer@1: { samer@1: Transform3D r=new Transform3D(); samer@1: // r.rotX(Math.PI/2); samer@1: TransformGroup t2=new TransformGroup(r); samer@1: t2.addChild(yoyoGroup()); samer@1: samer@1: TransformGroup tg = new TransformGroup(); samer@1: addRotator(tg); samer@1: tg.addChild(t2); samer@1: return tg; samer@1: } samer@1: samer@1: public class view extends View implements Agent samer@1: { samer@1: Node node; samer@1: Canvas3D canvas; samer@1: Shell.Window win; samer@1: samer@1: public view(String name, ViewPlatform VP) samer@1: { samer@1: node = new Node(name); samer@1: Shell.push(node); samer@1: samer@1: // create view bits samer@1: canvas=new Canvas3D(getGraphicsConfiguration()); samer@1: //if (name.equals("left")) canvas.setMonoscopicViewPolicy(Canvas3D.LEFT_EYE); samer@1: //else if (name.equals("right")) canvas.setMonoscopicViewPolicy(Canvas3D.RIGHT_EYE); samer@1: samer@1: addCanvas3D(canvas); samer@1: setPhysicalBody(new PhysicalBody()); samer@1: setPhysicalEnvironment(new PhysicalEnvironment()); samer@1: setWindowEyepointPolicy(View.RELATIVE_TO_WINDOW); samer@1: //setWindowResizePolicy(View.VIRTUAL_WORLD); samer@1: setFrontClipDistance(Shell.getDouble("front",1)); samer@1: setBackClipDistance(Shell.getDouble("back",10)); samer@1: samer@1: if (name.equals("left")) setMonoscopicViewPolicy(LEFT_EYE_VIEW); samer@1: else if (name.equals("right")) setMonoscopicViewPolicy(RIGHT_EYE_VIEW); samer@1: samer@1: attachViewPlatform(VP); samer@1: samer@1: Shell.pop(); samer@1: samer@1: win=Shell.getWindow(name); samer@1: win.container().add(canvas); samer@1: win.expose(); samer@1: win.addWindowListener(new WindowAdapter() { samer@1: public void windowClosing(WindowEvent e) { dispose(); } samer@1: }); samer@1: samer@1: Shell.registerAgent(this); samer@1: } samer@1: samer@1: public void dispose() samer@1: { samer@1: // stopView(); samer@1: Shell.deregisterAgent(this); samer@1: win.dispose(); samer@1: } samer@1: samer@1: protected void finalize() { Shell.trace("finalizing view "+this); } samer@1: samer@1: public void getCommands(Agent.Registry r) { r.add("start").add("stop"); } samer@1: public void execute(String cmd, Environment env) { samer@1: if (cmd.equals("start")) { startView(); } samer@1: else if (cmd.equals("stop")) { stopView(); } samer@1: } samer@1: } samer@1: }