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