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