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