function pDraw::drawArrow in Visitors 7
Same name and namespace in other branches
- 7.2 pChart/class/pDraw.class.php \pDraw::drawArrow()
3 calls to pDraw::drawArrow()
- pDraw::drawArrowLabel in pChart/
class/ pDraw.class.php - pDraw::drawBezier in pChart/
class/ pDraw.class.php - pDraw::drawScale in pChart/
class/ pDraw.class.php
File
- pChart/
class/ pDraw.class.php, line 1282
Class
Code
function drawArrow($X1, $Y1, $X2, $Y2, $Format = "") {
$FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0;
$FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0;
$FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0;
$BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
$BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
$BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
$Size = isset($Format["Size"]) ? $Format["Size"] : 10;
$Ratio = isset($Format["Ratio"]) ? $Format["Ratio"] : 0.5;
$TwoHeads = isset($Format["TwoHeads"]) ? $Format["TwoHeads"] : FALSE;
$Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : FALSE;
/* Calculate the line angle */
$Angle = $this
->getAngle($X1, $Y1, $X2, $Y2);
/* Override Shadow support, this will be managed internally */
$RestoreShadow = $this->Shadow;
if ($this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0) {
$this->Shadow = FALSE;
$this
->drawArrow($X1 + $this->ShadowX, $Y1 + $this->ShadowY, $X2 + $this->ShadowX, $Y2 + $this->ShadowY, array(
"FillR" => $this->ShadowR,
"FillG" => $this->ShadowG,
"FillB" => $this->ShadowB,
"Alpha" => $this->Shadowa,
"Size" => $Size,
"Ratio" => $Ratio,
"TwoHeads" => $TwoHeads,
"Ticks" => $Ticks,
));
}
/* Draw the 1st Head */
$TailX = cos(($Angle - 180) * PI / 180) * $Size + $X2;
$TailY = sin(($Angle - 180) * PI / 180) * $Size + $Y2;
$Points = "";
$Points[] = $X2;
$Points[] = $Y2;
$Points[] = cos(($Angle - 90) * PI / 180) * $Size * $Ratio + $TailX;
$Points[] = sin(($Angle - 90) * PI / 180) * $Size * $Ratio + $TailY;
$Points[] = cos(($Angle - 270) * PI / 180) * $Size * $Ratio + $TailX;
$Points[] = sin(($Angle - 270) * PI / 180) * $Size * $Ratio + $TailY;
$Points[] = $X2;
$Points[] = $Y2;
/* Visual correction */
if ($Angle == 180 || $Angle == 360) {
$Points[4] = $Points[2];
}
if ($Angle == 90 || $Angle == 270) {
$Points[5] = $Points[3];
}
$ArrowColor = $this
->allocateColor($this->Picture, $FillR, $FillG, $FillB, $Alpha);
ImageFilledPolygon($this->Picture, $Points, 4, $ArrowColor);
$this
->drawLine($Points[0], $Points[1], $Points[2], $Points[3], array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
));
$this
->drawLine($Points[2], $Points[3], $Points[4], $Points[5], array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
));
$this
->drawLine($Points[0], $Points[1], $Points[4], $Points[5], array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
));
/* Draw the second head */
if ($TwoHeads) {
$Angle = $this
->getAngle($X2, $Y2, $X1, $Y1);
$TailX2 = cos(($Angle - 180) * PI / 180) * $Size + $X1;
$TailY2 = sin(($Angle - 180) * PI / 180) * $Size + $Y1;
$Points = "";
$Points[] = $X1;
$Points[] = $Y1;
$Points[] = cos(($Angle - 90) * PI / 180) * $Size * $Ratio + $TailX2;
$Points[] = sin(($Angle - 90) * PI / 180) * $Size * $Ratio + $TailY2;
$Points[] = cos(($Angle - 270) * PI / 180) * $Size * $Ratio + $TailX2;
$Points[] = sin(($Angle - 270) * PI / 180) * $Size * $Ratio + $TailY2;
$Points[] = $X1;
$Points[] = $Y1;
/* Visual correction */
if ($Angle == 180 || $Angle == 360) {
$Points[4] = $Points[2];
}
if ($Angle == 90 || $Angle == 270) {
$Points[5] = $Points[3];
}
$ArrowColor = $this
->allocateColor($this->Picture, $FillR, $FillG, $FillB, $Alpha);
ImageFilledPolygon($this->Picture, $Points, 4, $ArrowColor);
$this
->drawLine($Points[0], $Points[1], $Points[2], $Points[3], array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
));
$this
->drawLine($Points[2], $Points[3], $Points[4], $Points[5], array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
));
$this
->drawLine($Points[0], $Points[1], $Points[4], $Points[5], array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
));
$this
->drawLine($TailX, $TailY, $TailX2, $TailY2, array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
"Ticks" => $Ticks,
));
}
else {
$this
->drawLine($X1, $Y1, $TailX, $TailY, array(
"R" => $BorderR,
"G" => $BorderG,
"B" => $BorderB,
"Alpha" => $Alpha,
"Ticks" => $Ticks,
));
}
/* Re-enable shadows */
$this->Shadow = $RestoreShadow;
}