Matrix Koordinaten Controls(mittels Canvas gezeichnet) zuordnen



  • Hi,

    wie werden auf einer Form die x/y koordinaten einem Control möglichst effizient zugeordnet?

    Ich frage, weil ich auf einer mit canvas gezeichneteten Fläche, etliche "Controls" habe, und maus-move bzw maus-klick möglichst effizient zuordnen möchte.

    lg



  • Hallo,

    kannst Du genauer sagen, was mit effizient gemeint ist? Auch wäre Beispielcode hilfreich, um sich Dein Problem genauer vorstellen zu können.

    Gruß
    Leo



  • Hallo

    Das prinzip nennt sich Hit-Testing, und je nach Anwendungszweck gibt es sehr verschiedene Lösungen.
    Bei einer klassischen Sitiation (Grundfläche bis 2000x2000, darauf 0 bis 100 Rechteckige Controls) würde ich immer noch den oben verlinkten Rechteck-Vergleich in einer Schleife verwenden, eventuell vorsortiert durch Z-Order.

    bis bald
    akari



  • Neija, das wäre schon ne Menge Quellcode.

    Im Prinzip ist es eine Paintbox, auf der mit Kanwas rumgemalt wird.

    Einmal besteht das ganze aus einer Art Navigation(Die gewählten Elemente werden der Reihe nach im Explorer Win7 Stil dargestellt.

    Darunter ist eine Auswahl-Liste in der die Elemente gewählt werden können.
    Die Liste soll eben auch einen Hover-Effekt bekommen.

    @akari:

    nice dich mal wieder bei meinen Anfängefragen zu lesen ^^.
    z-order gilt doch nur, wenn sich elemente verdecken? - Bitte korrigiere mich wenn ich falsch liege!

    oben verlinkten Rechteck-Vergleich

    -> check ich net.

    - in diesem Thread finde ich nix was da verlinkt sein könnte.
    - Tante Google wirft dazu nix vernünftiges aus!

    Beim Hit-testing googeln habe ich folgendes gefunden:

    public class Rectangle
    {
        public int X { get; set; }
        public int Y { get; set; }
        public int W { get; set; }
        public int H { get; set; }
    
        public bool HitTest(int x, int y)
        {
            return x >= X && x < X + W && y >= Y && y < Y + H ? true : false;
        }
    }
    

    Wenn ich das etwas modifiziere, komme ich gut damit klar.

    Ich habe deshalb die Frage etwas allgemeiner gestellt, da mich das Thema ansich interessiert.

    Wäre nice, wenn du mir deine Antwort noch etwas genauer erklärst.

    lg



  • Hallo

    Ja Z-Order brauchst du nur wenn die Elemente sich überdecken könnten. Deshalb schrieb ich eventuell.

    Auf der von mir verlinkten Wiki-Seite ist Pseudocode für einen Vergleich (hast du den Link nicht bemerkt?). Sehr ähnlich zu dem Code, den du wo anders gefunden hast.

    Das ist die einfachste Lösung, mehr brauchst du auch nicht für deine beschriebene Aufgabe.

    bis bald
    akari



  • hatte den Link übersehen, aber die selbe Seite beim googeln gefunden 😉

    thx

    lg


Anmelden zum Antworten