linea21-externals
[ class tree: linea21-externals ] [ index: linea21-externals ] [ all elements ]

Source for file Tick.class.php

Documentation is available at Tick.class.php

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

Documentation generated on Thu, 03 May 2012 15:07:51 +0200 by phpDocumentor 1.4.1