|
1
|
|
|
<?php // content="text/plain; charset=utf-8" |
|
2
|
|
|
require_once('../jpgraph.php'); |
|
3
|
|
|
require_once('../jpgraph_canvas.php'); |
|
4
|
|
|
require_once('../jpgraph_colormap.inc.php'); |
|
5
|
|
|
|
|
6
|
|
|
class ColorMapDriver |
|
7
|
|
|
{ |
|
8
|
|
|
const WIDTH = 600; // Image width |
|
9
|
|
|
const LMARG = 90; // Left margin |
|
10
|
|
|
const RMARG = 25; // Right margin |
|
11
|
|
|
const MAPMARG = 35; // Map margin between each map |
|
12
|
|
|
const MODHEIGHT = 30; // Module height (=Map height) |
|
13
|
|
|
const YSTART = 60; // Start coordinate for map list |
|
14
|
|
|
|
|
15
|
|
|
public function Draw($aTitle, $aStart, $aEnd, $n=64, $aReverse=false, $addColorNames = false) |
|
16
|
|
|
{ |
|
17
|
|
|
|
|
18
|
|
|
// Setup to draw colormap with names platoe colors |
|
19
|
|
|
$lmarg = ColorMapDriver::LMARG; // left margin |
|
20
|
|
|
$rmarg = ColorMapDriver::RMARG; // right margin |
|
21
|
|
|
$width = ColorMapDriver::WIDTH; // Overall image width |
|
22
|
|
|
|
|
23
|
|
|
// Module height |
|
24
|
|
|
$mh = ColorMapDriver::MODHEIGHT; |
|
25
|
|
|
|
|
26
|
|
|
// Step between each map |
|
27
|
|
|
$ymarg = $mh + ColorMapDriver::MAPMARG; |
|
28
|
|
|
|
|
29
|
|
|
if ($addColorNames) { |
|
30
|
|
|
$ymarg += 50; |
|
31
|
|
|
} |
|
32
|
|
|
|
|
33
|
|
|
// Start position |
|
34
|
|
|
$xs=$lmarg; |
|
35
|
|
|
$ys=ColorMapDriver::YSTART; |
|
36
|
|
|
|
|
37
|
|
|
// Setup a basic canvas graph |
|
38
|
|
|
$height = ($aEnd - $aStart + 1) * $ymarg + 50; |
|
39
|
|
|
$graph = new CanvasGraph($width, $height); |
|
40
|
|
|
$graph->img->SetColor('darkgray'); |
|
41
|
|
|
$graph->img->Rectangle(0, 0, $width - 1, $height - 1); |
|
42
|
|
|
|
|
43
|
|
|
$t = new Text($aTitle, $width / 2, 5); |
|
44
|
|
|
$t->SetAlign('center', 'top'); |
|
45
|
|
|
$t->SetFont(FF_ARIAL, FS_BOLD, 14); |
|
46
|
|
|
$t->Stroke($graph->img); |
|
47
|
|
|
|
|
48
|
|
|
// Instantiate a colormap |
|
49
|
|
|
$cm = new ColorMap(); |
|
50
|
|
|
$cm->InitRGB($graph->img->rgb); |
|
51
|
|
|
|
|
52
|
|
|
for ($mapidx=$aStart; $mapidx <= $aEnd; ++$mapidx, $ys += $ymarg) { |
|
53
|
|
|
$cm->SetMap($mapidx, $aReverse); |
|
54
|
|
|
$n = $cm->SetNumColors($n); |
|
55
|
|
|
list($mapidx, $maparray) = $cm->GetCurrMap(); |
|
56
|
|
|
$ncols = count($maparray); |
|
57
|
|
|
$colbuckets = $cm->GetBuckets(); |
|
58
|
|
|
|
|
59
|
|
|
// The module width will depend on the actual number of colors |
|
60
|
|
|
$mw = round(($width - $lmarg - $rmarg) / $n); |
|
61
|
|
|
|
|
62
|
|
|
// Draw color map title (name) |
|
63
|
|
|
$t->Set('Basic colors: '.$ncols.', Total colors: '.$n); |
|
64
|
|
|
$t->SetAlign('center', 'bottom'); |
|
65
|
|
|
$t->SetAngle(0); |
|
66
|
|
|
$t->SetFont(FF_TIMES, FS_NORMAL, 14); |
|
67
|
|
|
$t->Stroke($graph->img, $width / 2, $ys - 3); |
|
68
|
|
|
|
|
69
|
|
|
// Add the name/number of the map to the left |
|
70
|
|
|
$t->SetAlign('right', 'center'); |
|
71
|
|
|
$t->Set('Map: '.$mapidx); |
|
72
|
|
|
$t->SetFont(FF_ARIAL, FS_NORMAL, 14); |
|
73
|
|
|
$t->Stroke($graph->img, $xs - 20, round($ys + $mh / 2)); |
|
74
|
|
|
|
|
75
|
|
|
// Setup text properties for the color names |
|
76
|
|
|
if ($addColorNames) { |
|
77
|
|
|
$t->SetAngle(30); |
|
78
|
|
|
$t->SetFont(FF_ARIAL, FS_NORMAL, 12); |
|
79
|
|
|
$t->SetAlign('right', 'top'); |
|
80
|
|
|
} |
|
81
|
|
|
|
|
82
|
|
|
// Loop through all colors in the map |
|
83
|
|
|
$x = $xs; |
|
84
|
|
|
$y = $ys; |
|
85
|
|
|
$k=0; |
|
86
|
|
|
for ($i=0; $i < $n; ++$i) { |
|
87
|
|
|
$graph->img->SetColor($colbuckets[$i]); |
|
88
|
|
|
$graph->img->FilledRectangle($x, $y, $x + $mw, $y + $mh); |
|
89
|
|
|
|
|
90
|
|
|
// Mark all basic colors in the map with a bar and name |
|
91
|
|
|
if ($i % (($n - $ncols) / ($ncols - 1) + 1) == 0) { |
|
92
|
|
|
$graph->img->SetColor('black'); |
|
93
|
|
|
$graph->img->FilledRectangle($x, $y + $mh + 4, $x + $mw - 1, $y + $mh + 6); |
|
94
|
|
|
if ($addColorNames) { |
|
95
|
|
|
$t->Set($maparray[$k++]); |
|
96
|
|
|
$t->Stroke($graph->img, $x + $mw / 2, $y + $mh + 10); |
|
97
|
|
|
} |
|
98
|
|
|
} |
|
99
|
|
|
$x += $mw; |
|
100
|
|
|
} |
|
101
|
|
|
|
|
102
|
|
|
// Draw a border around the map |
|
103
|
|
|
$graph->img->SetColor('black'); |
|
104
|
|
|
$graph->img->Rectangle($xs, $ys, $xs + $mw * $n, $ys + $mh); |
|
105
|
|
|
} |
|
106
|
|
|
|
|
107
|
|
|
// Send back to client |
|
108
|
|
|
$graph->Stroke(); |
|
109
|
|
|
} |
|
110
|
|
|
} |
|
111
|
|
|
|
|
112
|
|
|
$driver = new ColorMapDriver(); |
|
113
|
|
|
|
|
114
|
|
|
$title = "Standard maps"; |
|
115
|
|
|
$reverse = false; |
|
116
|
|
|
$n = 64; $s =0; $e =9; |
|
117
|
|
|
$showNames = false; |
|
118
|
|
|
|
|
119
|
|
|
|
|
120
|
|
|
/* |
|
121
|
|
|
$title = "Center maps"; |
|
122
|
|
|
$reverse = false; |
|
123
|
|
|
$n = 64; $s=10; $e=14; |
|
124
|
|
|
$showNames = false; |
|
125
|
|
|
*/ |
|
126
|
|
|
|
|
127
|
|
|
/* |
|
128
|
|
|
$title = "Continues maps"; |
|
129
|
|
|
$reverse = false; |
|
130
|
|
|
$n = 64; $s=15; $e=21; |
|
131
|
|
|
$showNames = false; |
|
132
|
|
|
*/ |
|
133
|
|
|
$driver->Draw($title, $s, $e, $n, $reverse, $showNames); |
|
134
|
|
|
|