Laden...

Prüfen ob maus auf Linie ist

Erstellt von Seba vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.664 Views
S
Seba Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren
Prüfen ob maus auf Linie ist

Hallo,
ich bin kurz vorm verzweifeln und google auch mittlerweile schon 3 Tage und kann nichts dazu finden. und zwar hab ich folgendes Problem. ich hab zwei symbole die mit einer Linie verbunden sind. zu diesen beiden Symbolen hab ich die Koordinaten. Jetzt kommt ein drittes symbol ins spiel und dieses soll jetzt mit der Linie verbunden werden. Allerdings weiß ich nicht wie ich überprüfe ob meine neue Linie auf die Linie trifft, also quasi ob die maus direkt über der Linie liegt. Die neue linie soll nämlich nur gezeichnet werden wenn man die Maus-Taste genau über der Linie los lässt.
Ich hoffe ich hab mein problem genau beschrieben und irgendwer kann mir helfen?

Vielen dank schon mal im voraus.

709 Beiträge seit 2008
vor 8 Jahren

Hallo Seba,
vielleicht ist einer der folgenden Beiträge das, was du suchst: Kollisionserkennung von 2 Objekten oder Hit-Testing Windows Form graphics.

S
Seba Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Der zweite Link könnte das sein was ich brauche allerdings klappt es bei mir nicht. 😦
Meine funktion sieht jetzt so aus:


 public bool hitTest(Point p)
        {
           
            foreach (var pipes in _PipeList)
            {
                foreach (var Verbindung in _PipeList_Test)
                {

                    if (pipes.pipeStartIndex == Verbindung.pipeIndex)
                    {
                        if (Verbindung.ArtIndex == "start")
                        {
                            pipe_Start_x = _SensorList[Verbindung.sensorIndex].ptStart.X;
                            pipe_Start_y = _SensorList[Verbindung.sensorIndex].ptStart.Y;
                        }
                    }
                    if (pipes.pipeEndIndex == Verbindung.pipeIndex)
                    {
                        if (Verbindung.ArtIndex == "ende")
                        {

                            pipe_End_x = _SensorList[Verbindung.sensorIndex].ptStart.X;
                            pipe_End_y = _SensorList[Verbindung.sensorIndex].ptStart.Y;
                        }
                    }

                }
                Pen pen = new Pen(new SolidBrush(Color.Black), 4);
                PointF[] points = { new Point(pipe_Start_x, pipe_Start_y), new Point(pipe_End_x, pipe_End_y) };
             

                var path = new GraphicsPath();
                  path.AddLines(points);
           
                    if (path.IsOutlineVisible(p, pen) == true)
                    {
                        erg = true;
                        break;
                    }
                    else
                    {
                        erg = false;
                    }
            }
            return erg;
            
        }

Mit dem Using hat es auch nicht geklappt.

5.658 Beiträge seit 2006
vor 8 Jahren

Hi Seba,

wenn du wissen mußt, ob der Mauszeiger auf einer Linie ist, dann mußt du den Abstand zwischen dem Punkt und der Linie berechnen. Evtl. sollte man dabei auch 1-2 Pixel Toleranz mit einbeziehen, damit der Benutzer nicht zu genau sein muß.

Christian

Weeks of programming can save you hours of planning

S
Seba Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

die zweite linie muss aber nicht senkrecht drauf stehn also bringt das doch nichts oder?

189 Beiträge seit 2014
vor 8 Jahren

Naja, doch. Du berechnest immer den Abstand Punkt-Linie.
Der kürzeste und damit einzig sinnvolle Abstand ist immer die Annahme, dass die "Abstandslinie" Punkt (Maus) zu Linie senkrecht steht.
Und wenn die "Abstandslinie" ≤ z.B. 3px, dann wird Linie getroffen angenommen.

S
Seba Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Es Könnte aber so aussehen wie auf dem bild und dann macht das senkrecht doch keinen sinn. also die schwarze linie ist die neue linie und der punkt auf der blauen linie is gesucht. deswegen denke ich immernoch der link von wo mir geschickt wurde ist die lösung allerdings hab ich wahrschienlich einen denkfehler und den kann ich nicht finden

189 Beiträge seit 2014
vor 8 Jahren

Das ist schon klar, dass die zu verbindende Linie aus unterschiedlichen Winkeln kommt.
Es geht aber um eine "gedachte" Linie in dem Link.
Du drückst irgendwo die linke Maustaste, um die Zeichnung zu beginnen.
Dann ziehst du auf (bzw. bis auf wenige Pixel neben ) die Linie.
Dann lässt du die linke Maustaste los.
Die Position der Maus in diesem Moment ist jetzt wichtig. Die ist dein Punkt.
Die schon existente Linie ist deine ... genau Linie. 😉
Dann musst du den Abstand von dem Maus-Punkt zu deiner Linie mit Hilfe einer Hilfslinie, die Senkrecht auf der existierenden "Zeichnungs"linie steht berechnen.
Ist die Länge der Hilfslinie im Toleranzbereich, kannst du nun die neue Linie zeichnen.
Die senkrechte Hilfslinie hat nun keine Bedeutung mehr.

Jetzt verständlich? 😃

S
Seba Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Ja jetzt danke. ich dachte die schwarze linie müsste senkrecht stehn. ich versuch mal, nen codesnippet gibts dazu nicht schon oder?

5.658 Beiträge seit 2006
vor 8 Jahren

Natürlich gibt es dazu Code-Beispiele, du mußt nur mal danach suchen. Der Sinn des Forums ist es nicht, daß wir dir bei Google Code raussuchen, damit du es nur Copy und Pasten mußt. Ohne ein wenig Eigeninitiative funktioniert das nicht.

Bitte beachte unseren [Hinweis] Wie poste ich richtig? Punkt 1 und 4!

Christian

Weeks of programming can save you hours of planning