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