--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphing/class.3dbargraph.php Sun Jan 04 16:40:36 2009 -0500
@@ -0,0 +1,243 @@
+<?php
+ require_once dirname(__FILE__) . "/class.graph.php";
+
+ class BarGraph extends CGraph {
+ var $bar_width = 32;
+ var $bar_height = 8;
+ var $bar_padding = 5;
+ var $bar_bordercolor = array(39, 78, 120);
+ var $bar_bgcolor = array(69, 129, 194);
+ var $bar_textfont = 2;
+
+ function BarGraph() {
+ $this->axis_deepness = $this->bar_height;
+ $this->graph_height = $this->graph_padding['top'] + $this->graph_areaheight + $this->graph_padding['bottom'];
+ }
+
+ /**
+ * Graph::SetBarBorderColor()
+ * Sets border color for bars
+ **/
+ function SetBarBorderColor($red, $green, $blue) {
+ $this->bar_bordercolor = array($red, $green, $blue);
+ }
+
+ /**
+ * Graph::SetBarBackgroundColor()
+ * Sets background color for bars
+ **/
+ function SetBarBackgroundColor($red, $green, $blue) {
+ $this->bar_bgcolor = array($red, $green, $blue);
+ }
+
+ /**
+ * Graph::SetBarDimensions()
+ * Sets with and height of each bar
+ **/
+ function SetBarDimensions($width, $height) {
+ if ($width > 0) $this->bar_width = $width;
+ if ($height >= 0) {
+ $this->bar_height = $height;
+ $this->axis_deepness = $height;
+ }
+ }
+
+ /**
+ * Graph::SetBarPadding()
+ * Sets padding (border) around each bar
+ **/
+ function SetBarPadding($padding) {
+ if ($padding > 0) $this->bar_padding = $padding;
+ }
+ function SetBarFont($font) {
+ $this->bar_textfont = 0;
+ switch ($font) {
+ case 'x-large': $this->bar_textfont++;
+ case 'large': $this->bar_textfont++;
+ case 'medium': $this->bar_textfont++;
+ case 'small': $this->bar_textfont++;
+ case 'x-small': $this->bar_textfont++; break;
+ default:
+ $this->bar_textfont = $font;
+ }
+ }
+ function DrawGraph($file = "") {
+ $this->graph_width = $this->graph_padding['left'] +
+ (count($this->data) * ($this->bar_width + ($this->bar_padding * 2))) +
+ $this->graph_padding['right'];
+ $this->axis_deepness = $this->bar_height;
+
+ $this->im = imagecreatetruecolor($this->graph_width, $this->graph_height);
+
+ $this->axis_frontgridlines = 0;
+ $this->axis_xscalevisible = 0;
+ $this->axis_positions = array($this->axis_positions[0], 0, 0, 0);
+
+ CGraph::DrawGraph();
+
+ if ($this->axis_minY > 0) $this->axis_minY = 0;
+ if ($this->axis_maxY < 0) $this->axis_maxY = 0;
+
+ $this->__Draw_LeftBottom_Axis();
+
+ $p = 0;
+ foreach ($this->data as $name => $value) {
+ $p++;
+ $this->__DrawBarText($p, $name);
+ $this->__DrawBar($p, $value);
+ }
+
+ $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::__DrawBarText()
+ * Determines top and left to draw text to a choosen bar
+ **/
+ function __DrawBarText($bar, $text) {
+ $this->__DrawText($text,
+ $this->graph_padding['left'] + (($this->bar_width + ($this->bar_padding * 2)) * ($bar - 0.5)),
+ $this->graph_height - $this->graph_padding['bottom'] + 1,
+ $this->im_axis_scalecolor,
+ $this->bar_textfont,
+ 1);
+ }
+
+ /**
+ * Graph::__DrawBar()
+ * Draws a choosen bar with it's value
+ **/
+ function __DrawBar($bar, $value) {
+ $x = $this->graph_padding['left'] +
+ (($this->bar_width + ($this->bar_padding * 2)) * ($bar - 1)) +
+ $this->bar_padding;
+ $y = $this->graph_areaheight / ($this->axis_maxY - $this->axis_minY);
+ if ($value >= 0) {
+ $this->____DrawBar($x,
+ $this->graph_height - $this->graph_padding['bottom'] - abs(floor($this->axis_minY * $y)) - floor($y * $value),
+ $x + $this->bar_width,
+ $this->graph_height - $this->graph_padding['bottom'] - abs(floor($this->axis_minY * $y)));
+ } else {
+ $this->____DrawBar($x,
+ $this->graph_height - $this->graph_padding['bottom'] - abs(floor($this->axis_minY * $y)),
+ $x + $this->bar_width,
+ $this->graph_height - $this->graph_padding['bottom'] - floor($this->axis_minY * -$y) + floor($y * -$value));
+ }
+ }
+
+ /**
+ * Graph::____DrawBar()
+ * Draws the actual rectangles that form a bar
+ **/
+ function ____DrawBar($x1, $y1, $x2, $y2) {
+ $this->__AllocateColor("im_bar_bordercolor",
+ $this->bar_bordercolor,
+ ( $this->graph_transparencylevel * 1.5));
+ $this->__AllocateColor("im_bar_bgcolor",
+ $this->bar_bgcolor,
+ ( $this->graph_transparencylevel * 1.5));
+
+ // base square
+ $this->__DrawPolygon(array($x1, $y2, $x2, $y2, $x2 + $this->bar_height,
+ $y2 - $this->bar_height, $x1 + $this->bar_height,
+ $y2 - $this->bar_height),
+ $this->im_bar_bgcolor,
+ true);
+ $this->__DrawPolygon(array($x1, $y2, $x2, $y2, $x2 + $this->bar_height,
+ $y2 - $this->bar_height, $x1 + $this->bar_height,
+ $y2 - $this->bar_height),
+ $this->im_bar_bordercolor);
+
+ // back square
+ $this->__DrawPolygon(array($x1 + $this->bar_height, $y1 - $this->bar_height,
+ $x2 + $this->bar_height, $y1 - $this->bar_height,
+ $x2 + $this->bar_height, $y2 - $this->bar_height,
+ $x1 + $this->bar_height, $y2 - $this->bar_height),
+ $this->im_bar_bgcolor,
+ true);
+ $this->__DrawPolygon(array($x1 + $this->bar_height, $y1 - $this->bar_height,
+ $x2 + $this->bar_height, $y1 - $this->bar_height,
+ $x2 + $this->bar_height, $y2 - $this->bar_height,
+ $x1 + $this->bar_height, $y2 - $this->bar_height),
+ $this->im_bar_bordercolor);
+
+ // left square
+ $this->__DrawPolygon(array($x1, $y1, $x1 + $this->bar_height, $y1 - $this->bar_height,
+ $x1 + $this->bar_height, $y2 - $this->bar_height,
+ $x1, $y2),
+ $this->im_bar_bgcolor,
+ true);
+ $this->__DrawPolygon(array($x1, $y1, $x2, $y1, $x2, $y2, $x1, $y2),
+ $this->im_bar_bordercolor);
+
+ // front square
+ $this->__DrawPolygon(array($x1, $y1, $x2, $y1, $x2, $y2, $x1, $y2),
+ $this->im_bar_bgcolor,
+ true);
+ $this->__DrawPolygon(array($x1, $y1, $x2, $y1, $x2, $y2, $x1, $y2),
+ $this->im_bar_bordercolor);
+
+ // right square
+ $this->__DrawPolygon(array($x2, $y2, $x2, $y1, $x2 + $this->bar_height,
+ $y1 - $this->bar_height, $x2 + $this->bar_height,
+ $y2 - $this->bar_height),
+ $this->im_bar_bgcolor,
+ true);
+ $this->__DrawPolygon(array($x2, $y2, $x2, $y1, $x2 + $this->bar_height,
+ $y1 - $this->bar_height, $x2 + $this->bar_height,
+ $y2 - $this->bar_height),
+ $this->im_bar_bordercolor);
+
+ // top square
+ $this->__DrawPolygon(array($x1, $y1, $x2, $y1, $x2 + $this->bar_height,
+ $y1 - $this->bar_height, $x1 + $this->bar_height,
+ $y1 - $this->bar_height),
+ $this->im_bar_bgcolor,
+ true);
+ $this->__DrawPolygon(array($x1, $y1, $x2, $y1, $x2 + $this->bar_height,
+ $y1 - $this->bar_height, $x1 + $this->bar_height,
+ $y1 - $this->bar_height),
+ $this->im_bar_bordercolor);
+ }
+
+ /**
+ * Graph::__Load3dbarValues()
+ * Loads definitions to 3d bar settings
+ **/
+ function __Load3dbarValues($data) {
+ foreach ($data as $name => $value) {
+ $name = strtolower($name);
+ switch ($name) {
+ case 'background-color':
+ $this->__SetColorToValue("bar_bgcolor", $value);
+ break;
+ case 'border-color':
+ $this->__SetColorToValue("bar_bordercolor", $value);
+ break;
+ case 'padding':
+ $this->bar_padding = $value;
+ break;
+ case 'width':
+ $this->bar_width = (int) $value;
+ break;
+ case 'height':
+ $this->bar_height = (int) $value;
+ $this->axis_deepness = (int) $value;
+ break;
+ }
+ }
+ }
+ }
+?>