Third progress with the dashboards (first version)
This commit is contained in:
@@ -1,194 +0,0 @@
|
||||
<?php
|
||||
class pmGauge {
|
||||
/**
|
||||
width
|
||||
*/
|
||||
var $w = 610;
|
||||
|
||||
/**
|
||||
height
|
||||
*/
|
||||
var $h = 300;
|
||||
|
||||
/**
|
||||
value of gauge
|
||||
*/
|
||||
var $value = 50;
|
||||
|
||||
/**
|
||||
maxValue
|
||||
*/
|
||||
var $maxValue = 100;
|
||||
|
||||
/**
|
||||
redFrom
|
||||
*/
|
||||
var $redFrom = 80;
|
||||
|
||||
/**
|
||||
redTo
|
||||
*/
|
||||
var $redTo = 100;
|
||||
|
||||
/**
|
||||
yellowFrom
|
||||
*/
|
||||
var $yellowFrom = 60;
|
||||
|
||||
/**
|
||||
yellowTo
|
||||
*/
|
||||
var $yellowTo = 80;
|
||||
|
||||
function render () {
|
||||
$this->h = $this->w / 2;
|
||||
$im = imagecreatetruecolor($this->w, $this->h);
|
||||
$width = $this->w;
|
||||
$height = $this->h;
|
||||
$center_x = intval($width / 2);
|
||||
$center_y = intval($height / 2);
|
||||
|
||||
//gauge color
|
||||
$bgcolor = ImageColorAllocate($im, 247, 247, 247);
|
||||
$extRing = ImageColorAllocate($im, 214, 214, 214);
|
||||
$blueRing = ImageColorAllocate($im, 70, 132, 238);
|
||||
$blueRingLine = ImageColorAllocate($im, 106, 114, 127);
|
||||
$arrowBody = ImageColorAllocate($im, 228, 114, 86);
|
||||
$arrowLine = ImageColorAllocate($im, 207, 74, 42);
|
||||
$redArc = ImageColorAllocate($im, 220, 57, 18);
|
||||
$yellowArc = ImageColorAllocate($im, 255, 153, 0);
|
||||
|
||||
$black = ImageColorAllocate($im, 0,0,0);
|
||||
$white = ImageColorAllocate($im, 255, 255, 255);
|
||||
$gray = ImageColorAllocate($im, 190, 190, 190);
|
||||
|
||||
$fontArial = PATH_THIRDPARTY . 'html2ps_pdf/fonts/arial.ttf';
|
||||
$fontCourier = PATH_THIRDPARTY . 'html2ps_pdf/fonts/cour.ttf';
|
||||
$fontCourbd = PATH_THIRDPARTY . 'html2ps_pdf/fonts/courbd.ttf';
|
||||
|
||||
ImageFilledRectangle($im, 0, 0, $width-1, $height-1, $white);
|
||||
ImageRectangle ($im, 0, 0, $width-1, $height-1, $gray);
|
||||
|
||||
//center coords
|
||||
$cX = intval($this->w /2);
|
||||
$cY = intval($this->h /2);
|
||||
|
||||
//diameter for gauge
|
||||
$diameter = intval( $this->h * 4/5 );
|
||||
$dX = intval($diameter *8/7 ); //for now ratio aspect is 8:7
|
||||
$dY = intval($diameter);
|
||||
$dXRing = intval($dX * 0.90);
|
||||
$dYRing = intval($dY * 0.90);
|
||||
|
||||
$dXRingColor = intval($dX * 0.86);
|
||||
$dYRingColor = intval($dY * 0.86);
|
||||
|
||||
$dXRingCenter = intval($dX * 0.66);
|
||||
$dYRingCenter = intval($dY * 0.66);
|
||||
|
||||
imagefilledellipse($im, $cX, $cY, $dX, $dY, $extRing);
|
||||
|
||||
imagefilledellipse($im, $cX, $cY, $dXRing, $dYRing, $bgcolor);
|
||||
|
||||
//drawing the red arc
|
||||
$redFrom = $this->redFrom/$this->maxValue*300 - 240 ;
|
||||
$redTo = $this->redTo/$this->maxValue*300 - 240;
|
||||
$yellowFrom = $this->yellowFrom/$this->maxValue*300 - 240;
|
||||
$yellowTo = $this->yellowTo/$this->maxValue*300 - 240;
|
||||
imagefilledarc ($im, $cX, $cY, $dXRingColor, $dYRingColor, $redFrom, $redTo, $redArc, IMG_ARC_PIE );
|
||||
imagefilledarc ($im, $cX, $cY, $dXRingColor, $dYRingColor, $yellowFrom, $yellowTo, $yellowArc, IMG_ARC_PIE );
|
||||
|
||||
imagefilledellipse($im, $cX, $cY, $dXRingCenter, $dYRingCenter, $bgcolor);
|
||||
|
||||
//ticks
|
||||
$radiusX = intval($dX * 0.42);
|
||||
$radiusY = intval($dY * 0.42);
|
||||
$min = 5;
|
||||
while($min <= 55) {
|
||||
if ($min % 5 == 0)
|
||||
$len = $radiusX / 8;
|
||||
else
|
||||
$len = $radiusX / 25;
|
||||
|
||||
$ang = (2 * M_PI * $min) / 60;
|
||||
$x1 = sin($ang) * ($radiusX - $len) + $cX;
|
||||
$y1 = cos($ang) * ($radiusY - $len) + $cY;
|
||||
$x2 = sin($ang) * $radiusX + $cX;
|
||||
$y2 = cos($ang) * $radiusY + $cY;
|
||||
|
||||
ImageLine($im, $x1, $y1, $x2, $y2, $black);
|
||||
|
||||
|
||||
if ($min % 5 == 0) {
|
||||
$textToDisplay = sprintf("%d", (55-$min)*$this->maxValue/50 );
|
||||
$bbox = imagettfbbox(8, 0, $fontArial, $textToDisplay );
|
||||
$x1 = sin($ang) * ($radiusX - 2*$len) + $cX - $bbox[4] / 2;
|
||||
$y1 = cos($ang) * ($radiusY - 2*$len) + $cY +2;// - abs($bbox[5]);
|
||||
imagettftext ( $im, 8, 0, $x1, $y1, $gray, $fontArial, $textToDisplay );
|
||||
}
|
||||
$min++;
|
||||
}
|
||||
|
||||
//drawing the arrow, simple way
|
||||
$radiusX = intval($dX * 0.35);
|
||||
$radiusY = intval($dY * 0.35);
|
||||
|
||||
$ang = - M_PI/6 + 2*M_PI - ( 2 * M_PI * $this->value )*50/60 /$this->maxValue ;
|
||||
$x1 = sin($ang) * ($radiusX) + $cX;
|
||||
$y1 = cos($ang) * ($radiusY) + $cY;
|
||||
ImageLine($im, $cX, $cY, $x1, $y1, $arrowLine);
|
||||
|
||||
/*
|
||||
//arrowLine
|
||||
$arrowHeight = intval($dY * 0.02);
|
||||
$arrowWidth = intval($dX * 0.35);
|
||||
$arrowTail = intval($dX * 0.15);
|
||||
$values = array(
|
||||
0, -$arrowHeight,
|
||||
-$arrowTail, 0,
|
||||
0, $arrowHeight,
|
||||
$arrowWidth, 0,
|
||||
0, -$arrowHeight
|
||||
);
|
||||
|
||||
//rotate n degrees
|
||||
$n = 20;
|
||||
$ang = (2 * M_PI * $n) / 60;
|
||||
|
||||
foreach ( $values as $k => $val ) {
|
||||
if ( $k % 2 == 0 ) {
|
||||
//$values[$k] = sin($ang)*$val + 20;
|
||||
$values[$k] = sin($ang)*($val/$cX)*$;
|
||||
$values[$k] += $cX;
|
||||
}
|
||||
else {
|
||||
//$ys = intval(sin($sec * M_PI/30 - M_PI/2) * R);
|
||||
//$values[$k] = intval(sin($n * M_PI/30 - M_PI/2) *$val);
|
||||
$values[$k] = (cos($ang))*($val/$cY)*$cY;
|
||||
$values[$k] += $cY;
|
||||
}
|
||||
}
|
||||
|
||||
imagefilledpolygon ($im, $values, 5, $arrowBody);
|
||||
imagepolygon ($im, $values, 5, $arrowLine);
|
||||
*/
|
||||
//blue ring
|
||||
$dXBlueRing = $dX * 0.07;
|
||||
$dYBlueRing = $dY * 0.07;
|
||||
imagefilledellipse($im, $cX, $cY, $dXBlueRing, $dXBlueRing, $blueRing);
|
||||
imageellipse ($im, $cX, $cY, $dXBlueRing, $dYBlueRing, $blueRingLine);
|
||||
|
||||
imageellipse ($im, $cX, $cY, $dX, $dY, $black);
|
||||
|
||||
$textToDisplay = sprintf ( "%5.2f%%", $this->value );
|
||||
$bbox = imagettfbbox(9, 0, $fontArial, $textToDisplay );
|
||||
$centerX = $cX - $bbox[4] / 2;
|
||||
$centerY = $cY+$dYRing/2+3-abs($bbox[5]);
|
||||
imagettftext ( $im, 9, 0, $centerX, $centerY, $black, $fontArial, $textToDisplay );
|
||||
|
||||
Header("Content-type: image/png");
|
||||
ImagePng($im);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user