- <?php
-
- /*
- **************************************************
- Class: Circle.php
- **************************************************
- Author: Tsiavos Chris <jaames@freemail.gr>
- Date: October 2004
- **************************************************/
-
- /**
- *Includes the Shape abstract class
- */
- require_once("Shape.php");
-
- /**
- *Subsidiary class utilized by the PieChart class
- *@author Tsiavos Chris <jaames@freemail.gr>
- *@license http://opensource.org/licenses/gpl-license.php GNU Public License
- */
- class Chunk {
-
- /**
- *the size of the chunk in degrees
- *@access private
- *@var integer
- */
- private $Angle;
-
- /**
- *the caption of the chunk
- *@access private
- *@var string
- */
- private $Caption;
-
- /**
- *@access private
- *@var string
- */
- private $CaptionColor;
-
- /**
- *the starting color of the chunk
- *@access private
- *@var string
- */
- private $StartColor;
-
- /**
- *the finishing color of the chunk. If $FinishColor
- *is different from $StartColor then a gradient color chunk
- *will be drawn
- *@access private
- *@var string
- */
- private $FinishColor;
-
- /**
- *the Font instance used for drawing the chunk's caption
- *@access private
- *@var Font
- */
- private $Font;
-
- /**
- *Sets the size of the chunk in degrees
- *@access public
- *@return void
- *@param integer $Degree
- */
- public function set_Angle($Degree) {
- $this->Angle=$Degree;
- }
-
- /**
- *Returns (in degrees) the size of the chunk
- *@access public
- *@return integer
- */
- public function get_Angle() {
- return $this->Angle;
- }
-
- /**
- *Sets the caption of the chunk
- *@access public
- *@return void
- *@param Font &$Font
- *@param string $Caption
- *@param string $CaptionColor
- */
- public function set_Caption(Font &$Font,$Caption,$CaptionColor) {
- $this->Font=$Font;
- $this->Caption=$Caption;
- $this->CaptionColor=$CaptionColor;
- }
-
- /**
- *Returns the caption of the chunk
- *@access public
- *@return string
- */
- public function get_Caption() {
- return $this->Caption;
- }
-
- /**
- *Returns the font color of the chunk's caption
- *@access public
- *@return string
- */
- public function get_CaptionColor() {
- return $this->CaptionColor;
- }
-
- /**
- *Sets the color the chunk will be filled in.
- *@access public
- *@return void
- *@param string $StartColor The starting color of the chunk
- *@param string $FinishColor The finishing color of the chunk.If $StartColor
- *iis different from $FinishColor then a gradient color will be alllocated
- */
- public function set_Color($StartColor,$FinishColor) {
- $this->StartColor=$StartColor;
- $this->FinishColor=$FinishColor;
- }
-
- /**
- *Returns the starting color of the chunk
- *@access public
- *@return string
- */
- public function get_StartColor() {
- return $this->StartColor;
- }
-
- /**
- *Returns the finishing color of the chunk
- *@access public
- *@return string
- */
- public function get_FinishColor() {
- return $this->FinishColor;
- }
-
- /**
- *Returns the Font instance used for drawing the caption of the chunk
- *@access public
- *@var Font
- */
- public function get_Font() {
- return $this->Font;
- }
-
- }
-
- /**
- *Wrapper around gd's Image(Filled)Arc functions
- *This class is utilized by the PieChart class for generating
- *the pie chart type
- *@author Tsiavos Chris <jaames@freemail.gr>
- *@license http://opensource.org/licenses/gpl-license.php GNU Public License
- */
- class Circle extends Shape {
-
- /**
- *x value of the pie's center position
- *@access private
- *@var integer
- */
- private $Center_XPos;
-
- /**
- *y value of the pie's center position
- *@access private
- *@var integer
- */
- private $Center_YPos;
-
- /**
- *pie's width
- *@access private
- *@return integer
- */
- private $Width;
-
- /**
- *pie's height
- *@access private
- *@return integer
- */
- private $Height;
-
- /**
- *Array holding the chunks composing the pie
- *@access private
- *@return Chunk[]
- */
- private $Chunk=array();
-
- /**
- *@access private
- *@var integer
- */
- private $Current_Degree;
-
- /**
- *Constructor
- *@param mixed $Canvas Reference to the image handler the pie will be drawn in
- *@param ColorAllocator $ColorAllocator Reference to the ColorAllocator the class will use for allocating chunks' colors
- *@param integer $Center_XPos x value of the pie's center position
- *@param integer $Center_YPos y value of the pie's center position
- *@param integer $Width Pie's width
- *@param integer $Height Pie's height
- */
- function __construct(&$Canvas,ColorAllocator &$ColorAllocator,$UseAntialias,$Center_XPos,$Center_YPos,$Width,$Height) {
-
- Shape::__construct($Canvas,$ColorAllocator,$UseAntialias);
- $this->Center_XPos=$Center_XPos;
- $this->Center_YPos=$Center_YPos;
- $this->Width=$Width;
- $this->Height=$Height;
- $this->Current_Degree=-1;
- }
-
- /**
- *Adds a chunk to the pie
- *@access public
- *@return void
- *@param Chunk &$chunk
- */
- public function addChunk(Chunk $chunk) {
- array_push($this->Chunk,$chunk);
- }
-
- /**
- *Draws a filled with color pie
- *@access public
- *@return void
- */
- public function draw_Filled() {
- for ($chunk=0;$chunk<count($this->Chunk);$chunk++) {
-
- $ColorRange=$this->Chunk[$chunk]->get_Angle();
- $StartColor=$this->Chunk[$chunk]->get_StartColor();
- $FinishColor=$this->Chunk[$chunk]->get_FinishColor();
-
- $ColorHandler=$this->ColorAllocator->Allocate($this->Canvas,$StartColor,$FinishColor,0,$ColorRange);
-
- if (is_array($ColorHandler))
- $this->draw_GradientChunk($chunk,$ColorHandler);
- else
- $this->draw_Chunk($chunk,$ColorHandler);
- }
-
- $this->draw_Caption();
- }
-
- /**
- *Draws the border of the pie
- *@access public
- *@return void
- *@param string $BorderColor
- */
- public function draw($BorderColor) {
- if ($this->UseAntialias=="Yes")
- ImageAntialias($this->Canvas,1);
-
- $ColorHandler=$this->ColorAllocator->Allocate($this->Canvas,$BorderColor,$BorderColor,0,1);
-
- ImageEllipse($this->Canvas,$this->Center_XPos,$this->Center_YPos,$this->Width,$this->Height,$ColorHandler);
-
- $this->Current_Degree=-1;
-
- for ($chunk=0;$chunk<count($this->Chunk);$chunk++) {
- $this->Current_Degree++;
- $Angle=($this->Current_Degree+$this->Chunk[$chunk]->get_Angle())*(-1);
-
- $Line_XPos=($this->Width/2)*cos(deg2rad($Angle+1));
- $Line_YPos=($this->Width/2)*sin(deg2rad($Angle+1));
-
- $LineXPos=$this->Center_XPos+$Line_XPos;
- $LineYPos=$this->Center_YPos+$Line_YPos*-1;
-
- ImageLine($this->Canvas,$LineXPos,$LineYPos,$this->Center_XPos,$this->Center_YPos,$ColorHandler);
-
- $this->Current_Degree+=$this->Chunk[$chunk]->get_Angle();
- }
-
- if ($this->UseAntialias=="Yes")
- ImageAntialias($this->Canvas,0);
- }
-
- /**
- *This function is called by Circle::draw() to draw a gradient color chunk if Chunk::$StartColor is different from Chunk::$FinishColor
- *@access private
- *@return void
- */
- private function draw_GradientChunk($chunk,$ColorHandler) {
- $CurrentDegree=$this->Current_Degree++;
-
- for ($Degree=$CurrentDegree;$Degree<$CurrentDegree+$this->Chunk[$chunk]->get_Angle();$Degree++)
- ImageFilledArc($this->Canvas,$this->Center_XPos,$this->Center_YPos,$this->Width,$this->Height,$Degree,$Degree+1,$ColorHandler[$Degree-$CurrentDegree],IMAGE_ARC_PIE);
-
- $this->Current_Degree+=$this->Chunk[$chunk]->get_Angle();
- }
-
- /**
- *This function is called by Circle::draw() to draw a uniform color chunk if Chunk::$StartColor and Chunk::$FinishColor are the same colors
- *@access private
- *@return void
- */
- private function draw_Chunk($chunk,$ColorHandler) {
- $StartDegree=$this->Current_Degree++;
- $EndDegree=$this->Current_Degree+$this->Chunk[$chunk]->get_Angle();
-
- ImageFilledArc($this->Canvas,$this->Center_XPos,$this->Center_YPos,$this->Width,$this->Height,$StartDegree,$EndDegree,$ColorHandler,IMAGE_ARC_PIE);
-
- $this->Current_Degree+=$this->Chunk[$chunk]->get_Angle();
- }
-
- /**
- *Draws the caption of each chunk
- *@access private
- *@return void
- */
- private function draw_Caption() {
- $this->Current_Degree=-1;
-
- for ($chunk=0;$chunk<count($this->Chunk);$chunk++) {
- $this->Current_Degree++;
- $Angle=($this->Current_Degree+$this->Chunk[$chunk]->get_Angle()/2)*(-1);
-
- $PreviousCaption_XPos=($this->Width/2)*cos(deg2rad($Angle));
- $PreviousCaption_YPos=($this->Width/2)*sin(deg2rad($Angle));
-
- $Caption_XPos=$this->Center_XPos+$PreviousCaption_XPos/2;
- $Caption_YPos=$this->Center_YPos+($PreviousCaption_YPos/2)*-1;
-
- $Caption=$this->Chunk[$chunk]->get_Caption();
- $CaptionColor=$this->Chunk[$chunk]->get_CaptionColor();
-
- $this->Chunk[$chunk]->get_Font()->draw_String($Caption_XPos,$Caption_YPos,$Caption,$CaptionColor);
-
- $this->Current_Degree+=$this->Chunk[$chunk]->get_Angle();
- }
- }
- }
-
- ?>