annotate examples/java3d/Viewer.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents 5df24c91468d
children
rev   line source
samer@1 1 /*
samer@1 2 Viewer.java
samer@1 3
samer@1 4 A View branch group containing a ViewPlatform
samer@1 5 and associated View, Canvas etc. Creates a
samer@1 6 window for itself. Can be added dynamically
samer@1 7 to a live universe.
samer@1 8 */
samer@1 9
samer@1 10 import samer.core.*;
samer@1 11 import java.awt.event.*;
samer@1 12 import java.awt.*;
samer@1 13 import javax.media.j3d.*;
samer@1 14 import javax.vecmath.*;
samer@1 15 import com.sun.j3d.utils.behaviors.keyboard.*;
samer@1 16
samer@1 17 import samer.core.Node;
samer@1 18
samer@1 19 public class Viewer extends BranchGroup implements Agent
samer@1 20 {
samer@1 21 Node node;
samer@1 22 Canvas3D canvas;
samer@1 23 TransformGroup VT=new TransformGroup();
samer@1 24 View V=new View();
samer@1 25 Shell.Window win;
samer@1 26
samer@1 27 public void lookFrom(Point3d eye, Vector3d up)
samer@1 28 {
samer@1 29 // view platform placement
samer@1 30 Transform3D t=new Transform3D();
samer@1 31 t.lookAt(eye, new Point3d(0,0,0), up);
samer@1 32 t.invert();
samer@1 33 VT.setTransform(t);
samer@1 34 }
samer@1 35
samer@1 36 public Viewer(String name)
samer@1 37 {
samer@1 38 node=new Node(name);
samer@1 39 Shell.push(node);
samer@1 40
samer@1 41 // create view bits
samer@1 42 canvas=new Canvas3D(util.getGraphicsConfiguration());
samer@1 43
samer@1 44 // view platform placement
samer@1 45 ViewPlatform VP=new ViewPlatform();
samer@1 46
samer@1 47 lookFrom(new Point3d(0,1,6), new Vector3d(0,1,0));
samer@1 48
samer@1 49 if (Shell.getBoolean("keynav",false)) {
samer@1 50 // !!! all key navigators seem to be slaved!
samer@1 51 util.addKeyNavigator(VT,util.readwrite(VT));
samer@1 52 }
samer@1 53
samer@1 54 VT.addChild(VP);
samer@1 55 addChild(VT);
samer@1 56
samer@1 57 // view itself
samer@1 58 V.addCanvas3D(canvas);
samer@1 59 V.setPhysicalBody(new PhysicalBody());
samer@1 60 V.setPhysicalEnvironment(new PhysicalEnvironment());
samer@1 61 V.attachViewPlatform(VP);
samer@1 62 V.setWindowEyepointPolicy(View.RELATIVE_TO_WINDOW);
samer@1 63 V.setWindowResizePolicy(View.VIRTUAL_WORLD);
samer@1 64 //V.setLocalEyeLightingEnable(true);
samer@1 65 //v.setWindowMovementPolicy(View.VIRTUAL_WORLD);
samer@1 66
samer@1 67 setCapability(ALLOW_DETACH);
samer@1 68 setCapability(ALLOW_CHILDREN_WRITE);
samer@1 69 compile();
samer@1 70 Shell.pop();
samer@1 71
samer@1 72 win=Shell.getWindow(name);
samer@1 73 win.container().setLayout(new BorderLayout());
samer@1 74 win.container().add(canvas);
samer@1 75 win.expose();
samer@1 76 win.addWindowListener(new WindowAdapter() {
samer@1 77 public void windowClosing(WindowEvent e) { dispose(); }
samer@1 78 });
samer@1 79
samer@1 80 Shell.registerAgent(this);
samer@1 81 }
samer@1 82
samer@1 83 public void dispose()
samer@1 84 {
samer@1 85 Shell.deregisterAgent(this);
samer@1 86 win.dispose();
samer@1 87 detach();
samer@1 88 }
samer@1 89
samer@1 90 protected void finalize() { Shell.trace("finalizing view "+this); }
samer@1 91
samer@1 92 public void getCommands(Agent.Registry r) { r.add("start").add("stop"); }
samer@1 93 public void execute(String cmd, Environment env) {
samer@1 94 if (cmd.equals("start")) { V.startView(); } // canvas.startRenderer(); }
samer@1 95 else if (cmd.equals("stop")) { V.stopView(); } // canvas.stopRenderer(); }
samer@1 96 }
samer@1 97 }