Posts by Goetz

    Ich hoffe ich habe mich verständlich genug ausgedrückt!

    Ja, hast du.


    Wenn du ein einzelnes Element aus einer Tabelle holen möchtest, dann musst du hinter dem Tabellennamen in eckigen Klammern die Zelle (= den Speicherplatz) angeben.


    LUA Source Code
    1. liste = {"Eins", "Zwei", "Drei", "Vier", "Fünf"}
    2. print(liste[3]) -- gibt das Wort Drei aus
    3. Beatles = {"John", "Paul", "George", "Ringo"}
    4. print("Der Bassist der Beatles ist: ", Beatles[2])



    Bei "name" werden ja alle werte nacheinander aufgelistet

    Nein, bei "name" nicht. Die Variable name enthält in dem von dir genannten Beispiel immer nur einen Namen. Und den auch nur für einen kurzen Augenblick. Den Namen bekommt die Variable aus der Funktion EEPGetRollingstockItemName(). In der darauffolgenden Zeile wird der Inhalt dieser Variablen an die Tabelle liste übergeben. Und mit dem nächsten end wird die Variable schon wieder vergessen.

    nicht das Gleis, sondern die Strasse ist das Problem.


    Darf ich dich an das erinnern, was du selbst beschrieben hast?

    Kopiere ich einspurige Strassen vor- oder seitwärts, so wird das Häkchen in einspurig beibehalten.

    Kopiere ich aber die gleiche Strasse neben ein Gleis, so verschwindet das Häkchen

    Wenn du ein Gleis seitwärts kopierst und dabei den Stil in eine Straße wandelst, dann ist diese Straße nicht einspurig. Sagst du. Und dazu habe ich dir den Grund erklärt.


    Wenn du eine Straße seitwärts kopierst und so eine parallele zweite Straße (bzw. Spur) erzeugst, wird die Option einspurig beibehalten. Sagst du. Und das wäre auch richtig so.


    Speedy sagt nun, dass das Verhalten anders wär?

    Und du sagst nun, dass das Gleis nicht das Problem sei?


    Das steht beides im Widerspruch zu deiner ursprünglichen Beschreibung, auf die ich geantwortet hatte.

    PARADOX

    Eigentlich nicht.

    Das Gleis hat nicht die Eigenschaft "einspurig" und daher wird auch keine Einstellung "einspurig" kopiert.

    Gleise verhalten sich zwar wie einspurige Straßen. Aber das liegt nicht an der Konstruktion der Gleise, sondern an der Konstruktion der Schienenfahrzeuge resp. der Straßenfahrzeuge.


    Der Versatz zur Mitte des Splines wird durch die Konstruktion der Straßenfahrzeuge bewirkt und nicht durch die Konstruktion der zweispurigen Straßen. Deshalb haben einspurige Straßen eine besondere Option, welche diesen Versatz aufhebt. Gleise benötigen diese Option nicht.

    Ich habe den Arbeitern bei der Rübenverladungen einen Pausenwagen spendiert.

    Und damit hast du dich um den Wanderpokal für besondere EEP-Leistungen verdient gemacht, den ich dir Onkelwoody hiermit offiziell überreiche.



    Gestiftet wurde dieser schöne Pokal von Gudvangen


    Die bisherigen Preisträger sind

    Toddel2014

    Wahrener

    Frickler

    manni48

    Volkmar Bauch

    TransEuropa

    Der Freak

    BR44Piwi

    Rußländer

    OhneZuschlag

    bhg9451

    Goetz


    wie gut muss ich hier werden, um ihn mal zurück zu bekommen.

    Alfred Nobel hat den von ihm gestifteten Preis selber auch nie bekommen :ae_1:

    Es hat dieselbe Bewandnis wie zuvor erklärt, tigertapse


    Wenn du möchtest, dann kannst du über den Rückgabewert prüfen, ob der Funktionsaufruf erfolgreich war.

    Aber eine Funktion wird immer ausgeführt. Unabhängig davon, ob du Rückgabewerte einer Funktion an Variablen übergibst oder nicht. Das gilt für alle Funktionen.


    Mir fiel eben schon auf, dass du mehr abschreibst als verstehst. Wenn du die Anmerkungen zu den Funktionen liest (und grundsätzliche Dinge wie die Bedeutung des = Zeichens in Lua verstehst), dann kann dich die neue Form der Beispiele nicht irritieren.

    Muss ich jetzt neuerdings diese OK immer mit reinschreiben?

    Neuerdings?
    Das war schon immer da und hatte nur früher in den Beispielen den Namen hResult anstatt ok. Wie du es nennst, ist ganz dir überlassen. Brauch_Ich_Nicht_Wirklich ist auch ein zulässiger Name. :ae_1:


    Und ja - du musst und musstest schon immer den ersten Rückgabewert in einer Variablen auffangen, wenn du an die nachfolgenden Werte dran willst. Das wird nicht "immer komplizierter", sondern war schon immer so. Im Posting über deinem erkläre ich, warum es das gibt.


    Du kannst den ersten Rückgabewert mit der select() Funktion ausklammern. Aber das macht es nicht weniger kompliziert.


    Wenn eine Funktion keinen anderen Rückgabewert hat außer der Erfolgsmeldung, dann musst du diese Erfolgsmeldung nicht zwingend an eine Variable übergeben. Das Beispiel soll nur zeigen, dass es eine Rückmeldung gibt. Und diese Ergänzung der Beispiele ist in der Tat neu. Die Rückmeldung selber aber nicht.

    Wie und wann wird es verwendet?

    Weil du noch am Anfang stehst, würde ich das gerne ausführlicher beantworten:


    Einige Funktionen geben nach ihrer Ausführung etwas zurück. Das können Zahlen sein oder Texte (z.B. Zugnamen) oder andere Werte. Bei der Ausführung des Programms steht dann für Lua an der Stelle, wo dieser Funktionsaufruf steht, der zurückgegebene Wert.


    Mit dem = Zeichen übergibt man immer das, was rechts vom = steht an die Variable, die links vom = steht. Und den Namen einer Variablen darf man selbst bestimmen.


    Ich kann also schreiben Dings = 4 und so in einer Variablen mit Namen "Dings" den Wert 4 speichern.

    Ebenso kann ich schreiben Dings = Beispiel(2) und wenn Beispiel() eine Funktion ist, die das Doppelte vom eingegebenen Wert zurück gibt, dann hat diese Zeile ebenfalls den Effekt, dass der Wert 4 an "Dings" übergeben wird.


    Wenn eine Funktion mehrere Werte zurück gibt, dann schreibt man links vom = mehrere Variablennamen hin, die diese Werte annehmen. Wie diese Variablen heißen, ist vollkommen dir überlassen.

    Wert1, Wert2 = EEPGetTrainSpeed("#VT98")

    ist also ebenso gut wie

    ok, Geschwindigkeit = EEPGetTrainSpeed("#VT98")


    Ich hatte mich bemüht bei den Beispielen links Variablennamen zu verwenden die erkennen lassen, welche Art Wert an der Stelle zurück gegeben wird. Deshalb steht "ok" überall dort, wo ein Rückgabewert meldet ob die Funktion erfolgreich ausgeführt wurde oder nicht.


    Wenn du bei EEPGetTrainSpeed() einen Zugnamen angibst, den es auf deiner Anlage gar nicht gibt, dann kann die Funktion keine Geschwindigkeit zurück geben. Deshalb wird an die Variable "ok" in diesem Fall zurück gegeben, dass die Ausführung der Funktion nicht ok war.


    Du kannst den Wert, der in der ersten Variable gespeichert wird benutzen, um entsprechend zu reagieren:


    LUA Source Code
    1. ok, Geschwindigkeit = EEPGetTrainSpeed("#VT98")
    2. if ok then
    3. print("Der VT98 fährt gerade ", Geschwindigkeit, " km/h")
    4. else
    5. print("Auf dieser Anlage gibt es keinen Zug mit Namen #VT98")
    6. end

    Aus irgendeinem Grund braucht der PC ein Weilchen, bis er es öffnet (kurzzeitig kommt: "Dieses Programm reagiert nicht").

    An diesen Fall hatte ich damals im August nicht gedacht, Lion - sorry.

    Das kenne ich auch. Nach manchen Arbeiten im 3D-Editor (ich habe noch nicht zuordnen können, nach welchen) braucht der Lua Editor sehr lange um zu öffnen. Und wenn das der Fall war, dann speichert er keine Änderungen ab.


    Wenn der Editor also wieder einmal zäh reagiert, warte geduldig, bis er da ist. Und dann schließ ihn gleich wieder. Öffne ihn anschließend noch einmal. Jetzt geht es zügig, weil EEP "bereit" ist und dann werden Änderungen auch übernommen.

    Die Antwort von Thomas1962 war das auschlaggebende. Häkchen entfernt Lok vorhanden.

    Gleich nach der Installation und dem ersten Scannen werden beschriftbare Modelle in EEP 15 leider wie veraltete Modelle einsortiert. Diese falsche Einsortierung erledigt sich mit dem nächsten Scan von selbst. Ab dann sind die Modelle normal sichtbar, auch wenn man veraltete Modelle ausgeblendet hat.


    In EEP 16 tritt dieses Fehlverhalten nicht auf!

    Man kann den ermittelten Wert bei der Umwandlung "glätten".

    Ein doppeltes Divisionszeichen schneidet Nachkommastellen ab und formt so floats in int um.


    3/2 == 1.5

    3//2 == 1


    Man muss dabei berücksichtigen, dass immer abgerundet wird. Also mit dem Offset zuerst eine etwas zu große Zahl erzeugen und dann glatt durch 1 teilen. So bekommt man eine Zahl, die sich für einen direkten Vergleich eignet.



    Zur Zahlenausgabe ist folgendes noch nützliches Wissen:

    Gibt man print() eine Zahl als Argument, dann entscheidet Lua selbst über die Genauigkeit der Darstellung. Wandelt man die Zahl zuvor mit tostring() um, dann erhält man mehr Nachkommastellen. Und mit string.format() kann man selbst festlegen, wieviele Nachkommastellen der String enthalten soll, der aus einer Zahl gebildet wird.


    Zum Vergleich:

    LUA Source Code
    1. x = 1.23456789
    2. print(x)
    3. text = tostring(x)
    4. print(text)
    5. text = string.format("%.10f", x)
    6. print(text)


    print Genauigkeit.jpg

    Den Trick, wie man die Lücke beim Tunneldurchbruch wegbekommt, kannte ich so noch nicht..

    Dazu habe ich noch einen Tipp:

    Wenn man beim Absenken eines Landschaftsknotens die Maus nicht bewegt und nicht loslässt, dann verliert man diesen Punkt auch nicht. Wenn man jedoch versucht dem Punkt mit der Mausspitze hinterherzulaufen, dann verliert man ihn in Abständen immer wieder.

    Hallo Tunneleule

    du hast beides - Vorsignal unter dem Hauptsignal und die Höchstgeschwindigkeiten - richtig verstanden. :be_1:


    Ich bin nicht so gut im Erklären.

    Doch, das ist klar und verständlich.

    Eleganter ginge es tatsächlich - du ahnst es schon? - mit Lua.

    Insbesondere für jemanden wie dich, der auch solch komplexe logische Strukturen bauen kann, ist Lua leicht erlernbar. Du musst nur vorne anfangen und nicht irgendwo in der Mitte. Bevor du also versuchst einen Bahnhof, eine Blockstrecke oder einen Bahnübergang damit zu schalten, eigne dir zunächst Grundwissen dazu an, was Variablen, Funktionen und Tabellen prinzipiell sind. Sonst hast du zwei Baustellen auf einmal: Die Sprache selbst und die Schaltlogik für deinen Einsatzzweck.


    Was anfangs vielleicht verwirrt: Neben dem Sprachumfang von Lua selbst, der aus sehr einfachen Schlüsselworten wie if, then, else, return ... besteht, gibt es spezielle Funktionen, welche die EEP-Programmierer eingebaut haben um die Kommunikation zwischen Lua und EEP zu ermöglichen. Diese speziellen Funktionen haben alle ziemlich lange Namen, die mit EEP beginnen. Aber um solche Funktionen musst du dich am Anfang kaum kümmern, wenn du zuerst die Sprache selbst in ihren Grundzügen lernst. Und wenn du dann verstanden hast, was eine Funktion prinzipiell ist, dann bereiten dir auch die EEP-Funktionen kein Bauchweh mehr.

    Das Aussehen finde ich nicht so optimal.

    Eine Außenbogen - Weiche ist ja auch in diesem Fall die falsche Wahl.

    Warum willst du da erst in einem Rechtsbogen ausscheren?

    Du benötigst einen Linksbogen mit geringerem Radius als dem des Innenkreises.



    So erkennst du vielleicht besser, warum an beiden Enden eine IBW sein muss?

    Einmal eine IBW rechts und einmal eine IBW links

    Eine normale Linksweiche am hinteren Ende geht alternativ auch.

    Ich würde das übrigens Geometrieverständnis nennen ...