Ich möchte eine Linie in einem BMP, die in PictureBox
mit einem Graphic.DrawLine()
befindet, die ich mit der Maus bewegen kann. Ich kann keine Funktion finden, um zu überprüfen, ob die Maus in der Leitung ist oder nicht. Ich habe viele Methoden gefunden, um zu überprüfen, ob die Maus über Graphic.FillPolygon()
liegt, aber keine über DrawLine()
. Ist es eine gute Lösung, es zu überprüfen?Maus erfasst, wenn es über Linie ist (Graphic.DrawLine())
Edit: So durch den Vorschlag machte ich eine solche Funktion:
private bool IsPointInPolygon4(Point[] poly, Point p)
{
System.Drawing.Drawing2D.GraphicsPath test = new System.Drawing.Drawing2D.GraphicsPath();
if (poly.Length == 2) // it means there are 2 points, so it's line not the polygon
{
test.AddLine(poly[0], poly[1]);
if (test.IsVisible(p, g))
{
MessageBox.Show("You clicked on the line, congratulations", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
test.Dispose();
return true;
}
}
else
{
test.AddPolygon(poly);
if (test.IsVisible(p, g))
{
MessageBox.Show("You clicked on the polygon, congratulations", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
return true;
}
}
return false;
}
Es funktioniert großartig für die Polygone. Aber ich kann das Mausereignis immer noch nicht auf die Linie bringen. Irgendwelche Vorschläge?
Ist es immer eine perfekt horizontale oder vertikale Linie, keine anderen Winkel? –
nein, leider kann es jeder Winkel, was mehr ist, ich möchte eine Funktion hinzufügen, um den Winkel zu ändern, wenn jemand die Vertex fangen – Blabla