Będę tu opisywał szczegóły dotyczące zapisu formatu, nad którym aktualnie pracuję. Wątek będzie zamknięty i będę edytował wiadomości w przypadku zmian. Wszelkie uwagi dotyczące formatu proszę pisać poprzez PW albo w innych wątkach, np:
Profil pionowy trasy.Ortofotomapa z geoserwer.pl jako terenDane wektorowe UMPKolejowa Mapa PolskiFormat ma roboczą nazwę i rozszerzenie pliku RSF. Skrót oznacza "redundancyjny format scenerii". Związane jest to z tym, że informacje o obiektach zapisywane są z wielorakim wzajemnym powiązaniem. Format i jego opis jest bezpłatny do wszelkich zastosowań, a jego użycie we własnych programach jest dozwolone bez ograniczeń. Będzie również udostępniona biblioteka z klasami i głównymi operacjami.
W scenerii zapisanej w plikach MAX oraz SCM obiekty jedynie "przypadkiem" są w odpowiednich miejscach i nie ma "oczywistych" narzędzi, które sprawdzały by np. styczność torów w miejscu ich połączenia, współrzędną pionową semafora obok toru i jego odległość od osi, połączenie sąsiednich trójkątów terenu w jednym punkcie, albo rozmiary rozjazdu. Jeśli się wstawi źle, to będzie źle, a najprostszym sposobem poprawienia jest najczęściej usunięcie i ponowne wstawienie z użyciem szablonu - po wcześniejszym wypatrzeniu błędu. W formacie redundancyjnym RSF można zweryfikować zależności pomiędzy obiektami i poprawiać położenie obiektu tak, aby zostały one spełnione. Poprawić można na kilka sposobów, więc nie da się tego zrobić automatycznie (np. tor może być połączony z sąsiednimi, ale nie być równoległy do linii kierunkowej, albo być równoległy do linii kierunkowej, ale nie mieć wspólnych punktów z sąsiednimi, mimo formalnego połączenia ich w ciąg - metodę naprawienia takiego stanu trzeba dobierać indywidualnie w każdym przypadku).
Plik z zapisem scenerii jest zorganizowany w tabelę, o rekordach długości 128 bajtów. W każdym rekordzie jest informacja o jego typie (rodzaju obiektu). Rekordy mogą być łączone w grupy (np. zwrotnice zapisywane są zawsze w postaci 2 kolejnych rekordów). Rekordy mogą zawierać wskaźniki na inne rekordy, w postaci adresu liczonego względem początku pliku. Ponieważ długość rekordu jest stała, bity 0..6 wskaźnika mogą być używane do innych celów - np. w przypadku torów umieszczona jest informacja o tym, do którego końca sąsiedniego toru podłączony jest dany koniec toru (0 - początek, 1 - koniec, 3 - tor odchylony zwrotnicy). Przy usuwaniu obiektu, jego rekord w tabeli zostaje oznaczony jako pusty i może być wykorzystany w przyszłości przez nowo dodany obiekt.
Pierwszy rekord pliku jest zarezerwowany na informacje o pliku. Zapisane są w nim współrzędne środka w PUWG 1992, służące do pobierania odpowiednich podkładów z Geoportalu, a także ostatnio ustawiona pozycja w edytorze i zbliżenie. Jednocześnie wskaźnik na ten rekord (liczba 0) oznacza brak połączenia z innym obiektem.
Współrzędne obiektów zapisywane są jako liczby stałoprzecinkowe, z dokładnością 1/8192m. Pozwala to ogarnąć kwadrat o boku 524km (1/4 PUWG 1992) z dokładnością prawie 0.1mm), czego nie dało by się zrobić czterobajtowym typem zmiennoprzecinkowym. Opcjonalnie można przeliczyć współrzędne na zmiennoprzecinkowe, ale wtedy traci się na dokładności (błąd rzędu 1mm w odległości 8km od osi układu współrzędnych - używane są 23 bity, a nie 31). Zapis stałoprzecinkowy umożliwia również używanie operacji przesunięcia bitowego >> w celu uzyskania współrzędnych ekranowych dla rozdzielczości 1000px/km i pochodnych. Współrzędna X narasta na wschód, Y na północ, a Z w górę.
Ciekawą cechą plików binarnych RSF jest możliwość ich łączenia poprzez zwykłe doklejenie pliku. Wymagane jest tylko, aby miały ten sam środek układu współrzędnych. Np. do pliku z torami da się dokleić pliki zawierające opisy semaforów, czy trójkątów terenu.
Rekordy w pliku zawierają zarówno pełną informację o obiektach używanych w symulacji, jak również obiekty pomocnicze, służące do weryfikowania zależności.
Podstawowymi obiektami pomocniczymi są linie kierunkowe. Są to linie proste na płaszczyźnie poziomej XY (czyli w planie), określone poprzez wektor wychodzący ze środka OXY układu współrzędnych i prostopadły do prostej (zobacz
równanie normalne prostej). Przy czym kąt nachylenia wektora do osi OX zawiera się w przedziale <0°, 180°), a jego długość jest odległością prostej od OXY i może być ujemna. (Wariant z pełnym kątem i dodatnią długością wektora mógłby powodować pojawienie się lustrzanego odbicia torów po przemieszczeniu prostej kierunkowej na drugą stronę punktu OXY.) Każdy odcinek (tor, droga, linia lasu, zabudowy) powinien być równoległy do jakiejś linii kierunkowej. Odcinki nieuzależnione od linii kierunkowej mogą się nieznacznie przesuwać podczas przeliczania. Linie kierunkowe definiuje się poprzez:
- specjalne odcinki linii kierunkowych, umieszczone równolegle do możliwie długich obiektów widocznych na zdjęciach lotniczych (linie kierunkowe główne) - linia prosta zawiera odcinek,
- zwrotnice ustawione torem prostym równolegle do jakiejś linii kierunkowej (linie kierunkowe wtórne) - linia prosta jest odchylona o kąt określony przez zwrotnicę - najczęściej atan(1:9)=6.34° - i przechodząca przez koniec toru odchylonego,
- odcinki samo-kierunkowe, mające zablokowany kąt oraz odległość od początku układu współrzędnych - linia zawiera odcinek.
W załączniku jest fragment stacji Bór Dolny. Główna linia kierunkowa przechodzi przez całą stację "na wylot" (parametry wektora prostopadłego: 112.96°, 249.4m). Według niej są poustawiane wszystkie tory równoległe, widoczne po lewej stronie. Za pomocą zaznaczonej na niebiesko zwrotnicy wyznaczona jest wtórna linia kierunkowa (106.62°=112.96°-6.34°, 733.7m) - zaznaczone na żółto tory są umieszczone na tej linii kierunkowej. Tor zaznaczony na zielono jest również równoległy do kierunkowej wyznaczonej przez niebieską zwrotnicę (wskazuje na to połączenie od niebieskiego kwadratu do zwrotnicy) - w tym przypadku jest umieszczony w odległości 5.85m od linii kierunkowej. Zwrotnica na prawo od zielonego toru jest wpasowana w przecięcie głównej linii kierunkowej, na której się znajduje z linią wyznaczającą oś zielonego toru (ale również można by ją ustawić jako wtórną kierunkową i wtedy uzależnić zielony tor od niej). Na lewo od zielonego toru znajduje się łuk o promieniu 300m, a za nim jest tor, którego kąta nie dało się wyznaczyć za pomocą którejś ze zwrotnic. Dlatego jest umieszczona pod nim druga główna linia kierunkowa dla tej stacji (104.05°, 931.4m). Różnica kątów między kierunkowymi wynosi 8.91° - nie da się tego załatwić zwrotnicą. Odcinek ten mógłby być ustawiony również jako samo-kierunkowy, ale samo-kierunkowe zostały wprowadzone później.