<?php // content="text/plain; charset=utf-8" // $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ require_once 'jpgraph/jpgraph.php'; require_once 'jpgraph/jpgraph_canvas.php'; require_once 'jpgraph/jpgraph_canvtools.php'; // Define work space $xmax = 20; $ymax = 20; // Setup a basic canvas we can work $g = new CanvasGraph(400, 200, 'auto'); $g->SetMargin(5, 11, 6, 11); $g->SetShadow(); $g->SetMarginColor("teal"); // We need to stroke the plotarea and margin before we add the // text since we otherwise would overwrite the text. $g->InitFrame(); // Create a new scale $scale = new CanvasScale($g); $scale->Set(0, $xmax, 0, $ymax); // The shape class is wrapper around the Imgae class which translates // the coordinates for us $shape = new Shape($g, $scale); $shape->SetColor('black'); // Add a black line $shape->SetColor('black'); $shape->Line(0, 0, 20, 20); // .. and a circle (x,y,diameter) $shape->Circle(5, 14, 2); // .. and a filled circle (x,y,diameter)
function Stroke($aData, $aFile = '', $aShowDetails = false, $aShowEncodingDetails = false) { $textmargin = 5; $this->iEncoder->AddChecksum($this->iUseChecksum); $spec = $this->iEncoder->Enc($aData); $this->AdjustSpec($spec); if ($this->iFontFam == -1) { if ($this->iModuleWidth > 1) { $this->iFontFam = FF_FONT2; $this->iFontStyle = FS_BOLD; } else { $this->iFontFam = FF_FONT1; $this->iFontStyle = FS_BOLD; } } $s = ''; $n = count($spec->iBar); $g = new CanvasGraph(0, 0); $g->img->SetImgFormat($this->iImgFormat); if ($aShowDetails) { $s = $spec->iEncoding . "\n"; $s .= 'Data: ' . $spec->iData . "\n"; if ($spec->iInfo != '') { $s .= 'Info: ' . $spec->iInfo . "\n"; } } $w = round($spec->iModuleWidth); $totwidth = $spec->iLeftMargin * $w; $n = count($spec->iBar); for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[$i]; $bn = strlen($b[3]); for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; $totwidth += $wb; } } if ($spec->iInterCharModuleSpace) { $totwidth += ($n - 2) * $w; } $totwidth += $spec->iRightMargin * $w + 1; $height = $this->iHeight; if ($aShowDetails) { $g->img->SetFont(FF_FONT2); $height += $g->img->GetTextHeight($s); } $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $th = $g->img->GetTextHeight($spec->iData); if ($spec->iStrokeDataBelow) { $height += $th + $this->iDataBelowMargin; } if ($height < round(0.15 * ($totwidth - $spec->iRightMargin * $w - $spec->iLeftMargin * $w))) { $height = round(0.15 * $totwidth); } $g->img->SetFont(FF_FONT2); $tw = 2 * $textmargin + $g->img->GetTextWidth($s); $width = $totwidth; if ($width < $tw) { $width = $tw; } if ($aShowEncodingDetails) { $g->img->SetFont(FF_FONT2); $height += $n * $g->img->GetTextHeight('0'); $width = max(300, $totwidth); } $g = new CanvasGraph($width, $height); $g->img->SetImgFormat($this->iImgFormat); $g->SetMarginColor('white'); if ($this->iShowFrame) { $g->frame_color = $this->iFrameColor; $g->InitFrame(); } $g->img->SetColor('black'); $x = $w * $spec->iLeftMargin; $ystart = $this->iTopMargin; $yend = $height - $this->iBottomMargin - 1; if ($aShowDetails) { $ystart += $g->img->GetTextHeight($s); } if ($aShowEncodingDetails) { $g->img->SetFont(FF_FONT2); $ystart += $n * $g->img->GetTextHeight('0'); } if ($spec->iStrokeDataBelow) { $yend -= $th + $this->iDataBelowMargin; } $inunder = false; $under_s = ''; $under_x = 0; for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[$i]; if ($aShowEncodingDetails) { $s .= sprintf("%02d", $i) . " : {$b['0']}, {$b['1']}, {$b['2']}, {$b['3']}\n"; } $bn = strlen($b[3]); if ($b[2] == 0 && !$this->iNoHumanText) { if (!$inunder) { $inunder = true; $under_x = $x; $under_s = $b[0]; } else { $under_s .= $b[0]; } } else { if ($inunder) { $inunder = false; if ($under_s != '') { $t = new Text($under_s, ($under_x + $x - 1) / 2, $yend - $th / 1.3); $t->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $t->Align('center', 'top'); $t->Stroke($g->img); } } } $startx = $x; for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; if ($j % 2 == $b[1]) { $g->img->SetColor($this->iBkgColor); } else { $g->img->SetColor($this->iColor); } if ($b[2] == 1 || $this->iNoHumanText) { $g->img->FilledRectangle($x, $ystart, $x + $wb - 1, $yend); } else { $g->img->FilledRectangle($x, $ystart, $x + $wb - 1, $yend - $th); } $x += $wb; } if ($this->iDebugBackground) { $g->SetAlphaBlending(); if (($i & 1) == 0) { $g->img->SetColor('lightblue@0.5'); } else { $g->img->SetColor('yellow@0.5'); } $g->img->FilledRectangle($startx, $ystart - 2, $x, $yend); } if ($spec->iInterCharModuleSpace) { $x += $w; } } $g->img->SetColor($this->iColor); if (!($spec->iLeftData === '')) { $g->img->SetTextAlign('right', 'top'); $g->img->SetFont($this->iSmallFontFam, $this->iSmallFontStyle, $this->iSmallFontSize); $g->img->StrokeText($w * $spec->iLeftMargin - 3, $yend - $th, $spec->iLeftData); } if (!($spec->iRightData === '')) { $g->img->SetTextAlign('left', 'top'); $g->img->SetFont($this->iSmallFontFam, $this->iSmallFontStyle, $this->iSmallFontSize); $g->img->StrokeText($x + 3, $yend - $th, $spec->iRightData); } if ($spec->iStrokeDataBelow) { $y = $yend + $this->iDataBelowMargin; $bw = $totwidth - $spec->iLeftMargin * $w - $spec->iRightMargin * $w; $x = $spec->iLeftMargin * $w + floor($bw / 2); $g->img->SetTextAlign('center', 'top'); $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); if ($this->iHumanTxt !== '') { $g->img->StrokeText($x, $y, $this->iHumanTxt); } else { $g->img->StrokeText($x, $y, $spec->iData); } } if ($aShowDetails) { $g->img->SetColor('navy'); $g->img->SetTextAlign('left', 'top'); $g->img->SetFont(FF_FONT2); $g->img->StrokeText($textmargin, $this->iTopMargin, $s); } if (ADD_DEMOTXT === true) { $t = new Text("<<DEMO>>", $totwidth / 2, $ystart); if ($this->iModuleWidth > 1) { if ($this->iModuleWidth > 4) { $t->SetFont(FF_ARIAL, FS_BOLD, 32); $step = 140; $yadj = 50; } else { $t->SetFont(FF_ARIAL, FS_BOLD, 24); $step = 110; $yadj = 40; } } else { $t->SetFont(FF_ARIAL, FS_BOLD, 18); $step = 80; $yadj = 30; } $t->SetColor('red@0.4'); $t->Align('center', 'center'); $t->SetAngle(-25); $n = ceil($totwidth / $step); for ($i = 0; $i < $n; ++$i) { $t->SetPos(-30 + $i * $step, ($yend - $ystart) / 2 - $yadj); $t->Stroke($g->img); } } if ($this->iVertical) { $g->img->img = $this->Rotate($g->img->img, 90); } if ($this->iScale != 1) { $nwidth = round($width * $this->iScale); $nheight = round($height * $this->iScale); if ($this->iVertical) { $tmp = $height; $height = $width; $width = $tmp; $tmp = $nheight; $nheight = $nwidth; $nwidth = $tmp; } $img = @imagecreatetruecolor($nwidth, $nheight); if ($img) { imagealphablending($img, true); imagecopyresampled($img, $g->img->img, 0, 0, 0, 0, $nwidth, $nheight, $width, $height); $g->img->CreateImgCanvas($nwidth, $nheight); $g->img->img = $img; } else { return false; } } return $g->Stroke($aFile); }
function Stroke($aData, $aFile = '', $aOnlyDebug = false) { $topmargin = 10; $bottommargin = 10; $textmargin = 5; $txtmargin = 4; $this->iHeight *= $this->iModuleWidth; $spec = $this->iEncoder->Enc($aData); if ($aOnlyDebug) { return $spec->toString(); } $this->AdjustSpec($spec); $data = ''; if (is_array($aData)) { $n = count($aData); for ($i = 0; $i < $n; ++$i) { $data .= $aData[$i][1]; } } elseif (is_string($aData)) { $data = $aData; } if (!$this->iFontSpecified) { if ($this->iModuleWidth > 1) { $this->iFontFam = FF_ARIAL; $this->iFontStyle = FS_BOLD; $this->iFontSize = 10; } else { $this->iFontFam = FF_ARIAL; $this->iFontStyle = FS_NORMAL; $this->iFontSize = 7; } } $s = ''; $g = new CanvasGraph(0, 0); // Dummy graph context $g->img->SetImgFormat($this->iImgFormat); $w = round($spec->iModuleWidth); // Calculate total width $totwidth = $spec->iLeftMargin * $w; $n = count($spec->iBar[0]); for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[0][$i]; $bn = strlen($b[3]); for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; $totwidth += $wb; } } $totwidth += $spec->iRightMargin * $w; // Calculate total height $height = $this->iHeight * count($spec->iBar) + $topmargin + $bottommargin; $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $th = $g->img->GetTextHeight($data) + $txtmargin; if ($spec->iStrokeDataBelow) { $height += $th; } $width = $totwidth; $g->img->SetFont(FF_FONT2); $tw = 2 * $textmargin + $g->img->GetTextWidth($s); if ($width < $tw) { $width = $tw; } $g = new CanvasGraph($width, $height); $g->img->SetImgFormat($this->iImgFormat); $g->SetMarginColor($this->iBkgColor); $g->SetColor($this->iBkgColor); if ($this->iShowFrame) { $g->InitFrame(); } else { $g->frame_weight = 0; $g->InitFrame(); } $g->img->SetLineWeight(1); $g->img->SetColor('black'); $x = $w * $spec->iLeftMargin; $ystart = $topmargin; $inunder = false; $under_s = ''; $startx = $x; for ($r = 0; $r < count($spec->iBar); ++$r) { $yend = $ystart + $this->iHeight - 1; $x = $startx; for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[$r][$i]; $bn = strlen($b[3]); for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; if (!($j % 2)) { $g->img->SetColor($this->iColor); $g->img->FilledRectangle($x, $ystart, $x + $wb - 1, $yend); } $x += $wb; } } $ystart += $this->iHeight; } // row $g->img->SetColor($this->iColor); if ($spec->iStrokeDataBelow) { // Center data underneath $y = $yend + $txtmargin; $bw = $totwidth - $spec->iLeftMargin * $w - $spec->iRightMargin * $w; $x = $spec->iLeftMargin * $w + floor($bw / 2); $g->img->SetTextAlign('center', 'top'); $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $g->img->StrokeText($x, $y, $data); } if (ADD_DEMOTXT) { $ystart = 0; $t = new Text(" DEMO ", $totwidth / 2, $ystart); if ($this->iModuleWidth > 1) { if ($this->iModuleWidth > 2) { $t->SetFont(FF_ARIAL, FS_BOLD, 24); $step = 120; } else { $t->SetFont(FF_ARIAL, FS_BOLD, 16); $step = 100; } } else { $t->SetFont(FF_ARIAL, FS_BOLD, 12); $step = 80; } $t->SetColor('red@0.5'); $t->Align('center', 'top'); $t->SetAngle(-15); $n = ceil($totwidth / $step); for ($y = $ystart; $y < $yend; $y += 50) { for ($i = 0; $i < $n; ++$i) { $t->SetPos(-30 + $i * $step, $y); $t->Stroke($g->img); } } } if ($this->iVertical) { $g->img->img = $this->Rotate($g->img->img, 90); } if ($this->iScale != 1) { $nwidth = round($width * $this->iScale); $nheight = round($height * $this->iScale); if ($this->iVertical) { $tmp = $height; $height = $width; $width = $tmp; $tmp = $nheight; $nheight = $nwidth; $nwidth = $tmp; } $img = @imagecreatetruecolor($nwidth, $nheight); if ($img) { imagealphablending($img, true); imagecopyresampled($img, $g->img->img, 0, 0, 0, 0, $nwidth, $nheight, $width, $height); $g->img->CreateImgCanvas($nwidth, $nheight); $g->img->img = $img; } else { return false; } } $g->Stroke($aFile); return true; }
/** * Método que sirve de reemplazo al mecanismo de paloSantoGraph y paloSantoGraphLib * para generar gráficos a partir de una clase que devuelve datos. * * @param string $module Módulo que contiene la clase fuente de datos * @param string $class Clase a instanciar para obtener fuente de datos * @param string $function Método a llamar en la clase para obtener datos * @param array $arrParameters Lista de parámetros para la invocación * @param string $functionCB */ function displayGraph($G_MODULE, $G_CLASS, $G_FUNCTION, $G_PARAMETERS, $G_FUNCTIONCB = "") { //------- PARAMETROS DEL GRAPH ------- $G_TYPE = null; //tipo de grafica $G_TITLE = null; //titulo $G_COLOR = null; //colores $G_LABEL = array(); //etiquetas $G_SIZE = array(); //tamaño $G_MARGIN = array(); //margen $G_LEYEND_NUM_COLUMN = 1; $G_LEYEND_POS = array(0.05, 0.5); //posicion de las leyendas $_MSJ_ERROR = null; //$_MSJ_ERROR = "Sin mensaje ERROR"; global $_MSJ_NOTHING; //$_MSJ_NOTHING = "Sin mensaje NOTHING"; $G_YDATAS = array(); $G_ARR_COLOR = array(); $G_ARR_FILL_COLOR = array(); $G_ARR_LEYEND = array(); $G_ARR_STEP = array(); $G_SHADOW = false; $G_LABEL_Y = null; //ESTATICOS $G_SCALE = "textlin"; $G_WEIGHT = 1; if ($G_MODULE != '') { require_once "modules/{$G_MODULE}/libs/{$G_CLASS}.class.php"; //lib del modulo require_once "modules/{$G_MODULE}/configs/default.conf.php"; //archivo configuracion del modulo global $arrConfModule; $dsn = isset($arrConfModule["dsn_conn_database"]) ? $arrConfModule["dsn_conn_database"] : ""; } else { require_once "libs/{$G_CLASS}.class.php"; //lib del modulo require_once "configs/default.conf.php"; //archivo configuracion del modulo global $arrConf; $dsn = isset($arrConf["dsn_conn_database"]) ? $arrConf["dsn_conn_database"] : ""; } $oPaloClass = new $G_CLASS($dsn); $arrParam = $G_PARAMETERS; $result = call_user_func_array(array(&$oPaloClass, $G_FUNCTION), $arrParam); global $globalCB; $globalCB = NULL; if ($G_FUNCTIONCB != '') { $globalCB = array($oPaloClass, $G_FUNCTIONCB); } //------------------- CONTRUCCION DEL ARREGLO PARA X & Y ------------------- global $xData; $xData = array(); $yData = array(); if (sizeof($result) != 0) { $isX_array = false; //usado en LINEPLOT, PLOT3D, BARPLOT, LINEPLOT_MULTIAXIS foreach ($result as $att => $arrXY) { //------------------ ATTRIBUTES ------------------ if ($att == 'ATTRIBUTES') { foreach ($arrXY as $key => $values) { //VARIABLES NECESARIAS if ($key == 'LABEL_X') { $G_LABEL[0] = $values; } else { if ($key == 'LABEL_Y') { $G_LABEL[1] = $values; } else { if ($key == 'TITLE') { $G_TITLE = $values; } else { if ($key == 'TYPE') { $G_TYPE = $values; } else { if ($key == 'SIZE') { $G_SIZE = explode(',', $values); } else { if ($key == 'MARGIN') { $G_MARGIN = explode(',', $values); } else { if ($key == 'COLOR') { $G_COLOR = $values; } else { if ($key == 'POS_LEYEND') { $G_LEYEND_POS = explode(',', $values); } else { if ($key == 'NUM_COL_LEYEND') { $G_LEYEND_NUM_COLUMN = $values; } else { if ($key == 'SHADOW') { $G_SHADOW = $values; } } } } } } } } } } } } else { if ($att == 'MESSAGES') { foreach ($arrXY as $key => $values) { if ($key == 'ERROR') { $_MSJ_ERROR = $values; } else { if ($key == 'NOTHING_SHOW') { $_MSJ_NOTHING = $values; } } } } else { if ($att == 'DATA') { foreach ($arrXY as $DAT_N => $MODES) { foreach ($MODES as $key => $values) { /************************************************************/ if ($G_TYPE == 'lineplot' || $G_TYPE == 'barplot' || $G_TYPE == 'lineplot_multiaxis') { if ($key == 'VALUES') { $yData = array(); foreach ($values as $x => $y) { if ($isX_array == false) { $xData[] = $x; } $yData[] = $y; } $isX_array = is_array($xData) ? true : false; $G_YDATAS[] = $yData; } else { if ($key == 'STYLE') { foreach ($values as $x => $y) { if ($x == 'COLOR') { $G_ARR_COLOR[] = $y; } else { if ($x == 'LEYEND') { $G_ARR_LEYEND[] = $y; } else { if ($x == 'STYLE_STEP') { $G_ARR_STEP[] = $y; } else { if ($x == 'FILL_COLOR') { $G_ARR_FILL_COLOR[] = $y; } } } } } } } } else { if ($G_TYPE == 'plot3d' || $G_TYPE == 'plot3d2') { if ($key == 'VALUES') { foreach ($values as $x => $y) { $yData[] = $y; } $G_YDATAS[0] = $yData; } else { if ($key == 'STYLE') { foreach ($values as $x => $y) { if ($x == 'COLOR') { $G_ARR_COLOR[] = $y; } else { if ($x == 'LEYEND') { $xData[] = $y; } } } } } } else { if ($G_TYPE == 'bar' || $G_TYPE == 'gauge') { if ($key == 'VALUES') { foreach ($values as $x => $y) { $G_YDATAS[] = $y; } } } } } } } } } } } } //*****************************************// // ***** ***** ***** ***** * * // // * * * * * * * * * // // * *** ***** ***** ***** ***** // // * * * * * * * * * // // ***** * * * * * * * // //*****************************************// // L I N E P L O T if (sizeof($G_YDATAS) >= 1) { // true no funciona porque cada cadena u otro valor que se retorne es valor "valido o verdadero" // y equivale a true, entonces para diferenciarlo verdaderamente se compara con 'true' $str = checkAttributes($G_TITLE, $G_TYPE, $G_LABEL_Y, $_MSJ_ERROR, $_MSJ_NOTHING); if ($str != 'true') { showError($str, $G_SIZE); return; } if ($G_TYPE == 'lineplot') { $graph = new Graph($G_SIZE[0], $G_SIZE[1], "auto"); if ($G_SHADOW) { $graph->SetShadow(); } $graph->SetScale($G_SCALE); $graph->SetMarginColor($G_COLOR); $graph->title->Set($G_TITLE); $graph->SetFrame(true, '#999999'); $graph->img->SetMargin($G_MARGIN[0], $G_MARGIN[1], $G_MARGIN[2], $G_MARGIN[3]); $graph->img->SetAntiAliasing(); $graph->xaxis->SetLabelFormatCallback("CallBack"); $graph->xaxis->SetLabelAngle(90); $graph->xaxis->title->Set($G_LABEL[0]); $graph->yaxis->title->Set($G_LABEL[1]); $graph->xgrid->Show(); $graph->legend->SetFillColor("#fafafa"); $graph->legend->Pos($G_LEYEND_POS[0], $G_LEYEND_POS[1], "right", "center"); $graph->legend->SetColumns($G_LEYEND_NUM_COLUMN); $graph->legend->SetColor("#444444", "#999999"); $arr_lineplot = array(); foreach ($G_YDATAS as $num => $yDatas) { $lineplot = new LinePlot($yDatas); if ($G_ARR_STEP[$num] == true) { $lineplot->SetStepStyle(); } if ($G_ARR_FILL_COLOR[$num] == true) { $lineplot->SetFillColor($G_ARR_COLOR[$num]); } $lineplot->SetColor($G_ARR_COLOR[$num]); $lineplot->SetWeight($G_WEIGHT); $lineplot->SetLegend($G_ARR_LEYEND[$num]); $arr_lineplot[] = $lineplot; } foreach ($arr_lineplot as $num => $yDatas) { $graph->Add($yDatas); } if (sizeof($xData) > 100) { $graph->xaxis->SetTextTickInterval((int) (sizeof($xData) / 10)); } $graph->Stroke(); } else { if ($G_TYPE == 'plot3d') { $graph = new PieGraph($G_SIZE[0], $G_SIZE[1], "auto"); if ($G_SHADOW) { $graph->SetShadow(); } $dataMarginColor = isset($result["ATTRIBUTES"]["MARGIN_COLOR"]) ? $result["ATTRIBUTES"]["MARGIN_COLOR"] : "#999999"; $dataSizePie = isset($result["ATTRIBUTES"]["SIZE_PIE"]) ? $result["ATTRIBUTES"]["SIZE_PIE"] : "80"; $graph->SetMarginColor($G_COLOR); $graph->SetFrame(true, $dataMarginColor); $graph->legend->Pos($G_LEYEND_POS[0], $G_LEYEND_POS[1], "right", "center"); $graph->legend->SetFillColor("#fafafa"); $graph->legend->SetColor("#444444", "#999999"); $graph->legend->SetShadow('gray@0.6', 4); $graph->legend->SetColumns($G_LEYEND_NUM_COLUMN); $graph->title->Set($G_TITLE); $pieplot3d = new PiePlot3d($G_YDATAS[0]); $pieplot3d->SetSliceColors($G_ARR_COLOR); $pieplot3d->SetCenter(0.4); $pieplot3d->SetSize($dataSizePie); $pieplot3d->SetAngle(45); $pieplot3d->SetStartAngle(45); $pieplot3d->value->SetColor('black'); //color a los porcentages $pieplot3d->SetEdge('black'); //da color al contorno y separacion del pastel $pieplot3d->SetLegends($xData); $graph->Add($pieplot3d); $graph->Stroke(); } else { if ($G_TYPE == 'plot3d2') { if (!function_exists('displayGraph_draw_pie3d')) { function displayGraph_draw_pie3d($canvasx, $ydata, $arrcolor) { $canvasy = $canvasx; $escala = $canvasx / 320.0; $iAnchoPastel = 256 * $escala; $iAltoPastel = 155 * $escala; $iPosCentroX = 141 * $escala; $iPosCentroY = 91 * $escala; $thumb = imagecreatetruecolor($canvasx * 284 / 320, $canvasy * 250 / 320); $transparent = imagecolorallocatealpha($thumb, 200, 200, 200, 127); imagefill($thumb, 0, 0, $transparent); // Asignar colores de imagen $imgcolor = array(); foreach ($arrcolor as $i => $sHtmlColor) { $r = $g = $b = 0; sscanf($sHtmlColor, "#%02x%02x%02x", $r, $g, $b); $imgcolor[$i] = imagecolorallocate($thumb, $r, $g, $b); } $colorTexto = imagecolorallocate($thumb, 0, 0, 0); // Mostrar el gráfico de pastel if (!function_exists('displayGraph_pie')) { function displayGraph_pie($thumb, $x, $y, $w, $h, $ydata, $G_ARR_COLOR, $colorTexto) { $iTotal = array_sum($ydata); $iFraccion = 0; $etiquetas = array(); for ($i = 0; $i < count($ydata); $i++) { if ($ydata[$i] >= $iTotal) { imagefilledellipse($thumb, $x, $y, $w, $h, $G_ARR_COLOR[$i]); } else { $degInicio = 360 - 45 - (int) (360.0 * ($iFraccion + $ydata[$i]) / $iTotal); $degFinal = 360 - 45 - (int) (360.0 * $iFraccion / $iTotal); imagefilledarc($thumb, $x, $y, $w, $h, $degInicio, $degFinal, $G_ARR_COLOR[$i], IMG_ARC_PIE); } $iFraccion += $ydata[$i]; $degMitad = ($degInicio + $degFinal) / 2; $iPosTextoX = $x + 0.5 * ($w / 2.0) * cos(deg2rad($degMitad)); $iPosTextoY = $y + 0.5 * ($h / 2.0) * sin(deg2rad($degMitad)); $etiquetas[] = array($iPosTextoX, $iPosTextoY, sprintf('%.1f %%', 100.0 * $ydata[$i] / $iTotal)); } /* if (!is_null($colorTexto)) { for ($i = 0; $i < count($ydata); $i++) imagestring($thumb, 5, $etiquetas[$i][0], $etiquetas[$i][1], $etiquetas[$i][2], $colorTexto); } */ } } for ($i = (int) (60 * $escala); $i > 0; $i--) { displayGraph_pie($thumb, $iPosCentroX, $iPosCentroY + $i, $iAnchoPastel, $iAltoPastel, $ydata, $imgcolor, NULL); } displayGraph_pie($thumb, $iPosCentroX, $iPosCentroY, $iAnchoPastel, $iAltoPastel, $ydata, $imgcolor, $colorTexto); imagealphablending($thumb, true); imagesavealpha($thumb, true); $source2 = imagecreatefrompng("images/pie_alpha.png"); imagealphablending($source2, true); imagecopyresampled($thumb, $source2, 0, 0, 0, 0, 290 * $escala, 294 * $escala, 290, 294); header("Content-Type: image/png"); imagepng($thumb); } } displayGraph_draw_pie3d($G_SIZE[0], $G_YDATAS[0], $G_ARR_COLOR); } else { if ($G_TYPE == 'barplot') { $graph = new Graph($G_SIZE[0], $G_SIZE[1], "auto"); if ($G_SHADOW) { $graph->SetShadow(); } $graph->SetScale($G_SCALE); $graph->SetMarginColor($G_COLOR); $graph->img->SetMargin($G_MARGIN[0], $G_MARGIN[1], $G_MARGIN[2], $G_MARGIN[3]); $graph->title->Set($G_TITLE); $graph->xaxis->title->Set($G_LABEL[0]); $graph->xaxis->SetLabelFormatCallback("CallBack"); $graph->xaxis->SetLabelAngle(90); //$graph->xaxis->SetTickLabels($xData); $graph->yaxis->title->Set($G_LABEL[1]); $graph->legend->SetFillColor("#fafafa"); $graph->legend->Pos($G_LEYEND_POS[0], $G_LEYEND_POS[1], "right", "center"); $graph->legend->SetColumns($G_LEYEND_NUM_COLUMN); $arr_barplot = array(); foreach ($G_YDATAS as $num => $yDatas) { $barplot = new BarPlot($yDatas); $barplot->SetFillColor($G_ARR_COLOR[$num]); $barplot->SetLegend($G_ARR_LEYEND[$num]); $arr_barplot[] = $barplot; } $gbarplot = new GroupBarPlot($arr_barplot); $gbarplot->SetWidth(0.6); $graph->Add($gbarplot); $graph->Stroke(); } else { if ($G_TYPE == 'lineplot_multiaxis') { $graph = new Graph($G_SIZE[0], $G_SIZE[1], "auto"); if ($G_SHADOW) { $graph->SetShadow(); } $inc = sizeof($G_YDATAS); $graph->SetScale($G_SCALE); $graph->SetFrame(true, '#999999'); $graph->title->Set($G_TITLE); $graph->img->SetAntiAliasing(); $graph->xaxis->SetLabelFormatCallback("CallBack"); $graph->img->SetMargin($G_MARGIN[0], $G_MARGIN[1], $G_MARGIN[2], $G_MARGIN[3]); $graph->SetMarginColor($G_COLOR); $graph->legend->SetFillColor("#fafafa"); $graph->legend->Pos($G_LEYEND_POS[0], $G_LEYEND_POS[1], "right", "center"); $graph->xaxis->SetLabelAngle(90); $graph->legend->SetColor("#444444", "#999999"); $graph->legend->SetShadow('gray@0.6', 4); $graph->legend->SetColumns($G_LEYEND_NUM_COLUMN); foreach ($G_YDATAS as $num => $yData) { $lineplot = new LinePlot($yData); $lineplot->SetWeight($G_WEIGHT); $lineplot->SetLegend($G_ARR_LEYEND[$num]); if ($G_ARR_STEP[$num] == true) { $lineplot->SetStepStyle(); } if ($G_ARR_FILL_COLOR[$num] == true) { $lineplot->SetFillColor($G_ARR_COLOR[$num]); } if ($num == 0) { $lineplot->SetColor($G_ARR_COLOR[$num]); $graph->yaxis->SetColor($G_ARR_COLOR[$num]); $graph->Add($lineplot); } else { $lineplot->SetColor($G_ARR_COLOR[$num]); $graph->SetYScale($num - 1, 'lin'); $graph->ynaxis[$num - 1]->SetColor($G_ARR_COLOR[$num]); $graph->ynaxis[$num - 1]->SetPosAbsDelta($G_MARGIN[1] + 49 * ($num - 1)); //mueve el eje Y $graph->AddY($num - 1, $lineplot); } } if (sizeof($xData) > 100) { //$graph->xaxis->SetTextLabelInterval( (int)(sizeof($xData)/8) ); $graph->xaxis->SetTextTickInterval((int) (sizeof($xData) / 10)); //$graph->xaxis->SetTextTickInterval( 9*(int)(log(sizeof($xData))-1) ); } $graph->Stroke(); } else { if ($G_TYPE == 'bar') { $g = new CanvasGraph(91, 21, 'auto'); $g->SetMargin(0, 0, 0, 0); $g->InitFrame(); $xmax = 20; $ymax = 20; $scale = new CanvasScale($g); $scale->Set(0, $G_SIZE[0], 0, $G_SIZE[1]); //DUBUJA LA BARRA $alto = $G_SIZE[1]; $ancho = $G_SIZE[0]; $coor_x = 0; $coor_y = 0; $porcentage = $G_YDATAS[0]; $valor = 90 * (1 - $porcentage); $g->img->Line($coor_x, $coor_y, $coor_x + $ancho, $coor_y); $g->img->Line($coor_x, $coor_y, $coor_x, $coor_y + $alto); $g->img->Line($coor_x + $ancho, $coor_y, $coor_x + $ancho, $coor_y + $alto); $g->img->Line($coor_x, $coor_y + $alto, $coor_x + $ancho, $coor_y + $alto); for ($i = 0; $i < $alto; $i++) { $g->img->SetColor(array(95 - 3 * $i, 138 - 3 * $i, 203 - 3 * $i)); //para hacerlo 3D, degradacion $g->img->Line($coor_x, $coor_y + $i + 1, $coor_x + $ancho - $valor - 1, $coor_y + $i + 1); } $g->Stroke(); } else { if ($G_TYPE == 'gauge') { if (!function_exists('displayGraph_draw_gauge')) { function displayGraph_draw_gauge($canvasx, $percent) { $escala = $canvasx / 320.0; $thumb = imagecreatetruecolor($canvasx * 284 / 320, $canvasx * 284 / 320); if ($percent > 100) { $percent = 100.0; } if ($percent < 0) { $percent = 0.0; } $angle = -135.0 + 270 * $percent / 100.0; // COLORES $blanco = imagecolorallocate($thumb, 255, 255, 255); $dred = imagecolorallocate($thumb, 180, 0, 0); $lred = imagecolorallocate($thumb, 100, 0, 0); $transparent = imagecolorallocatealpha($thumb, 200, 200, 200, 127); imagefill($thumb, 0, 0, $transparent); imagealphablending($thumb, true); imagesavealpha($thumb, true); $source = imagecreatefrompng("images/gauge_base.png"); imagealphablending($source, true); imagecopyresampled($thumb, $source, 0, 0, 0, 0, 285 * $escala, 285 * $escala, 285, 285); $radius = 100 * $escala; $radius_min = 12 * $escala; $centrox = 142 * $escala; $centroy = 141 * $escala; $x1 = $centrox + sin(deg2rad($angle)) * $radius; // x coord farest $x2 = $centrox + sin(deg2rad($angle - 90)) * $radius_min; $x3 = $centrox + sin(deg2rad($angle + 90)) * $radius_min; $y1 = $centroy - cos(deg2rad($angle)) * $radius; $y2 = $centroy - cos(deg2rad($angle - 90)) * $radius_min; $y3 = $centroy - cos(deg2rad($angle + 90)) * $radius_min; $arrTriangle1 = array($centrox, $centroy, $x1, $y1, $x2, $y2); $arrTriangle2 = array($centrox, $centroy, $x1, $y1, $x3, $y3); imagefilledpolygon($thumb, $arrTriangle1, 3, $lred); imagefilledpolygon($thumb, $arrTriangle2, 3, $dred); $source2 = imagecreatefrompng("images/gauge_center.png"); imagealphablending($source2, true); imagecopyresampled($thumb, $source2, 121 * $escala, 120 * $escala, 0, 0, 44 * $escala, 44 * $escala, 44, 44); header("Content-Type: image/png"); imagepng($thumb); } } displayGraph_draw_gauge($G_SIZE[0], $G_YDATAS[0] * 100.0); } else { if ($G_TYPE == 'bar2') { $alto = 20; $ancho = 90; $coor_x = 100; $coor_y = 10; $porcentage = 0.67; $valor = 90 * (1 - $porcentage); $g = new CanvasGraph($G_LEN_X, 40, 'auto'); $g->SetMargin(1, 1, 31, 9); $g->SetMarginColor('#fafafa'); $g->SetColor(array(250, 250, 250)); $g->InitFrame(); $xmax = 20; $ymax = 20; $scale = new CanvasScale($g); $scale->Set(0, $G_LEN_X, 0, $G_LEN_Y); //DUBUJA LA BARRA $g->img->Line($coor_x, $coor_y, $coor_x + $ancho, $coor_y); $g->img->Line($coor_x, $coor_y, $coor_x, $coor_y + $alto); $g->img->Line($coor_x + $ancho, $coor_y, $coor_x + $ancho, $coor_y + $alto); $g->img->Line($coor_x, $coor_y + $alto, $coor_x + $ancho, $coor_y + $alto); for ($i = 0; $i < $alto; $i++) { $g->img->SetColor(array(95 - 4 * $i, 138 - 4 * $i, 203 - 4 * $i)); //para hacerlo 3D, degradacion $g->img->Line($coor_x, $coor_y + $i, $coor_x + $ancho - $valor - 1, $coor_y + $i); } //AGREGA LABEL 1 $txt = "Uso de CPU"; $t = new Text($txt, 10, 12); $t->font_style = FS_BOLD; $t->Stroke($g->img); //AGREGA LABEL 2 $txt = "67.64% used of 2,200.00 MHz"; $t = new Text($txt, 200, 12); $t->font_style = FS_BOLD; $t->Stroke($g->img); $g->Stroke(); } } } } } } } } } else { showError('nothing', $G_SIZE, $G_TITLE); } }
$result = $db->sql_query($sql); $limit = $db->sql_numrows($result); if ($limit < $numstick) { $numstick = $limit; } if ($limit == 0 || $limit == "") { $graph = new CanvasGraph(660, 200, "auto"); $graph->SetMarginColor('white'); $graph->SetMargin(2, 60, 2, 25); $graph->InitFrame(); $text = new Text(" [This chart does not have enough data]"); $text->SetPos(400, 60, 'right'); $text->SetColor("black"); $graph->AddText($text); $graph2 = new CanvasGraph(660, 170, 'auto'); $graph2->SetMarginColor('white'); $graph2->SetMargin(2, 60, 2, 25); $graph2->InitFrame(); $graph2->AddText($text); if ($type == 1) { $graph->Stroke($realpath . $prename . "1W_1.png"); $graph2->Stroke($realpath . $prename . "1W_2.png"); } elseif ($type == 2) { //echo '111'; $graph->Stroke($realpath . $prename . "1M_1.png"); $graph2->Stroke($realpath . $prename . "1M_2.png"); } elseif ($type == 3) { $graph->Stroke($realpath . $prename . "3M_2.png"); $graph2->Stroke($realpath . $prename . "3M_2.png"); } elseif ($type == 4) { $graph->Stroke($realpath . $prename . "6M_2.png");