[42] | 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 | ?>
|
---|