private PeripherySurfaceBounds[] GetVisiblePeripherySurfaceBounds()
{
ArrayList peripherySurfaceBounds = new ArrayList();
// outer periphery side is visible only when startAngle or endAngle
// is between 0 and 180 degrees
if (!(m_sweepAngle == 0 || (m_startAngle >= 180 && m_startAngle + m_sweepAngle <= 360))) {
// draws the periphery from start angle to the end angle or left
// edge, whichever comes first
if (StartAngle < 180) {
float fi1 = m_startAngle;
PointF x1 = new PointF(m_pointStart.X, m_pointStart.Y);
float fi2 = EndAngle;
PointF x2 = new PointF(m_pointEnd.X, m_pointEnd.Y);
if (m_startAngle + m_sweepAngle > 180) {
fi2 = 180;
x2.X = m_boundingRectangle.X;
x2.Y = m_center.Y;
}
peripherySurfaceBounds.Add(new PeripherySurfaceBounds(fi1, fi2, x1, x2));
}
// if lateral surface is visible from the right edge
if (m_startAngle + m_sweepAngle > 360) {
float fi1 = 0;
PointF x1 = new PointF(m_boundingRectangle.Right, m_center.Y);
float fi2 = EndAngle;
PointF x2 = new PointF(m_pointEnd.X, m_pointEnd.Y);
if (fi2 > 180) {
fi2 = 180;
x2.X = m_boundingRectangle.Left;
x2.Y = m_center.Y;
}
peripherySurfaceBounds.Add(new PeripherySurfaceBounds(fi1, fi2, x1, x2));
}
}
return (PeripherySurfaceBounds[])peripherySurfaceBounds.ToArray(typeof(PeripherySurfaceBounds));
}