Hallo alle miteinander, ich hab mal wieder Problemchen :D diesmal gehts um die GUI für mein Modellbahnprojekt... ich würde diese gerne auf Java Basis bauen, aus dem ganz einfachen Grund, weil ich mich zumindest halbwegs auskenne und mich zum anderen noch nicht entschieden habe, welches OS als Untergrund dienen wird ;) Soweit so gut, mein Problem ist dann folgendes (ich hoffe ihr versteht was ich meine): ich würde gerne das Übersichtsbild eines Bahnhofs oder Streckenabschnitts schematisch darstellen, ähnlich einer Landkarte, dabei möchte gerne den Bhf in einzelne, quadratische Zellen einteilen, wobei jede Zelle einer funktionalen Einheit, also zum Beispiel einem Gleis, einer Weiche, einem Signal (=Ampel) usw entspricht. Wichtig dabei ist, dass jede Einheit auch noch konfigurierbar bleiben muss, sprich, Weichen sollen per Mausklick umschaltbar sein, Gleisbelegungen sollen zur Änderung der Gleisfarbe führen, Bahnübergänge sollen sie öffnen/schliessen etc... Zur Demonstration habe ich hier eine kleine Skizze angehängt. Ist zwar nur mit Paint, aber ich hoffe man sieht, wie ich das ungefähr handhaben möchte... Hat jemand von Euch eine Idee, wie ich das somit in Java umsetzen kann, sodass es gut skaliert, und die Performance halbwegs ok bleibt?
Wenn die Darstellung nicht zu umfangreich werden soll/muss kannst du so machen. Dafür baust du dir einige grundlegende Objekte: -Gleis -Weiche -Bahnsteig (bzw. allgemein für Grafiken, Beschriftung) Mit Vererbung usw. kannst du die Funktionen erweitern (BÜ-Gleis, Endgleis, Kreuzungsweiche, ...). Signale würde ich auch einem Gleis zuordnen, die stehen ja sowieso immer nebendran. Für die Darstellung verwendest du dein Raster bzw. so ein Grid Control aus dem Grafikpaket deiner Wahl. Jeder Zelle ist ein Objekt zugeordnet. Beim Bildaufbau übergibst du dem Objekt die Zeichenfläche/Canvas der Raster-Zelle, das zeichnet dann seine jeweilige Darstellung da rein. Entsprechend kann ein Objekt auch onClick Handler registrieren usw. Für die Datenübertragung baust du dir ein virtuelles Stellwerk. Das hat dann eine Liste mit ihm zugewiesenen Objekten (Gleisabschnitte, Signale, ...) und eine Verbindung zur Anlage. Wenn auf der Anlage was passiert kann das Stellwerk die neuen Daten an das zugehörige Objekt weiterleiten. Entsprechend kennt ein Objekt auch "sein" Stellwerk und kann Stellbefehle absetzen. Wenn du das Stellwerk auch als Objet auf das Raster setzt brauchst du später bloß das Raster-Objekt serialisieren um die komplette Konfiguration der Anlage zu speichern.
Danke erstmal für deine Antwort, ich werde Punkt für Punkt auf deine Antwort eingehen, dann wird vielleicht auch mein Anliegen nochmal eine Spur klarer ;) Tr schrieb: > Wenn die Darstellung nicht zu umfangreich werden soll/muss kannst du so > machen. Der Umfang sollte doch schon ein wenig größer werden, das angehänge Bild im ersten Beitrag soll nur beispielhaft die Idee herzeigen. > Dafür baust du dir einige grundlegende Objekte: > -Gleis > -Weiche > -Bahnsteig (bzw. allgemein für Grafiken, Beschriftung) Genauso wollte ich das machen. alle Elemente als Vektorgrafik zeichnen (aber im Negativ). dann den einzelnen Zellen die Grafiken übergeben, bei Weichen mit der Auswahl der Stellen (also ob L oder R). Somit kann ich zb Gleisbesetzungen über Änderung der Hintergrundfarbe der Zelle darstellen. > Mit Vererbung usw. kannst du die Funktionen erweitern (BÜ-Gleis, > Endgleis, Kreuzungsweiche, ...). > Signale würde ich auch einem Gleis zuordnen, die stehen ja sowieso immer > nebendran. > Für die Datenübertragung baust du dir ein virtuelles Stellwerk. > Das hat dann eine Liste mit ihm zugewiesenen Objekten (Gleisabschnitte, > Signale, ...) und eine Verbindung zur Anlage. > Wenn auf der Anlage was passiert kann das Stellwerk die neuen Daten an > das zugehörige Objekt weiterleiten. > Entsprechend kennt ein Objekt auch "sein" Stellwerk und kann > Stellbefehle absetzen. Geb ich dir total recht. Man merkt du hast Ahnung in dem Gebiet, über Funktionen per se mach ich mir aber derzeit nicht die großen Gedanken. Es sei so viel gesagt: im Großen soll es mehrere µCs geben, die mit der GUI kommunizieren. Jeder Controller übernimmt dann eine Aufgabe, wie das Stellen der Weichen, Signale usw. Somit hab ich dann auch kein "virtuelles Stellwerk" sondern ein echtes ;) Im weiteren Fall möchte ich es dann auch so machen, dass die GUI über XML-Daten gefüttert werden kann und sich der Bahnhof dadurch selbst aufbaut und entsprechende Bilder erzeugt, mit entsprechenden Menüs, Events etc. um auch mehrere Streckenabschnitte oder verschiedene Anlagen bedienen zu können. > Für die Darstellung verwendest du dein Raster bzw. so ein Grid Control > aus dem Grafikpaket deiner Wahl. Jeder Zelle ist ein Objekt zugeordnet. > Beim Bildaufbau übergibst du dem Objekt die Zeichenfläche/Canvas der > Raster-Zelle, das zeichnet dann seine jeweilige Darstellung da rein. > Entsprechend kann ein Objekt auch onClick Handler registrieren usw. > HIER kommen wir zum Kern meiner Frage: WELCHES Grafikpaket, welche Control ist hier geeignet. Ich habe einen Versuch mit jPanels gestartet (Swing-GUI). Ich wollte (wie im obigen Bild) die Panels in einem Grid-Layout anordnen und dann, wie weiter oben beschrieben, den Bahnhof Stück für Stück aufbauen. Das funktioniert für 10 Panels gut, für 100 auch noch, aber bei 500...1000 nicht mehr. Allein schon aus Programmiertechnischer Sicht... Meine Idee dahinter war, die Anzahl der Panels konstant zu halten und einfach nur jedes bei Bedarf mit einer Grafik zu füllen. Und zur konkreten Anzahl... nehmen wir einen Bildschirm, der mit FullHD Auflösung arbeitet, dann haben wir 1920x1080 pixel. Gehen wir davon aus, dass ich in der Breite möglichst alles ausnutzen will, also zb 1900pixel, in der Höhe ungefähr 2/3, das würde ungefähr 800pixel, dann würde das bei einer Zellengröße von 30x30 Pixeln also ca. 63x24=1512 Zellen entsprechen. > Wenn du das Stellwerk auch als Objet auf das Raster setzt brauchst du > später bloß das Raster-Objekt serialisieren um die komplette > Konfiguration der Anlage zu speichern. Da komm ich jetzt nicht ganz mit, was du meinst, bitte nochmal um genauere Erklärung ;)
Benjamin A. schrieb: > ich würde gerne das Übersichtsbild eines Bahnhofs oder > Streckenabschnitts schematisch darstellen, ähnlich einer Landkarte, Solche Stellwerke gibt es nicht mehr, die sehen heute so aus: http://www.onetz.de/weiden-in-der-oberpfalz/lokales/stellwerk-elektronisch-dieter-zintl-am-sogenannten-bedienplatz-fuer-das-stellwerk-neustadtwn-das-den-bereich-zwischen-weiden-und-windischeschenbach-inklusive-des-abzweigs-richtung-felixberg-abdeckt-m153758,17736.html
Michael B. schrieb: > Benjamin A. schrieb: >> ich würde gerne das Übersichtsbild eines Bahnhofs oder >> Streckenabschnitts schematisch darstellen, ähnlich einer Landkarte, > > Solche Stellwerke gibt es nicht mehr, die sehen heute so aus: > > http://www.onetz.de/weiden-in-der-oberpfalz/lokales/stellwerk-elektronisch-dieter-zintl-am-sogenannten-bedienplatz-fuer-das-stellwerk-neustadtwn-das-den-bereich-zwischen-weiden-und-windischeschenbach-inklusive-des-abzweigs-richtung-felixberg-abdeckt-m153758,17736.html Was genau unterscheidet meine Bahnhofsansicht von der auf dem Bild? Klar, das Foto zeigt irgend ein ESTW einer richtigen Bahn, ich nehme wohl an DB oder irgend eine deutsche Lokalbahn, den Hersteller erkenne ich jetzt an dem Bild nicht. So viel kann ich aber sagen: Ein kleines winziges bisschen Ahnung hab ich von Stellwerken, und soweit ich das beurteilen kann, ist meine Idee nicht wirklich auf dem Holzweg, mit dem Unterschied, dass ich natürlich nicht redundant und 2-kanalig arbeite, da es sich hier um eine Modellbahn und nicht um ein echtes ESTW handelt ;)
Benjamin A. schrieb: > HIER kommen wir zum Kern meiner Frage: WELCHES Grafikpaket, welche > Control ist hier geeignet. Ich habe einen Versuch mit jPanels gestartet > (Swing-GUI). > Ich wollte (wie im obigen Bild) die Panels in einem Grid-Layout anordnen > und dann, wie weiter oben beschrieben, den Bahnhof Stück für Stück > aufbauen. Das funktioniert für 10 Panels gut, für 100 auch noch, aber > bei 500...1000 nicht mehr. Naja, im obigen Beispiel hast Du 16 * 10 = 160 Zellen. Das ist schon noch was anderes als 500 bis 1000, es ist ja immerhin Faktor 3 bis 6 dazwischen. > Allein schon aus Programmiertechnischer Sicht... Was soll da aus programmiertechnischer Sicht nicht gehen? > Meine Idee dahinter war, die Anzahl der Panels konstant zu > halten und einfach nur jedes bei Bedarf mit einer Grafik zu füllen. Man kann auch manche Zellen des Grids gar nicht füllen. Geht wunderbar :) > Und > zur konkreten Anzahl... nehmen wir einen Bildschirm, der mit FullHD > Auflösung arbeitet, dann haben wir 1920x1080 pixel. Gehen wir davon aus, > dass ich in der Breite möglichst alles ausnutzen will, also zb > 1900pixel, in der Höhe ungefähr 2/3, das würde ungefähr 800pixel, dann > würde das bei einer Zellengröße von 30x30 Pixeln also ca. 63x24=1512 > Zellen entsprechen. Deine Zahlen werden mit jedem Posting größer... :-D Wieviele von den ca. 1500 Zellen wären denn so im Durchschnitt tatsächlich besetzt?
Hast Du Dir generell schon mal JMRI angeschaut? Vielleicht kannst Du das ja für Deine Zwecke einsetzen. JMRI - Java Model Railroad Interface: http://jmri.sourceforge.net/ Da gibt es unter anderem "PanelPro, an application to make Control Panels": http://jmri.sourceforge.net/help/en/html/apps/PanelPro/PanelPro.shtml
Mark B. schrieb: > Benjamin A. schrieb: > >> HIER kommen wir zum Kern meiner Frage: WELCHES Grafikpaket, welche >> Control ist hier geeignet. Ich habe einen Versuch mit jPanels gestartet >> (Swing-GUI). >> Ich wollte (wie im obigen Bild) die Panels in einem Grid-Layout anordnen >> und dann, wie weiter oben beschrieben, den Bahnhof Stück für Stück >> aufbauen. Das funktioniert für 10 Panels gut, für 100 auch noch, aber >> bei 500...1000 nicht mehr. > > Naja, im obigen Beispiel hast Du 16 * 10 = 160 Zellen. Das ist schon > noch was anderes als 500 bis 1000, es ist ja immerhin Faktor 3 bis 6 > dazwischen. Nochmal: das Bild soll nur andeuten, wie ich mir die Ansicht vorstelle. > >> Allein schon aus Programmiertechnischer Sicht... > > Was soll da aus programmiertechnischer Sicht nicht gehen? schon mal 1500 Zellen umbenannt, mit einem Bild versehen, Events programmiert etc? :D > >> Meine Idee dahinter war, die Anzahl der Panels konstant zu >> halten und einfach nur jedes bei Bedarf mit einer Grafik zu füllen. > > Man kann auch manche Zellen des Grids gar nicht füllen. Geht wunderbar > :) Du meinst also konkret zwar das Grid auf die maximale Anzahl an Zellen auszulegen, sprich ~1500, aber nur jene überhaupt mit einem Panel zu füllen, die auch wirklich eine Funktion innehaben? >> Und >> zur konkreten Anzahl... nehmen wir einen Bildschirm, der mit FullHD >> Auflösung arbeitet, dann haben wir 1920x1080 pixel. Gehen wir davon aus, >> dass ich in der Breite möglichst alles ausnutzen will, also zb >> 1900pixel, in der Höhe ungefähr 2/3, das würde ungefähr 800pixel, dann >> würde das bei einer Zellengröße von 30x30 Pixeln also ca. 63x24=1512 >> Zellen entsprechen. > > Deine Zahlen werden mit jedem Posting größer... :-D > > Wieviele von den ca. 1500 Zellen wären denn so im Durchschnitt > tatsächlich besetzt? also die ca 1500 Zellen sind aus derzeitiger Rechnung die MAXIMAL Anzahl, also das, was die Applikation auch im Vollbild anzeigen können MUSS. Wie viele Zellen nun schlussendlich belegt sind, hängt wiederum vom konkreten Aufbau ab. Das würde ich gerne vorerst nicht genau definieren, da es ja (theoretisch) auf mehreren Anlagen funktionieren soll. Sprich: ich bastle da nicht alleine dran, bzw. es ist nicht nur für meine Anlage gedacht, sondern soll auch bei Freunden, Verwandten,... zum Einsatz kommen.
Mark B. schrieb: > Hast Du Dir generell schon mal JMRI angeschaut? Vielleicht kannst Du das > ja für Deine Zwecke einsetzen. > > JMRI - Java Model Railroad Interface: > http://jmri.sourceforge.net/ > > Da gibt es unter anderem "PanelPro, an application to make Control > Panels": > http://jmri.sourceforge.net/help/en/html/apps/PanelPro/PanelPro.shtml Das sieht auf jedenfall mal interessant aus und ist ein paar Blicke wert ;)
Benjamin A. schrieb: > schon mal 1500 Zellen umbenannt, mit einem Bild versehen, Events > programmiert etc? :D Nö :-) Das meiste was ich bisher hatte... hmmmm.. das waren so etwa 10 x 10. > Du meinst also konkret zwar das Grid auf die maximale Anzahl an Zellen > auszulegen, sprich ~1500, aber nur jene überhaupt mit einem Panel zu > füllen, die auch wirklich eine Funktion innehaben? Genau. Benjamin A. schrieb: > Das sieht auf jedenfall mal interessant aus und ist ein paar Blicke wert > ;) Ja ist cool ne? :)
Ok, das geht definitiv in die richtige Richtung, ich schau mal, ob ich da nur den Source-Code auch finde, und ob ich das ein bisschen abspecken kann, die Software ist relativ mächtig und kann eigentlich sehr viel. Nachdem sich mein derzeitiges Konzept nicht auf vorgefertigte Protokolle wie DCC oder ähnliches stützt, kann ich nicht sagen, ob ich das so verwenden kann. Ganz davon abgesehen möchte ich ja selbst auch noch ein wenig tüfteln :P Es ist auf jedenfall mal ein erster Schritt in die Richtung, sollte es aber noch andere Vorschläge geben, werde ich natürlich denen auch nachgehen. Was ich auch definitiv probieren werde, ist die Idee nur alle benötigten Felder mit jPanels zu füllen. Vielleicht fange ich überhaupt gleich an, ein Test-XML zu schreiben und einmal zu testen, wie gut die Performance hier ist.
Benjamin A. schrieb: > Der Umfang sollte doch schon ein wenig größer werden, das angehänge Bild > im ersten Beitrag soll nur beispielhaft die Idee herzeigen. Da war ich ungenau was ich mit "Umfang" meinte. Umfang "Anzahl Elemente/Objekte": Mit dem Raster-System egal, bis der RAM platzt. Umfang "Eyecandy": Da bist du ans Raster gebunden, Elemente über mehrere Kästen zeichnen wird fummelig. Benjamin A. schrieb: > HIER kommen wir zum Kern meiner Frage: WELCHES Grafikpaket, welche > Control ist hier geeignet. Ich habe einen Versuch mit jPanels gestartet > (Swing-GUI). Tja da muss ich passen, so gut kenne ich Java nicht. In Delphi würde ich ein TStringGrid nehmen. Also definitiv ein fertiges Grid/Tabellen-Steuerelement, nicht selbst etwas mit Paneln basteln. Dein Bahnhof wird mal größer werden, dann möchtest du bestimmt scrollen & zoomen. Das mit selbst gestrickten Panels zu machen wird ein Alptraum. Benjamin A. schrieb: > Es sei so viel gesagt: im Großen soll es mehrere µCs geben, die mit der > GUI kommunizieren. Jeder Controller übernimmt dann eine Aufgabe, wie das > Stellen der Weichen, Signale usw. Somit hab ich dann auch kein > "virtuelles Stellwerk" sondern ein echtes ;) IMHO solltest du das dann auch wie ein echtes ESTW aufbauen/konzipieren. D.h. ein "reales" Stellwerk bedient alle Weichen, Signale, ... von einem Abschnitt und wird durch ein "virtuelles" repräsentiert. Wenn du ein "Stellwerk" (µC) für alle Weichen, eines für alle Signale, ... nimmst geht das große Basteln los. Fahrstraßen werden dann extrem schwierig, die sind so schon knifflig genug. Benjamin A. schrieb: > Da komm ich jetzt nicht ganz mit, was du meinst, bitte nochmal um > genauere Erklärung ;) Du baust dir so eine Struktur für das Raster bzw. die Objekte: BildObjekt - Gleis - Signalgleis - BÜ Gleis - Weiche - Kreuzungsweiche - Stellwerk Das BildObjekt hat Dummy-Funktionen für onPaint, onClick, ... und wird dann jeweils passend erweitert um ein Gleis oder eine Weiche darzustellen. Das Raster ist dann sinngemäß sowas: raster = array[x][y] of BildObject; Das Ding kannst du dann komplett wegspeichern und hast automatisch die Position, Typ, Verknüpfungen usw. mit dabei.
>> Es sei so viel gesagt: im Großen soll es mehrere µCs geben, die mit der >> GUI kommunizieren. Jeder Controller übernimmt dann eine Aufgabe, wie das >> Stellen der Weichen, Signale usw. Somit hab ich dann auch kein >> "virtuelles Stellwerk" sondern ein echtes ;) >IMHO solltest du das dann auch wie ein echtes ESTW aufbauen/konzipieren. >D.h. ein "reales" Stellwerk bedient alle Weichen, Signale, ... von einem >Abschnitt und wird durch ein "virtuelles" repräsentiert. >Wenn du ein "Stellwerk" (µC) für alle Weichen, eines für alle Signale, >... nimmst geht das große Basteln los. Fahrstraßen werden dann extrem >schwierig, die sind so schon knifflig genug. Nachdem das meiste ja eigentlich mehr oder minder zumindest besprochen wurde, gehe ich nur auf den zitierten Punkt ein: Ich glaube ich habe mich hier ein wenig ungeschickt ausgedrückt, was das Naming betrifft. Als Stellwerk würde ich hier den gesamten Aufbau bezeichnen, also sowohl die Interfaces, die Controller, die "Zentrale" inklusive GUI und Software. Die Controller sollen relativ "dumm" werden. Die sollen lediglich die Sensoren/Aktoren bedienen und mit der Zentrale kommunizieren, und zwar in einer angenehmen Art und Weise, ich möchte also nicht hinterrücks über meine Java-Applikation Pins sowie 1-en und 0-en herumschieben. Dadurch wird auch das Stellen von Fahrstraßen einfacher, hier hab ich mir auch schon Gedanken gemacht, soll aber hier vorerst noch nicht das große Thema sein. Ich frage hier wirklich nach einer Methode, mein Gleislayout auf eine Ansprechende und trotzdem performante Art und Weise darzustellen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.