]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/PDF/external/chart.class.php
Se corrige un bug.
[mecon/meconlib.git] / lib / MECON / PDF / external / chart.class.php
1 <?php
2 /*
3    php pdf chart generation library
4    Copyright (C) Potential Technologies 2002 - 2003
5    http://www.potentialtech.com
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21    $Id: chart.class.php,v 2.2 2003/07/05 21:33:07 wmoran Exp $
22 */
23
24 class chart
25 {
26
27     var $colors;        // global colors
28     var $series;        // Array of series
29     var $pdf;           // reference to the parent class
30     
31     function chart()
32     {
33         $this->clearchart();
34     }
35
36     function clearchart()
37     {
38         // Default colors
39         unset($this->colors);
40         // This oughta make things more readible
41         $white['red'] = $white['green'] = $white['blue'] = 1;
42         $black['red'] = $black['green'] = $black['blue'] = 0;
43         $this->colors['background'] = $white;
44         $this->colors['border']     = $black;
45         $this->colors['hlabel']     = $black;
46         $this->colors['vlabel']     = $black;
47         $this->colors['vgrade']     = $black;
48         $this->colors['hgrade']     = $black;
49         unset($this->series);
50     }
51
52     /* Set up default colors to use globally on the chart
53      */
54     function setcolor($name, $red, $green, $blue)
55     {
56         $this->colors[$name]['red']   = $red;
57         $this->colors[$name]['green'] = $green;
58         $this->colors[$name]['blue']  = $blue;
59     }
60
61     function add_series($name, $points, $color = 'black', $width = 1, $style = 'default')
62     {
63         $t['points'] = $points;
64         $t['color'] = $color;
65         $t['width'] = $width;
66         $t['style'] = $style;
67         $this->series[$name] = $t;
68     }
69
70     function place_chart($page, $left, $bottom, $width, $height, $type = 'line')
71     {
72         switch (strtolower($type)) {
73             case 'pie' :
74             case '3dpie' :
75             case 'bar' :
76             case '3dbar' :
77             case '3dline' :
78             case 'line' :
79             default :
80                 $this->_place_line_chart($page, $left, $bottom, $width, $height);
81         }
82     }
83
84     function _place_line_chart($page, $left, $bottom, $width, $height)
85     {
86         // First a filled rectangle to set background color
87         $this->_fill_background($page, $left, $bottom, $width, $height);
88         // caclulate a scale
89         $low = $high = $numx = 0;
90         foreach($this->series as $data) {
91             foreach($data['points'] as $value) {
92                 if ($value < $low) $low = $value;
93                 if ($value > $high) $high = $value;
94             }
95             if (count($data['points']) > $numx) $numx = count($data);
96         }
97         if (($high - $low) <= 0) return false;
98         $xscale = $width / $numx;
99         $yscale = $height / ($high - $low);
100         foreach($this->series as $data) {
101             $a['strokecolor'] = $this->pdf->get_color($data['color']);
102             $a['width'] = $data['width'];
103             $c = 0;
104             unset($x);
105             unset($y);
106             foreach ($data['points'] as $value) {
107                 $x[$c] = ($c * $xscale) + $left;
108                 //echo $x[$c] . " ";
109                 $y[$c] = (($value - $low) * $yscale) + $bottom;
110                 //echo $y[$c] . "<br>\n";
111                 $c++;
112             }
113             $this->pdf->draw_line($x, $y, $page, $a);
114         }
115     }
116
117     function _fill_background($page, $left, $bottom, $width, $height)
118     {
119         $a['fillcolor'] = $this->colors['background'];
120         $a['mode'] = 'fill';
121         $this->pdf->draw_rectangle($bottom + $height,
122                              $left,
123                              $bottom,
124                              $left + $width,
125                              $page,
126                              $a);
127     }
128 }
129
130 ?>