view examples/java3d/hello11.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 source
/*
		hello6.java

		Construct universe without using SimpleUniverse 
		utility class - this puts together the view
		group explicitly.

		Now has dynamically creatable views.
		Have to construct views on BranchGroups so they
		can be added while universe is live?	

		immediate mode
 */

import samer.core.*;
import samer.core.types.*;
import samer.tools.*;

import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class hello11 extends util implements Agent
{
	// create universe
	LocalUniverse	U=new LocalUniverse();
	BranchGroup		root=new BranchGroup();
	TaskThread		tasks=new TaskThread();
	Geometry		geom;
	Appearance		app;
				
	public static void main(String[] arse) { 
		init(); new hello11(); 
		Shell.interpret("expose");
	}

	public hello11()
	{		
		// create scene
		geom = yoyoGeometryInfo(128).getGeometryArray();
		app  = pointy2();

		root.addChild(new TransformGroup());
		root.addChild(new view("view"));
		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"); }

	public void execute(String cmd, Environment env) throws Exception
	{
		if (cmd.equals("view")) { 
			root.addChild(new view(X.string(env.datum("name"),"view")));
		}
	}


	private class view extends Viewer implements Task
	{
		GraphicsContext3D	gc;
		float				angle=0;
		Transform3D			mt=new Transform3D();
		VDouble				speed;

		public view(String name)
		{
			super( name); // great mate
			// lookFrom(new Point3d(0,0,8),new Vector3d(0,1,0));
			canvas.stopRenderer();
			tasks.addTask(this);

			Shell.push(node);
			speed=new VDouble("speed",0.1);
			Shell.pop();
		}

		public void run()
		{
			mt.rotY(angle+=speed.value);
			gc.clear();
			gc.setModelTransform(mt);
			gc.draw(geom);
			canvas.swap();
		}

		public void dispose() {
			tasks.removeTask(this);
			super.dispose();
		}

		public void stopping() { Shell.print("view stopping"); }
		public void starting() { 
			Shell.print("view starting"); 
		    if (gc==null) gc = canvas.getGraphicsContext3D();
		    gc.setAppearance(app);
		}
	}
}