LED Matrix

Aus LOTUS Wiki DE
Wechseln zu: Navigation, Suche

Vorlage:ArticleMetadata

Konfiguration der LED Matrix. Unter anderem Wechselziele, Unterschiedliche Ziele an Front und Seite, Invertierungen von einzelnen Teilen oder der ganzen Anzeige und sogar komplett freie Positionierung von Elementen.

1 Einleitung

Hallo! Du hast Dich sicher hierher verirrt, weil Du wissen möchtest, wie Du die LED Matrix konfigurieren kannst.


Vielleicht bist Du auch zufällig hier und neugierig, worum es hier geht?

Dieser Artikel beschreibt die Konfigurationsmöglichkeiten einer LED Matrix, die nicht im Standard-Content, sondern unter folgenden Links im Steam [[1]] erhältlich ist.

Das besondere an dieser Matrix ist, dass sie relativ frei konfigurierbar ist.

Sie kann unter anderem Wechselziele, Unterschiedliche Ziele an Front und Seite, Invertierungen von einzelnen Teilen oder der ganzen Anzeige und sogar komplett freie Positionierung von Elementen (Strings, etc.) - zumindest, wenn Du mutig genug bist, Dich damit auseinanderzusetzen ![[2]]


Diese Anleitung wird nach und nach um die Funktionen erweitert, die möglich sind.

2 Kurzanleitung

2.1 Spezielle [[3]] und was da passiert

Die Matrix verwendet [FIS Dateien]. Die Klasse ist "LED_BERLIN".

Darin kann man haufenweise Sachen konfigurieren. Im folgenden gibt es aber erstmal nur einen kleinen Einblick.


Allein das Anlegen einer speziellen [[4]] verändert die Funktion der Matrix. Selbst wenn diese keinen Inhalt hat, gibt es bei der weißen Anzeige einen anderen Startprozess und die Formatierung ist in ein paar Details anders.

2.2 Lektion 1: Einfache Zielkonfigurationen ![[5]]

Bevor es an die vielen anderen [[6]] geht, soll hier erstmal das beschreiben werden, was sicherlich die meisten interessiert: Einfache Anpassungen von Zielen, Anlegen von Wechselzielen, etc.


Die Information, wie ein Ziel dargestellt werden soll, wird als XML in den Zusatz-Strings des Ziels eingetragen und hat immer dieselbe folgende Struktur:


Code

 1. [[7]]<terminus>
 2. [[8]] <simple>
 3. [[9]]
 4. [[10]] <panel>
 5. [[11]] <content>
 6. [[12]]
 7. [[13]] Hier steht der Kram, der definiert, was zu sehen ist.
 8. [[14]]
 9. [[15]] </content>
 10. [[16]]
 11. [[17]] ... noch mehr "content"s für Wechselziel
 12. [[18]]
 13. [[19]] </panel>
 14. [[20]]
 15. [[21]] ... noch mehr "panel"s für was anderes auf den anderen Anzeigen
 16. [[22]]
 17. [[23]] </simple>
 18. [[24]]</terminus>

Alles anzeigen

2.2.1 Wurzelelement und Typ

<terminus> ist das Wurzelelement. Das steht da immer. Das muss da immer stehen, sonst funktioniert das Ganze nicht.

<simple> gibt an, dass das hier eine einfache Zieldefinition ist. Es gibt auch komplexe, aber dazu dann zu einer anderen Zeit an einer anderen Stelle mehr.

2.2.2 Panel

Im <simple> Element gibt es ein oder mehrere <panel> Elemente. Damit werden die in dem Fahrzeug verbauten Anzeigen in der Reihenfolge der Modul Slots konfiguriert. Das letzte <panel> Element wird auf alle übrigen Anzeigen angewandt. Man kann hiermit also auf der Frontanzeige was anderes anzeigen lassen, als auf den restlichen Anzeigen.

2.2.3 Content

Das <content> Element ist genau ein Inhalt einer Anzeige.

Hier werden ein oder zwei Strings definiert. Diese überschreiben die Strings aus der Basis-[[25]]. Sie haben einen Wert (der String selbst) und können auch invertiert werden:


Code

 1. [[26]]<string1>
 2. [[27]] <value>Musterhausen</value>
 3. [[28]]</string1>
 4. [[29]]<string2>
 5. [[30]] <value>via Bahnhof</value>
 6. [[31]] <inverted>true</inverted>
 7. [[32]]</string2>


Wichtig: Es gibt kein Fallback auf die Basis Strings.

Inverted kann "true" oder "false" sein. Der Standardwert ist "false".


Außerdem kann ein gesamter Anzeigenbereich invertiert werden:


Code

 1. [[33]]<inverted>full</inverted>


Mögiche Angaben sind hier "line", "terminus", "full" und "none". Der Standardwert ist "none". Die sind selbsterklärend, oder?


Es ist auch möglich, einen der beiden Strings etwas kleiner als den anderen darzustellen. das geht mit


Code

 1. [[34]]<smallerstring>1</smallerstring>


Der Wert ist "1" oder "2" und gibt den String an, der kleiner sein soll.


