| <?php |
| //======================================================================= |
| // File: JPGRAPH_ICONPLOT.PHP |
| // Description: PHP4 Graph Plotting library. Extension module. |
| // Created: 2004-02-18 |
| // Author: Johan Persson (johanp@aditus.nu) |
| // Ver: $Id$ |
| // |
| // Copyright (c) Aditus Consulting. All rights reserved. |
| //======================================================================== |
| |
| |
| //=================================================== |
| // CLASS IconPlot |
| // Description: Make it possible to add a (small) image |
| // to the graph |
| //=================================================== |
| class IconPlot { |
| var $iHorAnchor='left',$iVertAnchor='top'; |
| var $iX=0,$iY=0; |
| var $iFile=''; |
| var $iScale=1.0,$iMix=100; |
| var $iAnchors = array('left','right','top','bottom','center'); |
| var $iCountryFlag='',$iCountryStdSize=3; |
| var $iScalePosY=null,$iScalePosX=null; |
| var $iImgString=''; |
| |
| function IconPlot($aFile="",$aX=0,$aY=0,$aScale=1.0,$aMix=100) { |
| $this->iFile = $aFile; |
| $this->iX=$aX; |
| $this->iY=$aY; |
| $this->iScale= $aScale; |
| if( $aMix < 0 || $aMix > 100 ) { |
| JpGraphError::RaiseL(8001); //('Mix value for icon must be between 0 and 100.'); |
| } |
| $this->iMix = $aMix ; |
| } |
| |
| function CreateFromString($aStr) { |
| $this->iImgString = $aStr; |
| } |
| |
| function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3) { |
| $this->iCountryFlag = $aFlag; |
| $this->iX=$aX; |
| $this->iY=$aY; |
| $this->iScale= $aScale; |
| if( $aMix < 0 || $aMix > 100 ) { |
| JpGraphError::RaiseL(8001);//'Mix value for icon must be between 0 and 100.'); |
| } |
| $this->iMix = $aMix; |
| $this->iCountryStdSize = $aStdSize; |
| } |
| |
| function SetPos($aX,$aY) { |
| $this->iX=$aX; |
| $this->iY=$aY; |
| } |
| |
| function SetScalePos($aX,$aY) { |
| $this->iScalePosX = $aX; |
| $this->iScalePosY = $aY; |
| } |
| |
| function SetScale($aScale) { |
| $this->iScale = $aScale; |
| } |
| |
| function SetMix($aMix) { |
| if( $aMix < 0 || $aMix > 100 ) { |
| JpGraphError::RaiseL(8001);//('Mix value for icon must be between 0 and 100.'); |
| } |
| $this->iMix = $aMix ; |
| } |
| |
| function SetAnchor($aXAnchor='left',$aYAnchor='center') { |
| if( !in_array($aXAnchor,$this->iAnchors) || |
| !in_array($aYAnchor,$this->iAnchors) ) { |
| JpGraphError::RaiseL(8002);//("Anchor position for icons must be one of 'top', 'bottom', 'left', 'right' or 'center'"); |
| } |
| $this->iHorAnchor=$aXAnchor; |
| $this->iVertAnchor=$aYAnchor; |
| } |
| |
| function PreStrokeAdjust($aGraph) { |
| // Nothing to do ... |
| } |
| |
| function DoLegend($aGraph) { |
| // Nothing to do ... |
| } |
| |
| function Max() { |
| return array(false,false); |
| } |
| |
| |
| // The next four function are framework function tht gets called |
| // from Gantt and is not menaiungfull in the context of Icons but |
| // they must be implemented to avoid errors. |
| function GetMaxDate() { return false; } |
| function GetMinDate() { return false; } |
| function GetLineNbr() { return 0; } |
| function GetAbsHeight() {return 0; } |
| |
| |
| function Min() { |
| return array(false,false); |
| } |
| |
| function StrokeMargin(&$aImg) { |
| return true; |
| } |
| |
| function Stroke(&$aImg,$axscale,$ayscale) { |
| $this->StrokeWithScale($aImg,$axscale,$ayscale); |
| } |
| |
| function StrokeWithScale(&$aImg,$axscale,$ayscale) { |
| if( $this->iScalePosX === null || |
| $this->iScalePosY === null ) { |
| $this->_Stroke($aImg); |
| } |
| else { |
| $this->_Stroke($aImg, |
| round($axscale->Translate($this->iScalePosX)), |
| round($ayscale->Translate($this->iScalePosY))); |
| } |
| } |
| |
| function GetWidthHeight() { |
| $dummy=0; |
| return $this->_Stroke($dummy,null,null,true); |
| } |
| |
| function _Stroke(&$aImg,$x=null,$y=null,$aReturnWidthHeight=false) { |
| if( $this->iFile != '' && $this->iCountryFlag != '' ) { |
| JpGraphError::RaiseL(8003);//('It is not possible to specify both an image file and a country flag for the same icon.'); |
| } |
| if( $this->iFile != '' ) { |
| $gdimg = Graph::LoadBkgImage('',$this->iFile); |
| } |
| elseif( $this->iImgString != '') { |
| $gdimg = Image::CreateFromString($this->iImgString); |
| } |
| else { |
| if( ! class_exists('FlagImages') ) { |
| JpGraphError::RaiseL(8004);//('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.'); |
| } |
| $fobj = new FlagImages($this->iCountryStdSize); |
| $dummy=''; |
| $gdimg = $fobj->GetImgByName($this->iCountryFlag,$dummy); |
| } |
| |
| $iconw = imagesx($gdimg); |
| $iconh = imagesy($gdimg); |
| |
| if( $aReturnWidthHeight ) { |
| return array(round($iconw*$this->iScale),round($iconh*$this->iScale)); |
| } |
| |
| if( $x !== null && $y !== null ) { |
| $this->iX = $x; $this->iY = $y; |
| } |
| if( $this->iX >= 0 && $this->iX <= 1.0 ) { |
| $w = imagesx($aImg->img); |
| $this->iX = round($w*$this->iX); |
| } |
| if( $this->iY >= 0 && $this->iY <= 1.0 ) { |
| $h = imagesy($aImg->img); |
| $this->iY = round($h*$this->iY); |
| } |
| |
| if( $this->iHorAnchor == 'center' ) |
| $this->iX -= round($iconw*$this->iScale/2); |
| if( $this->iHorAnchor == 'right' ) |
| $this->iX -= round($iconw*$this->iScale); |
| if( $this->iVertAnchor == 'center' ) |
| $this->iY -= round($iconh*$this->iScale/2); |
| if( $this->iVertAnchor == 'bottom' ) |
| $this->iY -= round($iconh*$this->iScale); |
| |
| $aImg->CopyMerge($gdimg,$this->iX,$this->iY,0,0, |
| round($iconw*$this->iScale),round($iconh*$this->iScale), |
| $iconw,$iconh, |
| $this->iMix); |
| } |
| } |
| |
| ?> |