-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dial.pde
106 lines (84 loc) · 2.24 KB
/
Dial.pde
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
class Dial {
PFont font = createFont("verdana", 12);
private int minValue = 0;
private int maxValue = 100;
private int division = 10;
private int radius = 100;
private int value = 50;
private Point center;
private Color backgroundColor = new Color(255);
private Color needleColor = new Color(255, 0, 0);
private Color borderColor = new Color(255, 0, 0);
private Color labelColor = new Color(255, 0, 0);
String label = "";
//
// Constructors
//
public Dial(String label, Point center) {
this(label, center, 100);
}
public Dial(String label, Point center, int radius) {
this.label = label;
this.center = center;
this.radius = radius;
}
//
// Getters & Setters
//
public void setMinValue(int minVal) {
this.minValue = minVal;
}
public int getMinValue() {
return this.minValue;
}
public void setMaxValue(int maxVal) {
this.maxValue = maxVal;
}
public int getMaxValue() {
return this.maxValue;
}
public void setValue(int val) {
this.value = val;
}
public int getValue() {
return this.value;
}
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}
public void setNeedleColor(Color needleColor) {
this.needleColor = needleColor;
}
public void setBorderColor(Color borderColor) {
this.borderColor = borderColor;
}
public void setLabelColor(Color labelColor) {
this.labelColor = labelColor;
}
//
// Instance Methods
//
public void draw() {
ellipseMode(RADIUS);
textFont(font);
// background
backgroundColor.makeFill();
borderColor.makeStroke();
strokeWeight(3);
ellipse(center.x, center.y, radius, radius);
// needle
needleColor.makeStroke();
strokeWeight(2);
float angle = value / (float)(maxValue-minValue) * 360.0 + 90;
float x = center.x + cos(radians(angle)) * (float)(radius/2.0);
float y = center.y + sin(radians(angle)) * (float)(radius/2.0);
line(center.x, center.y, x, y);
// center dot
fill(0);
noStroke();
ellipse(center.x, center.y, 4, 4);
// label
labelColor.makeFill();
text(label, center.x-textWidth(label)/2, center.y+radius+20);
}
}