Uuuund dann gibt es noch:


Code

 1. [[35]]


Falls es mehrere <content> Elemente gibt, wird nämlich zwischen diesen durchgewechselt. Mit dieser Zeit wird angegeben, wie lange der aktuelle Content zu sehen sein soll, bevor zum nächsten gewechselt wird.

Die Angabe erfolgt in Sekunden. Der Standardwert und gleichzeitig das Minimum ist "1".

2.2.4 Beispiele

1\. Ich will nur die Strings überschreiben.

Spoiler anzeigen

Code

 1. [[36]]<terminus><simple>
 2. [[37]]
 3. [[38]] <panel>
 4. [[39]] <content>
 5. [[40]] <string1><value>Ich bin ein</value></string1>
 6. [[41]] <string2><value>lustiges Testziel</value></string2>
 7. [[42]] </content>
 8. [[43]] </panel>
 9. [[44]]
 10. [[45]]</simple></terminus>


2\. Ich will vorne was anderes stehen haben, als an der Seite*.

Spoiler anzeigen

Code

 1. [[46]]<terminus><simple>
 2. [[47]]
 3. [[48]] <panel>
 4. [[49]] <content>
 5. [[50]] <string1><value>Ich bin ein</value></string1>
 6. [[51]] <string2><value>lustiges Testziel</value></string2>
 7. [[52]] </content>
 8. [[53]] </panel>
 9. [[54]]
 10. [[55]] <panel>
 11. [[56]] <content>
 12. [[57]] <string1><value>Ich sehe</value></string1>
 13. [[58]] <string2><value>anders aus</value></string2>
 14. [[59]] </content>
 15. [[60]] </panel>
 16. [[61]]
 17. [[62]]</simple></terminus>

Alles anzeigen


3\. Ich will ein Wechselziel haben.

Spoiler anzeigen

Code

 1. [[63]]<terminus><simple>
 2. [[64]]
 3. [[65]] <panel>
 4. [[66]] <content>
 5. [[67]] 
 6. [[68]] <string1><value>Ich bin Teil 1</value></string1>
 7. [[69]] <string2><value>vom Wechselziel</value></string2>
 8. [[70]] </content>
 9. [[71]] <content>
 10. [[72]] 
 11. [[73]] <string1><value>Ich bin Teil 2</value></string1>
 12. [[74]] <string2><value>vom Wechselziel</value></string2>
 13. [[75]] </content>
 14. [[76]] </panel>
 15. [[77]]
 16. [[78]]</simple></terminus>

Alles anzeigen


4\. Ich will, dass die erste Zeile kleiner ist, als die zweite.

Spoiler anzeigen

Code

 1. [[79]]<terminus><simple>
 2. [[80]]
 3. [[81]] <panel>
 4. [[82]] <content>
 5. [[83]] <string1><value>Ich bin ein</value></string1>
 6. [[84]] <string2><value>lustiges Testziel</value></string2>
 7. [[85]] <smallerstring>1</smallerstring>
 8. [[86]] </content>
 9. [[87]] </panel>
 10. [[88]]
 11. [[89]]</simple></terminus>

Alles anzeigen


5\. Ich will die ganze Anzeige invertieren.

Spoiler anzeigen

Code

 1. [[90]]<terminus><simple>
 2. [[91]]
 3. [[92]] <panel>
 4. [[93]] <content>
 5. [[94]] <string1><value>Ich bin ein</value></string1>
 6. [[95]] <string2><value>lustiges Testziel</value></string2>
 7. [[96]] <inverted>full</inverted>
 8. [[97]] </content>
 9. [[98]] </panel>
 10. [[99]]
 11. [[100]]</simple></terminus>

Alles anzeigen


6\. Ich will, dass die zweite Zeile invertiert ist.

Spoiler anzeigen

Code

 1. [[101]]<terminus><simple>
 2. [[102]]
 3. [[103]] <panel>
 4. [[104]] <content>
 5. [[105]] <string1><value>Ich bin ein</value></string1>
 6. [[106]] <string2>
 7. [[107]] <value>lustiges Testziel</value>
 8. [[108]] <inverted>true</inverted>
 9. [[109]] </string2>
 10. [[110]] </content>
 11. [[111]] </panel>
 12. [[112]]
 13. [[113]]</simple></terminus>

Alles anzeigen

3 Spezielle [[114]] Klasse

Um die Anzeigen zu konfigurieren, muss eine spezielle [[115]] der Klasse "LED_BERLIN" angelegt werden.


Einige Module laden zusätzlich zu dieser eine weitere spezielle [[116]], deren Klasse einen Namenszusatz hat. Das wird im Modulnamen und in der Beschreibung der entsprechenden Module erwähnt.


Aktuell handelt es sich z.B. um die beiden Berliner Varianten der weißen Matrix mit den Zusätzen "_2014" und "_2018". Diese laden also neben der speziellen [[117]] "LED_BERLIN" auch noch die "LED_BERLIN_2014" bzw. "LED_BERLIN_2018".


