этот код работает для рисования нескольких линий щелчками мыши. Но линии перекрываются или пересекаются, даже если одна линия уже создана.
Может ли кто-нибудь помочь мне, как я могу рисовать несколько строк [дан рабочий код для рисования нескольких строк], не перекрывая друг друга, вместо этого он найдет другой обходной путь, чтобы избежать конфликтов с другими строками.
public partial class Form1 : Form
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
private Point _setPointA, _setPointB;
private static List<Point> PointList = new List<Point>();
private Dictionary<Point, Point> PointDictionary = new Dictionary<Point, Point>();
public Form1()
{
PointDictionary.Add(new Point { X = 10, Y = 10 }, new Point { X = 85, Y = 85 });
}
protected override void OnMouseClick(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (!PointList.Any())
{
_setPointA = e.Location;
PointList.Add(_setPointA);
}
else
{
_setPointB = e.Location;
PointList.Add(_setPointB);
//check if not intersects
if (_setPointA.X <= _setPointB.X)
{
PointDictionary.Add(_setPointA, _setPointB);
}
else
{
PointDictionary.Add(_setPointB, _setPointA);
}
Refresh();
}
}
base.OnMouseClick(e);
}
protected override void OnPaint(PaintEventArgs e)
{
foreach (var v in PointDictionary)
{
e.Graphics.DrawLine(SystemPens.ControlDarkDark, v.Key, v.Value);
}
base.OnPaint(e);
PointList.Clear();
}
}
List<Point> pointlist
. Чтобы нарисовать их, используйтеif (pointlist.Count > 1) DrawLines<pen, pointlist.ToArray());
в событии рисования! Другое дело — избежать пересечения линий. Вы можете проверить, прежде чем добавлять новую строку, используя два GraphicsPath и выполняя операцию набора для двух областей, полученных из них. Знаете ли вы, что делать, когда новая линия пересекает одну из предыдущих строк? - person TaW   schedule 21.02.2016