--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphing/class.linegraph.php Sun Jan 04 16:40:36 2009 -0500
@@ -0,0 +1,174 @@
+<?php
+ require_once dirname(__FILE__) . "/class.graph.php";
+
+ class LineGraph extends CGraph {
+ var $line_color = array(39, 78, 120);
+ var $line_bgcolor = array(69, 129, 194);
+
+ function LineGraph() {
+ $this->graph_width = $this->graph_padding['left'] + $this->graph_areawidth + $this->graph_padding['right'];
+ $this->graph_height = $this->graph_padding['top'] + $this->graph_areaheight + $this->graph_padding['bottom'];
+ }
+
+ /**
+ * Graph::SetLineColor()
+ * Sets line color
+ **/
+ function SetLineColor($red, $green, $blue) {
+ $this->line_color = array($red, $green, $blue);
+ }
+
+ /**
+ * Graph::AddLineColor()
+ * Sets line color
+ **/
+ function AddLineColor($red, $green, $blue) {
+ if (!is_array($this->line_color[0])) {
+ $this->line_color = array($this->line_color);
+ }
+ $this->line_color[] = array($red, $green, $blue);
+ }
+
+ /**
+ * Graph::SetLineBackgroundColor()
+ * Sets background color for line (when 3D)
+ **/
+ function SetLineBackgroundColor($red, $green, $blue) {
+ $this->line_bgcolor = array($red, $green, $blue);
+ }
+
+ /**
+ * Graph::AddLineBackgroundColor()
+ * Sets line background color
+ **/
+ function AddLineBackgroundColor($red, $green, $blue) {
+ if (!is_array($this->line_bgcolor[0])) {
+ $this->line_bgcolor = array($this->line_bgcolor);
+ }
+ $this->line_bgcolor[] = array($red, $green, $blue);
+ }
+
+ /**
+ * Graph::DrawGraph()
+ * Draw all the graph: bg, axis, bars, text.. and output it
+ * Optional file parameter turns output to file, and bool on success
+ **/
+ function DrawGraph($file = "") {
+ $this->im = imagecreatetruecolor($this->graph_width, $this->graph_height);
+
+ CGraph::DrawGraph();
+
+ $this->__Draw_LeftBottom_Axis();
+
+ $arrki = array_keys($this->data);
+ if (is_array($this->data[$arrki[0]])) { // more than 1 line
+ if (!is_array($this->line_color)) {
+ $this->line_color = array($this->line_color);
+ }
+ if (!is_array($this->line_bgcolor)) {
+ $this->line_bgcolor = array($this->line_bgcolor);
+ }
+ for ($i = 0; $i < count($arrki); $i++) {
+ $this->__AllocateColor("im_line_color",
+ $this->line_color[$i],
+ $this->graph_transparencylevel,
+ $i);
+ if ($this->axis_deepness > 0) {
+ $this->__AllocateColor("im_line_bgcolor",
+ $this->line_bgcolor[$i],
+ $this->graph_transparencylevel,
+ $i);
+ }
+ $arrkj = array_keys($this->data[$arrki[$i]]);
+ for ($j = 1; $j < count($arrkj); $j++) {
+ $this->__DrawLine(array($arrkj[$j - 1],
+ $arrkj[$j],
+ $this->data[$arrki[$i]][$arrkj[$j - 1]],
+ $this->data[$arrki[$i]][$arrkj[$j]]),
+ $this->im_line_color[$i],
+ $this->im_line_bgcolor[$i]);
+ }
+ }
+ } else {
+ $this->__AllocateColor("im_line_color",
+ $this->line_color,
+ $this->graph_transparencylevel);
+ $this->__AllocateColor("im_line_bgcolor",
+ $this->line_bgcolor,
+ $this->graph_transparencylevel);
+ for ($i = 1; $i < count($arrki); $i++) {
+ $this->__DrawLine(array($i - 1, // x1
+ $i, // x2
+ $this->data[$arrki[$i - 1]], // y1
+ $this->data[$arrki[$i]]), // y2
+ $this->im_line_color,
+ $this->im_line_bgcolor);
+ }
+ // exit;
+ }
+
+ $this->__Draw_TopRight_Axis();
+
+ CGraph::DrawGraph2();
+
+ if (strlen($file)) {
+ $ret = imagepng($this->im, $file);
+ } else {
+ header("Content-Type: image/png"); // thanks to Marcin G. :)
+ imagepng($this->im);
+ $ret = true;
+ }
+ imagedestroy($this->im);
+ return $ret;
+ }
+
+ /**
+ * Graph::__DrawLine()
+ * Draws a line between 2 points
+ **/
+ function __DrawLine($points, $color, $bgcolor) {
+ if (!isset($this->line_unitX) || !isset($this->line_unitY)) {
+ $this->line_unitX = ($this->graph_width - $this->graph_padding['left'] - $this->graph_padding['right']) / ($this->axis_maxX - $this->axis_minX);
+ $this->line_unitY = $this->graph_areaheight / ($this->axis_maxY - $this->axis_minY);
+ }
+ $x1 = $this->graph_padding['left'] + floor(($points[0] - $this->axis_minX) * $this->line_unitX) + $this->line_unitX;
+ $x2 = $this->graph_padding['left'] + floor(($points[1] - $this->axis_minX) * $this->line_unitX) + $this->line_unitX;
+ $y1 = $this->graph_height - $this->graph_padding['bottom'] - floor(($points[2] - $this->axis_minY) * $this->line_unitY);
+ $y2 = $this->graph_height - $this->graph_padding['bottom'] - floor(($points[3] - $this->axis_minY) * $this->line_unitY);
+ // echo "drawing line from ($x1, $y1) to ($x2, $y2)<br />";
+ if ($this->axis_deepness > 0) {
+ $this->__DrawPolygon(array($x1, $y1,
+ $x1 + $this->axis_deepness, $y1 - $this->axis_deepness,
+ $x2 + $this->axis_deepness, $y2 - $this->axis_deepness,
+ $x2, $y2),
+ $bgcolor,
+ true);
+ $this->__DrawPolygon(array($x1, $y1,
+ $x1 + $this->axis_deepness, $y1 - $this->axis_deepness,
+ $x2 + $this->axis_deepness, $y2 - $this->axis_deepness,
+ $x2, $y2),
+ $color);
+ } else {
+ imageline($this->im, $x1, $y1, $x2, $y2, $color);
+ }
+ }
+
+ /**
+ * Graph::__LoadLineValues()
+ * Loads definitions to line settings
+ **/
+ function __LoadLineValues($data) {
+ foreach ($data as $name => $value) {
+ $name = strtolower($name);
+ switch ($name) {
+ case 'background-color':
+ $this->__SetColorToValue("line_bgcolor", $value);
+ break;
+ case 'color':
+ $this->__SetColorToValue("line_color", $value);
+ break;
+ }
+ }
+ }
+ }
+?>