示例#1
0
        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);
            }
        }
示例#2
0
        // 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);
                }
            }
        }