Hallo,
irgendwie fehlt mir ein vernünftiger Lösungsansatz, deswegen wende ich mich hilfesuchend an Euch:
Auf einem Panel brauche ich ein Koordinatensystem, auf das Symbole plaziert werden (siehe dazu auch meinen anderen Thread) - allerdings sind die Einheiten nicht Pixel, sondern interne (z.B. mm), des weiteren ist der Ursprung des Koordinatensystems nicht wie bei den Panels üblich, links oben, sondern links unten.
Die Umrechnung der internen Koordinaten auf Bildschirmpixel ist auch nicht so das Problem, da müssen die Faktoren Zoom, Offset vom internen Ursprung und die Höhe des Panels berücksichtigt werden... allerdings scheitert es an der Umsetzung.
Ich hätte mehrere Ansätze, wie ich die Berechnung angehen könnte, beispielsweise nach folgendem:
Jedes dargestellte Symbol enthält in internen Variablen die Informationen über den aktuellen Zoomfaktor, Panelhöhe etc. und kann daraus direkt die Bildschirmkoordinaten berechnen. Beim Verschieben werden für jeden Schritt die Koordinaten neu berechnet, was recht rechenintensiv ist wenn viele Symbole gleichzeitig verschoben werden sollen. Ausserdem müssen alle Symbole über Listener informiert werden, wenn sich Zoom oder der Bildausschnitt ändert etc.
Ein anderer Ansatz wäre folgender: Es gibt ein zentral erreichbares Objekt, das die Informationen zu Zoom, Bildausschnitt etc. enthält, bei jeder Verschiebe-Aktion werden die Daten von den Symbolen angefragt und zur Berechnung rangezogen. Allerdings würde ich vermuten dass die Performance da ziemlich zu wünschen übrig lässt.
Die dritte Möglichkeit, die mir einfällt, wäre, das JPanel zu überlagern und beim Aufruf von Methoden wie setLocation() die internen Koordinaten in Bildschirmkoordinaten umzurechnen. Vorteil: Das Panel kennt schon seine Höhe und muss daher nicht erst groß irgendwas abfragen.
Aber irgendwie gefällt mir das alles nicht so 100%ig - gibts da intelligentere Ansätze oder evtl. schon ein fertiges Framework für verschiebbare Symbole (so ähnlich wie Icons auf dem Desktop verschoben werden können, also auch mit Markieren und Verschieben von mehreren Symbolen gleichzeitig etc.)?
irgendwie fehlt mir ein vernünftiger Lösungsansatz, deswegen wende ich mich hilfesuchend an Euch:
Auf einem Panel brauche ich ein Koordinatensystem, auf das Symbole plaziert werden (siehe dazu auch meinen anderen Thread) - allerdings sind die Einheiten nicht Pixel, sondern interne (z.B. mm), des weiteren ist der Ursprung des Koordinatensystems nicht wie bei den Panels üblich, links oben, sondern links unten.
Die Umrechnung der internen Koordinaten auf Bildschirmpixel ist auch nicht so das Problem, da müssen die Faktoren Zoom, Offset vom internen Ursprung und die Höhe des Panels berücksichtigt werden... allerdings scheitert es an der Umsetzung.
Ich hätte mehrere Ansätze, wie ich die Berechnung angehen könnte, beispielsweise nach folgendem:
Jedes dargestellte Symbol enthält in internen Variablen die Informationen über den aktuellen Zoomfaktor, Panelhöhe etc. und kann daraus direkt die Bildschirmkoordinaten berechnen. Beim Verschieben werden für jeden Schritt die Koordinaten neu berechnet, was recht rechenintensiv ist wenn viele Symbole gleichzeitig verschoben werden sollen. Ausserdem müssen alle Symbole über Listener informiert werden, wenn sich Zoom oder der Bildausschnitt ändert etc.
Ein anderer Ansatz wäre folgender: Es gibt ein zentral erreichbares Objekt, das die Informationen zu Zoom, Bildausschnitt etc. enthält, bei jeder Verschiebe-Aktion werden die Daten von den Symbolen angefragt und zur Berechnung rangezogen. Allerdings würde ich vermuten dass die Performance da ziemlich zu wünschen übrig lässt.
Die dritte Möglichkeit, die mir einfällt, wäre, das JPanel zu überlagern und beim Aufruf von Methoden wie setLocation() die internen Koordinaten in Bildschirmkoordinaten umzurechnen. Vorteil: Das Panel kennt schon seine Höhe und muss daher nicht erst groß irgendwas abfragen.
Aber irgendwie gefällt mir das alles nicht so 100%ig - gibts da intelligentere Ansätze oder evtl. schon ein fertiges Framework für verschiebbare Symbole (so ähnlich wie Icons auf dem Desktop verschoben werden können, also auch mit Markieren und Verschieben von mehreren Symbolen gleichzeitig etc.)?