diff src/samer/j3d/J3DViewerMorph.java.not @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/samer/j3d/J3DViewerMorph.java.not	Tue Jan 17 17:50:20 2012 +0000
@@ -0,0 +1,152 @@
+/*
+		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?	
+ */
+package samer.j3d;
+
+import samer.core.*;
+import samer.maths.*;
+import samer.tools.*;
+import java.io.*;
+import java.awt.event.*;
+import javax.media.j3d.*;
+import javax.vecmath.*;
+
+import java.util.Enumeration;
+
+public class J3DViewerMorph extends Util implements Agent
+{
+	Root			root=new Root();
+	Switch		switcher;
+	Morph			morph;
+	Viewer		V;
+	Matrix		P,P2;
+	Appearance	app=points(new Appearance());
+	Behavior		morpher;
+					
+	public J3DViewerMorph(VVector A) throws Exception
+	{		
+		Shell.print("creating PointsMatrix");
+
+		P=new Matrix("PointsMatrix",A.size(),3);
+		new MatrixAgent(P).execute("load",Shell.env());
+		P2=new Matrix("PointsMatrix2",A.size(),3);
+		new MatrixAgent(P2).execute("load",Shell.env());
+
+		// create scene
+		addBackground(root,new Background(new Color3f(0.26f,0.23f,0.35f)));
+
+		GeometryArray geoms[] = {
+			new MatrixPointArray(P2,A),
+			new MatrixPointArray(P,A)
+		};
+
+		morph=new Morph(geoms,app);
+		morph.setCapability(Morph.ALLOW_WEIGHTS_WRITE);
+		morpher=new MorphBehavior();
+		morpher.setSchedulingBounds(getBounds());
+
+		switcher=new Switch();
+		switcher.addChild(new Shape3D(geoms[1], app));
+		switcher.addChild(morph);
+		switcher.setCapability(Switch.ALLOW_SWITCH_WRITE);
+		switcher.setWhichChild(0);
+
+		// root.addChild(rotaterise(morph));
+		root.addChild(morpher);
+		root.addChild(rotaterise(switcher));
+
+		V=new Viewer("particles");
+	
+		root.addChild(V);
+		root.addChild(new FPS(200));
+		root.compile();
+		root.golive();
+
+		Shell.registerAgent(this);
+		Shell.exposeCommands(this);
+
+		V.V.startView();
+	}
+
+	public void getCommands(Agent.Registry r) { r.add("switch").add("morph"); }
+	public void execute(String cmd, Environment env) throws Exception
+	{
+		if (cmd.equals("switch")) { 
+			switcher.setWhichChild(X._int(env.datum(),0));
+		} else if (cmd.equals("morph")) {
+		}
+	}
+	
+	public Task getTask() { return V.V; }
+	
+	private static Group rotaterise(javax.media.j3d.Node n)
+	{
+		TransformGroup	tg = new TransformGroup();
+//		TransformGroup tg2=new TransformGroup();
+
+		mouseRotate(tg);
+		mouseTranslate(tg);
+		mouseZoom(tg);
+//		addRotator(tg,Shell.getInt("rotation.period",10000));
+		tg.addChild(n);
+		// tg.addChild(tg2);
+		return tg;
+	}
+
+	public class MorphBehavior extends Behavior 
+	{
+		private WakeupCriterion nextframe;
+		private WakeupCriterion trigger;
+		private	double t, weights[];
+
+		public MorphBehavior() {
+			trigger = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
+			nextframe = new WakeupOnElapsedFrames(1);
+			weights = new double[2];
+		}
+
+		public void initialize() { 
+			Shell.print("behavior init");
+			t=0; this.wakeupOn(trigger); 
+		}
+
+		public void processStimulus(Enumeration criteria)
+		{
+			if (criteria.nextElement().equals(trigger)){
+				Shell.print("morphing");
+
+				t=0;
+				weights[0]=1;
+				weights[1]=0;
+				morph.setWeights(weights);
+				wakeupOn(nextframe);
+
+			} else { 
+				t += 0.01; 
+				if (t < 1){
+
+					weights[0]=1-t;
+					weights[1]=t;
+					morph.setWeights(weights);
+					wakeupOn(nextframe);
+
+				} else { 
+					weights[0]=0;
+					weights[1]=1;
+					morph.setWeights(weights);
+
+					Shell.print("finished morphing");
+					wakeupOn(trigger);
+				}
+			}
+		}
+	}
+}
\ No newline at end of file