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 Fri, 16 Oct 2009 09:40:01 +0200 by phpDocumentor 1.4.1