mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-25 14:54:24 +02:00
Draw full circle pie slice (100%) as a primitive
Allows getPieSlicePath to draw a full circle pie slice (100%) by slightly adjusting endpoint to have a valid arc. Also hides a central line as there will be no more pie slices.
This commit is contained in:
parent
3a85a45ef2
commit
2575634dec
@ -104,17 +104,22 @@ class PieSlice extends Animatable implements Drawable
|
|||||||
*/
|
*/
|
||||||
private function getPieSlicePath($x, $y, $r)
|
private function getPieSlicePath($x, $y, $r)
|
||||||
{
|
{
|
||||||
// start at the center of the pieslice
|
|
||||||
$pathString = 'M ' . $x . ' ' . $y . ' ';
|
|
||||||
|
|
||||||
// The coordinate system is mirrored on the Y axis, so we have to flip cos and sin
|
// The coordinate system is mirrored on the Y axis, so we have to flip cos and sin
|
||||||
$xStart = $x + ($r * sin($this->startRadian));
|
$xStart = $x + ($r * sin($this->startRadian));
|
||||||
$yStart = $y - ($r * cos($this->startRadian));
|
$yStart = $y - ($r * cos($this->startRadian));
|
||||||
$xEnd = $x + ($r * sin($this->endRadian));
|
|
||||||
$yEnd = $y - ($r * cos($this->endRadian));
|
|
||||||
|
|
||||||
// Draw a straight line to the upper part of the arc
|
if($this->endRadian - $this->startRadian == 2*M_PI) {
|
||||||
$pathString .= 'L ' . Format::formatSVGNumber($xStart) . ' ' . Format::formatSVGNumber($yStart);
|
// To draw a full circle, adjust arc endpoint by a small (unvisible) value
|
||||||
|
$this->endRadian -= 0.001;
|
||||||
|
$pathString = 'M '. Format::formatSVGNumber($xStart) . ' ' . Format::formatSVGNumber($yStart);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Start at the center of the pieslice
|
||||||
|
$pathString = 'M ' . $x . ' ' . $y;
|
||||||
|
// Draw a straight line to the upper part of the arc
|
||||||
|
$pathString .= ' L ' . Format::formatSVGNumber($xStart) . ' ' . Format::formatSVGNumber($yStart);
|
||||||
|
}
|
||||||
|
|
||||||
// Instead of directly connecting the upper part of the arc (leaving a triangle), draw a bow with the radius
|
// Instead of directly connecting the upper part of the arc (leaving a triangle), draw a bow with the radius
|
||||||
$pathString .= ' A ' . Format::formatSVGNumber($r) . ' ' . Format::formatSVGNumber($r);
|
$pathString .= ' A ' . Format::formatSVGNumber($r) . ' ' . Format::formatSVGNumber($r);
|
||||||
// These are the flags for the bow, see the SVG path documentation for details
|
// These are the flags for the bow, see the SVG path documentation for details
|
||||||
@ -122,7 +127,10 @@ class PieSlice extends Animatable implements Drawable
|
|||||||
$pathString .= ' 0 ' . (($this->endRadian - $this->startRadian > M_PI) ? '1' : '0 ') . ' 1';
|
$pathString .= ' 0 ' . (($this->endRadian - $this->startRadian > M_PI) ? '1' : '0 ') . ' 1';
|
||||||
|
|
||||||
// xEnd and yEnd are the lower point of the arc
|
// xEnd and yEnd are the lower point of the arc
|
||||||
|
$xEnd = $x + ($r * sin($this->endRadian));
|
||||||
|
$yEnd = $y - ($r * cos($this->endRadian));
|
||||||
$pathString .= ' ' . Format::formatSVGNumber($xEnd) . ' ' . Format::formatSVGNumber($yEnd);
|
$pathString .= ' ' . Format::formatSVGNumber($xEnd) . ' ' . Format::formatSVGNumber($yEnd);
|
||||||
|
|
||||||
return $pathString;
|
return $pathString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user