Die speziellen [[118]] ergänzen sich. Es ist also möglich einzelne Ziele oder Einstellungen der Anzeige speziell für eines der beiden Module zu variieren, ohne die komplette spezielle [[119]] kopieren zu müssen.

4 Zusatzstrings der [[120]]-Gruppe

Die Zusatzstrings der [[121]] (oben rechts eingetragen, siehe auch [[122]]) konfigurieren hauptsächlich das Verhalten der Anzeige.

Abgesehen von ein paar Abweichungen, folgen sie dem INI-Format. Es gibt also Sektionen, die verschiedene Schlüssel und deren Werte gruppieren. Dabei entspricht eine Sektion meistens einem Konfigurationselement und die zugehörigen Schlüssel sind die Parameter dazu.


Wenn ein Modul eine zusätzliche spezielle [[123]] lädt, dann werden zuerst die Zusatzstrings dieser zusätzlichen speziellen [[124]] (z.B. LED_BERLIN_2014) eingelesen und direkt danach die der normalen speziellen [[125]] (LED_BERLIN). Wenn man sich beide spezielle [[126]] als eine vorstellt, stehen die Definitionen aus der zusätzlichen [[127]] oberhalb von denen aus der normalen speziellen [[128]].


Es zählt immer der Wert des zuerst eingelesenen Parameters. Bei Sektionen, die auf bestimmte Bedingungen angewendet werden, zählt ebenfalls das erste Vorkommen, das zu den dort definierten Bedingungen passt.

Dadurch lassen sich Einstellungen, die in der normalen speziellen [[129]] definiert wurden, in einer zusätzlichen speziellen [[130]] überschreiben. Ausnahme ist die Sektion `[[131]`, da diese Einstellungen enthält, die nur auf die aktuelle spezielle [FIS]] zutreffen.


Im folgenden sind die Sektionen und Parameter aufgeführt, die möglich sind.


(Die Liste ist noch nicht vollständig und wird stetig erweitert)

4.1 Globale und lokale Einstellungen

4.1.1 Globale Parameter

Sektion `[settings]`


Hier werden globale Einstellungen vorgenommen. In einer speziellen Zusatz-[[132]] (z.B. LED_BERLIN_2014) können die Einstellungen der speziellen [[133]] (LED_BERLIN) überschrieben werden.

Die Sektion kann zwar mehrfach definiert werden, es zählt aber immer nur der erste Wert, der eingelesen wird.


**true** \- Die Basis-[[134]] Sonderzeichen werden benutzt (Standardwert, wenn der Parameter weggelassen wird). **false** \- Es werden keine Standardsonderzeichen benutzt. ---|--- count_is_id | Diese Einstellung beeinflusst die Art, wie die im Fahrzeug eingesetzten Anzeigen durchgezählt werden. Mehr dazu an der Stelle, wo es wichtig wird (folgt später ;-)) **true** \- Die verbauten Module werden unabhängig von ihren Eigenschaften durchnummeriert. Das bedeutet, dass die interne Nummerierung der beim Startprozess angezeigten Adresse entspricht. **false** \- Bei der internen Nummerierung wird die Größe der Anzeige beachtet (Standardwert, wenn der Parameter weggelassen wird). auto_format | Wenn es zu einem Ziel keine komplexe Konfiguration gibt, kann dieses automatisch nach bestimmten Regeln formatiert werden. Diese Funktion wird mit diesem Parameter aktiviert. Der Standardwert, wenn der Parameter weggelassen wird, ist **false**. Die Regeln, nach denen die automatisch Formatierung handeln soll, müssen durch die Sektionen `[auto_format:regex]` und `[auto_format:rule]` separat definiert werden. Es gibt keine Standardregeln. Das heißt, dass dieser Parameter nur wirksam wird, wenn auch Regeln definiert werden.

4.1.2 Lokale Parameter

Sektion `[local]`


Die Einstellungen in dieser Sektion beziehen sich ausschließlich auf die aktuelle [[135]]. Das heißt, was in der LED_BERLIN definiert wird, gilt nur für LED_BERLIN und was in LED_BERLIN_2014 definiert wird, gilt nur für LED_BERLIN_2014.


**true** \- Die Anzeige greift auf die Basis-Strings zurück. **false** \- Die Anzeige bleibt leer. (Standardwert, wenn der Parameter weggelassen wird). ---|--- complex_auto_format | Dieser Parameter kommt nur zum Tragen, wenn complex_fallback auf true gesetzt ist. Er definiert, ob bei einem Fallback auf die Basis-Strings die automatische Formatierung verwendet werden soll, sofern diese über den globalen Parameter "auto_format" aktiviert wurde. **true** \- Die automatische Formatierung wird verwendet (auto_format muss ebenfalls true sein). **false** \- Sie wird nicht verwendet (Standardwert, wenn der Parameter weggelassen wird).

4.1.3 Beispiel

Code

 1. [[136]][settings]
 2. [[137]]count_is_id = true
 3. [[138]]auto_format = true
 4. [[139]]special_chars = false
 5. [[140]]
 6. [[141]][local]
 7. [[142]]complex_fallback = true
 8. [[143]]complex_auto_format = false

