function pDraw::writeBounds

5.x pDraw.class.php pDraw::writeBounds($Type = BOUND_BOTH, $Format = NULL)

File

inc/pchart/pchart/class/pDraw.class.php, line 3169

Class

pDraw

Code

function writeBounds($Type = BOUND_BOTH, $Format = NULL) 
 {
  $MaxLabelTxt = isset($Format ["MaxLabelTxt"]) ? $Format ["MaxLabelTxt"] : "max=";
  $MinLabelTxt = isset($Format ["MinLabelTxt"]) ? $Format ["MinLabelTxt"] : "min=";
  $Decimals = isset($Format ["Decimals"]) ? $Format ["Decimals"] : 1;
  $ExcludedSeries = isset($Format ["ExcludedSeries"]) ? $Format ["ExcludedSeries"] : "";
  $DisplayOffset = isset($Format ["DisplayOffset"]) ? $Format ["DisplayOffset"] : 4;
  $DisplayColor = isset($Format ["DisplayColor"]) ? $Format ["DisplayColor"] : DISPLAY_MANUAL;
  $MaxDisplayR = isset($Format ["MaxDisplayR"]) ? $Format ["MaxDisplayR"] : 0;
  $MaxDisplayG = isset($Format ["MaxDisplayG"]) ? $Format ["MaxDisplayG"] : 0;
  $MaxDisplayB = isset($Format ["MaxDisplayB"]) ? $Format ["MaxDisplayB"] : 0;
  $MinDisplayR = isset($Format ["MinDisplayR"]) ? $Format ["MinDisplayR"] : 255;
  $MinDisplayG = isset($Format ["MinDisplayG"]) ? $Format ["MinDisplayG"] : 255;
  $MinDisplayB = isset($Format ["MinDisplayB"]) ? $Format ["MinDisplayB"] : 255;
  $MinLabelPos = isset($Format ["MinLabelPos"]) ? $Format ["MinLabelPos"] : BOUND_LABEL_POS_AUTO;
  $MaxLabelPos = isset($Format ["MaxLabelPos"]) ? $Format ["MaxLabelPos"] : BOUND_LABEL_POS_AUTO;
  $DrawBox = isset($Format ["DrawBox"]) ? $Format ["DrawBox"] : TRUE;
  $DrawBoxBorder = isset($Format ["DrawBoxBorder"]) ? $Format ["DrawBoxBorder"] : FALSE;
  $BorderOffset = isset($Format ["BorderOffset"]) ? $Format ["BorderOffset"] : 5;
  $BoxRounded = isset($Format ["BoxRounded"]) ? $Format ["BoxRounded"] : TRUE;
  $RoundedRadius = isset($Format ["RoundedRadius"]) ? $Format ["RoundedRadius"] : 3;
  $BoxR = isset($Format ["BoxR"]) ? $Format ["BoxR"] : 0;
  $BoxG = isset($Format ["BoxG"]) ? $Format ["BoxG"] : 0;
  $BoxB = isset($Format ["BoxB"]) ? $Format ["BoxB"] : 0;
  $BoxAlpha = isset($Format ["BoxAlpha"]) ? $Format ["BoxAlpha"] : 20;
  $BoxSurrounding = isset($Format ["BoxSurrounding"]) ? $Format ["BoxSurrounding"] : "";
  $BoxBorderR = isset($Format ["BoxBorderR"]) ? $Format ["BoxBorderR"] : 255;
  $BoxBorderG = isset($Format ["BoxBorderG"]) ? $Format ["BoxBorderG"] : 255;
  $BoxBorderB = isset($Format ["BoxBorderB"]) ? $Format ["BoxBorderB"] : 255;
  $BoxBorderAlpha = isset($Format ["BoxBorderAlpha"]) ? $Format ["BoxBorderAlpha"] : 100;

  $CaptionSettings = array("DrawBox" => $DrawBox, "DrawBoxBorder" => $DrawBoxBorder, "BorderOffset" => $BorderOffset, "BoxRounded" => $BoxRounded, "RoundedRadius" => $RoundedRadius,
    "BoxR" => $BoxR, "BoxG" => $BoxG, "BoxB" => $BoxB, "BoxAlpha" => $BoxAlpha, "BoxSurrounding" => $BoxSurrounding,
    "BoxBorderR" => $BoxBorderR, "BoxBorderG" => $BoxBorderG, "BoxBorderB" => $BoxBorderB, "BoxBorderAlpha" => $BoxBorderAlpha);

  list($XMargin, $XDivs) = $this->scaleGetXSettings();

  $Data = $this->DataSet->getData();
  foreach ($Data ["Series"] as $SerieName => $Serie) 
   {
    if ($Serie ["isDrawable"] == TRUE && $SerieName != $Data ["Abscissa"] && !isset($ExcludedSeries [$SerieName])) 
     {
      $R = $Serie ["Color"]["R"];
      $G = $Serie ["Color"]["G"];
      $B = $Serie ["Color"]["B"];
      $Alpha = $Serie ["Color"]["Alpha"];
      $Ticks = $Serie ["Ticks"];
      if ($DisplayColor == DISPLAY_AUTO) {
        $DisplayR = $R;
        $DisplayG = $G;
        $DisplayB = $B;
      }

      $MinValue = $this->DataSet->getMin($SerieName);
      $MaxValue = $this->DataSet->getMax($SerieName);

      $MinPos = VOID;
      $MaxPos = VOID;
      foreach ($Serie ["Data"] as $Key => $Value) 
       {
        if ($Value == $MinValue && $MinPos == VOID) {
          $MinPos = $Key;
        }
        if ($Value == $MaxValue) {
          $MaxPos = $Key;
        }
      }

      $AxisID = $Serie ["Axis"];
      $Mode = $Data ["Axis"][$AxisID]["Display"];
      $Format = $Data ["Axis"][$AxisID]["Format"];
      $Unit = $Data ["Axis"][$AxisID]["Unit"];

      $PosArray = $this->scaleComputeY($Serie ["Data"], array("AxisID" => $Serie ["Axis"]));

      if ($Data ["Orientation"] == SCALE_POS_LEFTRIGHT) 
       {
        $XStep = ($this->GraphAreaX2 -$this->GraphAreaX1 -$XMargin * 2) / $XDivs;
        $X = $this->GraphAreaX1 + $XMargin;
        $SerieOffset = isset($Serie ["XOffset"]) ? $Serie ["XOffset"] : 0;

        if ($Type == BOUND_MAX || $Type == BOUND_BOTH) 
         {
          if ($MaxLabelPos == BOUND_LABEL_POS_TOP || ($MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0)) {
            $YPos = $PosArray [$MaxPos] - $DisplayOffset + 2;
            $Align = TEXT_ALIGN_BOTTOMMIDDLE;
          }
          if ($MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ($MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0)) {
            $YPos = $PosArray [$MaxPos] + $DisplayOffset + 2;
            $Align = TEXT_ALIGN_TOPMIDDLE;
          }

          $XPos = $X + $MaxPos * $XStep + $SerieOffset;
          $Label = $MaxLabelTxt . $this->scaleFormat(round($MaxValue, $Decimals), $Mode, $Format, $Unit);

          $TxtPos = $this->getTextBox($XPos, $YPos, $this->FontName, $this->FontSize, 0, $Label);
          $XOffset = 0;
          $YOffset = 0;
          if ($TxtPos [0]["X"] < $this->GraphAreaX1) {
            $XOffset = (($this->GraphAreaX1 - $TxtPos [0]["X"]) / 2);
          }
          if ($TxtPos [1]["X"] > $this->GraphAreaX2) {
            $XOffset = -(($TxtPos [1]["X"] - $this->GraphAreaX2) / 2);
          }
          if ($TxtPos [2]["Y"] < $this->GraphAreaY1) {
            $YOffset = $this->GraphAreaY1 - $TxtPos [2]["Y"];
          }
          if ($TxtPos [0]["Y"] > $this->GraphAreaY2) {
            $YOffset = -($TxtPos [0]["Y"] - $this->GraphAreaY2);
          }

          $CaptionSettings ["R"] = $MaxDisplayR;
          $CaptionSettings ["G"] = $MaxDisplayG;
          $CaptionSettings ["B"] = $MaxDisplayB;
          $CaptionSettings ["Align"] = $Align;

          $this->drawText($XPos + $XOffset, $YPos + $YOffset, $Label, $CaptionSettings);
        }

        if ($Type == BOUND_MIN || $Type == BOUND_BOTH) 
         {
          if ($MinLabelPos == BOUND_LABEL_POS_TOP || ($MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0)) {
            $YPos = $PosArray [$MinPos] - $DisplayOffset + 2;
            $Align = TEXT_ALIGN_BOTTOMMIDDLE;
          }
          if ($MinLabelPos == BOUND_LABEL_POS_BOTTOM || ($MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0)) {
            $YPos = $PosArray [$MinPos] + $DisplayOffset + 2;
            $Align = TEXT_ALIGN_TOPMIDDLE;
          }

          $XPos = $X + $MinPos * $XStep + $SerieOffset;
          $Label = $MinLabelTxt . $this->scaleFormat(round($MinValue, $Decimals), $Mode, $Format, $Unit);

          $TxtPos = $this->getTextBox($XPos, $YPos, $this->FontName, $this->FontSize, 0, $Label);
          $XOffset = 0;
          $YOffset = 0;
          if ($TxtPos [0]["X"] < $this->GraphAreaX1) {
            $XOffset = (($this->GraphAreaX1 - $TxtPos [0]["X"]) / 2);
          }
          if ($TxtPos [1]["X"] > $this->GraphAreaX2) {
            $XOffset = -(($TxtPos [1]["X"] - $this->GraphAreaX2) / 2);
          }
          if ($TxtPos [2]["Y"] < $this->GraphAreaY1) {
            $YOffset = $this->GraphAreaY1 - $TxtPos [2]["Y"];
          }
          if ($TxtPos [0]["Y"] > $this->GraphAreaY2) {
            $YOffset = -($TxtPos [0]["Y"] - $this->GraphAreaY2);
          }

          $CaptionSettings ["R"] = $MinDisplayR;
          $CaptionSettings ["G"] = $MinDisplayG;
          $CaptionSettings ["B"] = $MinDisplayB;
          $CaptionSettings ["Align"] = $Align;

          $this->drawText($XPos + $XOffset, $YPos -$DisplayOffset + $YOffset, $Label, $CaptionSettings);
        }
      }
      else 
       {
        $XStep = ($this->GraphAreaY2 -$this->GraphAreaY1 -$XMargin * 2) / $XDivs;
        $X = $this->GraphAreaY1 + $XMargin;
        $SerieOffset = isset($Serie ["XOffset"]) ? $Serie ["XOffset"] : 0;

        if ($Type == BOUND_MAX || $Type == BOUND_BOTH) 
         {
          if ($MaxLabelPos == BOUND_LABEL_POS_TOP || ($MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0)) {
            $YPos = $PosArray [$MaxPos] + $DisplayOffset + 2;
            $Align = TEXT_ALIGN_MIDDLELEFT;
          }
          if ($MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ($MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0)) {
            $YPos = $PosArray [$MaxPos] - $DisplayOffset + 2;
            $Align = TEXT_ALIGN_MIDDLERIGHT;
          }

          $XPos = $X + $MaxPos * $XStep + $SerieOffset;
          $Label = $MaxLabelTxt . $this->scaleFormat($MaxValue, $Mode, $Format, $Unit);

          $TxtPos = $this->getTextBox($YPos, $XPos, $this->FontName, $this->FontSize, 0, $Label);
          $XOffset = 0;
          $YOffset = 0;
          if ($TxtPos [0]["X"] < $this->GraphAreaX1) {
            $XOffset = $this->GraphAreaX1 - $TxtPos [0]["X"];
          }
          if ($TxtPos [1]["X"] > $this->GraphAreaX2) {
            $XOffset = -($TxtPos [1]["X"] - $this->GraphAreaX2);
          }
          if ($TxtPos [2]["Y"] < $this->GraphAreaY1) {
            $YOffset = ($this->GraphAreaY1 - $TxtPos [2]["Y"]) / 2;
          }
          if ($TxtPos [0]["Y"] > $this->GraphAreaY2) {
            $YOffset = -(($TxtPos [0]["Y"] - $this->GraphAreaY2) / 2);
          }

          $CaptionSettings ["R"] = $MaxDisplayR;
          $CaptionSettings ["G"] = $MaxDisplayG;
          $CaptionSettings ["B"] = $MaxDisplayB;
          $CaptionSettings ["Align"] = $Align;

          $this->drawText($YPos + $XOffset, $XPos + $YOffset, $Label, $CaptionSettings);
        }

        if ($Type == BOUND_MIN || $Type == BOUND_BOTH) 
         {
          if ($MinLabelPos == BOUND_LABEL_POS_TOP || ($MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0)) {
            $YPos = $PosArray [$MinPos] + $DisplayOffset + 2;
            $Align = TEXT_ALIGN_MIDDLELEFT;
          }
          if ($MinLabelPos == BOUND_LABEL_POS_BOTTOM || ($MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0)) {
            $YPos = $PosArray [$MinPos] - $DisplayOffset + 2;
            $Align = TEXT_ALIGN_MIDDLERIGHT;
          }

          $XPos = $X + $MinPos * $XStep + $SerieOffset;
          $Label = $MinLabelTxt . $this->scaleFormat($MinValue, $Mode, $Format, $Unit);

          $TxtPos = $this->getTextBox($YPos, $XPos, $this->FontName, $this->FontSize, 0, $Label);
          $XOffset = 0;
          $YOffset = 0;
          if ($TxtPos [0]["X"] < $this->GraphAreaX1) {
            $XOffset = $this->GraphAreaX1 - $TxtPos [0]["X"];
          }
          if ($TxtPos [1]["X"] > $this->GraphAreaX2) {
            $XOffset = -($TxtPos [1]["X"] - $this->GraphAreaX2);
          }
          if ($TxtPos [2]["Y"] < $this->GraphAreaY1) {
            $YOffset = ($this->GraphAreaY1 - $TxtPos [2]["Y"]) / 2;
          }
          if ($TxtPos [0]["Y"] > $this->GraphAreaY2) {
            $YOffset = -(($TxtPos [0]["Y"] - $this->GraphAreaY2) / 2);
          }

          $CaptionSettings ["R"] = $MinDisplayR;
          $CaptionSettings ["G"] = $MinDisplayG;
          $CaptionSettings ["B"] = $MinDisplayB;
          $CaptionSettings ["Align"] = $Align;

          $this->drawText($YPos + $XOffset, $XPos + $YOffset, $Label, $CaptionSettings);
        }
      }
    }
  }
}