annotate src/samer/mds/MatrixPointViewer2.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 package samer.mds;
samer@0 2
samer@0 3 import samer.core.*;
samer@0 4 import samer.core.types.*;
samer@0 5 import samer.core.util.*;
samer@0 6 import samer.maths.*;
samer@0 7 import samer.tools.*;
samer@0 8 import java.util.*;
samer@0 9 import java.awt.*;
samer@0 10
samer@0 11 public class MatrixPointViewer2 extends samer.core.util.swing.VCanvas implements Task, Observer, Agent
samer@0 12 {
samer@0 13 Matrix P; // point positions
samer@0 14 Vec x; // point activities
samer@0 15 int N;
samer@0 16 int k1, k2;
samer@0 17 Color[] clut;
samer@0 18 VMap xmap, ymap, cmap;
samer@0 19 VInteger markerSize;
samer@0 20 int[] ix, iy;
samer@0 21
samer@0 22 public MatrixPointViewer2(Matrix P, Vec x) {
samer@0 23 this.P=P;
samer@0 24 this.x=x;
samer@0 25 N=P.getRowDimension();
samer@0 26 k1=0; k2=1;
samer@0 27
samer@0 28 // ColorRamp cramp=new ColorRamp(256);
samer@0 29 // cramp.set(0,Color.black);
samer@0 30 // cramp.gradientTo(255,Color.white);
samer@0 31 clut=new Color[256];
samer@0 32 for (int i=0; i<256; i++) clut[i]=new Color(255,255,255,i);
samer@0 33
samer@0 34 ix = new int[N];
samer@0 35 iy = new int[N];
samer@0 36
samer@0 37 markerSize=new VInteger("markerSize",4);
samer@0 38 cmap=new VMap(new LinearMap(256),new Node("cmap"));
samer@0 39 xmap=new VMap(new LinearMap(256),new Node("xmap"));
samer@0 40 ymap=new VMap(new LinearMap(256),new Node("ymap"));
samer@0 41 exposeCommands(this);
samer@0 42
samer@0 43 P.viewable().addObserver(this);
samer@0 44 xmap.addObserver(this);
samer@0 45 ymap.addObserver(this);
samer@0 46 }
samer@0 47
samer@0 48 public void sized() {
samer@0 49 xmap.getMap().setIntRange(width);
samer@0 50 ymap.getMap().setIntRange(height);
samer@0 51 update(null,null);
samer@0 52 }
samer@0 53
samer@0 54 public void attach() { P.viewable().addObserver(this); }
samer@0 55 public void detach() {
samer@0 56 P.viewable().deleteObserver(this);
samer@0 57 xmap.dispose();
samer@0 58 ymap.dispose();
samer@0 59 cmap.dispose();
samer@0 60 markerSize.dispose();
samer@0 61 }
samer@0 62
samer@0 63 public void rotate() {
samer@0 64 k2++;
samer@0 65 if (k2>=P.getColumnDimension()) {
samer@0 66 k2=0; k1++;
samer@0 67 if (k1>=P.getColumnDimension()) k1=0;
samer@0 68 }
samer@0 69 if (k2==k1) rotate();
samer@0 70 }
samer@0 71
samer@0 72 public void starting() {}
samer@0 73 public void stopping() {}
samer@0 74 public void run() { repaint(); }
samer@0 75 public void dispose() { detach(); }
samer@0 76
samer@0 77 public void update(Observable o, Object a)
samer@0 78 {
samer@0 79 double [][] p=P.getArray();
samer@0 80 IMap xm=xmap.getMap();
samer@0 81 IMap ym=ymap.getMap();
samer@0 82
samer@0 83 for (int i=0; i<N; i++) {
samer@0 84 double r[]=p[i];
samer@0 85 ix[i]=xm.toInt(r[k1]);
samer@0 86 iy[i]=ym.toInt(r[k2]);
samer@0 87 }
samer@0 88 repaint();
samer@0 89 }
samer@0 90
samer@0 91 public void paint(Graphics g) {
samer@0 92 double [] a=x.array();
samer@0 93 IMap cm=cmap.getMap();
samer@0 94 int b=markerSize.value;
samer@0 95
samer@0 96 clear(g);
samer@0 97 for (int i=0; i<N; i++) {
samer@0 98 g.setColor(clut[cm.clipInt(a[i])]);
samer@0 99 g.fillRect(ix[i],iy[i],b,b);
samer@0 100 }
samer@0 101 }
samer@0 102
samer@0 103 public void getCommands(Registry r) {
samer@0 104 r.add("rotate").add("x-map").add("y-map").add("c-map");
samer@0 105 }
samer@0 106 public void execute(String cmd, Environment env)
samer@0 107 {
samer@0 108 if (cmd.equals("rotate")) { rotate(); update(null,null); }
samer@0 109 else if (cmd.equals("x-map")) Shell.expose(xmap.getViewer(),"x-map");
samer@0 110 else if (cmd.equals("y-map")) Shell.expose(ymap.getViewer(),"y-map");
samer@0 111 else if (cmd.equals("c-map")) Shell.expose(cmap.getViewer(),"c-map");
samer@0 112 }
samer@0 113 }