protected void DrawSliceSides(Graphics graphics)
{
ArrayList pieSlicesList = new ArrayList(m_pieSlices);
PieSlice ps = null;
// if the first pie slice (crossing 270 i.e. back) is crossing 90
// (front) axis too, we have to split it
if ((m_pieSlices[0].StartAngle > 90) && (m_pieSlices[0].StartAngle <= 270) && (m_pieSlices[0].StartAngle + m_pieSlices[0].SweepAngle > 450)) {
ps = (PieSlice)pieSlicesList[0];
// this one is split at 0 deg to avoid line of split to be
// visible on the periphery
PieSlice[] splitSlices = ps.Split(0F);
pieSlicesList[0] = splitSlices[0];
if (splitSlices[1].SweepAngle > 0F) {
pieSlicesList.Insert(1, splitSlices[1]);
}
}
else if (((m_pieSlices[0].StartAngle > 270) && (m_pieSlices[0].StartAngle + m_pieSlices[0].SweepAngle > 450)) || ((m_pieSlices[0].StartAngle < 90) && (m_pieSlices[0].StartAngle + m_pieSlices[0].SweepAngle > 270))) {
ps = (PieSlice)pieSlicesList[0];
// this one is split at 180 deg to avoid line of split to be
// visible on the periphery
PieSlice[] splitSlices = ps.Split(180F);
pieSlicesList[0] = splitSlices[1];
if (splitSlices[1].SweepAngle > 0F) {
pieSlicesList.Add(splitSlices[0]);
}
}
// first draw the backmost pie slice
ps = (PieSlice)pieSlicesList[0];
ps.DrawSides(graphics);
// draw pie slices from the backmost to forward
int incrementIndex = 1;
int decrementIndex = pieSlicesList.Count - 1;
while (incrementIndex < decrementIndex) {
PieSlice sliceLeft = (PieSlice)pieSlicesList[decrementIndex];
float angle1 = sliceLeft.StartAngle - 90;
if (angle1 > 180 || angle1 < 0)
angle1 = 0;
PieSlice sliceRight = (PieSlice)pieSlicesList[incrementIndex];
float angle2 = (450 - sliceRight.EndAngle) % 360;
if (angle2 > 180 || angle2 < 0)
angle2 = 0;
Debug.Assert(angle1 >= 0);
Debug.Assert(angle2 >= 0);
if (angle2 >= angle1) {
sliceRight.DrawSides(graphics);
++incrementIndex;
}
else if (angle2 < angle1) {
sliceLeft.DrawSides(graphics);
--decrementIndex;
}
}
ps = (PieSlice)pieSlicesList[decrementIndex];
ps.DrawSides(graphics);
}