4.2 Regeln zur automatischen Formatierung von Basis-[[144]]-Strings

4.2.1 Ersetzen von Strings/Reguläre Ausdrücke

Sektion `[auto_format:regex]`


Es können beliebig viele reguläre Ausdrücke und Substitutionen angegeben werden, die auf die Strings der Basis-[[145]] angewendet werden. Für jeden regulären Ausdruck muss eine dieser Sektionen mit beiden Parametern angegeben werden. Die Parameter sind:

---|--- replace | Die Substitution.

4.2.2 Erweiterte Formatierung

Sektion `[auto_format:rule]`


Diese Sektion ist etwas komplizierter. Es wird wieder für jede Regel eine Sektion angelegt. Dieses Mal ist die Reihenfolge sehr wichtig, weil es Bedingungen gibt, die sich auf andere Regeln beziehen.

---|--- string1_replace, string2_replace | Eine zum regulären Ausdruck passende Substitution. Hiermit wird der String entsprechend verändert oder ersetzt. Das passiert, bevor alle anderen Anweisungen aus dieser Regel angewendet werden. if_no_prev_match | Die Regel wird angewendet, wenn vorher keine andere Regel angewendet wurde. break | Nach dieser Regel wird keine weitere Regel mehr angewendet. cat_strings | **true** \- string1 und string2 werden zu einem zusammengefügt (cat = Kurzform von concatenate). **false** \- Standardwert. Die Strings werden nicht zusammengefügt. **** cat_if_enough_space | Der Parameter erfordert "cat_strings = true". **true** \- "cat_strings" wird nur ausgeführt, wenn die Anzeige breit genug ist, um den neuen String darzustellen. **false** \- "cat_strings" wird immer ausgeführt (Standardwert). cat_with_space | Der Parameter erfordert "cat_strings = true". **true** \- Beim Zusammenfügen der Strings wird zwischen diesen ein Leerzeichen gelassen. **false** \- Die Strings werden ohne Leerzeichen zusammengefügt (Standardwert). smallerstring | Dieser Paramater definiert, dass einer der beiden Strings kleiner dargestellt wird, als der andere. **1** \- Der erste String wird kleiner dargestellt. **2** \- Der zweite String wird kleiner dargestellt. Der Standardwert, wenn der Parameter weggelassen wird, ist **0**.
to be continued ...

4.2.3 Beispiel

Code

 1. [[146]][auto_format:regex]
 2. [[147]]pattern = "(Rath)\\.?( |$)"
 3. [[148]]replace = "\1aus\2"
 4. [[149]]
 5. [[150]]
 6. [[151]][auto_format:rule]
 7. [[152]]string1_pattern = ^.*\/$
 8. [[153]]cat_strings = true
 9. [[154]]cat_if_enough_space = true
 10. [[155]]break = true
 11. [[156]]
 12. [[157]][auto_format:rule]
 13. [[158]]string1_pattern = ^(S|U|S\\+U|U\\+S)-Bahnhof$
 14. [[159]]string1_replace = \1
 15. [[160]]cat_strings = true
 16. [[161]]cat_with_space = true
 17. [[162]]break = true
 18. [[163]]
 19. [[164]][auto_format:rule]
 20. [[165]]string2_pattern = ^(via|->).*$
 21. [[166]]smallerstring = 2
 22. [[167]]break = true
 23. [[168]]
 24. [[169]][auto_format:rule]
 25. [[170]]if_no_prev_match = true
 26. [[171]]smallerstring = 1

Alles anzeigen

4.3 Modifikation von Liniennummern

Sektion `[linemod]`


Diese kann mehrfach vorkommen. Hier können Modifikationen auf Liniennummern angewendet werden. Man kann es auch als Sonderzeichen ohne Sonderzeichencode bezeichnen ![[172]]

4.3.1 Parameter

    • Wann wird die Modifikation angewandt?**

Die beiden folgenden Parameter bestimmen, bei welcher Linien-Sonderzeichen-Kombination die in dieser Sektion definierten Modifikationen angewendet werden sollen. Beide Bedingungen müssen erfüllt sein.

---|--- specialchar_pattern | Ein regulärer Ausdruck mit dem der Sonderzeichencode verglichen wird. Das Weglassen dieses Parameters ist immer ein Treffer.


    • Ersetzen von Linie und Ziel**

Sowohl die Linie als auch das Ziel können überschrieben werden.

---|--- override_terminus | Hiermit kann das Ziel überschrieben werden. Der angegebene Wert wird als ID eines zusätzlich konfigurierten Ziels interpretiert (siehe Sektion [terminus]).


    • Formatierung**


Standardmäßig werden die durch eine Linienmodifikation angepassten Linien nach bestimmten Regeln formatiert. Sie werden im Linienfeld mit größtmöglichem Font und maximaler Sperrung zentriert. Diese Formatierung kann überschrieben werden:

**false** – Die Formatierung wird angewendet (default). ---|---


