Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   MouseOver Canvas Sachen? (https://www.delphipraxis.net/181380-mouseover-canvas-sachen.html)

milos 11. Aug 2014 02:30

MouseOver Canvas Sachen?
 
Hallo,

ich würde gerne ein kleines CAD-Programm erstellen doch scheitere daran eine Möglichkeit zu finden, abzufragen ob meine Maus über einer Linie oder z.B. einem Kreis ist.

Momentan brauch ich es nur für die Linie. Von der Linie hab ich logischerweise nur den X und Y Wert und nicht die Pixel die dazwischen liegen.

Wie kann man das gut und performant lösen auch wenn sich sehr viele Linien auf dem Bildschirm befinden?

Wäre für jede Hilfe dankbar :D

MfG

nuclearping 11. Aug 2014 04:06

AW: MouseOver Canvas Sachen?
 
Statt das Rad neu zu erfinden, solltest du dir mal die Graphics32-Library anschauen, vorallem die "Layer"-Demos zu "TImgView32".

http://graphics32.org/wiki//Main/Graphics32

Medium 11. Aug 2014 10:59

AW: MouseOver Canvas Sachen?
 
Und wenn du es doch neu erfinden möchtest: Wenn die Linien nicht nur senk-. und waagerecht sind (da könnte man eine einfache Bounding-Box Prüfung machen), musst du den Abstand von dem Mauscursor zu deiner Strecke ermitteln. Die Formeln für den Abstand von Punkt zu Gerade finden sich leicht im Netz, man muss dann nur bedenken, dass eine Strecke eine begrenzte Gerade ist. Glücklicherweise fällt bei der Abstandsberechnung als Nebenprodukt auch gleich der Fußpunkt auf der Geraden ab, so wie ein Faktor dessen. Da man die Gerade sinnigerweise mit G(a) = P1 + a*(P2-P1), mit P1 und P2 als deine Streckenpunkte, und das "a" besagter Faktor ist, muss man also nur schauen, ob dieser zwischen 0 und 1 liegt. Wenn nicht, ist die Maus vor/hinter der Strecke. Über den Abstand dann noch schauen ob man nah genug dran ist um es als "drauf" interpretieren zu können.

Da man aber nicht immer nur ganze Strecken oder Formen selektieren will, wäre es vom obigen abgesehen noch sinnvoll, verschiedene Selektiermodi anzubieten: Punktselektion, Kantenselektion, Objektselektion, und bei 3D auch Flächenselektion. (Intern würde ich diese alle als Punktselektionen darstellen.) Das aber nur als Nebengedanke.

milos 11. Aug 2014 17:57

AW: MouseOver Canvas Sachen?
 
Mir ist in den Sinn gekommen, dass es sowieso Sinnvoller wäre wenn ich die Punkte verschieben könnte und nicht die die ganze Linie.

Aber danke@Medium, mit deiner Hilfe sollte ich das mit der ganzen Linie auch hinkriegen ;)

Freundliche Grüsse


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz