samer@0: package samer.j3d; samer@0: samer@0: import samer.core.types.*; samer@0: import samer.maths.*; samer@0: import java.util.*; samer@0: import javax.media.j3d.*; samer@0: import javax.vecmath.*; samer@0: samer@0: samer@0: public class PatchArray extends QuadArray implements Observer samer@0: { samer@0: int N; // number of patches samer@0: Matrix P; // positions and sizes of patches samer@0: VVector A; // scalar activations samer@0: VDouble K; // scaling factor for activations samer@0: VDouble L; // scaling factor for sizes samer@0: samer@0: float carray[]; // array for holding colours samer@0: samer@0: public PatchArray(Matrix points, VVector activities) samer@0: { samer@0: super(4*points.getRowDimension(), COORDINATES | COLOR_3); samer@0: samer@0: N=points.getRowDimension(); samer@0: P=points; samer@0: A=activities; samer@0: K=new VDouble("scale",1); samer@0: L=new VDouble("patch.size",1); samer@0: samer@0: carray=new float[4*3*N]; samer@0: samer@0: // set capabilities for subsequent updates samer@0: setCapability(ALLOW_COORDINATE_WRITE); samer@0: setCapability(ALLOW_COLOR_WRITE); samer@0: samer@0: updatePoints(); samer@0: updateActivities(); samer@0: samer@0: A.addObserver(this); samer@0: L.addObserver(new Observer () { samer@0: public void update(Observable o, Object a) { samer@0: updatePoints(); samer@0: } samer@0: }); samer@0: } samer@0: samer@0: samer@0: public void update(Observable o, Object a) samer@0: { samer@0: updateActivities(); samer@0: } samer@0: samer@0: private double quad[] = new double[12]; samer@0: samer@0: public void updatePoints() samer@0: { samer@0: // load points into point array samer@0: double [][] PA=P.getArray(); samer@0: double [] row; samer@0: double l=L.value; samer@0: int j=0; samer@0: samer@0: for (int i=0; i