Я хочу свой собственный круговой индикатор выполнения в WinForm. Но результат не подходит для того, что я думаю. Как я могу нарисовать фигуру, как на картинке? Я загрузил два изображения, чтобы быть ясным в моей проблеме.Как нарисовать круговую диаграмму progressbar с помощью GraphicsPath в WinForm?
Мой код, чтобы сделать это:
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);
}
Благодаря @Reza. Этот способ проще, чем мой метод. –