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

GetHiddenPeripherySurfaceBounds() private method

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