samer@1: /* samer@1: Viewer.java samer@1: samer@1: A View branch group containing a ViewPlatform samer@1: and associated View, Canvas etc. Creates a samer@1: window for itself. Can be added dynamically samer@1: to a live universe. samer@1: */ samer@1: samer@1: import samer.core.*; samer@1: import java.awt.event.*; samer@1: import java.awt.*; samer@1: import javax.media.j3d.*; samer@1: import javax.vecmath.*; samer@1: import com.sun.j3d.utils.behaviors.keyboard.*; samer@1: samer@1: import samer.core.Node; samer@1: samer@1: public class Viewer extends BranchGroup implements Agent samer@1: { samer@1: Node node; samer@1: Canvas3D canvas; samer@1: TransformGroup VT=new TransformGroup(); samer@1: View V=new View(); samer@1: Shell.Window win; samer@1: samer@1: public void lookFrom(Point3d eye, Vector3d up) samer@1: { samer@1: // view platform placement samer@1: Transform3D t=new Transform3D(); samer@1: t.lookAt(eye, new Point3d(0,0,0), up); samer@1: t.invert(); samer@1: VT.setTransform(t); samer@1: } samer@1: samer@1: public Viewer(String name) 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(util.getGraphicsConfiguration()); samer@1: samer@1: // view platform placement samer@1: ViewPlatform VP=new ViewPlatform(); samer@1: samer@1: lookFrom(new Point3d(0,1,6), new Vector3d(0,1,0)); samer@1: samer@1: if (Shell.getBoolean("keynav",false)) { samer@1: // !!! all key navigators seem to be slaved! samer@1: util.addKeyNavigator(VT,util.readwrite(VT)); samer@1: } samer@1: samer@1: VT.addChild(VP); samer@1: addChild(VT); samer@1: samer@1: // view itself samer@1: V.addCanvas3D(canvas); samer@1: V.setPhysicalBody(new PhysicalBody()); samer@1: V.setPhysicalEnvironment(new PhysicalEnvironment()); samer@1: V.attachViewPlatform(VP); samer@1: V.setWindowEyepointPolicy(View.RELATIVE_TO_WINDOW); samer@1: V.setWindowResizePolicy(View.VIRTUAL_WORLD); samer@1: //V.setLocalEyeLightingEnable(true); samer@1: //v.setWindowMovementPolicy(View.VIRTUAL_WORLD); samer@1: samer@1: setCapability(ALLOW_DETACH); samer@1: setCapability(ALLOW_CHILDREN_WRITE); samer@1: compile(); samer@1: Shell.pop(); samer@1: samer@1: win=Shell.getWindow(name); samer@1: win.container().setLayout(new BorderLayout()); 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: Shell.deregisterAgent(this); samer@1: win.dispose(); samer@1: detach(); 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")) { V.startView(); } // canvas.startRenderer(); } samer@1: else if (cmd.equals("stop")) { V.stopView(); } // canvas.stopRenderer(); } samer@1: } samer@1: }