-
Notifications
You must be signed in to change notification settings - Fork 0
/
LEDMatrixElm.java
119 lines (109 loc) · 3.13 KB
/
LEDMatrixElm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import java.awt.*;
import java.util.StringTokenizer;
class LEDMatrixElm extends ChipElm {
private static final int size=8;
private static final double resistance=100;
public LEDMatrixElm(int xx, int yy) { super(xx, yy); }
public LEDMatrixElm(int xa, int ya, int xb, int yb, int f,
StringTokenizer st) {
super(xa, ya, xb, yb, f, st);
negateRows=new Boolean(st.nextToken()).booleanValue();
negateColumns=new Boolean(st.nextToken()).booleanValue();
colorR=new Double(st.nextToken()).doubleValue();
colorG=new Double(st.nextToken()).doubleValue();
colorB=new Double(st.nextToken()).doubleValue();
}
private boolean negateRows=false;
private boolean negateColumns=false;
private double colorR=1.0;
private double colorG=0.0;
private double colorB=0.0;
String getChipName() { return "LED Matrix"; }
void setupPins() {
sizeX = 8;
sizeY = 8;
pins = new Pin[16];
pins[0] = new Pin(0, SIDE_W, "");
pins[1] = new Pin(1, SIDE_W, "");
pins[2] = new Pin(2, SIDE_W, "");
pins[3] = new Pin(3, SIDE_W, "");
pins[4] = new Pin(4, SIDE_W, "");
pins[5] = new Pin(5, SIDE_W, "");
pins[6] = new Pin(6, SIDE_W, "");
pins[7] = new Pin(7, SIDE_W, "");
pins[8] = new Pin(0, SIDE_S, "");
pins[9] = new Pin(1, SIDE_S, "");
pins[10] =new Pin(2, SIDE_S, "");
pins[11] =new Pin(3, SIDE_S, "");
pins[12] =new Pin(4, SIDE_S, "");
pins[13] =new Pin(5, SIDE_S, "");
pins[14] =new Pin(6, SIDE_S, "");
pins[15] =new Pin(7, SIDE_S, "");
}
void draw(Graphics g){
drawChip(g);
Color color=new Color((int)(colorR*255),(int)(colorG*255),(int)(colorB*255));
for(int col=0;col<size;col++)
for(int row=0;row<size;row++)
{
int centreX=x+2*(col+1)*cspc;
int centreY=y+2*row*cspc;
int radius=cspc/2;
if((negateRows^pins[row].value)&&(negateColumns^pins[col+8].value))
{
g.setColor(color);
g.fillOval(centreX-radius,centreY-radius,radius*2,radius*2);
}
g.setColor(Color.gray);
radius=(3*cspc)/4;
drawThickCircle(g,centreX,centreY,radius);
}
}
public EditInfo getEditInfo(int n){
if (n == 2)
{
EditInfo ei=new EditInfo("",0,-1,-1);
ei.checkbox=new Checkbox("Negate rows",negateRows);
return ei;
}
if (n == 3)
{
EditInfo ei=new EditInfo("",0,-1,-1);
ei.checkbox=new Checkbox("Negate columns",negateColumns);
return ei;
}
if(n==4)
{
return new EditInfo("Red Value (0-1)",colorR,0,1).setDimensionless();
}
if(n==5)
{
return new EditInfo("Green Value (0-1)",colorG,0,1).setDimensionless();
}
if(n==6)
{
return new EditInfo("Blue Value (0-1)",colorB,0,1).setDimensionless();
}
return super.getEditInfo(n);
}
public void setEditValue(int n, EditInfo ei) {
super.setEditValue(n,ei);
if (n == 2)
negateRows=ei.checkbox.getState();
if (n == 3)
negateColumns=ei.checkbox.getState();
if (n == 4)
colorR=ei.value;
if(n == 5)
colorG=ei.value;
if(n == 6)
colorB=ei.value;
}
int getPostCount() {return 16;}
int getVoltageSourceCount() { return 0; }
int getDumpType() { return 207;}
String dump()
{
return super.dump() + " "+negateRows+" "+negateColumns+" "+colorR+" "+colorG+" "+colorB;
}
}