[ Index ]
 

Code source de eGroupWare 1.2.106-2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/projectmanager/inc/jpgraph-1.5.2/src/ -> jpgraph_line.php (source)

   1  <?php
   2  /*=======================================================================
   3  // File:     JPGRAPH_LINE.PHP
   4  // Description:    Line plot extension for JpGraph
   5  // Created:     2001-01-08
   6  // Author:    Johan Persson (johanp@aditus.nu)
   7  // Ver:        $Id: jpgraph_line.php 18250 2005-05-07 14:13:43Z ralfbecker $
   8  //
   9  // License:    This code is released under GPL 2.0
  10  // Copyright (C) 2001 Johan Persson
  11  //========================================================================
  12  */
  13  
  14  //===================================================
  15  // CLASS Value
  16  // Description: 
  17  //===================================================
  18  class DisplayValue {    
  19      var $show=false,$format="%d",$angle=0;
  20      var $ff=FF_FONT1,$fs=FS_NORMAL,$fsize=10;
  21      var $color="navy",$margin=3;
  22  
  23      function Show($f=true) {
  24      $this->show=$f;
  25      }
  26  
  27      function SetColor($color) {
  28      $this->color = $color;
  29      }
  30  
  31      function SetFont($ff,$fs=FS_NORMAL,$fsize=10) {
  32      $this->ff=$ff;
  33      $this->fs=$fs;
  34      $this->fsize=$fsize;
  35      }
  36  
  37      function SetMargin($m) {
  38      $this->margin = $m;
  39      }
  40  
  41      function SetFormat($format,$angle=0) {
  42      $this->format= $format;
  43      $this->angle = $angle;
  44      }
  45  }
  46  
  47  
  48  //===================================================
  49  // CLASS LinePlot
  50  // Description: 
  51  //===================================================
  52  class LinePlot extends Plot{
  53      var $filled=false;
  54      var $fill_color;
  55      var $mark=null;
  56      var $step_style=false, $center=false;
  57      var $line_style=1;    // Default to solid
  58      var $value;
  59  
  60  //---------------
  61  // CONSTRUCTOR
  62      function LinePlot(&$datay,$datax=false) {
  63      $this->Plot($datay,$datax);
  64      $this->mark = new PlotMark();
  65      $this->mark->SetColor($this->color);
  66      $this->value = new DisplayValue();
  67      }
  68  //---------------
  69  // PUBLIC METHODS    
  70  
  71      // Set style, filled or open
  72      function SetFilled($f=true) {
  73      $this->filled=$f;
  74      }
  75      
  76      function SetStyle($s) {
  77      $this->line_style=$s;
  78      }
  79      
  80      function SetStepStyle($f=true) {
  81      $this->step_style = $f;
  82      }
  83      
  84      function SetColor($c) {
  85      parent::SetColor($c);
  86      $this->mark->SetColor($this->color);
  87      }
  88      
  89      function SetFillColor($c,$f=true) {
  90      $this->fill_color=$c;
  91      $this->filled=$f;
  92      }
  93      
  94      function Legend(&$graph) {
  95      if( $this->legend!="" ) {
  96          if( $this->filled ) {
  97          $graph->legend->Add($this->legend,
  98          $this->fill_color,$this->mark);
  99          } else {
 100          $graph->legend->Add($this->legend,
 101          $this->color,$this->mark,$this->line_style);
 102          }
 103      }    
 104      }
 105      
 106      function SetCenter($c=true) {
 107      $this->center=$c;
 108      }    
 109      
 110      // Gets called before any axis are stroked
 111      function PreStrokeAdjust(&$graph) {
 112      if( $this->center ) {
 113          ++$this->numpoints;
 114          $a=0.5; $b=0.5;
 115      } else {
 116          $a=0; $b=0;
 117      }
 118      $graph->xaxis->scale->ticks->SetXLabelOffset($a);
 119      $graph->SetTextScaleOff($b);                        
 120      $graph->xaxis->scale->ticks->SupressMinorTickMarks();
 121      }
 122      
 123      function Stroke(&$img,&$xscale,&$yscale) {
 124      $numpoints=count($this->coords[0]);
 125      if( isset($this->coords[1]) ) {
 126          if( count($this->coords[1])!=$numpoints )
 127          JpGraphError::Raise("JpGraph Error: Number of X and Y points are not equal.<br>
 128                      Number of X-points:".count($this->coords[1])."<br>
 129                      Number of Y-points:$numpoints");
 130          else
 131          $exist_x = true;
 132      }
 133      else 
 134          $exist_x = false;
 135  
 136      if( $exist_x )
 137          $xs=$this->coords[1][0];
 138      else
 139          $xs=0;
 140  
 141      $img->SetStartPoint($xscale->Translate($xs),
 142                          $yscale->Translate($this->coords[0][0]));
 143          
 144      if( $this->filled ) {
 145          $cord[] = $xscale->Translate($xs);
 146          $cord[] = $yscale->Translate($yscale->GetMinVal());
 147      }
 148      $cord[] = $xscale->Translate($xs);
 149      $cord[] = $yscale->Translate($this->coords[0][0]);
 150      $yt_old = $yscale->Translate($this->coords[0][0]);
 151      $img->SetColor($this->color);
 152      $img->SetLineWeight($this->weight);    
 153      $img->SetLineStyle($this->line_style);
 154      for( $pnts=1; $pnts<$numpoints; ++$pnts) {
 155          if( $exist_x ) $x=$this->coords[1][$pnts];
 156          else $x=$pnts;
 157          $xt = $xscale->Translate($x);
 158          $yt = $yscale->Translate($this->coords[0][$pnts]);
 159          $cord[] = $xt;
 160          $cord[] = $yt;
 161          if( $this->step_style ) {
 162          $img->StyleLineTo($xt,$yt_old);
 163          $img->StyleLineTo($xt,$yt);
 164          }
 165          else {
 166          $y=$this->coords[0][$pnts];
 167          if( is_numeric($y) || (is_string($y) && $y != "-") ) {                      
 168              $tmp1=$this->coords[0][$pnts];
 169              $tmp2=$this->coords[0][$pnts-1];                      
 170              if( is_numeric($tmp1)  && (is_numeric($tmp2) || $tmp2=="-" ) ) { 
 171              $img->StyleLineTo($xt,$yt);
 172              } 
 173              else {
 174              $img->SetStartPoint($xt,$yt);
 175              }
 176          }
 177          }
 178          $yt_old = $yt;
 179          if( $this->value->show) 
 180          {
 181          $sval=sprintf($this->value->format,$this->coords[0][$pnts]);
 182          $txt = new Text($sval,$xt,$yt-$this->value->margin);
 183          $txt->SetFont($this->value->ff,$this->value->fs,$this->value->fsize);
 184          $txt->Align("center","bottom");
 185          $txt->SetOrientation($this->value->angle);
 186          $txt->SetColor($this->value->color);
 187          $txt->Stroke($img);
 188          }
 189      }    
 190      if( $this->filled ) {
 191          $cord[] = $xt;
 192          $cord[] = $yscale->Translate($yscale->GetMinVal());                    
 193          $img->SetColor($this->fill_color);    
 194          $img->FilledPolygon($cord);
 195          $img->SetColor($this->color);
 196          $img->Polygon($cord);
 197      }
 198      $adjust=0;
 199      if( $this->filled ) $adjust=2;
 200      for($i=$adjust; $i<count($cord)-$adjust; $i+=2) {
 201          if( is_numeric($this->coords[0][($i-$adjust)/2]) )
 202          $this->mark->Stroke($img,$cord[$i],$cord[$i+1]);
 203      }
 204      }
 205  //---------------
 206  // PRIVATE METHODS    
 207  } // Class
 208  
 209  
 210  //===================================================
 211  // CLASS AccLinePlot
 212  // Description: 
 213  //===================================================
 214  class AccLinePlot extends Plot {
 215      var $plots=null,$nbrplots=0,$numpoints=0;
 216  //---------------
 217  // CONSTRUCTOR
 218      function AccLinePlot($plots) {
 219      $this->plots = $plots;
 220      $this->nbrplots = count($plots);
 221      $this->numpoints = $plots[0]->numpoints;        
 222      }
 223  
 224  //---------------
 225  // PUBLIC METHODS    
 226      function Legend(&$graph) {
 227      foreach( $this->plots as $p )
 228          $p->Legend($graph);
 229      }
 230      
 231      function Max() {
 232      $accymax=0;
 233      list($xmax,$dummy) = $this->plots[0]->Max();
 234      foreach($this->plots as $p) {
 235          list($xm,$ym) = $p->Max();
 236          $xmax = max($xmax,$xm);
 237          $accymax += $ym;
 238      }
 239      return array($xmax,$accymax);
 240      }
 241  
 242      function Min() {
 243      list($xmin,$ymin)=$this->plots[0]->Min();
 244      foreach( $this->plots as $p ) {
 245          list($xm,$ym)=$p->Min();
 246          $xmin=Min($xmin,$xm);
 247          $ymin=Min($ymin,$ym);
 248      }
 249      return array($xmin,$ymin);    
 250      }
 251  
 252      // To avoid duplicate of line drawing code here we just
 253      // change the y-values for each plot and then restore it
 254      // after we have made the stroke. We must do this copy since
 255      // it wouldn't be possible to create an acc line plot
 256      // with the same graphs, i.e AccLinePlot(array($pl,$pl,$pl));
 257      // since this method would have a side effect.
 258      function Stroke(&$img,&$xscale,&$yscale) {
 259      $img->SetLineWeight($this->weight);
 260      // Allocate array
 261      $coords[$this->nbrplots][$this->numpoints]=0;
 262      for($i=0; $i<$this->numpoints; $i++) {
 263          $coords[0][$i]=$this->plots[0]->coords[0][$i]; 
 264          $accy=$coords[0][$i];
 265          for($j=1; $j<$this->nbrplots; ++$j ) {
 266          $coords[$j][$i] = $this->plots[$j]->coords[0][$i]+$accy; 
 267          $accy = $coords[$j][$i];
 268          }
 269      }
 270      for($j=$this->nbrplots-1; $j>=0; --$j) {
 271          $p=$this->plots[$j];
 272          for( $i=0; $i<$this->numpoints; ++$i) {
 273          $tmp[$i]=$p->coords[0][$i];
 274          $p->coords[0][$i]=$coords[$j][$i];
 275          }
 276          $p->Stroke($img,$xscale,$yscale);
 277          for( $i=0; $i<$this->numpoints; ++$i) 
 278          $p->coords[0][$i]=$tmp[$i];
 279          $p->coords[0][]=$tmp;
 280      }
 281      }
 282  } // Class
 283  
 284  /* EOF */
 285  ?>


Généré le : Sun Feb 25 17:20:01 2007 par Balluche grâce à PHPXref 0.7