pChart 2.x forum
http://wiki.pchart.net/forum/

drawXThresholdArea Area name postion
http://wiki.pchart.net/forum/viewtopic.php?f=4&t=2221
Page 1 of 1

Author:  MrPamacs [ Thu Oct 27, 2011 12:40 pm ]
Post subject:  drawXThresholdArea Area name postion

Hi

I change the Draw class drawXThresholdArea function:
Code:
define("ZONE_NAME_POS_CENTER"      , 691091);
define("ZONE_NAME_POS_TOP"         , 691092);
define("ZONE_NAME_POS_BOTTOM"      , 691093);

function drawXThresholdArea($Value1,$Value2,$Format="")
    {
     $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"] : NULL;
     $NamePos    = isset($Format["NamePos"]) ? $Format["NamePos"] : ZONE_NAME_POS_CENTER;
     $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;

     $RestoreShadow = $this->Shadow;
     if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }

     if ($BorderAlpha >100) { $BorderAlpha = 100;}

     $Data           = $this->DataSet->getData();
     $XScale         = $this->scaleGetXSettings();
     $AbscissaMargin = $this->getAbscissaMargin($Data);

     if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
      {
       $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
       $XPos1 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value1;
       $XPos2 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value2;
       $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
       $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];

       if ( $XPos1 < $this->GraphAreaX1 + $XScale[0] ) { $XPos1 = $this->GraphAreaX1 + $XScale[0]; }
       if ( $XPos1 > $this->GraphAreaX2 - $XScale[0] ) { $XPos1 = $this->GraphAreaX2 - $XScale[0]; }
       if ( $XPos2 < $this->GraphAreaX1 + $XScale[0] ) { $XPos2 = $this->GraphAreaX1 + $XScale[0]; }
       if ( $XPos2 > $this->GraphAreaX2 - $XScale[0] ) { $XPos2 = $this->GraphAreaX2 - $XScale[0]; }

       $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));

       if ( $Border )
        {
         $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
         $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
        }

       if ( $AreaName != NULL )
        {
       switch ($NamePos) {
          default: case ZONE_NAME_POS_CENTER:
                $XPos = ($XPos2-$XPos1)/2 + $XPos1;
                $YPos = ($YPos2-$YPos1)/2 + $YPos1;
             break;
          case ZONE_NAME_POS_TOP:
                $XPos = ($XPos2-$XPos1)/2 + $XPos1;
               
                $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
                $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
                $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
               
                $YPos = $YPos1+ceil($TxtHeight/2)+5;         
                $YPos_Over=$YPos1+ceil($TxtWidth/2)+5;
             break;
          case ZONE_NAME_POS_BOTTOM:
                $XPos = ($XPos2-$XPos1)/2 + $XPos1;
                $YPos = ($YPos2-$YPos1)/2 + $YPos1;
               
                $XPos = ($XPos2-$XPos1)/2 + $XPos1;
               
                $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
                $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
                $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
               
                $YPos = $YPos2-ceil($TxtHeight/2)-5;         
                $YPos_Over=$YPos2+ceil($TxtWidth/2)-5;
             break;
       }

         if ( $NameAngle == ZONE_NAME_ANGLE_AUTO ) {
            $TxtPos   = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
            $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
                           
            if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; $YPos=$YPos_Over; }
        }
         $this->Shadow = $RestoreShadow;
         $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
         if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
        }

       $this->Shadow = $RestoreShadow;
       return(array("X1"=>$XPos1,"X2"=>$XPos2));
      }
     elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
      {
       $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
       $XPos1 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value1;
       $XPos2 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value2;
       $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
       $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];

       if ( $XPos1 < $this->GraphAreaY1 + $XScale[0] ) { $XPos1 = $this->GraphAreaY1 + $XScale[0]; }
       if ( $XPos1 > $this->GraphAreaY2 - $XScale[0] ) { $XPos1 = $this->GraphAreaY2 - $XScale[0]; }
       if ( $XPos2 < $this->GraphAreaY1 + $XScale[0] ) { $XPos2 = $this->GraphAreaY1 + $XScale[0]; }
       if ( $XPos2 > $this->GraphAreaY2 - $XScale[0] ) { $XPos2 = $this->GraphAreaY2 - $XScale[0]; }

       $this->drawFilledRectangle($YPos1,$XPos1,$YPos2,$XPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));

       if ( $Border )
        {
         $this->drawLine($YPos1,$XPos1,$YPos2,$XPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
         $this->drawLine($YPos1,$XPos2,$YPos2,$XPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
        }

       if ( $AreaName != NULL )
        {
         $XPos = ($XPos2-$XPos1)/2 + $XPos1;
         $YPos = ($YPos2-$YPos1)/2 + $YPos1;

         $this->Shadow = $RestoreShadow;
         $this->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->Shadow = $RestoreShadow;
       return(array("X1"=>$XPos1,"X2"=>$XPos2));
      }
    }


This small change can only do so much that can be positioned the AreaName.

Page 1 of 1 All times are UTC
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/