How to draw a circular progressbar pie using GraphicsPath in WinForm?

Viewed 1871

I want my custom circular progress bar in WinForm. But the result doesnt fit to what I think. How can I draw the shape as the same in this picture?. I uploaded two image to be clear in my problem.

Target shape

My code result

My code to do this:

void Form1_Paint(object sender, PaintEventArgs e)
    {
        int angle = 120;

        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;

        Rectangle outerRect = new Rectangle(50, 50, 100, 100);
        Rectangle innerRect = new Rectangle(70, 70, 60, 60);

        int innerRadius = innerRect.Width / 2;
        int outerRadius = outerRect.Width / 2;

        Point innerCenter = new Point(innerRect.X + innerRadius, innerRect.Y + innerRadius);
        Point outerCenter = new Point(outerRect.X + outerRadius, outerRect.Y + outerRadius);

        GraphicsPath outerCircle = new GraphicsPath();
        outerCircle.AddEllipse(outerRect);

        GraphicsPath innerCircle = new GraphicsPath();
        innerCircle.AddEllipse(innerRect);

        GraphicsPath progPath = new GraphicsPath();

        Point p1 = new Point(outerRect.X + outerRadius, outerRect.Y);
        Point p2 = new Point(innerRect.X + innerRadius, innerRect.Y);


        Point inner = new Point((int)(innerRadius * Math.Cos(angle * Math.PI / 180) + innerCenter.X),
                                (int)(innerRadius * Math.Sin(angle * Math.PI / 180) + innerCenter.Y));
        Point outer = new Point((int)(outerRadius * Math.Cos(angle * Math.PI / 180) + outerCenter.X),
                                (int)(outerRadius * Math.Sin(angle * Math.PI / 180) + outerCenter.Y));

        progPath.AddLine(p1, p2);
        progPath.AddArc(innerRect, -90, angle);
        progPath.AddLine(inner, outer);
        progPath.AddArc(outerRect, angle - 90,-angle);

        progPath.Widen(Pens.Black);
        e.Graphics.DrawPath(Pens.Black, progPath);

    }
1 Answers
Related