Durch die unterschiedliche Größe der Anzeigen und der Bereiche für die Liniennummer, kann für jede Anzeige einzeln definiert werden, wie die automatische Formatierung überschrieben werden soll. Die Anzeigen werden dabei durch Kürzel definiert, die im Parameter enthalten sind:

---|--- 26f | 26px hoch, Linie und Ziel 26l | 26px hoch, nur Linie 19f | 19px hoch, Linie und Ziel 19l | 19px hoch, nur Linie


Die Parameter sind also:

Hiermit kann die automatische Ausrichtung überschrieben werden. Die Werte sind "left", "center" oder "right". Der Standardwert, der hiermit überschrieben wird, ist "center". ---|--- format_X_offset | X durch das Anzeigenkürzel ersetzen (z.B. format_32f_align), siehe oben. Hiermit kann ein Offest gesetzt werden. Es handelt sich um den Offset im Vergleich zur Standardformatierung, die bereits einen Offset von 1 enthält. Soll eine linksbündig dargestellte Linie also den linken Rand der Anzeige berühren, muss hier "-1" angegeben werden. format_X_spacing | X durch das Anzeigenkürzel ersetzen (z.B. format_32f_align), siehe oben. Dieser Parameter überschreibt die Sperrung.



    • Formatierung unter zusätzlichen Bedingungen**


Es ist möglich, eine zweite Formatierung anzugeben, die nur dann wirksam ist, wenn die zugehörigen Bedinungen ebenfalls auf die Linien-Sonderzeichen-Kombination passen:

---|--- cond_specialchar | Ein regulärer Ausdruck mit dem der Sonderzeichencode verglichen wird. cond_format_X_align cond_format_X_offset cond_format_X_spacing | siehe entsprechende "format_X..."-Parameter

4.3.2 Beispiele

Es folgen Beispiele mit ausführlicher Erklärung, um die Möglichkeiten zu verdeutlichen:


_Beispiel 1: Anpassung der Linien von 401 bis 412:_

Spoiler anzeigen

Code

 1. [[173]][linemod]
 2. [[174]]line_pattern = ^4(0([1-9])|(1[0-2]))$
 3. [[175]]line_replace = \2\3
 4. [[176]]no_format = true
 5. [[177]]cond_specialchar = ^(-1|999)$
 6. [[178]]cond_format_32f_spacing = 1
 7. [[179]]cond_format_26f_spacing = 2
 8. [[180]]cond_format_26l_spacing = 4

Der reguläre Ausdruck unter "line_pattern" betrifft alle Linien, die mit einer 4 beginnen und entweder an zweiter Stelle eine ‚0‘ und an dritter eine beliebige Zahl haben, oder an zweiter Stelle eine "1" und an dritter eine "0", "1" oder "2" haben. Nach der dritten Stelle muss die Nummer enden.

Der Parameter "specialchar_pattern" ist nicht angegeben, was bedeutet, dass das Sonderzeichen egal ist.

Das bedeutet also, dass diese Modifikationsregeln unabhängig vom Sonderzeichen auf alle Liniennummern von 401 bis 412 angewendet werden.


Als nächstes folgt der Parameter "line_replace" mit dem Wert "\2\3". Hierbei handelt es sich um eine Subsitution, die aus dem String die Gruppen 2 und 3 ausschneidet und hintereinander schreibt. Die Gruppen werden im regulären Ausdruck durch Klammern definiert:

 1. Beide Ziffern hinter der 4 (diese Gruppe ist aufgrund der Oder-Verknüpfung nötig)
 2. Die letzte Ziffer, falls an zweiter Stelle eine 0 steht
 3. Ebenfalls beide Ziffern hinter der 4, falls an zweiter Stelle keine 0 steht

Gruppe 2 und 3 können nicht gemeinsam einen String enthalten, weil sie sich aufgrund des "oder" gegenseitig ausschließen. Das Resultat ist also, dass bei 401 bis 409 die "40" und bei 410 bis 412 die "4" abgeschnitten wird.


Nun soll die resultierende Linie (1 bis 12) nur unter der Bedinung formatiert werden, fall kein Sonderzeichen oder das Sonderzeichen 999 übermittelt wurde. Deshalb wird "no_format" auf "true" gesetzt, was dafür sorgt, dass die Nummer mit dem Standardfont linksbündig dargestellt wird, also wie eine ganz normal übergebene Linie.


Für die Formatierung unter der genannten Bedinung, wird diese mit "cond_specialchar" definiert. Es handelt sich wieder um einen regulären Ausdruck, der dieses mal nur dann passt, wenn der Sonderzeichencode "-1" oder "999" ist.

Ist die Bedinung erfüllt wird die Linie nach den Standardmodifikationsformatierungsregeln formatiert. Das bedeutet, dass der größtmögliche Font verwendet wird, die Linie zentriert wird und die maximal mögliche Sperrung verwendet wird.


Mit "cond_format_X_spacing" wird eine davon abweichende Sperrung für die alle Anzeigen mit einer Höhe von 32px oder 26px angegeben.

Die anderen Parameter, also größtmöglicher Font und Zentrierung, werden beibehalten, da sie nicht überschrieben wurden.


