Mercurial > hg > jslab
view src/samer/j3d/ViewBase.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/** ViewGroup.java A View branch group containing a ViewPlatform and associated Views, Canvas3Ds and Windows to hold the canvases. Can be added dynamically to a live universe. Parameters: initial placement autostart canvas? autostart view? keyboard navigator? various view policies Requirements: must be placable (hence TransformGroup and ViewPlatform) must be Node so addable to universe renderable: view.renderOnce() view.startView() view.stopView() canvas.startRenderer() canvas.stopRenderer() ... ? disposable: cleans up properly must have accessible View and Canvas objects must manage multiple canvases for stereo */ package samer.j3d; import samer.core.*; import samer.tools.*; import java.awt.*; import java.awt.event.*; import javax.media.j3d.*; import javax.vecmath.*; public class ViewBase extends javax.media.j3d.View implements Agent, WindowListener, Task { public ViewBase() { stopView(); // seems be started during constructor PhysicalBody body=new PhysicalBody(); PhysicalEnvironment env=new PhysicalEnvironment(); double d=Shell.getDouble("eyeSeparation",0.01); // units?? body.setLeftEyePosition(new Point3d(-d,0,0)); body.setRightEyePosition(new Point3d(d,0,0)); body.setNominalEyeHeightFromGround(0); // canvas.getStereoAvailable() // canvas.setStereoEnable // queryProperties setPhysicalBody(body); setPhysicalEnvironment(env); setWindowEyepointPolicy(View.RELATIVE_TO_WINDOW); //setWindowResizePolicy(View.VIRTUAL_WORLD); //setLocalEyeLightingEnable(true); //setWindowMovementPolicy(View.VIRTUAL_WORLD); setFrontClipDistance(Shell.getDouble("front",0.5)); setBackClipDistance(Shell.getDouble("back",20)); setDepthBufferFreezeTransparent(true); // Shell.registerAgent(this); } public Canvas3D createCanvas() { GraphicsConfigTemplate tmp=new GraphicsConfigTemplate3D(); Shell.trace("Graphics configuration template: "+tmp); Canvas3D canvas=new Canvas3D( GraphicsEnvironment.getLocalGraphicsEnvironment(). getDefaultScreenDevice().getBestConfiguration(tmp)); addCanvas3D(canvas); return canvas; } public Shell.Window createWindow(Canvas3D canvas, String name) { Shell.Window w=Shell.getWindow(name); w.container().setLayout(new java.awt.BorderLayout()); w.container().add(canvas); w.addWindowListener(this); w.expose(); // expose commands for agent return w; } public void dispose() { stopView(); // Shell.deregisterAgent(this); } public void getCommands(Agent.Registry r) { r.add("start").add("stop").add("render"); } public void execute(String cmd, Environment env) throws Exception { if (cmd.equals("render")) renderOnce(); else if (cmd.equals("start")) { Shell.trace("view staring"); startView(); } else if (cmd.equals("stop")) { Shell.trace("view stopping"); stopView(); } } public void starting() {} public void stopping() {} public void run() { if (!isViewRunning()) renderOnce(); } public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { dispose(); } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} }