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 }
|