_Weitere Beispiele folgen_

4.4 Definition von in der Basis-[[181]] nicht enthaltenen Zielen

Sektion `[terminus]`


folgt ...

4.5 Anlegen von Ziel-Templates

Sektion `[terminustemplate]`


folgt...

5 Einfache Zielkonfiguration

folgt...

6 Komplexe Zielkonfiguration

Diese Art der Konfiguration wird dann interessant, wenn es darum geht, Texte und Symbole frei auf der Anzeige anzuordnen. Hiermit kann ziemlich genau definiert werden, welcher Font benutzt werden soll und an welcher Position der Text stehen soll. Außerdem ist es möglich, einige weitere Elemente wie Rechtecke und Schachbrettmuster einzufügen.


Diese Möglichkeiten erfordern aber natürlich auch etwas umfangreichere Zusatzstrings in der speziellen [[182]]. Viel Spaß damit ![[183]]

6.1 Struktur der komplexen Zielkonfiguration

Die Zusatzstrings müssen wieder eine XML enthalten, die den folgenden Aufbau hat:

Code

 1. [[184]]<terminus>
 2. [[185]] <complex>
 3. [[186]] <panel>
 4. [[187]] <content>
 5. [[188]] Hier steht der Kram, der definiert, was zu sehen ist.
 6. [[189]] </content>
 7. [[190]] ... noch mehr "content"s für Wechselziel
 8. [[191]] </panel>
 9. [[192]] ... noch mehr "panel"s für was anderes auf den anderen Anzeigen
 10. [[193]] </complex>
 11. [[194]]</terminus>

Alles anzeigen

Sieht genauso aus, wie die einfache? Jo. Es gibt nur einen Unterschied: Das zweite Element lautet `complex` statt `simple`.


Die Blöcke `panel` und die darin enthaltenen `content` werden im folgenden beschrieben.

6.2 Panel

Ein Panel bezeichnet hier eine komplette Anzeige. Diese werden anhand ihrer Größe (Anzahl der Bildpunkte), ihrer Position (Reihenfolge der Modul-Slots) und ihres Inhalts (Line, Ziel oder beides) unterschieden. Entsprechend können für diese unterschiedlichen Panels auch unterschiedliche Ziele definiert werden.

6.2.1 Attribute

Die Angabe, für welche Art von Anzeige ein `panel` Elements verwendet werden soll, geschieht über die Attribute dieses Elements:

---|---|--- size | Größe im Format BreitexHöhe, z.B. `size="200x32"` Aktuell gibt es bei der weißen Matrix "200x32", "192x26", "144x26" und "48x26". In Zukunft wird es auch noch "240x32" geben. Die bernsteinfarbene gibt es als "140x19", "128x19", "112x19" und "28x19". | erforderlich count | Position in der Modul-Reihenfolge. Der Wert ist abhängig vom globalen Parameter "count_is_id". Besitzt ein Fahrzeug zum Beispiel eine Frontanzeige der Größe 200x32 und an der Seite und im Heck je eine Anzeige der Größe 192x26, kann über dieses Attribut nur eine der beiden 192er Anzeigen angesprochen werden. Welche das ist, hängt vom Parameter "count_is_id" ab: `count="2"` bei `count_is_id = true` ist die Seitenanzeige, weil alle Anzeigen gezählt werden (Der Zähler entspricht der ID, deshalb heißt der Parameter so. Front hat ID 1, Seite hat ID 2). `count="2"` bei `count_is_id = false` ist die Heckanzeige, weil nur die Anzeigen derselben Größe gezählt werden: Seite ist 1, Heck ist 2. | optional content | Hiermit lässt sich noch weiter eingrenzen, auf welche Anzeige sich das Element bezieht. Möglich sind die Werte "line", "terminus" und "both". `content="terminus"` bedeutet also, dass das Element nur für Anzeigen gilt, die ausschließlich das Ziel anzeigen.
optional

6.2.2 Zuordnung und Reihenfolge

Eigentlich wird für eine Anzeige das erste Element verwendet, dass zu den Attributen passt. Leider gibt es noch einen Bug, weshalb Elemente mit stärkerer Restriktion momentan weiter oben in der XML stehen sollten. Ein `<panel size="192x26" content="terminus">` sollte also vor einem `<panel size="192x26">` stehen.


    • Wichtig:** **Anzeigen, für die es kein passenden Element gibt, zeigen kein Ziel an! Es gibt kein Fallback auf die Basis-[[195]].**

6.2.3 Untergeordnete Elemente

Innerhalb des Panel Elements finden sich die Content Elemente. Zusätzlich gibt es aber noch zwei interessante Elemente:

