view src/samer/j3d/J3DViewerImmediate.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 source
/*
*/
package samer.j3d;

import samer.core.*;
import samer.core.types.*;
import samer.maths.*;
import samer.tools.*;
import java.io.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class J3DViewerImmediate extends Util implements Task
{
	Root			root=new Root();
	Background	bg;
	Geometry		geom;
	Appearance	app;
	Viewer		V;

	TaskList		tasks;
	VDouble		speed, scale;
	GraphicsContext3D	gc;
	Transform3D		mt=new Transform3D();
	Canvas3D			canvas;
	float				angle=0;
				
	public J3DViewerImmediate(Matrix P, VVector A) throws Exception
	{		
		if (P==null) {
			Shell.print("creating PointsMatrix");
			P=new Matrix("PointsMatrix",A.size(),3);
			new MatrixAgent(P).execute("load",Shell.env());
		}
		// create scene
		bg=new Background(new Color3f(0.26f,0.23f,0.35f));
		// geom=new MatrixPointArrayAlpha(P,A);
		// app=transparent(0,points(new Appearance()));
		geom= // new MatrixPointArray(P,A);
				new MatrixPoints4D(P,A); 
		app=transparent(0,points());
		V=new Viewer("particles");
		// remember to stop canvas renderers
	
	
		root.addChild(V);
		root.compile();
		root.golive();

		// Shell.registerAgent(this);
		// Shell.exposeCommands(this);


		Shell.push(V.node);
		speed=new VDouble("speed",0.1);
		scale=new VDouble("scale",1);
		Shell.pop();

		canvas=V.V.canvas;
		canvas.stopRenderer();

		tasks=(TaskList)Shell.get("taskList");
		tasks.addTask(this);
	}

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

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

	public void dispose()
	{
		// Shell.deregisterAgent(this);
		tasks.removeTask(this);
		V.dispose();
	}
}