System.Drawing.PieChart.PieSlice.GetVisiblePeripherySurfaceBounds C# (CSharp) Method

GetVisiblePeripherySurfaceBounds() private method

Gets an array of visible periphery bounds.
private GetVisiblePeripherySurfaceBounds ( ) : PeripherySurfaceBounds[]
return PeripherySurfaceBounds[]
        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));
        }