AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MouseOver Canvas Sachen?

Ein Thema von milos · begonnen am 11. Aug 2014 · letzter Beitrag vom 11. Aug 2014
Antwort Antwort
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
508 Beiträge
 
Delphi 11 Alexandria
 
#1

MouseOver Canvas Sachen?

  Alt 11. Aug 2014, 02:30
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

MfG
Milos
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: MouseOver Canvas Sachen?

  Alt 11. Aug 2014, 04:06
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: MouseOver Canvas Sachen?

  Alt 11. Aug 2014, 10:59
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
508 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: MouseOver Canvas Sachen?

  Alt 11. Aug 2014, 17:57
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
Milos
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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