Exemplo n.º 1
0
 /**
  * Draw a Scatter threshold area
  * @param int | float $Value1
  * @param int | float $Value2
  * @param array $Format
  * @return type
  */
 public function drawScatterThresholdArea($Value1, $Value2, array $Format = array())
 {
     $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
     $R = isset($Format["R"]) ? $Format["R"] : 255;
     $G = isset($Format["G"]) ? $Format["G"] : 0;
     $B = isset($Format["B"]) ? $Format["B"] : 0;
     $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
     $Border = isset($Format["Border"]) ? $Format["Border"] : true;
     $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
     $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
     $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
     $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
     $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
     $AreaName = isset($Format["AreaName"]) ? $Format["AreaName"] : "La ouate de phoque";
     //null;
     $NameAngle = isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
     $NameR = isset($Format["NameR"]) ? $Format["NameR"] : 255;
     $NameG = isset($Format["NameG"]) ? $Format["NameG"] : 255;
     $NameB = isset($Format["NameB"]) ? $Format["NameB"] : 255;
     $NameAlpha = isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
     $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : true;
     if ($Value1 > $Value2) {
         list($Value1, $Value2) = array($Value2, $Value1);
     }
     $RestoreShadow = $this->pChartObject->Shadow;
     if ($DisableShadowOnArea && $this->pChartObject->Shadow) {
         $this->pChartObject->Shadow = false;
     }
     if ($BorderAlpha > 100) {
         $BorderAlpha = 100;
     }
     $Data = $this->pDataObject->getData();
     if (!isset($Data["Axis"][$AxisID])) {
         return -1;
     }
     if ($Data["Axis"][$AxisID]["Identity"] == AXIS_X) {
         $Y1 = $this->pChartObject->GraphAreaY1 + $Data["Axis"][$AxisID]["Margin"];
         $Y2 = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"];
         $X1 = $this->getPosArray($Value1, $AxisID);
         $X2 = $this->getPosArray($Value2, $AxisID);
         if ($X1 <= $this->pChartObject->GraphAreaX1) {
             $X1 = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"];
         }
         if ($X2 >= $this->pChartObject->GraphAreaX2) {
             $X2 = $this->pChartObject->GraphAreaX2 - $Data["Axis"][$AxisID]["Margin"];
         }
         $this->pChartObject->drawFilledRectangle($X1, $Y1, $X2, $Y2, array("R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha));
         if ($Border) {
             $this->pChartObject->drawLine($X1, $Y1, $X1, $Y2, array("R" => $BorderR, "G" => $BorderG, "B" => $BorderB, "Alpha" => $BorderAlpha, "Ticks" => $BorderTicks));
             $this->pChartObject->drawLine($X2, $Y1, $X2, $Y2, array("R" => $BorderR, "G" => $BorderG, "B" => $BorderB, "Alpha" => $BorderAlpha, "Ticks" => $BorderTicks));
         }
         if ($AreaName != null) {
             $XPos = ($X2 - $X1) / 2 + $X1;
             $YPos = ($Y2 - $Y1) / 2 + $Y1;
             if ($NameAngle == ZONE_NAME_ANGLE_AUTO) {
                 $TxtPos = $this->pChartObject->getTextBox($XPos, $YPos, $this->pChartObject->FontName, $this->pChartObject->FontSize, 0, $AreaName);
                 $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
                 if (abs($X2 - $X1) > $TxtWidth) {
                     $NameAngle = 0;
                 } else {
                     $NameAngle = 90;
                 }
             }
             $this->pChartObject->Shadow = $RestoreShadow;
             $this->pChartObject->drawText($XPos, $YPos, $AreaName, array("R" => $NameR, "G" => $NameG, "B" => $NameB, "Alpha" => $NameAlpha, "Angle" => $NameAngle, "Align" => TEXT_ALIGN_MIDDLEMIDDLE));
             if ($DisableShadowOnArea) {
                 $this->pChartObject->Shadow = false;
             }
         }
         $this->pChartObject->Shadow = $RestoreShadow;
         return array("X1" => $X1, "X2" => $X2);
     } elseif ($Data["Axis"][$AxisID]["Identity"] == AXIS_Y) {
         $X1 = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"];
         $X2 = $this->pChartObject->GraphAreaX2 - $Data["Axis"][$AxisID]["Margin"];
         $Y1 = $this->getPosArray($Value1, $AxisID);
         $Y2 = $this->getPosArray($Value2, $AxisID);
         if ($Y1 >= $this->pChartObject->GraphAreaY2) {
             $Y1 = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"];
         }
         if ($Y2 <= $this->pChartObject->GraphAreaY1) {
             $Y2 = $this->pChartObject->GraphAreaY1 + $Data["Axis"][$AxisID]["Margin"];
         }
         $this->pChartObject->drawFilledRectangle($X1, $Y1, $X2, $Y2, array("R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha));
         if ($Border) {
             $this->pChartObject->drawLine($X1, $Y1, $X2, $Y1, array("R" => $BorderR, "G" => $BorderG, "B" => $BorderB, "Alpha" => $BorderAlpha, "Ticks" => $BorderTicks));
             $this->pChartObject->drawLine($X1, $Y2, $X2, $Y2, array("R" => $BorderR, "G" => $BorderG, "B" => $BorderB, "Alpha" => $BorderAlpha, "Ticks" => $BorderTicks));
         }
         if ($AreaName != null) {
             $XPos = ($X2 - $X1) / 2 + $X1;
             $YPos = ($Y2 - $Y1) / 2 + $Y1;
             $this->pChartObject->Shadow = $RestoreShadow;
             $this->pChartObject->drawText($YPos, $XPos, $AreaName, array("R" => $NameR, "G" => $NameG, "B" => $NameB, "Alpha" => $NameAlpha, "Angle" => 0, "Align" => TEXT_ALIGN_MIDDLEMIDDLE));
             if ($DisableShadowOnArea) {
                 $this->Shadow = false;
             }
         }
         $this->pChartObject->Shadow = $RestoreShadow;
         return array("Y1" => $Y1, "Y2" => $Y2);
     }
 }