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; } } } ?>