User Tools

Site Tools


userpages:hermannk:locos_activate-de

Lokomotiven aktivieren/de-aktivieren

Userpages - Hermann (hermannk)

vorab gibt es hier den Rocrail-Arbeitsbereich-Download

Vorwort 1:
Damit wurde diese Dokumentation erstellt: Stand 26.01.2022

Attribut Wert Bemerkung
Steuerung Rocrail Version 2.1.2060+ (macOS "Catalina" on Intel CPU)
Computer MacBook Pro (Intel) macOS 12.1 (Monterey)

Vorwort 2:
- die Nutzung dieser Lösung erfolgt auf eigenes Risiko;
- regelmäßige Datensicherungen des Rocrail-Arbeitsbereichs werden empfohlen;

Vorwort 3:
- eine Mehrfach-Traktion wird nicht berücksichtigt!

Aufgabenstellung

Im Rocrail-Forum wurde die Anfrage gestellt, nur die Lokomotiven, die sich in einem Block befinden, in der Lok-Liste "sichtbar" und "aktiv" anzuzeigen.
Ferner sollten alternativ auch wieder alle Lokomotiven "sichtbar" und "aktiv" angezeigt werden.
Das XML-Script "ac_locos_activate.xml" erfüllt diese Aufgabe.

-

Lösung-Details

Lok aktivieren

Eine Lokomotive kann aktiviert bzw. de-aktiviert werden durch:

<lc id="lc11" cmd="activate"/> Lok "lc11" aktivieren
<lc id="lc11" cmd="deactivate"/> Lok "lc11" deaktivieren

Dafür gibt es jeweils den Befehl "activate" und "deactivate".

Lok anzeigen

Eine Lokomotive (hier "lc11") kann angezeigt werden bzw. verborgen werden durch:

<lc id="lc11" show="true"/> Lok "lc11" anzeigen
<lc id="lc11" show="false"/> Lok "lc11" verbergen

Es gibt für das Attribut "show" keinen Befehl; man kann aber ein Attribute in einem Objekt verändern; damit dies nachhaltig wirksam ist, umschließt man die Änderung des Attributes mit dem "Model"-Befehl "change"; der komplette Ablauf sieht dann so aus:

<model cmd="change"> 
  <lc id="lc11" show="true" />
</model>

- siehe dazu im Rocrail-Wiki https://wiki.rocrail.net/doku.php?id=xmlscripting-de&s[]=change#befehle

der Aufbau des XML-Scripts

Es sollen alle Lokomotiven in dem Rocrail-Plan untersucht werden; das geschieht mit einer Programm-Schleife ("foreach") über die Elemente in der Lokomotiv-Liste ("lclist"):

<foreach table="lclist" >
  ...
</foreach>

Je nach Zustand des XML-Script-aufrufenden Rocrail-Ausganges ("co %callerid%") werden die Lokomotiven angezeigt/aktiviert oder verborgen/deaktiviert:

<if state="co %callerid% = on">
<then>
  <!-- show and activate all locos -->
</then>
<else>
  <!-- show and activate only locos within blocks -->
</else>
</if>

Ob sich die Lok "lc11" in einem Block befindet, erfährt man mit der Abfrage (query):

<query vr="vr_ala_tmp" table="lclist" id="lc11" get="blockid"/>

… und anschließender Abfrage ("(null)" steht für "kein Block"):

<if condition="@vr_ala_tmp = (null)">

Die festen Lokomotiv-Kennungen werden in der Programmschleife durch die Lauf-Variable "%oid%" ersetzt.

das XML-Script

Das XML-Script wird hier ohne Trace- und Kommentar-Zeilen aufgeführt;
im Arbeitsbereich sind alle Trace- und Kommentar-Zeilen enthalten.
Die Trace-Zeilen können mit "<xmlscript trace="false">" deaktiviert werden:

<xmlscript>
  <vr id="vr_ala_tmp" text="" value="0" generated="true"/>
  <foreach table="lclist" >
    <if state="co %callerid% = on">
    <then>
      <model cmd="change">
        <lc id="%oid%" show="true" />
      </model>
      <lc id="%oid%" cmd="activate"/>
    </then>
    <else>
      <query vr="vr_ala_tmp" table="lclist" id="%oid%" get="blockid"/>
      <if condition="@vr_ala_tmp = (null)">
      <then>
        <model cmd="change">
          <lc id="%oid%" show="false" />
        </model>
        <lc id="%oid%" cmd="deactivate"/>
      </then>
      <else>
        <model cmd="change">
          <lc id="%oid%" show="true" />
        </model>
        <lc id="%oid%" cmd="activate"/>
      </else>
      </if>
    </else>
    </if>
  </foreach>
</xmlscript>


die Aktion

Es wird jetzt noch eine Aktion benötigt, die das XML-Script aufruft:

-

das XML-Script anwenden

Ein Rocrail-Ausgang ruft das XML-Script auf im Status "on" und im Status "off": Je nach Status werden
- alle Lokomotiven angezeigt und aktiviert oder
- es werden nur die angezeigt und aktiviert, die sich in einem Block oder Aufstellung-Block befinden:

-

Fazit

Um diese Lösung im eigenen Rocrail-Plan zu nutzen,
- kopiert man die XML-Script-Datei "ac_locos_activate.xml" in seinen Arbeitsbereich (genauer: in seinen Script-Ordner);
- erzeugt im Plan eine neue Aktion, die dieses XML-Script anwendet;
- erzeugt im Plan einen Ausgang, der die Aktion im Status "on" und im Status "off" aufruft.

starke Hinweise:
- vorher immer eine Datensicherung machen!
- anwenden auf eigene Gefahr!

Der Arbeitsbereich locos_activate

userpages/hermannk/locos_activate-de.txt · Last modified: 2022/01/26 19:29 by hermannk