---|---|--- <defaults>false/true</defaults> | Ein Boolean, über den sich definieren lässt, dass diese Anzeigen nur die Standardstrings aus der Basis-[[196]] anzeigen sollen. Da Anzeigen, für die es kein Element gibt, dunkel bleiben, kann hiermit ein "leeres" Element angelegt werden. Ein leeres Panel Element ohne diese Einstellung reicht nicht, um auf die Standardstrings zuzugreifen. | maximal ein mal <noautoformat>false/true</noautoformat> | Hiermit lässt sich bei Angabe von `<defaults>true</defaults>` die automatische Formatierung von Standardstrings deaktivieren, falls diese global aktiviert ist. | maximal ein mal <content> ... </content> | Der Content Block wird im nächsten Abschnitt erklärt. Mit `<defaults>true</defaults>` werden diese ignoriert. | beliebig oft

6.3 Content

Ein Content Element beinhaltet alles, was zu einem Zeitpunkt gleichzeitig auf der Anzeige zu sehen sein soll. Mehrere Content Elemente führen dazu, dass die Anzeige zwischen diesen wechselt. Dabei kann definiert werden, wie viel Zeit bis zum nächsten Wechsel vergehen soll.

6.3.1 Attribute

Es gibt zwei Attribute, die uns das Leben etwas erleichtern, wenn sich mehrere Content Elemente nur in Kleinigkeiten unterscheiden sollen:

---|---|--- id | Hiermit kann dem Element eine ID gegeben werden, um es später zu kopieren. Zum Beispiel `id="blub"`. | optional cp | Wenn weiter oben ein Content Element mit einer ID existiert, kann es mit diesem Attribut komplett an die aktuelle Stelle kopiert werden. `cp="blub"` würde das oben definierte Element mit dem Attribut `id="blub"` kopieren. In kopierten Content Elementen ist es mögliche kleinere Anpassungen an den untergeordneten Elementen zu machen (siehe "id", "ref", "del" der untergeordneten Elemente). | optional

6.3.2 Untergeordnete Elemente

Innerhalb eines Content Elements stehen nun endlich die Elemente, die bestimmte Texte, Symbole oder anderes auf die Anzeige zeichnen. Ein paar Einstellungen für das ganze Content Element gibt es auch:

---|---|--- | Falls es mehrere Content Element gibt, wird hiermit definiert, wie lange die Anzeige bei diesem Element bleibt, bevor sie zum nächsten wechselt. Die Anzgabe erfolgt in Sekunden und es gibt Grenzwerte, die ich gerade nicht im Kopf habe. | maximal ein mal <inverted>none/line/terminus/full</inverted> | Diese Einstellung definiert, ob die Liniennummer oder das Ziel oder die komplette Anzeige invertiert werden soll. | maximal ein mal <string> ... </string> | Schreibt einen String. Siehe unten. | beliebig oft <tape> ... </tape> | Zeichnet ein "Flatterband". Siehe unten. | beliebig oft <box> ... </box> | Zeichnet ein Rechteck mit Rahmen oder ausgefüllt. Siehe unten. | beliebig oft <checkerboard> ... </checkerboard> | Zeichnet ein Rechteck mit einem Schachbrettmuster. Siehe unten. | beliebig oft

6.4 Text/Symbole schreiben (string)

Mit dem Element `<string>` kann etwas beliebiges auf die Anzeige geschrieben werden. Dabei ist es möglich den Font, die Sperrung und die Position frei zu definieren.


Hiermit können also auch diverse Symbole irgendwo auf die Anzeige gezeichnet werden. Eine Liste der verfügbaren Fonts mit den enthaltenen Symbolen folgt.

6.4.1 Untergeordnete Elemente

---|--- <value>String</value> | Das ist der String, der geschrieben wird. FontID-String | Der Name des Fonts. Es gibt eine Liste, welche Verfügbar sind, die aber noch erstellt werden muss. **Wichtig:** Das hier hat garnichts mit Content-IDs oder ähnlichem zu tun. Die Fonts sind intern definiert und können hiermit nur abgerufen werden. Es ist noch nicht möglich, eigene Fonts hinzuzufügen. <spacing>N</spacing> | Die Sperrung, also der Abstand zwischen den Zeichen. Standard müsste 1 sein. <unlockspacing>false/true</unlockspacing> | Falls die Position nicht absolut angegeben wird, sondern relativ innerhalb eines definierten Bereichs (siehe position und area), kann dieser Parameter auf true gesetzt werden, um zu erlauben, dass die Sperrung auch reduziert werden darf, falls der Platz in dem Bereich nicht ausreicht. <inverted>false/true</inverted> | Der String kann hiermit invertiert werden. <position> ... </position> | Siehe Positionierung von Content Elementen (position, area). <area> ... </area> | Siehe Positionierung von Content Elementen (position, area).


6.5 Absperrband zeichnen (tape)

Mit Absperrband ist ein schräg gestreiftes Band gemeint. Dieses kann in verschiedenen Höhen und Längen an eine beliebige Position gezeichnet werden.

6.5.1 Untergeordnete Elemente

Noch nicht final. Folgt...

6.6 Rechteck zeichnen (box)

Mit oder ohne Rahmen. Bla bla

6.6.1 Untergeordnete Elemente

