17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-20 08:05:55 +02:00
Files
maszyna/maj0sted
maj00r 2376e4867b Editor: rebuild the plan library around a solved document, and bend turnouts onto curves
The library was a heap of half-built services - fitting, parallelism, niwelety,
an SVG writer - that never met each other. In their place is one authored
Document and one solver that lays it whole: tracks as element chains, turnouts
placed on them, and a Solution that is rebuilt from scratch every time and never
fed back into the document. What cannot be laid comes back as a diagnostic with
the number in it rather than as silence or a fitted-away error.

Turnouts are dimensioned the way the drawings dimension them. The blade follows
Koc's rys. 5.9 - the curve is theoretically tangent to the opornica at PR, the
blade starts at a with a planed nose of d, and A is where the rail stands u
thick - and a + d derived that way lands on his tablica 5.1. Bending follows
5.3.6: it rotates the triangle OBC about the centre of the turnout, so the
tangent t and the crossing angle stand and both radii follow from them. That is
Koc's (5.7) and (5.8) without coding either, and it puts a symmetrically bent
Rz 49E1-190-1:9 on the catalogue's Rlus 49E1-380,292-1:9. A rozjazd standing on
a curve is bent onto it; one on a track drawn straight can carry a bend of its
own. The szyny laczace take up the difference, because the switch and the frog
are only bent, not re-cut.

The plan panel draws all of it: the catalogue drawing of a type with its
construction points, the theoretical arc dashed where no rail runs, and the
blade nose as the straight it is cut as. Dragging a straight now stops where it
would pull the track out from under a turnout.

File format goes to m0s 6. Versions 3 to 5 still open.
2026-08-29 19:32:46 +02:00
..

maj0sted

Statyczna biblioteka C++20 do obsługi edytora torowiska, zbudowana zgodnie z Domain-Driven Design (DDD).

Biblioteka dostarcza czysty model domenowy — bez zależności od UI, bazy danych czy frameworka. Warstwy aplikacji i infrastruktury podpina się do zdefiniowanych tu typów.

Model domenowy

maj0sted::domain
├── value_objects/         Value Objects (niezmienne, porównywane przez wartość)
│   ├── Crs                układ odniesienia (kod EPSG), domyślnie EPSG:2180
│   └── CartesianPosition  pozycja kartezjańska (x, y w jednostkach CRS)
└── MapProject             projekt mapy — definiuje CRS dla wszystkich pozycji

Projekt mapy (MapProject) definiuje kartezjański układ odniesienia, w którym wyrażane są wszystkie pozycje. Domyślnie jest to EPSG:2180 (PUWG 1992 / Poland CS92), którego jednostką jest metr.

Szybki start

#include "maj0sted/maj0sted.hpp"
using namespace maj0sted::domain;

MapProject project;                 // domyślnie EPSG:2180
int epsg = project.crs().epsg();    // 2180

CartesianPosition p{500000.0, 300000.0};  // x, y w metrach

Pełniejszy przykład: examples/basic_editor.cpp.

Budowanie

Wymagania: kompilator C++20 (GCC 11+/Clang 14+/MSVC 19.3+) oraz CMake ≥ 3.20.

cmake -S . -B build            # dodaj -G Ninja, jeśli masz ninja
cmake --build build
ctest --test-dir build --output-on-failure
./build/examples/maj0sted_example

Opcje CMake

Opcja Domyślnie Znaczenie
MAJ0STED_BUILD_TESTS ON buduj testy jednostkowe
MAJ0STED_BUILD_EXAMPLES ON buduj przykłady
MAJ0STED_WARNINGS_AS_ERRORS OFF traktuj ostrzeżenia jak błędy

Użycie w innym projekcie

Po cmake --install build (albo przez add_subdirectory):

find_package(maj0sted REQUIRED)
target_link_libraries(twoj_target PRIVATE maj0sted::maj0sted)

Struktura projektu

maj0sted/
├── CMakeLists.txt
├── include/maj0sted/     nagłówki publiczne (API)
├── src/domain/           implementacje (.cpp)
├── tests/                testy jednostkowe (CTest, bez zależności)
├── examples/             przykłady użycia
└── cmake/                pliki pakietu find_package

Testy

Testy używają własnego, malutkiego frameworka (tests/check.hpp) — nie wymagają żadnych zewnętrznych bibliotek. Każdy plik testowy to osobny plik wykonywalny zwracający kod wyjścia dla CTest.

Licencja

Do uzupełnienia (np. MIT) — dodaj plik LICENSE.