source: trunk/client/modules/Elezioni/grafici/jpgraph_iconplot.php@ 392

Last change on this file since 392 was 284, checked in by roby, 6 years ago
File size: 5.9 KB
RevLine 
[2]1<?php
2//=======================================================================
[284]3// File: JPGRAPH_ICONPLOT.PHP
4// Description: Extension module to add icons to plots
5// Created: 2004-02-18
6// Ver: $Id: jpgraph_iconplot.php 1404 2009-06-28 15:25:41Z ljp $
[2]7//
[284]8// Copyright (c) Asial Corporation. All rights reserved.
[2]9//========================================================================
10
11
12//===================================================
13// CLASS IconPlot
14// Description: Make it possible to add a (small) image
15// to the graph
16//===================================================
17class IconPlot {
18 public $iX=0,$iY=0,$iScale=1.0,$iMix=100;
19 private $iHorAnchor='left',$iVertAnchor='top';
20 private $iFile='';
21 private $iAnchors = array('left','right','top','bottom','center');
22 private $iCountryFlag='',$iCountryStdSize=3;
23 private $iScalePosY=null,$iScalePosX=null;
24 private $iImgString='';
25
26
[284]27 function __construct($aFile="",$aX=0,$aY=0,$aScale=1.0,$aMix=100) {
28 $this->iFile = $aFile;
29 $this->iX=$aX;
30 $this->iY=$aY;
31 $this->iScale= $aScale;
32 if( $aMix < 0 || $aMix > 100 ) {
33 JpGraphError::RaiseL(8001); //('Mix value for icon must be between 0 and 100.');
34 }
35 $this->iMix = $aMix ;
[2]36 }
37
38 function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3) {
[284]39 $this->iCountryFlag = $aFlag;
40 $this->iX=$aX;
41 $this->iY=$aY;
42 $this->iScale= $aScale;
43 if( $aMix < 0 || $aMix > 100 ) {
44 JpGraphError::RaiseL(8001);//'Mix value for icon must be between 0 and 100.');
45 }
46 $this->iMix = $aMix;
47 $this->iCountryStdSize = $aStdSize;
[2]48 }
49
50 function SetPos($aX,$aY) {
[284]51 $this->iX=$aX;
52 $this->iY=$aY;
[2]53 }
54
55 function CreateFromString($aStr) {
[284]56 $this->iImgString = $aStr;
[2]57 }
58
59 function SetScalePos($aX,$aY) {
[284]60 $this->iScalePosX = $aX;
61 $this->iScalePosY = $aY;
[2]62 }
63
64 function SetScale($aScale) {
[284]65 $this->iScale = $aScale;
[2]66 }
67
68 function SetMix($aMix) {
[284]69 if( $aMix < 0 || $aMix > 100 ) {
70 JpGraphError::RaiseL(8001);//('Mix value for icon must be between 0 and 100.');
71 }
72 $this->iMix = $aMix ;
[2]73 }
74
75 function SetAnchor($aXAnchor='left',$aYAnchor='center') {
[284]76 if( !in_array($aXAnchor,$this->iAnchors) ||
77 !in_array($aYAnchor,$this->iAnchors) ) {
78 JpGraphError::RaiseL(8002);//("Anchor position for icons must be one of 'top', 'bottom', 'left', 'right' or 'center'");
79 }
80 $this->iHorAnchor=$aXAnchor;
81 $this->iVertAnchor=$aYAnchor;
[2]82 }
[284]83
[2]84 function PreStrokeAdjust($aGraph) {
[284]85 // Nothing to do ...
[2]86 }
87
88 function DoLegend($aGraph) {
[284]89 // Nothing to do ...
[2]90 }
91
92 function Max() {
[284]93 return array(false,false);
[2]94 }
95
96
97 // The next four function are framework function tht gets called
98 // from Gantt and is not menaiungfull in the context of Icons but
99 // they must be implemented to avoid errors.
100 function GetMaxDate() { return false; }
101 function GetMinDate() { return false; }
102 function GetLineNbr() { return 0; }
103 function GetAbsHeight() {return 0; }
104
105
106 function Min() {
[284]107 return array(false,false);
[2]108 }
109
110 function StrokeMargin(&$aImg) {
[284]111 return true;
[2]112 }
113
[284]114 function Stroke($aImg,$axscale=null,$ayscale=null) {
115 $this->StrokeWithScale($aImg,$axscale,$ayscale);
[2]116 }
117
118 function StrokeWithScale($aImg,$axscale,$ayscale) {
[284]119 if( $this->iScalePosX === null || $this->iScalePosY === null ||
120 $axscale === null || $ayscale === null ) {
121 $this->_Stroke($aImg);
122 }
123 else {
124 $this->_Stroke($aImg,
125 round($axscale->Translate($this->iScalePosX)),
126 round($ayscale->Translate($this->iScalePosY)));
127 }
[2]128 }
129
130 function GetWidthHeight() {
[284]131 $dummy=0;
132 return $this->_Stroke($dummy,null,null,true);
[2]133 }
134
135 function _Stroke($aImg,$x=null,$y=null,$aReturnWidthHeight=false) {
[284]136 if( $this->iFile != '' && $this->iCountryFlag != '' ) {
137 JpGraphError::RaiseL(8003);//('It is not possible to specify both an image file and a country flag for the same icon.');
138 }
139 if( $this->iFile != '' ) {
140 $gdimg = Graph::LoadBkgImage('',$this->iFile);
141 }
142 elseif( $this->iImgString != '') {
143 $gdimg = Image::CreateFromString($this->iImgString);
144 }
[2]145
[284]146 else {
147 if( ! class_exists('FlagImages',false) ) {
148 JpGraphError::RaiseL(8004);//('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.');
149 }
150 $fobj = new FlagImages($this->iCountryStdSize);
151 $dummy='';
152 $gdimg = $fobj->GetImgByName($this->iCountryFlag,$dummy);
153 }
[2]154
[284]155 $iconw = imagesx($gdimg);
156 $iconh = imagesy($gdimg);
[2]157
[284]158 if( $aReturnWidthHeight ) {
159 return array(round($iconw*$this->iScale),round($iconh*$this->iScale));
160 }
[2]161
[284]162 if( $x !== null && $y !== null ) {
163 $this->iX = $x; $this->iY = $y;
164 }
165 if( $this->iX >= 0 && $this->iX <= 1.0 ) {
166 $w = imagesx($aImg->img);
167 $this->iX = round($w*$this->iX);
168 }
169 if( $this->iY >= 0 && $this->iY <= 1.0 ) {
170 $h = imagesy($aImg->img);
171 $this->iY = round($h*$this->iY);
172 }
[2]173
[284]174 if( $this->iHorAnchor == 'center' )
175 $this->iX -= round($iconw*$this->iScale/2);
176 if( $this->iHorAnchor == 'right' )
177 $this->iX -= round($iconw*$this->iScale);
178 if( $this->iVertAnchor == 'center' )
179 $this->iY -= round($iconh*$this->iScale/2);
180 if( $this->iVertAnchor == 'bottom' )
181 $this->iY -= round($iconh*$this->iScale);
182
183 $aImg->CopyMerge($gdimg,$this->iX,$this->iY,0,0,
184 round($iconw*$this->iScale),round($iconh*$this->iScale),
185 $iconw,$iconh,
186 $this->iMix);
[2]187 }
188}
189
190?>
Note: See TracBrowser for help on using the repository browser.