Changeset 267 for trunk/client/modules/Elezioni/grafici/jpgraph_polar.php
- Timestamp:
- Apr 14, 2019, 2:31:40 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/modules/Elezioni/grafici/jpgraph_polar.php
r265 r267 1 1 <?php 2 2 /*======================================================================= 3 // File:JPGRAPH_POLAR.PHP4 // Description:Polar plot extension for JpGraph5 // Created:2003-02-026 // Ver: $Id: jpgraph_polar.php 1796 2009-09-07 09:37:19Z ljp $7 8 // Copyright (c) Asial Corporation. All rights reserved.9 10 3 // File: JPGRAPH_POLAR.PHP 4 // Description: Polar plot extension for JpGraph 5 // Created: 2003-02-02 6 // Ver: $Id: jpgraph_polar.php 1091 2009-01-18 22:57:40Z ljp $ 7 // 8 // Copyright (c) Aditus Consulting. All rights reserved. 9 //======================================================================== 10 */ 11 11 12 12 require_once ('jpgraph_plotmark.inc.php'); … … 25 25 // There were two option. 1: Re-implement everything and get a clean design 26 26 // and 2: do some "small" trickery and be able to inherit most of 27 // the functionlity from the main graph package. 27 // the functionlity from the main graph package. 28 28 // We choose 2: here in order to save some time. 29 // 29 // 30 30 31 31 //-------------------------------------------------------------------------- … … 37 37 public $legendcsimalt=''; 38 38 public $legend=""; 39 public $csimtargets=array(); 40 public $csimareas=""; // Resultant CSIM area tags41 public $csimalts=null; 39 public $csimtargets=array(); // Array of targets for CSIM 40 public $csimareas=""; // Resultant CSIM area tags 41 public $csimalts=null; // ALT:s for corresponding target 42 42 public $scale=null; 43 43 private $numpoints=0; … … 46 46 private $coord=null; 47 47 48 function __construct($aData) {49 50 51 52 53 54 55 56 48 function PolarPlot($aData) { 49 $n = count($aData); 50 if( $n & 1 ) { 51 JpGraphError::RaiseL(17001); 52 //('Polar plots must have an even number of data point. Each data point is a tuple (angle,radius).'); 53 } 54 $this->numpoints = $n/2; 55 $this->coord = $aData; 56 $this->mark = new PlotMark(); 57 57 } 58 58 59 59 function SetWeight($aWeight) { 60 60 $this->iLineWeight = $aWeight; 61 61 } 62 62 63 63 function SetColor($aColor){ 64 64 $this->iColor = $aColor; 65 65 } 66 66 67 67 function SetFillColor($aColor){ 68 68 $this->iFillColor = $aColor; 69 69 } 70 70 71 71 function Max() { 72 73 74 75 $m = max($m,$this->coord[2*$i+1]); 76 77 } 78 79 } 80 // Set href targets for CSIM 72 $m = $this->coord[1]; 73 $i=1; 74 while( $i < $this->numpoints ) { 75 $m = max($m,$this->coord[2*$i+1]); 76 ++$i; 77 } 78 return $m; 79 } 80 // Set href targets for CSIM 81 81 function SetCSIMTargets($aTargets,$aAlts=null) { 82 83 $this->csimalts=$aAlts; 84 } 85 82 $this->csimtargets=$aTargets; 83 $this->csimalts=$aAlts; 84 } 85 86 86 // Get all created areas 87 87 function GetCSIMareas() { 88 89 } 90 88 return $this->csimareas; 89 } 90 91 91 function SetLegend($aLegend,$aCSIM="",$aCSIMAlt="") { 92 93 94 92 $this->legend = $aLegend; 93 $this->legendcsimtarget = $aCSIM; 94 $this->legendcsimalt = $aCSIMAlt; 95 95 } 96 96 … … 98 98 99 99 function Legend($aGraph) { 100 101 102 103 104 105 $this->legendcsimtarget,$this->legendcsimalt); 106 107 108 109 $this->legendcsimtarget,$this->legendcsimalt); 110 111 100 $color = $this->iColor ; 101 if( $this->legend != "" ) { 102 if( $this->iFillColor!='' ) { 103 $color = $this->iFillColor; 104 $aGraph->legend->Add($this->legend,$color,$this->mark,0, 105 $this->legendcsimtarget,$this->legendcsimalt); 106 } 107 else { 108 $aGraph->legend->Add($this->legend,$color,$this->mark,$this->line_style, 109 $this->legendcsimtarget,$this->legendcsimalt); 110 } 111 } 112 112 } 113 113 114 114 function Stroke($img,$scale) { 115 115 116 $i=0; 117 $p=array(); 118 $this->csimareas=''; 119 while($i < $this->numpoints) { 120 list($x1,$y1) = $scale->PTranslate($this->coord[2*$i],$this->coord[2*$i+1]); 121 $p[2*$i] = $x1; 122 $p[2*$i+1] = $y1; 123 124 if( isset($this->csimtargets[$i]) ) { 125 $this->mark->SetCSIMTarget($this->csimtargets[$i]); 126 $this->mark->SetCSIMAlt($this->csimalts[$i]); 127 $this->mark->SetCSIMAltVal($this->coord[2*$i], $this->coord[2*$i+1]); 128 $this->mark->Stroke($img,$x1,$y1); 129 $this->csimareas .= $this->mark->GetCSIMAreas(); 130 } 131 else { 132 $this->mark->Stroke($img,$x1,$y1); 133 } 134 135 ++$i; 136 } 137 138 if( $this->iFillColor != '' ) { 139 $img->SetColor($this->iFillColor); 140 $img->FilledPolygon($p); 141 } 142 $img->SetLineWeight($this->iLineWeight); 143 $img->SetColor($this->iColor); 144 $img->Polygon($p,$this->iFillColor!=''); 116 $i=0; 117 $p=array(); 118 $this->csimareas=''; 119 while($i < $this->numpoints) { 120 list($x1,$y1) = $scale->PTranslate($this->coord[2*$i],$this->coord[2*$i+1]); 121 $p[2*$i] = $x1; 122 $p[2*$i+1] = $y1; 123 124 if( isset($this->csimtargets[$i]) ) { 125 $this->mark->SetCSIMTarget($this->csimtargets[$i]); 126 $this->mark->SetCSIMAlt($this->csimalts[$i]); 127 $this->mark->SetCSIMAltVal($this->coord[2*$i], $this->coord[2*$i+1]); 128 $this->mark->Stroke($img,$x1,$y1); 129 $this->csimareas .= $this->mark->GetCSIMAreas(); 130 } 131 else 132 $this->mark->Stroke($img,$x1,$y1); 133 134 ++$i; 135 } 136 137 if( $this->iFillColor != '' ) { 138 $img->SetColor($this->iFillColor); 139 $img->FilledPolygon($p); 140 } 141 $img->SetLineWeight($this->iLineWeight); 142 $img->SetColor($this->iColor); 143 $img->Polygon($p,$this->iFillColor!=''); 145 144 } 146 145 } … … 160 159 private $radius_tick_color='black'; 161 160 162 function __construct($img,$aScale) {163 parent::__construct($img,$aScale);161 function PolarAxis($img,$aScale) { 162 parent::Axis($img,$aScale); 164 163 } 165 164 166 165 function ShowAngleDegreeMark($aFlg=true) { 167 166 $this->show_angle_mark = $aFlg; 168 167 } 169 168 170 169 function SetAngleStep($aStep) { 171 170 $this->angle_step=$aStep; 172 171 } 173 172 174 173 function HideTicks($aFlg=true,$aAngleFlg=true) { 175 176 174 parent::HideTicks($aFlg,$aFlg); 175 $this->show_angle_tick = !$aAngleFlg; 177 176 } 178 177 179 178 function ShowAngleLabel($aFlg=true) { 180 179 $this->show_angle_label = $aFlg; 181 180 } 182 181 183 182 function ShowGrid($aMajor=true,$aMinor=false,$aAngle=true) { 184 185 186 183 $this->show_minor_grid = $aMinor; 184 $this->show_major_grid = $aMajor; 185 $this->show_angle_grid = $aAngle ; 187 186 } 188 187 189 188 function SetAngleFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=10) { 190 191 192 189 $this->angle_fontfam = $aFontFam; 190 $this->angle_fontstyle = $aFontStyle; 191 $this->angle_fontsize = $aFontSize; 193 192 } 194 193 195 194 function SetColor($aColor,$aRadColor='',$aAngleColor='') { 196 197 198 199 195 if( $aAngleColor == '' ) 196 $aAngleColor=$aColor; 197 parent::SetColor($aColor,$aRadColor); 198 $this->angle_fontcolor = $aAngleColor; 200 199 } 201 200 202 201 function SetGridColor($aMajorColor,$aMinorColor='',$aAngleColor='') { 203 if( $aMinorColor == '' ) 204 205 if( $aAngleColor == '' ) 206 207 208 209 210 202 if( $aMinorColor == '' ) 203 $aMinorColor = $aMajorColor; 204 if( $aAngleColor == '' ) 205 $aAngleColor = $aMajorColor; 206 207 $this->gridminor_color = $aMinorColor; 208 $this->gridmajor_color = $aMajorColor; 209 $this->angle_color = $aAngleColor; 211 210 } 212 211 213 212 function SetTickColors($aRadColor,$aAngleColor='') { 214 215 216 } 217 213 $this->radius_tick_color = $aRadColor; 214 $this->angle_tick_color = $aAngleColor; 215 } 216 218 217 // Private methods 219 218 function StrokeGrid($pos) { 220 221 222 223 // Stroke the minor arcs 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 // Stroke the major arcs 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 219 $x = round($this->img->left_margin + $this->img->plotwidth/2); 220 $this->scale->ticks->Stroke($this->img,$this->scale,$pos); 221 222 // Stroke the minor arcs 223 $pmin = array(); 224 $p = $this->scale->ticks->ticks_pos; 225 $n = count($p); 226 $i = 0; 227 $this->img->SetColor($this->gridminor_color); 228 while( $i < $n ) { 229 $r = $p[$i]-$x+1; 230 $pmin[]=$r; 231 if( $this->show_minor_grid ) { 232 $this->img->Circle($x,$pos,$r); 233 } 234 $i++; 235 } 236 237 $limit = max($this->img->plotwidth,$this->img->plotheight)*1.4 ; 238 while( $r < $limit ) { 239 $off = $r; 240 $i=1; 241 $r = $off + round($p[$i]-$x+1); 242 while( $r < $limit && $i < $n ) { 243 $r = $off+$p[$i]-$x; 244 $pmin[]=$r; 245 if( $this->show_minor_grid ) { 246 $this->img->Circle($x,$pos,$r); 247 } 248 $i++; 249 } 250 } 251 252 // Stroke the major arcs 253 if( $this->show_major_grid ) { 254 // First determine how many minor step on 255 // every major step. We have recorded the minor radius 256 // in pmin and use these values. This is done in order 257 // to avoid rounding errors if we were to recalculate the 258 // different major radius. 259 $pmaj = $this->scale->ticks->maj_ticks_pos; 260 $p = $this->scale->ticks->ticks_pos; 261 if( $this->scale->name == 'lin' ) { 262 $step=round(($pmaj[1] - $pmaj[0])/($p[1] - $p[0])); 263 } 264 else { 265 $step=9; 266 } 267 $n = round(count($pmin)/$step); 268 $i = 0; 269 $this->img->SetColor($this->gridmajor_color); 270 $limit = max($this->img->plotwidth,$this->img->plotheight)*1.4 ; 271 $off = $r; 272 $i=0; 273 $r = $pmin[$i*$step]; 274 while( $r < $limit && $i < $n ) { 275 $r = $pmin[$i*$step]; 276 $this->img->Circle($x,$pos,$r); 277 $i++; 278 } 279 } 280 281 // Draw angles 282 if( $this->show_angle_grid ) { 283 $this->img->SetColor($this->angle_color); 284 $d = max($this->img->plotheight,$this->img->plotwidth)*1.4 ; 285 $a = 0; 286 $p = $this->scale->ticks->ticks_pos; 287 $start_radius = $p[1]-$x; 288 while( $a < 360 ) { 289 if( $a == 90 || $a == 270 ) { 290 // Make sure there are no rounding problem with 291 // exactly vertical lines 292 $this->img->Line($x+$start_radius*cos($a/180*M_PI)+1, 293 $pos-$start_radius*sin($a/180*M_PI), 294 $x+$start_radius*cos($a/180*M_PI)+1, 295 $pos-$d*sin($a/180*M_PI)); 296 297 } 298 else { 299 $this->img->Line($x+$start_radius*cos($a/180*M_PI)+1, 300 $pos-$start_radius*sin($a/180*M_PI), 301 $x+$d*cos($a/180*M_PI), 302 $pos-$d*sin($a/180*M_PI)); 303 } 304 $a += $this->angle_step; 305 } 306 } 308 307 } 309 308 310 309 function StrokeAngleLabels($pos,$type) { 311 310 312 if( !$this->show_angle_label ) 313 return; 314 315 $x0 = round($this->img->left_margin+$this->img->plotwidth/2)+1; 316 317 $d = max($this->img->plotwidth,$this->img->plotheight)*1.42; 318 $a = $this->angle_step; 319 $t = new Text(); 320 $t->SetColor($this->angle_fontcolor); 321 $t->SetFont($this->angle_fontfam,$this->angle_fontstyle,$this->angle_fontsize); 322 $xright = $this->img->width - $this->img->right_margin; 323 $ytop = $this->img->top_margin; 324 $xleft = $this->img->left_margin; 325 $ybottom = $this->img->height - $this->img->bottom_margin; 326 $ha = 'left'; 327 $va = 'center'; 328 $w = $this->img->plotwidth/2; 329 $h = $this->img->plotheight/2; 330 $xt = $x0; $yt = $pos; 331 $margin=5; 332 333 $tl = $this->angle_tick_len ; // Outer len 334 $tl2 = $this->angle_tick_len2 ; // Interior len 335 336 $this->img->SetColor($this->angle_tick_color); 337 $rot90 = $this->img->a == 90 ; 338 339 if( $type == POLAR_360 ) { 340 341 // Corner angles of the four corners 342 $ca1 = atan($h/$w)/M_PI*180; 343 $ca2 = 180-$ca1; 344 $ca3 = $ca1+180; 345 $ca4 = 360-$ca1; 346 $end = 360; 347 348 while( $a < $end ) { 349 $ca = cos($a/180*M_PI); 350 $sa = sin($a/180*M_PI); 351 $x = $d*$ca; 352 $y = $d*$sa; 353 $xt=1000;$yt=1000; 354 if( $a <= $ca1 || $a >= $ca4 ) { 355 $yt = $pos - $w * $y/$x; 356 $xt = $xright + $margin; 357 if( $rot90 ) { 358 $ha = 'center'; 359 $va = 'top'; 360 } 361 else { 362 $ha = 'left'; 363 $va = 'center'; 364 } 365 $x1=$xright-$tl2; $x2=$xright+$tl; 366 $y1=$y2=$yt; 367 } 368 elseif( $a > $ca1 && $a < $ca2 ) { 369 $xt = $x0 + $h * $x/$y; 370 $yt = $ytop - $margin; 371 if( $rot90 ) { 372 $ha = 'left'; 373 $va = 'center'; 374 } 375 else { 376 $ha = 'center'; 377 $va = 'bottom'; 378 } 379 $y1=$ytop+$tl2;$y2=$ytop-$tl; 380 $x1=$x2=$xt; 381 } 382 elseif( $a >= $ca2 && $a <= $ca3 ) { 383 $yt = $pos + $w * $y/$x; 384 $xt = $xleft - $margin; 385 if( $rot90 ) { 386 $ha = 'center'; 387 $va = 'bottom'; 388 } 389 else { 390 $ha = 'right'; 391 $va = 'center'; 392 } 393 $x1=$xleft+$tl2;$x2=$xleft-$tl; 394 $y1=$y2=$yt; 395 } 396 else { 397 $xt = $x0 - $h * $x/$y; 398 $yt = $ybottom + $margin; 399 if( $rot90 ) { 400 $ha = 'right'; 401 $va = 'center'; 402 } 403 else { 404 $ha = 'center'; 405 $va = 'top'; 406 } 407 $y1=$ybottom-$tl2;$y2=$ybottom+$tl; 408 $x1=$x2=$xt; 409 } 410 if( $a != 0 && $a != 180 ) { 411 $t->Align($ha,$va); 412 if( $this->scale->clockwise ) { 413 $t->Set(360-$a); 414 } 415 else { 416 $t->Set($a); 417 } 418 if( $this->show_angle_mark && $t->font_family > 4 ) { 419 $a .= SymChar::Get('degree'); 420 } 421 $t->Stroke($this->img,$xt,$yt); 422 if( $this->show_angle_tick ) { 423 $this->img->Line($x1,$y1,$x2,$y2); 424 } 425 } 426 $a = (int) $a; 427 $a += $this->angle_step; 428 } 429 } 430 else { 431 // POLAR_HALF 432 $ca1 = atan($h/$w*2)/M_PI*180; 433 $ca2 = 180-$ca1; 434 $end = 180; 435 while( $a < $end ) { 436 $ca = cos($a/180*M_PI); 437 $sa = sin($a/180*M_PI); 438 $x = $d*$ca; 439 $y = $d*$sa; 440 if( $a <= $ca1 ) { 441 $yt = $pos - $w * $y/$x; 442 $xt = $xright + $margin; 443 if( $rot90 ) { 444 $ha = 'center'; 445 $va = 'top'; 446 } 447 else { 448 $ha = 'left'; 449 $va = 'center'; 450 } 451 $x1=$xright-$tl2; $x2=$xright+$tl; 452 $y1=$y2=$yt; 453 } 454 elseif( $a > $ca1 && $a < $ca2 ) { 455 $xt = $x0 + 2*$h * $x/$y; 456 $yt = $ytop - $margin; 457 if( $rot90 ) { 458 $ha = 'left'; 459 $va = 'center'; 460 } 461 else { 462 $ha = 'center'; 463 $va = 'bottom'; 464 } 465 $y1=$ytop+$tl2;$y2=$ytop-$tl; 466 $x1=$x2=$xt; 467 } 468 elseif( $a >= $ca2 ) { 469 $yt = $pos + $w * $y/$x; 470 $xt = $xleft - $margin; 471 if( $rot90 ) { 472 $ha = 'center'; 473 $va = 'bottom'; 474 } 475 else { 476 $ha = 'right'; 477 $va = 'center'; 478 } 479 $x1=$xleft+$tl2;$x2=$xleft-$tl; 480 $y1=$y2=$yt; 481 } 482 $t->Align($ha,$va); 483 if( $this->show_angle_mark && $t->font_family > 4 ) { 484 $a .= SymChar::Get('degree'); 485 } 486 $t->Set($a); 487 $t->Stroke($this->img,$xt,$yt); 488 if( $this->show_angle_tick ) { 489 $this->img->Line($x1,$y1,$x2,$y2); 490 } 491 $a = (int) $a; 492 $a += $this->angle_step; 493 } 494 } 311 if( !$this->show_angle_label ) 312 return; 313 314 $x0 = round($this->img->left_margin+$this->img->plotwidth/2)+1; 315 316 $d = max($this->img->plotwidth,$this->img->plotheight)*1.42; 317 $a = $this->angle_step; 318 $t = new Text(); 319 $t->SetColor($this->angle_fontcolor); 320 $t->SetFont($this->angle_fontfam,$this->angle_fontstyle,$this->angle_fontsize); 321 $xright = $this->img->width - $this->img->right_margin; 322 $ytop = $this->img->top_margin; 323 $xleft = $this->img->left_margin; 324 $ybottom = $this->img->height - $this->img->bottom_margin; 325 $ha = 'left'; 326 $va = 'center'; 327 $w = $this->img->plotwidth/2; 328 $h = $this->img->plotheight/2; 329 $xt = $x0; $yt = $pos; 330 $margin=5; 331 332 $tl = $this->angle_tick_len ; // Outer len 333 $tl2 = $this->angle_tick_len2 ; // Interior len 334 335 $this->img->SetColor($this->angle_tick_color); 336 $rot90 = $this->img->a == 90 ; 337 338 if( $type == POLAR_360 ) { 339 $ca1 = atan($h/$w)/M_PI*180; 340 $ca2 = 180-$ca1; 341 $ca3 = $ca1+180; 342 $ca4 = 360-$ca1; 343 $end = 360; 344 while( $a < $end ) { 345 $ca = cos($a/180*M_PI); 346 $sa = sin($a/180*M_PI); 347 $x = $d*$ca; 348 $y = $d*$sa; 349 $xt=1000;$yt=1000; 350 if( $a <= $ca1 || $a >= $ca4 ) { 351 $yt = $pos - $w * $y/$x; 352 $xt = $xright + $margin; 353 if( $rot90 ) { 354 $ha = 'center'; 355 $va = 'top'; 356 } 357 else { 358 $ha = 'left'; 359 $va = 'center'; 360 } 361 $x1=$xright-$tl2; $x2=$xright+$tl; 362 $y1=$y2=$yt; 363 } 364 elseif( $a > $ca1 && $a < $ca2 ) { 365 $xt = $x0 + $h * $x/$y; 366 $yt = $ytop - $margin; 367 if( $rot90 ) { 368 $ha = 'left'; 369 $va = 'center'; 370 } 371 else { 372 $ha = 'center'; 373 $va = 'bottom'; 374 } 375 $y1=$ytop+$tl2;$y2=$ytop-$tl; 376 $x1=$x2=$xt; 377 } 378 elseif( $a >= $ca2 && $a <= $ca3 ) { 379 $yt = $pos + $w * $y/$x; 380 $xt = $xleft - $margin; 381 if( $rot90 ) { 382 $ha = 'center'; 383 $va = 'bottom'; 384 } 385 else { 386 $ha = 'right'; 387 $va = 'center'; 388 } 389 $x1=$xleft+$tl2;$x2=$xleft-$tl; 390 $y1=$y2=$yt; 391 } 392 else { 393 $xt = $x0 - $h * $x/$y; 394 $yt = $ybottom + $margin; 395 if( $rot90 ) { 396 $ha = 'right'; 397 $va = 'center'; 398 } 399 else { 400 $ha = 'center'; 401 $va = 'top'; 402 } 403 $y1=$ybottom-$tl2;$y2=$ybottom+$tl; 404 $x1=$x2=$xt; 405 } 406 if( $a != 0 && $a != 180 ) { 407 $t->Align($ha,$va); 408 if( $this->show_angle_mark ) 409 $a .= '°'; 410 $t->Set($a); 411 $t->Stroke($this->img,$xt,$yt); 412 if( $this->show_angle_tick ) 413 $this->img->Line($x1,$y1,$x2,$y2); 414 } 415 $a += $this->angle_step; 416 } 417 } 418 else { 419 // POLAR_HALF 420 $ca1 = atan($h/$w*2)/M_PI*180; 421 $ca2 = 180-$ca1; 422 $end = 180; 423 while( $a < $end ) { 424 $ca = cos($a/180*M_PI); 425 $sa = sin($a/180*M_PI); 426 $x = $d*$ca; 427 $y = $d*$sa; 428 if( $a <= $ca1 ) { 429 $yt = $pos - $w * $y/$x; 430 $xt = $xright + $margin; 431 if( $rot90 ) { 432 $ha = 'center'; 433 $va = 'top'; 434 } 435 else { 436 $ha = 'left'; 437 $va = 'center'; 438 } 439 $x1=$xright-$tl2; $x2=$xright+$tl; 440 $y1=$y2=$yt; 441 } 442 elseif( $a > $ca1 && $a < $ca2 ) { 443 $xt = $x0 + 2*$h * $x/$y; 444 $yt = $ytop - $margin; 445 if( $rot90 ) { 446 $ha = 'left'; 447 $va = 'center'; 448 } 449 else { 450 $ha = 'center'; 451 $va = 'bottom'; 452 } 453 $y1=$ytop+$tl2;$y2=$ytop-$tl; 454 $x1=$x2=$xt; 455 } 456 elseif( $a >= $ca2 ) { 457 $yt = $pos + $w * $y/$x; 458 $xt = $xleft - $margin; 459 if( $rot90 ) { 460 $ha = 'center'; 461 $va = 'bottom'; 462 } 463 else { 464 $ha = 'right'; 465 $va = 'center'; 466 } 467 $x1=$xleft+$tl2;$x2=$xleft-$tl; 468 $y1=$y2=$yt; 469 } 470 $t->Align($ha,$va); 471 if( $this->show_angle_mark ) 472 $a .= '°'; 473 $t->Set($a); 474 $t->Stroke($this->img,$xt,$yt); 475 if( $this->show_angle_tick ) 476 $this->img->Line($x1,$y1,$x2,$y2); 477 $a += $this->angle_step; 478 } 479 } 495 480 } 496 481 497 482 function Stroke($pos,$dummy=true) { 498 483 499 $this->img->SetLineWeight($this->weight); 500 $this->img->SetColor($this->color); 501 $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); 502 if( !$this->hide_line ) { 503 $this->img->FilledRectangle($this->img->left_margin,$pos, 504 $this->img->width-$this->img->right_margin, 505 $pos+$this->weight-1); 506 } 507 $y=$pos+$this->img->GetFontHeight()+$this->title_margin+$this->title->margin; 508 if( $this->title_adjust=="high" ) { 509 $this->title->SetPos($this->img->width-$this->img->right_margin,$y,"right","top"); 510 } 511 elseif( $this->title_adjust=="middle" || $this->title_adjust=="center" ) { 512 $this->title->SetPos(($this->img->width-$this->img->left_margin-$this->img->right_margin)/2+$this->img->left_margin, 513 $y,"center","top"); 514 } 515 elseif($this->title_adjust=="low") { 516 $this->title->SetPos($this->img->left_margin,$y,"left","top"); 517 } 518 else { 519 JpGraphError::RaiseL(17002,$this->title_adjust); 520 //('Unknown alignment specified for X-axis title. ('.$this->title_adjust.')'); 521 } 522 523 524 if (!$this->hide_labels) { 525 $this->StrokeLabels($pos,false); 526 } 527 $this->img->SetColor($this->radius_tick_color); 528 $this->scale->ticks->Stroke($this->img,$this->scale,$pos); 529 484 $this->img->SetLineWeight($this->weight); 485 $this->img->SetColor($this->color); 486 $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); 487 if( !$this->hide_line ) 488 $this->img->FilledRectangle($this->img->left_margin,$pos, 489 $this->img->width-$this->img->right_margin,$pos+$this->weight-1); 490 $y=$pos+$this->img->GetFontHeight()+$this->title_margin+$this->title->margin; 491 if( $this->title_adjust=="high" ) 492 $this->title->SetPos($this->img->width-$this->img->right_margin,$y,"right","top"); 493 elseif( $this->title_adjust=="middle" || $this->title_adjust=="center" ) 494 $this->title->SetPos(($this->img->width-$this->img->left_margin- 495 $this->img->right_margin)/2+$this->img->left_margin, 496 $y,"center","top"); 497 elseif($this->title_adjust=="low") 498 $this->title->SetPos($this->img->left_margin,$y,"left","top"); 499 else { 500 JpGraphError::RaiseL(17002,$this->title_adjust); 501 //('Unknown alignment specified for X-axis title. ('.$this->title_adjust.')'); 502 } 503 504 505 if (!$this->hide_labels) { 506 $this->StrokeLabels($pos,false); 507 } 508 $this->img->SetColor($this->radius_tick_color); 509 $this->scale->ticks->Stroke($this->img,$this->scale,$pos); 510 511 // 512 // Mirror the positions for the left side of the scale 530 513 // 531 // Mirror the positions for the left side of the scale 532 // 533 $mid = 2*($this->img->left_margin+$this->img->plotwidth/2); 534 $n = count($this->scale->ticks->ticks_pos); 535 $i=0; 536 while( $i < $n ) { 537 $this->scale->ticks->ticks_pos[$i] = 538 $mid-$this->scale->ticks->ticks_pos[$i] ; 539 ++$i; 540 } 541 542 $n = count($this->scale->ticks->maj_ticks_pos); 543 $i=0; 544 while( $i < $n ) { 545 $this->scale->ticks->maj_ticks_pos[$i] = 546 $mid-$this->scale->ticks->maj_ticks_pos[$i] ; 547 ++$i; 548 } 549 550 $n = count($this->scale->ticks->maj_ticklabels_pos); 551 $i=1; 552 while( $i < $n ) { 553 $this->scale->ticks->maj_ticklabels_pos[$i] = 554 $mid-$this->scale->ticks->maj_ticklabels_pos[$i] ; 555 ++$i; 556 } 557 558 // Draw the left side of the scale 559 $n = count($this->scale->ticks->ticks_pos); 560 $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMinTickAbsSize(); 561 562 563 // Minor ticks 564 if( ! $this->scale->ticks->supress_minor_tickmarks ) { 565 $i=1; 566 while( $i < $n/2 ) { 567 $x = round($this->scale->ticks->ticks_pos[$i]) ; 568 $this->img->Line($x,$pos,$x,$yu); 569 ++$i; 570 } 571 } 572 573 $n = count($this->scale->ticks->maj_ticks_pos); 574 $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMajTickAbsSize(); 575 576 577 // Major ticks 578 if( ! $this->scale->ticks->supress_tickmarks ) { 579 $i=1; 580 while( $i < $n/2 ) { 581 $x = round($this->scale->ticks->maj_ticks_pos[$i]) ; 582 $this->img->Line($x,$pos,$x,$yu); 583 ++$i; 584 } 585 } 586 if (!$this->hide_labels) { 587 $this->StrokeLabels($pos,false); 588 } 589 $this->title->Stroke($this->img); 514 $mid = 2*($this->img->left_margin+$this->img->plotwidth/2); 515 $n = count($this->scale->ticks->ticks_pos); 516 $i=0; 517 while( $i < $n ) { 518 $this->scale->ticks->ticks_pos[$i] = 519 $mid-$this->scale->ticks->ticks_pos[$i] ; 520 ++$i; 521 } 522 523 $n = count($this->scale->ticks->maj_ticks_pos); 524 $i=0; 525 while( $i < $n ) { 526 $this->scale->ticks->maj_ticks_pos[$i] = 527 $mid-$this->scale->ticks->maj_ticks_pos[$i] ; 528 ++$i; 529 } 530 531 $n = count($this->scale->ticks->maj_ticklabels_pos); 532 $i=1; 533 while( $i < $n ) { 534 $this->scale->ticks->maj_ticklabels_pos[$i] = 535 $mid-$this->scale->ticks->maj_ticklabels_pos[$i] ; 536 ++$i; 537 } 538 539 // Draw the left side of the scale 540 $n = count($this->scale->ticks->ticks_pos); 541 $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMinTickAbsSize(); 542 543 544 // Minor ticks 545 if( ! $this->scale->ticks->supress_minor_tickmarks ) { 546 $i=1; 547 while( $i < $n/2 ) { 548 $x = round($this->scale->ticks->ticks_pos[$i]) ; 549 $this->img->Line($x,$pos,$x,$yu); 550 ++$i; 551 } 552 } 553 554 $n = count($this->scale->ticks->maj_ticks_pos); 555 $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMajTickAbsSize(); 556 557 558 // Major ticks 559 if( ! $this->scale->ticks->supress_tickmarks ) { 560 $i=1; 561 while( $i < $n/2 ) { 562 $x = round($this->scale->ticks->maj_ticks_pos[$i]) ; 563 $this->img->Line($x,$pos,$x,$yu); 564 ++$i; 565 } 566 } 567 if (!$this->hide_labels) { 568 $this->StrokeLabels($pos,false); 569 } 570 $this->title->Stroke($this->img); 590 571 } 591 572 } … … 593 574 class PolarScale extends LinearScale { 594 575 private $graph; 595 public $clockwise=false; 596 597 function __construct($aMax,$graph,$aClockwise) { 598 parent::__construct(0,$aMax,'x'); 599 $this->graph = $graph; 600 $this->clockwise = $aClockwise; 601 } 602 603 function SetClockwise($aFlg) { 604 $this->clockwise = $aFlg; 576 577 function PolarScale($aMax=0,$graph) { 578 parent::LinearScale(0,$aMax,'x'); 579 $this->graph = $graph; 605 580 } 606 581 607 582 function _Translate($v) { 608 583 return parent::Translate($v); 609 584 } 610 585 611 586 function PTranslate($aAngle,$aRad) { 612 613 $m = $this->scale[1]; 614 $w = $this->graph->img->plotwidth/2; 615 $aRad = $aRad/$m*$w; 616 617 $a = $aAngle/180 * M_PI; 618 if( $this->clockwise ) { 619 $a = 2*M_PI-$a; 620 } 621 622 $x = cos($a) * $aRad; 623 $y = sin($a) * $aRad; 624 625 $x += $this->_Translate(0); 626 627 if( $this->graph->iType == POLAR_360 ) { 628 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; 629 } 630 else { 631 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; 632 } 633 return array($x,$y); 587 588 $m = $this->scale[1]; 589 $w = $this->graph->img->plotwidth/2; 590 $aRad = $aRad/$m*$w; 591 592 $x = cos( $aAngle/180 * M_PI ) * $aRad; 593 $y = sin( $aAngle/180 * M_PI ) * $aRad; 594 595 $x += $this->_Translate(0); 596 597 if( $this->graph->iType == POLAR_360 ) { 598 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; 599 } 600 else { 601 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; 602 } 603 return array($x,$y); 634 604 } 635 605 } … … 637 607 class PolarLogScale extends LogScale { 638 608 private $graph; 639 public $clockwise=false; 640 641 function __construct($aMax,$graph,$aClockwise=false) { 642 parent::__construct(0,$aMax,'x'); 643 $this->graph = $graph; 644 $this->ticks->SetLabelLogType(LOGLABELS_MAGNITUDE); 645 $this->clockwise = $aClockwise; 646 647 } 648 649 function SetClockwise($aFlg) { 650 $this->clockwise = $aFlg; 609 function PolarLogScale($aMax=1,$graph) { 610 parent::LogScale(0,$aMax,'x'); 611 $this->graph = $graph; 612 $this->ticks->SetLabelLogType(LOGLABELS_MAGNITUDE); 613 651 614 } 652 615 653 616 function PTranslate($aAngle,$aRad) { 654 617 655 if( $aRad == 0 ) 656 $aRad = 1; 657 $aRad = log10($aRad); 658 $m = $this->scale[1]; 659 $w = $this->graph->img->plotwidth/2; 660 $aRad = $aRad/$m*$w; 661 662 $a = $aAngle/180 * M_PI; 663 if( $this->clockwise ) { 664 $a = 2*M_PI-$a; 665 } 666 667 $x = cos( $a ) * $aRad; 668 $y = sin( $a ) * $aRad; 669 670 $x += $w+$this->graph->img->left_margin;//$this->_Translate(0); 671 if( $this->graph->iType == POLAR_360 ) { 672 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; 673 } 674 else { 675 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; 676 } 677 return array($x,$y); 618 if( $aRad == 0 ) 619 $aRad = 1; 620 $aRad = log10($aRad); 621 $m = $this->scale[1]; 622 $w = $this->graph->img->plotwidth/2; 623 $aRad = $aRad/$m*$w; 624 625 $x = cos( $aAngle/180 * M_PI ) * $aRad; 626 $y = sin( $aAngle/180 * M_PI ) * $aRad; 627 628 $x += $w+$this->graph->img->left_margin;//$this->_Translate(0); 629 if( $this->graph->iType == POLAR_360 ) { 630 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; 631 } 632 else { 633 $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; 634 } 635 return array($x,$y); 678 636 } 679 637 } … … 683 641 public $axis; 684 642 public $iType=POLAR_360; 685 private $iClockwise=false; 686 687 function __construct($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOut=0,$aInline=true) { 688 parent::__construct($aWidth,$aHeight,$aCachedName,$aTimeOut,$aInline) ; 689 $this->SetDensity(TICKD_DENSE); 690 $this->SetBox(); 691 $this->SetMarginColor('white'); 643 644 function PolarGraph($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOut=0,$aInline=true) { 645 parent::Graph($aWidth,$aHeight,$aCachedName,$aTimeOut,$aInline) ; 646 $this->SetDensity(TICKD_DENSE); 647 $this->SetBox(); 648 $this->SetMarginColor('white'); 692 649 } 693 650 694 651 function SetDensity($aDense) { 695 $this->SetTickDensity(TICKD_NORMAL,$aDense); 696 } 697 698 function SetClockwise($aFlg) { 699 $this->scale->SetClockwise($aFlg); 652 $this->SetTickDensity(TICKD_NORMAL,$aDense); 700 653 } 701 654 702 655 function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) { 703 $adj = ($this->img->height - $this->img->width)/2; 704 $this->SetAngle(90); 705 $lm2 = -$adj + ($lm-$rm+$tm+$bm)/2; 706 $rm2 = -$adj + (-$lm+$rm+$tm+$bm)/2; 707 $tm2 = $adj + ($tm-$bm+$lm+$rm)/2; 708 $bm2 = $adj + (-$tm+$bm+$lm+$rm)/2; 709 $this->SetMargin($lm2, $rm2, $tm2, $bm2); 710 $this->axis->SetLabelAlign('right','center'); 656 $adj = ($this->img->height - $this->img->width)/2; 657 $this->SetAngle(90); 658 $this->img->SetMargin($lm-$adj,$rm-$adj,$tm+$adj,$bm+$adj); 659 $this->img->SetCenter(floor($this->img->width/2),floor($this->img->height/2)); 660 $this->axis->SetLabelAlign('right','center'); 661 //JpGraphError::Raise('Set90AndMargin() is not supported for polar graphs.'); 711 662 } 712 663 713 664 function SetScale($aScale,$rmax=0,$dummy1=1,$dummy2=1,$dummy3=1) { 714 if( $aScale == 'lin' ) { 715 $this->scale = new PolarScale($rmax,$this,$this->iClockwise); 716 } 717 elseif( $aScale == 'log' ) { 718 $this->scale = new PolarLogScale($rmax,$this,$this->iClockwise); 719 } 720 else { 721 JpGraphError::RaiseL(17004);//('Unknown scale type for polar graph. Must be "lin" or "log"'); 722 } 723 724 $this->axis = new PolarAxis($this->img,$this->scale); 725 $this->SetMargin(40,40,50,40); 665 if( $aScale == 'lin' ) 666 $this->scale = new PolarScale($rmax,$this); 667 elseif( $aScale == 'log' ) { 668 $this->scale = new PolarLogScale($rmax,$this); 669 } 670 else { 671 JpGraphError::RaiseL(17004);//('Unknown scale type for polar graph. Must be "lin" or "log"'); 672 } 673 674 $this->axis = new PolarAxis($this->img,$this->scale); 675 $this->SetMargin(40,40,50,40); 726 676 } 727 677 728 678 function SetType($aType) { 729 679 $this->iType = $aType; 730 680 } 731 681 732 682 function SetPlotSize($w,$h) { 733 734 683 $this->SetMargin(($this->img->width-$w)/2,($this->img->width-$w)/2, 684 ($this->img->height-$h)/2,($this->img->height-$h)/2); 735 685 } 736 686 737 687 // Private methods 738 688 function GetPlotsMax() { 739 740 741 742 743 744 745 746 689 $n = count($this->plots); 690 $m = $this->plots[0]->Max(); 691 $i=1; 692 while($i < $n) { 693 $m = max($this->plots[$i]->Max(),$m); 694 ++$i; 695 } 696 return $m; 747 697 } 748 698 749 699 function Stroke($aStrokeFileName="") { 750 700 751 // Start by adjusting the margin so that potential titles will fit. 752 $this->AdjustMarginsForTitles(); 753 754 // If the filename is the predefined value = '_csim_special_' 755 // we assume that the call to stroke only needs to do enough 756 // to correctly generate the CSIM maps. 757 // We use this variable to skip things we don't strictly need 758 // to do to generate the image map to improve performance 759 // a best we can. Therefor you will see a lot of tests !$_csim in the 760 // code below. 761 $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); 762 763 // We need to know if we have stroked the plot in the 764 // GetCSIMareas. Otherwise the CSIM hasn't been generated 765 // and in the case of GetCSIM called before stroke to generate 766 // CSIM without storing an image to disk GetCSIM must call Stroke. 767 $this->iHasStroked = true; 768 769 //Check if we should autoscale axis 770 if( !$this->scale->IsSpecified() && count($this->plots)>0 ) { 771 $max = $this->GetPlotsMax(); 772 $t1 = $this->img->plotwidth; 773 $this->img->plotwidth /= 2; 774 $t2 = $this->img->left_margin; 775 $this->img->left_margin += $this->img->plotwidth+1; 776 $this->scale->AutoScale($this->img,0,$max, 777 $this->img->plotwidth/$this->xtick_factor/2); 778 $this->img->plotwidth = $t1; 779 $this->img->left_margin = $t2; 780 } 781 else { 782 // The tick calculation will use the user suplied min/max values to determine 783 // the ticks. If auto_ticks is false the exact user specifed min and max 784 // values will be used for the scale. 785 // If auto_ticks is true then the scale might be slightly adjusted 786 // so that the min and max values falls on an even major step. 787 //$min = 0; 788 $max = $this->scale->scale[1]; 789 $t1 = $this->img->plotwidth; 790 $this->img->plotwidth /= 2; 791 $t2 = $this->img->left_margin; 792 $this->img->left_margin += $this->img->plotwidth+1; 793 $this->scale->AutoScale($this->img,0,$max, 794 $this->img->plotwidth/$this->xtick_factor/2); 795 $this->img->plotwidth = $t1; 796 $this->img->left_margin = $t2; 797 } 798 799 if( $this->iType == POLAR_180 ) { 800 $pos = $this->img->height - $this->img->bottom_margin; 801 } 802 else { 803 $pos = $this->img->plotheight/2 + $this->img->top_margin; 804 } 805 806 if( !$_csim ) { 807 $this->StrokePlotArea(); 808 } 809 810 $this->iDoClipping = true; 811 812 if( $this->iDoClipping ) { 813 $oldimage = $this->img->CloneCanvasH(); 814 } 815 816 if( !$_csim ) { 817 $this->axis->StrokeGrid($pos); 818 } 819 820 // Stroke all plots for Y1 axis 821 for($i=0; $i < count($this->plots); ++$i) { 822 $this->plots[$i]->Stroke($this->img,$this->scale); 823 } 824 825 826 if( $this->iDoClipping ) { 827 // Clipping only supports graphs at 0 and 90 degrees 828 if( $this->img->a == 0 ) { 829 $this->img->CopyCanvasH($oldimage,$this->img->img, 830 $this->img->left_margin,$this->img->top_margin, 831 $this->img->left_margin,$this->img->top_margin, 832 $this->img->plotwidth+1,$this->img->plotheight+1); 833 } 834 elseif( $this->img->a == 90 ) { 835 $adj1 = round(($this->img->height - $this->img->width)/2); 836 $adj2 = round(($this->img->width - $this->img->height)/2); 837 $lm = $this->img->left_margin; 838 $rm = $this->img->right_margin; 839 $tm = $this->img->top_margin; 840 $bm = $this->img->bottom_margin; 841 $this->img->CopyCanvasH($oldimage,$this->img->img, 842 $adj2 + round(($lm-$rm+$tm+$bm)/2), 843 $adj1 + round(($tm-$bm+$lm+$rm)/2), 844 $adj2 + round(($lm-$rm+$tm+$bm)/2), 845 $adj1 + round(($tm-$bm+$lm+$rm)/2), 846 $this->img->plotheight+1, 847 $this->img->plotwidth+1); 848 } 849 $this->img->Destroy(); 850 $this->img->SetCanvasH($oldimage); 851 } 852 853 if( !$_csim ) { 854 $this->axis->Stroke($pos); 855 $this->axis->StrokeAngleLabels($pos,$this->iType); 856 } 857 858 if( !$_csim ) { 859 $this->StrokePlotBox(); 860 $this->footer->Stroke($this->img); 861 862 // The titles and legends never gets rotated so make sure 863 // that the angle is 0 before stroking them 864 $aa = $this->img->SetAngle(0); 865 $this->StrokeTitles(); 866 } 867 868 for($i=0; $i < count($this->plots) ; ++$i ) { 869 $this->plots[$i]->Legend($this); 870 } 871 872 $this->legend->Stroke($this->img); 873 874 if( !$_csim ) { 875 876 $this->StrokeTexts(); 877 $this->img->SetAngle($aa); 878 879 // Draw an outline around the image map 880 if(_JPG_DEBUG) 881 $this->DisplayClientSideaImageMapAreas(); 882 883 // If the filename is given as the special "__handle" 884 // then the image handler is returned and the image is NOT 885 // streamed back 886 if( $aStrokeFileName == _IMG_HANDLER ) { 887 return $this->img->img; 888 } 889 else { 890 // Finally stream the generated picture 891 $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); 892 } 893 } 701 // Start by adjusting the margin so that potential titles will fit. 702 $this->AdjustMarginsForTitles(); 703 704 // If the filename is the predefined value = '_csim_special_' 705 // we assume that the call to stroke only needs to do enough 706 // to correctly generate the CSIM maps. 707 // We use this variable to skip things we don't strictly need 708 // to do to generate the image map to improve performance 709 // a best we can. Therefor you will see a lot of tests !$_csim in the 710 // code below. 711 $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); 712 713 // We need to know if we have stroked the plot in the 714 // GetCSIMareas. Otherwise the CSIM hasn't been generated 715 // and in the case of GetCSIM called before stroke to generate 716 // CSIM without storing an image to disk GetCSIM must call Stroke. 717 $this->iHasStroked = true; 718 719 //Check if we should autoscale axis 720 if( !$this->scale->IsSpecified() && count($this->plots)>0 ) { 721 $max = $this->GetPlotsMax(); 722 $t1 = $this->img->plotwidth; 723 $this->img->plotwidth /= 2; 724 $t2 = $this->img->left_margin; 725 $this->img->left_margin += $this->img->plotwidth+1; 726 $this->scale->AutoScale($this->img,0,$max, 727 $this->img->plotwidth/$this->xtick_factor/2); 728 $this->img->plotwidth = $t1; 729 $this->img->left_margin = $t2; 730 } 731 else { 732 // The tick calculation will use the user suplied min/max values to determine 733 // the ticks. If auto_ticks is false the exact user specifed min and max 734 // values will be used for the scale. 735 // If auto_ticks is true then the scale might be slightly adjusted 736 // so that the min and max values falls on an even major step. 737 //$min = 0; 738 $max = $this->scale->scale[1]; 739 $t1 = $this->img->plotwidth; 740 $this->img->plotwidth /= 2; 741 $t2 = $this->img->left_margin; 742 $this->img->left_margin += $this->img->plotwidth+1; 743 $this->scale->AutoScale($this->img,0,$max, 744 $this->img->plotwidth/$this->xtick_factor/2); 745 $this->img->plotwidth = $t1; 746 $this->img->left_margin = $t2; 747 } 748 749 if( $this->iType == POLAR_180 ) 750 $pos = $this->img->height - $this->img->bottom_margin; 751 else 752 $pos = $this->img->plotheight/2 + $this->img->top_margin; 753 754 755 if( !$_csim ) { 756 $this->StrokePlotArea(); 757 } 758 759 $this->iDoClipping = true; 760 761 if( $this->iDoClipping ) { 762 $oldimage = $this->img->CloneCanvasH(); 763 } 764 765 if( !$_csim ) { 766 $this->axis->StrokeGrid($pos); 767 } 768 769 // Stroke all plots for Y1 axis 770 for($i=0; $i < count($this->plots); ++$i) { 771 $this->plots[$i]->Stroke($this->img,$this->scale); 772 } 773 774 775 if( $this->iDoClipping ) { 776 // Clipping only supports graphs at 0 and 90 degrees 777 if( $this->img->a == 0 ) { 778 $this->img->CopyCanvasH($oldimage,$this->img->img, 779 $this->img->left_margin,$this->img->top_margin, 780 $this->img->left_margin,$this->img->top_margin, 781 $this->img->plotwidth+1,$this->img->plotheight+1); 782 } 783 elseif( $this->img->a == 90 ) { 784 $adj = round(($this->img->height - $this->img->width)/2); 785 $this->img->CopyCanvasH($oldimage,$this->img->img, 786 $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, 787 $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, 788 $this->img->plotheight,$this->img->plotwidth); 789 } 790 $this->img->Destroy(); 791 $this->img->SetCanvasH($oldimage); 792 } 793 794 if( !$_csim ) { 795 $this->axis->Stroke($pos); 796 $this->axis->StrokeAngleLabels($pos,$this->iType); 797 } 798 799 if( !$_csim ) { 800 $this->StrokePlotBox(); 801 $this->footer->Stroke($this->img); 802 803 // The titles and legends never gets rotated so make sure 804 // that the angle is 0 before stroking them 805 $aa = $this->img->SetAngle(0); 806 $this->StrokeTitles(); 807 } 808 809 for($i=0; $i < count($this->plots) ; ++$i ) { 810 $this->plots[$i]->Legend($this); 811 } 812 813 $this->legend->Stroke($this->img); 814 815 if( !$_csim ) { 816 817 $this->StrokeTexts(); 818 $this->img->SetAngle($aa); 819 820 // Draw an outline around the image map 821 if(_JPG_DEBUG) 822 $this->DisplayClientSideaImageMapAreas(); 823 824 // If the filename is given as the special "__handle" 825 // then the image handler is returned and the image is NOT 826 // streamed back 827 if( $aStrokeFileName == _IMG_HANDLER ) { 828 return $this->img->img; 829 } 830 else { 831 // Finally stream the generated picture 832 $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, 833 $aStrokeFileName); 834 } 835 } 894 836 } 895 837 }
Note:
See TracChangeset
for help on using the changeset viewer.