private void MakeLegend() { int num1 = 0; foreach (TPieItem item in Pieces) { if (item.Color == Color.Empty) { item.Color = this.palette[num1 * 160 / Pieces.Count]; } ++num1; } double num2 = Pieces.Cast <TPieItem>().Sum(item => item.Weight); foreach (TPieItem item in Pieces) { double num3 = item.Weight / num2; var text = item.Text.Replace("&%", (num3 * 100.0).ToString(Format)); Chart.Pad.Title.Add(text, item.Color); Chart.Pad.Legend.Add(text, item.Color); } }
// TODO: rewrite it public virtual void Paint(Pad pad, double xMin, double xMax, double yMin, double yMax) { var num1 = Pieces.Count > 0 ? Pieces.Cast <TPieItem>().Sum(item => item.Weight) : 0; int num2 = pad.ClientX(0.0); int num3 = pad.ClientY(100.0); int num4 = Math.Abs(pad.ClientX(100.0) - pad.ClientX(0.0)); int num5 = Math.Abs(pad.ClientY(100.0) - pad.ClientY(0.0)); int num6 = 0; int num7 = 0; if (num4 > num5) { num6 = (num4 - num5) / 2; num4 = num5; } else { num7 = (num5 - num4) / 2; num5 = num4; } int num8 = num5 / 10; // double num9 ; double num10 = 0.0; for (int index = 0; index < Pieces.Count; ++index) { double num11 = ((TPieItem)Pieces[index]).Weight / num1; var brush = new SolidBrush(((TPieItem)Pieces[index]).Color); double num12 = num10 + (double)Gap; num10 += 360.0 * num11; double num13 = num10 - num12 + 1.0; pad.Graphics.FillPie(brush, num2 + num6 + num8, num3 + num7 + num8, num4 - 2 * num8, num5 - 2 * num8, (int)num12, (int)num13); } if (EnableContour) { // num9 = 0.0; double num11 = 0.0; for (int index = 0; index < Pieces.Count; ++index) { double num12 = ((TPieItem)Pieces[index]).Weight / num1; Pen pen = new Pen(ContourColor); double num13 = num11 + Gap; num11 += 360.0 * num12; double num14 = num11 - num13 + 1.0; pad.Graphics.DrawPie(pen, (float)(num2 + num6 + num8), (float)(num3 + num7 + num8), (float)(num4 - 2 * num8), (float)(num5 - 2 * num8), (float)num13, (float)num14); } } // num9 = 0.0; double num15 = 0.0; for (int index = 0; index < Pieces.Count; ++index) { double num11 = ((TPieItem)Pieces[index]).Weight / num1; Pen pen = new Pen(ContourColor); double num12 = num15 + Gap; num15 += 360.0 * num11; double num13 = num12 + (num15 - num12) / 2.0 + 90.0; int num14 = (num4 - 2 * num8) / 4; int num16 = (num4 - 2 * num8) / 2; Math.Sin(Math.PI / 180.0 * num13); int num17 = (num4 - 2 * num8) / 2; Math.Cos(Math.PI / 180.0 * num13); int num18 = (num4 - 2 * num8) / 2; int num19 = (num4 - 2 * num8) / 2 + 10; int x1 = (int)((double)(num2 + num6 + num8 + (num4 - 2 * num8) / 2) + (double)num18 * Math.Sin(Math.PI / 180.0 * num13)); int y1 = (int)((double)(num3 + num7 + num8 + (num4 - 2 * num8) / 2) - (double)num18 * Math.Cos(Math.PI / 180.0 * num13)); int num20 = (int)((double)(num2 + num6 + num8 + (num4 - 2 * num8) / 2) + (double)num19 * Math.Sin(Math.PI / 180.0 * num13)); int num21 = (int)((double)(num3 + num7 + num8 + (num4 - 2 * num8) / 2) - (double)num19 * Math.Cos(Math.PI / 180.0 * num13)); Font font = new Font("Arial", 8f); pad.Graphics.DrawLine(new Pen(Color.Gray), x1, y1, num20, num21); string str = ((TPieItem)Pieces[index]).Text.Replace("&%", (num11 * 100.0).ToString(Format)); if (num20 > num2 + num6 + num4 / 2) { pad.Graphics.DrawLine(new Pen(Color.Gray), num20, num21, num20 + 5, num21); SizeF sizeF = pad.Graphics.MeasureString(str, font); pad.Graphics.DrawString(str, font, (Brush) new SolidBrush(Color.Black), (float)(num20 + 5), (float)num21 - sizeF.Height / 2f); } else { pad.Graphics.DrawLine(new Pen(Color.Gray), num20, num21, num20 - 5, num21); SizeF sizeF = pad.Graphics.MeasureString(str, font); pad.Graphics.DrawString(str, font, (Brush) new SolidBrush(Color.Black), (float)(num20 - 5) - sizeF.Width, (float)num21 - sizeF.Height / 2f); } } }