[ Index ]
 

Code source de phpMyVisites 2.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/libs/artichow/php4/inc/ -> Tick.class.php (source)

   1  <?php
   2  /*
   3   * This work is hereby released into the Public Domain.
   4   * To view a copy of the public domain dedication,
   5   * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
   6   * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
   7   *
   8   */
   9   
  10  /* <php4> */
  11  
  12  define("TICK_IN", 0);
  13  define("TICK_OUT", 1);
  14  define("TICK_IN_OUT", 2);
  15  
  16  /* </php4> */
  17  
  18  /**
  19   * Handle ticks
  20   *
  21   * @package Artichow
  22   */
  23  class awTick {
  24  
  25      /**
  26       * Ticks style
  27       *
  28       * @var int
  29       */
  30      var $style = TICK_IN;
  31  
  32      /**
  33       * Ticks size
  34       *
  35       * @var int
  36       */
  37      var $size;
  38  
  39      /**
  40       * Ticks color
  41       *
  42       * @var Color
  43       */
  44      var $color;
  45  
  46      /**
  47       * Ticks number
  48       *
  49       * @var int
  50       */
  51      var $number;
  52  
  53      /**
  54       * Ticks number by other tick
  55       *
  56       * @var array
  57       */
  58      var $numberByTick;
  59  
  60      /**
  61       * Ticks interval
  62       *
  63       * @var int
  64       */
  65      var $interval = 1;
  66  
  67      /**
  68       * Hide ticks
  69       *
  70       * @var bool
  71       */
  72      var $hide = FALSE;
  73  
  74      /**
  75       * Hide first tick
  76       *
  77       * @var bool
  78       */
  79      var $hideFirst = FALSE;
  80  
  81      /**
  82       * Hide last tick
  83       *
  84       * @var bool
  85       */
  86      var $hideLast = FALSE;
  87      
  88      /**
  89       * In mode
  90       *
  91       * @param int
  92       */
  93      
  94      
  95      /**
  96       * Out mode
  97       *
  98       * @param int
  99       */
 100      
 101      
 102      /**
 103       * In and out mode
 104       *
 105       * @param int
 106       */
 107      
 108      
 109      /**
 110       * Build the ticks
 111       *
 112       * @param int $number Number of ticks
 113       * @param int $size Ticks size
 114       */
 115  	 function awTick($number, $size) {
 116          
 117          $this->setSize($size);
 118          $this->setNumber($number);
 119          $this->setColor(new awBlack);
 120          $this->style = TICK_IN;
 121      
 122      }
 123      
 124      /**
 125       * Change ticks style
 126       *
 127       * @param int $style
 128       */
 129  	 function setStyle($style) {
 130          $this->style = (int)$style;
 131      }
 132      
 133      /**
 134       * Get ticks style
 135       *
 136       * @return int
 137       */
 138  	 function getStyle() {
 139          return $this->style;
 140      }
 141      
 142      /**
 143       * Change ticks color
 144       *
 145       * @param $color
 146       */
 147  	 function setColor($color) {
 148          $this->color = $color;
 149      }
 150      
 151      /**
 152       * Change ticks size
 153       *
 154       * @param int $size
 155       */
 156  	 function setSize($size) {
 157          $this->size = (int)$size;
 158      }
 159      
 160      /**
 161       * Change interval of ticks
 162       *
 163       * @param int $interval
 164       */
 165  	 function setInterval($interval) {
 166          $this->interval = (int)$interval;
 167      }
 168      
 169      /**
 170       * Get interval between each tick
 171       *
 172       * @return int
 173       */
 174  	 function getInterval() {
 175          return $this->interval;
 176      }
 177      
 178      /**
 179       * Change number of ticks
 180       *
 181       * @param int $number
 182       */
 183  	 function setNumber($number) {
 184          $this->number = (int)$number;
 185      }
 186      
 187      /**
 188       * Get number of ticks
 189       *
 190       * @return int
 191       */
 192  	 function getNumber() {
 193          return $this->number;
 194      }
 195      
 196      /**
 197       * Change number of ticks relative to others ticks
 198       *
 199       * @param &$tick Ticks reference
 200       * @param int $number Number of ticks
 201       */
 202  	 function setNumberByTick(&$tick, $number) {
 203          
 204          $this->numberByTick = array(&$tick, (int)$number);
 205          
 206      }
 207      
 208      /**
 209       * Hide ticks
 210       *
 211       * @param bool $hide
 212       */
 213  	 function hide($hide) {
 214          $this->hide = (bool)$hide;
 215      }
 216      
 217      /**
 218       * Hide first tick
 219       *
 220       * @param bool $hide
 221       */
 222  	 function hideFirst($hide) {
 223          $this->hideFirst = (bool)$hide;
 224      }
 225      
 226      /**
 227       * Hide last tick
 228       *
 229       * @param bool $hide
 230       */
 231  	 function hideLast($hide) {
 232          $this->hideLast = (bool)$hide;
 233      }
 234      
 235      /**
 236       * Draw ticks on a vector
 237       *
 238       * @param $drawer A drawer
 239       * @param &$vector A vector
 240       */
 241  	 function draw($drawer, &$vector) {
 242          
 243          if($this->numberByTick !== NULL) {
 244              list($tick, $number) = $this->numberByTick;
 245              $this->number = 1 + ($tick->getNumber() - 1) * ($number + 1);
 246              $this->interval = $tick->getInterval();
 247          }
 248          
 249          if($this->number < 2 or $this->hide) {
 250              return;
 251          }
 252          
 253          $angle = $vector->getAngle();
 254      //    echo "INIT:".$angle."<br>";
 255          switch($this->style) {
 256          
 257              case TICK_IN :
 258                  $this->drawTicks($drawer, $vector, NULL, $angle + M_PI / 2);
 259                  break;
 260          
 261              case TICK_OUT :
 262                  $this->drawTicks($drawer, $vector, $angle + 3 * M_PI / 2, NULL);
 263                  break;
 264          
 265              default :
 266                  $this->drawTicks($drawer, $vector, $angle + M_PI / 2, $angle + 3 * M_PI / 2);
 267                  break;
 268          
 269          }
 270      
 271      }
 272      
 273  	 function drawTicks($drawer, &$vector, $from, $to) {
 274      
 275          // Draw last tick
 276          if($this->hideLast === FALSE) {
 277          
 278              //echo '<b>';
 279              if(($this->number - 1) % $this->interval === 0) {
 280                  $this->drawTick($drawer, $vector->p2, $from, $to);
 281              }
 282              //echo '</b>';
 283              
 284          }
 285          
 286          $number = $this->number - 1;
 287          $size = $vector->getSize();
 288          
 289          // Get tick increment in pixels
 290          $inc = $size / $number;
 291          
 292          // Check if we must hide the first tick
 293          $start = $this->hideFirst ? $inc : 0;
 294          $stop = $inc * $number;
 295          
 296          $position = 0;
 297          
 298          for($i = $start; round($i, 6) < $stop; $i += $inc) {
 299          
 300              if($position % $this->interval === 0) {
 301                  $p = $vector->p1->move(
 302                      round($i * cos($vector->getAngle()), 6),
 303                      round($i * sin($vector->getAngle() * -1), 6)
 304                  );
 305                  $this->drawTick($drawer, $p, $from, $to);
 306              }
 307              
 308              $position++;
 309              
 310          }
 311          //echo '<br><br>';
 312      }
 313      
 314  	 function drawTick($drawer, $p, $from, $to) {
 315  //    echo $this->size.':'.$angle.'|<b>'.cos($angle).'</b>/';
 316          // The round avoid some errors in the calcul
 317          // For example, 12.00000008575245 becomes 12
 318          $p1 = $p;
 319          $p2 = $p;
 320          
 321          if($from !== NULL) {
 322              $p1 = $p1->move(
 323                  round($this->size * cos($from), 6),
 324                  round($this->size * sin($from) * -1, 6)
 325              );
 326          }
 327          
 328          if($to !== NULL) {
 329              $p2 = $p2->move(
 330                  round($this->size * cos($to), 6),
 331                  round($this->size * sin($to) * -1, 6)
 332              );
 333          }
 334          //echo $p1->x.':'.$p2->x.'('.$p1->y.':'.$p2->y.')'.'/';
 335          $vector = new awVector(
 336              $p1, $p2
 337          );
 338          
 339          $drawer->line(
 340              $this->color,
 341              $vector
 342          );
 343          
 344      }
 345  
 346  }
 347  
 348  registerClass('Tick');
 349  ?>


Généré le : Mon Nov 26 14:10:01 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics