在面板上绘制具有多个顶点的路径
本文关键字:顶点 路径 绘制 | 更新日期: 2023-09-27 18:18:24
我有一个使用鼠标点击在面板上绘制路径的任务。路径应该是向左的点击并释放(x1, y1),移动鼠标,然后左键点击并释放(x2, y2)。然后画一条线从(x1, y1)到(x2, y2)这次当我把鼠标移动到其他位置时输入(x3,y3)然后左键&释放,应该从(x2, y2)到(x3,y3)画一条线。
用这种方式,我想画一个有多个顶点的路径,比如(Xn, Yn)
目前我只能从(x1, y1)画到(x2, y2)。
using (Pen draw_pen = new Pen(Color.Blue, PEN_WIDTH))
{
g.DrawLine(draw_pen, _StartPt.X, _StartPt.Y, _EndPt.X, _EndPt.Y);
}
使用您选择的列表或收藏品,然后每当发生点击/放弃时,将当前点添加到列表中,在添加完您的完整列表后,始终从一个元素到下一个元素,直到结束。
您可以使用GraphicsPath来表示它。下面是一个简单的例子:
public partial class Form1 : Form
{
private int PEN_WIDTH = 5;
private Point lastPoint = new Point(-1, -1);
private System.Drawing.Drawing2D.GraphicsPath GP = new System.Drawing.Drawing2D.GraphicsPath();
public Form1()
{
InitializeComponent();
this.Paint += Form1_Paint;
this.MouseDown += Form1_MouseDown;
}
void Form1_MouseDown(object sender, MouseEventArgs e)
{
Point pt = new Point(e.X, e.Y);
if (lastPoint.X == -1 && lastPoint.Y == -1)
{
lastPoint = pt;
}
else
{
GP.AddLine(lastPoint, pt);
this.Refresh();
}
lastPoint = pt;
}
void Form1_Paint(object sender, PaintEventArgs e)
{
using (Pen draw_pen = new Pen(Color.Blue, PEN_WIDTH))
{
Graphics g = e.Graphics;
g.DrawPath(draw_pen, GP);
}
}
}
显然,如果你想在一定数量的顶点后停止,你可以跟踪点击次数。您可以使用List<GraphicsPath>
来表示一组以上的行。