---|---|--- <inner> ... </inner> | Identisch zu <area>, siehe Positionierung von Content Elementen (position, area). Das Element definiert den Bereich des Rechtecks. Wenn <outer> nicht definiert wird, entspricht das hier dem Rechteck. Wenn <outer> ebenfalls angegeben wird, ist das hier der Bereich, um den der Rahmen gezogen wird. | <outer> ... </outer> | Identisch zu <area>, siehe Positionierung von Content Elementen (position, area). Dieses optionale Element entspricht einem Bereich. Dieser Bereich ist die Fläche des Rechtecks, wobei der durch <inner> definierte Bereich ausgeschnitten wird. Das Ergebnis ist ein Rahmen. | optional


6.7 Schachbrettmuster zeichnen (checkerboard)

In einem rechteckigen Bereich.

6.7.1 Untergeordnete Elemente

---|--- <area> ... </area> | Der Bereich, in dem das Schachbrettmuster gezeichnet wird. Siehe Positionierung von Content Elementen (position, area). <inverted>false/true</inverted> | Das klingt vielleicht komisch, aber das Schachbrettmuster kann auch invertiert werden. Hiermit wird gesteuert, ob das Muster in der oberen linken Ecke mit Weiß oder mit Schwarz beginnt.


6.8 Attribute der Content Elemente

Alle Elemente, die zur Darstellung von Dingen auf der Anzeige verwendet werden (string, tape, box, checkerboard) besitzen folgenden Attribute, mit denen diese Elemente kopiert, bearbeitet oder gelöscht werden können. Näheres dazu in der Tabelle:

---|--- id | Dieses Attribut gibt dem Element eine ID, um es später identifizieren zu können. Zum Beispiel `<string id="meinString">`. cp | Mit diesem Attribut kann ein weiter oben in der XML existierendes Element, das über eine ID verfügt, an die aktuelle Stelle kopiert werden. Zum Beispiel `<string cp="meinString">`. Untergeordnete Elemente überschreiben daraufhin die vom Original kopierten Daten. Man kann also zum Beispiel mit `<string cp="meinString"><value>Hallo</value></string>` den String mit der ID "meinString" kopieren und somit definierte Font, Spacing und Position übernehmen, aber den Text mit "Hallo" überschreiben. ref | Wenn ein `content` Element kopiert wird, existieren alle untergeordneten Elemente auch im neuen `content` Element. Um eines davon anpassen zu können, muss dieses Attribut anstelle von "cp" verwendet werden. Zum Beispiel `<string ref="meinString">`. Ansonsten ist alles identisch zu "cp". del | Dasselbe wie "ref", nur dass das Element aus dem kopierten `content` Element entfernt wird.

6.9 Positionierung von Content Elementen (position, area)

Die Content Elemente (string, tape, box, checkerboard) können beliebig auf der Anzeige positioniert werden. Beim String geht das sowohl abslout als auch relativ innerhalb eines definierten Bereichs. Die übrigen Elemente werden durch die Angabe eines Bereichs positioniert.

6.9.1 Bereich definieren mit area (inner, outer)

Die Angabe eines Bereichs ist beim String optional und bei Rechteck und Schachbrettmuster Pflicht. Beim Rechteck gibt es dieses Element doppelt unter den Namen "inner" und "outer", Inhalt und Funktionsweise sind jedoch identisch.


Beim String ist die Definition eines Bereichs interessant, wenn es um relative Positionierung geht oder wenn der String invertiert wird.

Bei der Invertierung wird der gesamte angegebene Bereich invertiert. Ist kein Bereich definiert, wird hierfür automatisch einer festgelegt.

Wenn bei relativer Positionierung kein Bereich definiert ist, passiert das jedoch nicht und das Ergebnis wird sehr wahrscheinlich nicht dem gewünschten entsprechen.


Innerhalb des `area` Elements (oder `inner`/`outer`) wird eine Fläche über die Koordinaten der linken oberen (x1, y1) und der rechten unteren Ecke (x2, y2) definiert.

---|--- <x1>N</x1> <y1>N</y1> <x2>N</x2> <y2>N</y2> | Angabe von Koordinaten auf der Anzeige. Die linke obere Ecke der Anzeige entspricht den Koordinaten x = 0, y = 0.

6.9.2 Position definieren mit position

String und Absperrband werden über diese Positionsangabe positioniert

---|--- <x>N</x> <y>N</y> | Angabe von Koordinaten auf der Anzeige. Die linke obere Ecke der Anzeige entspricht den Koordinaten x = 0, y = 0. <halign>left/center/right</halign> | Nur beim String verfügbar. Horizontale Ausrichtung innerhalb des definierten Bereichs. Wird kein Bereich definiert, passiert irgendwas, aber vermutlich nicht das, was man möchte. <valign>top/middle/bottom</valign> | Nur beim String verfügbar. Vertikale Ausrichtung innerhalb des definierten Bereichs. Wird kein Bereich definiert, passiert irgendwas, aber vermutlich nicht das, was man möchte.


7 Benutzung von Templates

folgt...

8 Sonstiges

Hast Du Fragen? Hast Du Kommentare? [[197]] gibt es einen Thread im Forum, in dem Du das alles loswerden kannst ![[198]]