view src/samer/j3d/Points3DAlpha.java @ 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.core.util.*;
import samer.maths.*;
import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;


public class Points3DAlpha extends PointArray implements Observer
{
	int				N;	// number of points
	Matrix		P;	// 3d positions of points
	VVector		A;	// scalar activations
	VMap			map; // from activity to intensity
//	VDouble	K;  // scaling factor for activations

	float		carray[];	// array for holding colours
//	Color3f		carray[];

	public Points3DAlpha(Matrix points, VVector activities)
	{
		super(points.getRowDimension(), COORDINATES | COLOR_4);

		N=points.getRowDimension();
		P=points;
		A=activities;
//		K=new VDouble("scale",1.0);
		map=new VMap(new LinearMap());	
		Shell.registerViewable(map);

		carray=new float[4*N];

		// set capabilities for subsequent updates
		setCapability(ALLOW_COORDINATE_WRITE);
		setCapability(ALLOW_COLOR_WRITE);

		{
			double [] a=A.array();
			for (int i=0; i<N; i++) {
				a[i]=1;
				carray[4*i]=1;
				carray[4*i+1]=1;
				carray[4*i+2]=1;
			}
		}

		updatePoints();
		updateActivities();

		A.addObserver(this);
		P.addObserver(new Observer () {
			public void update(Observable o, Object a) {
				updatePoints();
			}
		});
	}


	public void update(Observable o, Object a)
	{
		updateActivities();
	}

	public void updatePoints()
	{
		// load points into point array
		double [][] PA=P.getArray();
		double []	row;
		for (int i=0; i<N; i++) {
			row=PA[i];
			setCoordinate(i,row);
		}
	}

	public void updateActivities()
	{
		// load colours
		double [] a=A.array();
		IMap		imap=map.getMap();
//		double	  k=K.value;

		for (int i=0, j=3; i<N; i++,j+=4) {
//			float ai=(float)(a[i]*k);
			float ai=(float)(imap.map(a[i]));
			carray[j]=ai;
		}
		setColors(0,carray);
	}
}