Heuristic ranking analysis
[contractdashboard.git] / lib / pChart2.1.0 / class / pSplit.class.php
blob:a/lib/pChart2.1.0/class/pSplit.class.php -> blob:b/lib/pChart2.1.0/class/pSplit.class.php
--- a/lib/pChart2.1.0/class/pSplit.class.php
+++ b/lib/pChart2.1.0/class/pSplit.class.php
@@ -1,1 +1,131 @@
-
+<?php

+ /*

+     pSplit - class to draw spline splitted charts

+

+     Version     : 2.1.0

+     Made by     : Jean-Damien POGOLOTTI

+     Last Update : 26/01/11

+

+     This file can be distributed under the license you can find at :

+

+                       http://www.pchart.net/license

+

+     You can find the whole class documentation on the pChart web site.

+ */

+

+ define("TEXT_POS_TOP"		, 690001);

+ define("TEXT_POS_RIGHT"	, 690002);

+

+ /* pSplit class definition */

+ class pSplit

+  {

+   var $pChartObject;

+

+   /* Class creator */

+   function pSplit()

+    { }

+

+   /* Create the encoded string */

+   function drawSplitPath($Object,$Values,$Format="")

+    {

+     $this->pChartObject = $Object;

+

+     $Spacing		= isset($Format["Spacing"]) ? $Format["Spacing"] : 20;

+     $TextPadding	= isset($Format["TextPadding"]) ? $Format["TextPadding"] : 2;

+     $TextPos		= isset($Format["TextPos"]) ? $Format["TextPos"] : TEXT_POS_TOP;

+     $Surrounding       = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;

+     $Force		= isset($Format["Force"]) ? $Format["Force"] : 70;

+     $Segments		= isset($Format["Segments"]) ? $Format["Segments"] : 15;

+     $FontSize		= $Object->FontSize;

+     $X1		= $Object->GraphAreaX1;

+     $Y1		= $Object->GraphAreaY1;

+     $X2		= $Object->GraphAreaX2;

+     $Y2		= $Object->GraphAreaY2;

+

+     /* Data Processing */

+     $Data    = $Values->getData();

+     $Palette = $Values->getPalette();

+

+     $LabelSerie = $Data["Abscissa"];

+     $DataSerie  = "";

+

+     foreach($Data["Series"] as $SerieName => $Value)

+      { if ( $SerieName != $LabelSerie && $DataSerie == "" ) { $DataSerie = $SerieName; } }

+

+     $DataSerieSum   = array_sum($Data["Series"][$DataSerie]["Data"]);

+     $DataSerieCount = count($Data["Series"][$DataSerie]["Data"]);

+

+     /* Scale Processing */

+     if ( $TextPos == TEXT_POS_RIGHT )

+      $YScale     = (($Y2-$Y1) - (($DataSerieCount+1)*$Spacing)) / $DataSerieSum;

+     else

+      $YScale     = (($Y2-$Y1) - ($DataSerieCount*$Spacing)) / $DataSerieSum;

+     $LeftHeight = $DataSerieSum * $YScale;

+

+     /* Re-compute graph width depending of the text mode choosen */

+     if ( $TextPos == TEXT_POS_RIGHT )

+      {

+       $MaxWidth = 0;

+       foreach($Data["Series"][$LabelSerie]["Data"] as $Key => $Label)

+        {

+         $Boundardies = $Object->getTextBox(0,0,$Object->FontName,$Object->FontSize,0,$Label);

+         if ( $Boundardies[1]["X"] > $MaxWidth ) { $MaxWidth = $Boundardies[1]["X"] + $TextPadding*2; }

+        }

+       $X2 = $X2 - $MaxWidth;

+      }

+

+     /* Drawing */

+     $LeftY    = ((($Y2-$Y1) / 2) + $Y1) - ($LeftHeight/2);

+     $RightY   = $Y1;

+     $VectorX  = (($X2-$X1) / 2);

+

+     foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value)

+      {

+       if ( isset($Data["Series"][$LabelSerie]["Data"][$Key]) )

+        $Label = $Data["Series"][$LabelSerie]["Data"][$Key];

+       else

+        $Label = "-";

+

+       $LeftY1 = $LeftY;

+       $LeftY2 = $LeftY + $Value * $YScale;

+

+       $RightY1 = $RightY + $Spacing;

+       $RightY2 = $RightY + $Spacing + $Value * $YScale;;

+

+       $Settings = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"],"NoDraw"=>TRUE,"Segments"=>$Segments,"Surrounding"=>$Surrounding);

+

+       $PolyGon = "";

+

+       $Angle    = $Object->getAngle($X2,$RightY1,$X1,$LeftY1);

+       $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 + $X1;

+       $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1;

+       $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 + $X1;

+       $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1;

+

+       $Points = $Object->drawBezier($X1,$LeftY1,$X2,$RightY1,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings);

+       foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; }

+

+

+       $Angle    = $Object->getAngle($X2,$RightY2,$X1,$LeftY2);

+       $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 +$X1;

+       $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2;

+       $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 +$X1;

+       $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2;

+

+       $Points = $Object->drawBezier($X1,$LeftY2,$X2,$RightY2,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings);

+       $Points = array_reverse($Points);

+       foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; }

+

+       $Object->drawPolygon($PolyGon,$Settings);

+

+       if ( $TextPos == TEXT_POS_RIGHT )

+        $Object->drawText($X2+$TextPadding,($RightY2-$RightY1)/2+$RightY1,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT));

+       else

+        $Object->drawText($X2,$RightY1-$TextPadding,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT));

+

+       $LeftY  = $LeftY2;

+       $RightY = $RightY2;

+      }

+    }

+  }

+?>