Sector

## Informations

Author: Maxime Delorme

## Description

This script allows to draw the sector of a circle. It can be used for example to render a pie chart.

`Sector(float xc, float yc, float r, float a, float b [, string style [, boolean cw [, float o]]])`

`xc`: abscissa of the center.
`yc`: ordinate of the center.
`r`: radius.
`a`: starting angle (in degrees).
`b`: ending angle (in degrees).
`style`: `D`, `F`, `FD` or `DF` (draw, fill, fill and draw). Default value: `FD`.
`cw`: indicates whether to go clockwise (default value: `true`).
`o`: origin of angles (`0` for right, `90` for top, `180` for left, `270` for bottom). Default value: `90`.

## Source

``````<?php
require('fpdf.php');

class PDF_Sector extends FPDF
{
function Sector(\$xc, \$yc, \$r, \$a, \$b, \$style='FD', \$cw=true, \$o=90)
{
\$d0 = \$a - \$b;
if(\$cw){
\$d = \$b;
\$b = \$o - \$a;
\$a = \$o - \$d;
}else{
\$b += \$o;
\$a += \$o;
}
while(\$a<0)
\$a += 360;
while(\$a>360)
\$a -= 360;
while(\$b<0)
\$b += 360;
while(\$b>360)
\$b -= 360;
if (\$a > \$b)
\$b += 360;
\$b = \$b/360*2*M_PI;
\$a = \$a/360*2*M_PI;
\$d = \$b - \$a;
if (\$d == 0 && \$d0 != 0)
\$d = 2*M_PI;
\$k = \$this->k;
\$hp = \$this->h;
if (sin(\$d/2))
\$MyArc = 4/3*(1-cos(\$d/2))/sin(\$d/2)*\$r;
else
\$MyArc = 0;
//first put the center
\$this->_out(sprintf('%.2F %.2F m', (\$xc)*\$k, (\$hp-\$yc)*\$k));
//put the first point
\$this->_out(sprintf('%.2F %.2F l', (\$xc+\$r*cos(\$a))*\$k, ((\$hp-(\$yc-\$r*sin(\$a)))*\$k)));
//draw the arc
if (\$d < M_PI/2){
\$this->_Arc(\$xc+\$r*cos(\$a)+\$MyArc*cos(M_PI/2+\$a),
\$yc-\$r*sin(\$a)-\$MyArc*sin(M_PI/2+\$a),
\$xc+\$r*cos(\$b)+\$MyArc*cos(\$b-M_PI/2),
\$yc-\$r*sin(\$b)-\$MyArc*sin(\$b-M_PI/2),
\$xc+\$r*cos(\$b),
\$yc-\$r*sin(\$b)
);
}else{
\$b = \$a + \$d/4;
\$MyArc = 4/3*(1-cos(\$d/8))/sin(\$d/8)*\$r;
\$this->_Arc(\$xc+\$r*cos(\$a)+\$MyArc*cos(M_PI/2+\$a),
\$yc-\$r*sin(\$a)-\$MyArc*sin(M_PI/2+\$a),
\$xc+\$r*cos(\$b)+\$MyArc*cos(\$b-M_PI/2),
\$yc-\$r*sin(\$b)-\$MyArc*sin(\$b-M_PI/2),
\$xc+\$r*cos(\$b),
\$yc-\$r*sin(\$b)
);
\$a = \$b;
\$b = \$a + \$d/4;
\$this->_Arc(\$xc+\$r*cos(\$a)+\$MyArc*cos(M_PI/2+\$a),
\$yc-\$r*sin(\$a)-\$MyArc*sin(M_PI/2+\$a),
\$xc+\$r*cos(\$b)+\$MyArc*cos(\$b-M_PI/2),
\$yc-\$r*sin(\$b)-\$MyArc*sin(\$b-M_PI/2),
\$xc+\$r*cos(\$b),
\$yc-\$r*sin(\$b)
);
\$a = \$b;
\$b = \$a + \$d/4;
\$this->_Arc(\$xc+\$r*cos(\$a)+\$MyArc*cos(M_PI/2+\$a),
\$yc-\$r*sin(\$a)-\$MyArc*sin(M_PI/2+\$a),
\$xc+\$r*cos(\$b)+\$MyArc*cos(\$b-M_PI/2),
\$yc-\$r*sin(\$b)-\$MyArc*sin(\$b-M_PI/2),
\$xc+\$r*cos(\$b),
\$yc-\$r*sin(\$b)
);
\$a = \$b;
\$b = \$a + \$d/4;
\$this->_Arc(\$xc+\$r*cos(\$a)+\$MyArc*cos(M_PI/2+\$a),
\$yc-\$r*sin(\$a)-\$MyArc*sin(M_PI/2+\$a),
\$xc+\$r*cos(\$b)+\$MyArc*cos(\$b-M_PI/2),
\$yc-\$r*sin(\$b)-\$MyArc*sin(\$b-M_PI/2),
\$xc+\$r*cos(\$b),
\$yc-\$r*sin(\$b)
);
}
//terminate drawing
if(\$style=='F')
\$op='f';
elseif(\$style=='FD' || \$style=='DF')
\$op='b';
else
\$op='s';
\$this->_out(\$op);
}

function _Arc(\$x1, \$y1, \$x2, \$y2, \$x3, \$y3 )
{
\$h = \$this->h;
\$this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c',
\$x1*\$this->k,
(\$h-\$y1)*\$this->k,
\$x2*\$this->k,
(\$h-\$y2)*\$this->k,
\$x3*\$this->k,
(\$h-\$y3)*\$this->k));
}
}
?>``````

## Example

``````<?php
require('sector.php');

\$pdf=new PDF_Sector();
\$xc=105;
\$yc=60;
\$r=40;
\$pdf->SetFillColor(120, 120, 255);
\$pdf->Sector(\$xc, \$yc, \$r, 20, 120);
\$pdf->SetFillColor(120, 255, 120);
\$pdf->Sector(\$xc, \$yc, \$r, 120, 250);
\$pdf->SetFillColor(255, 120, 120);
\$pdf->Sector(\$xc, \$yc, \$r, 250, 20);
\$pdf->Output();
?>``````
View the result here.

ZIP | TGZ
Es ist ein Fehler aufgetreten

# Es ist ein Fehler aufgetreten

## Was ist das Problem?

Bei der Ausführung des Skriptes ist ein Fehler aufgetreten. Irgendetwas funktioniert nicht richtig.

## Wie kann ich das Problem lösen?

Öffnen Sie die aktuelle Log-Datei im Ordner `var/logs` bzw. `app/logs` und suchen Sie die zugehörige Fehlermeldung (normalerweise die letzte).

### Weitere Informationen

Die Skriptausführung wurde gestoppt, weil irgendetwas nicht korrekt funktioniert. Die eigentliche Fehlermeldung wird aus Sicherheitsgründen hinter dieser Meldung verborgen und findet sich in der aktuellen Log-Datei (siehe oben). Wenn Sie die Fehlermeldung nicht verstehen oder nicht wissen, wie das Problem zu beheben ist, durchsuchen Sie die Contao-FAQs oder besuchen Sie die Contao-Supportseite.