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 } |