New file |
0,0 → 1,189 |
<?php |
//======================================================================= |
// File: JPGRAPH_ICONPLOT.PHP |
// Description: PHP4 Graph Plotting library. Extension module. |
// Created: 2004-02-18 |
// Ver: $Id: jpgraph_iconplot.php 838 2007-01-22 21:01:22Z ljp $ |
// |
// 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); |
} |
} |
|
?> |