Erste Erfolge der ToDo-Listen-Abarbeitung waren
- der Undo/Redo-Stack auch für den Trasseneditor
- die direkte Speichermöglichkeit für Rohtrassen, ohne den Rohtrassen-Edit-Modus verlassen zu müssen
Michael Poschmann hat (unter einem anderen Thema) geschrieben:hier ein Vorschlag für Transdem, der schlechten Gleislage in einigen Streckenabschnitten meiner Fahrt geschuldet: Beim Zeichnen von Rohtrassen wäre es schön, den jeweils letzten gesetzten Punkt wieder rückgängig machen zu können. Bisweilen "verklickt" man sich ein wenig und muß das Anlegen eines Streckenzuges abbrechen oder diese Stellen mühsam nachbearbeiten.
Etwas verblüfft durfte ich heute abend jedoch feststellen, dass meine Rohtrasseneditor-Klassen doch mächtiger sind, als ich sie in Erinnerung hatte. Das heißt, dass sowohl das spätere Fortsetzen eines Linienzuges als auch das Löschen der letzten gerade angelegten Punkte ohne neu ansetzen zu müssen seit eben möglich ist.Ich habe dazu geantwortet:Solche Vorschläge liebe ich .
Gleiche Kategorie wie der Wunsch nach "Linienzug fortsetzen". Die gehen wegen der Rubberband-Funktion und der damit verbundenen kleinen State-Machine dadrin immer direkt ins Eingemachte. Schaun'mer mal...
Die Funktion "Letzter Punkt löschen" bewirkt folgendes (Einblick in den internen Ablauf ):
- Jeder neue Punkt kopiert den gerade entstehenden Linienzug auf den Undo-Stack.
- Jetzt gefällt der letzte Punkt plötzlich nicht, wegen Verklickens durch "rough track". Man ruft also "Undo" auf, während man noch im Anlege-Modus ist, oder auch Strg+Z.
- Der Rohtrasseneditor erkennt und merkt sich das zuletzt selektierte Objekt, eben den aktuellen Linienzug. Dann ersetzt der Editor genau dieses Objekt mit dem auf dem Undo-Stack und selektiert das soeben restaurierte Objekt. (Das ursprüngliche Objekt wandert auf den Redo-Stack.)
- In diesem speziellen Fall ruft die Undo-Funktion nun zusätzlich die "Linienzug fortsetzen"-Funktion auf. Diese Funktion hakt am letzten Punkt des restaurierten Objekts ein. Für den Anwender scheint damit der letzte Punkt gelöscht, und das Rubberband ist wieder mit dem Punkt davor verbunden.