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