mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-19 10:49:20 +02:00
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.
48 lines
1.7 KiB
C++
48 lines
1.7 KiB
C++
/*
|
|
This Source Code Form is subject to the
|
|
terms of the Mozilla Public License, v.
|
|
2.0. If a copy of the MPL was not
|
|
distributed with this file, You can
|
|
obtain one at
|
|
http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace editor
|
|
{
|
|
|
|
// one piece of a preset's diverging path, in catalogue order from PR. mirrors
|
|
// maj0sted::editor::TurnoutPieceSpec so this header stays free of the library
|
|
struct turnout_preset_piece
|
|
{
|
|
int part; // 0 przediglicowy, 1 iglica, 2 luk, 3 krzyzownicowa
|
|
double length; // metres, always explicit - nothing here is fitted
|
|
double radius_start; // metres; 0 = straight
|
|
double radius_end; // metres; different from radius_start = clothoid
|
|
double turn_in; // kat nagiecia iglicy (beta), radians; 0 = tangent to the stock rail
|
|
};
|
|
|
|
// a standard turnout template: its designation, the catalogue numbers the laid path is
|
|
// checked against (skos 1:n and the length PR->KR along the through track), the pieces it
|
|
// is laid from, and the two blade dimensions that place its real, cut tip
|
|
struct turnout_preset
|
|
{
|
|
std::string name;
|
|
double crossing_n; // skos 1:n
|
|
double length; // catalogue length: a + b, the two tangent legs of the drawing, metres
|
|
double tip_thickness; // grubosc iglicy na koncu zestruganego dzioba (u), metres
|
|
double nose; // dziob iglicy: zestrugana dlugosc od ostrza (d), metres
|
|
double railtop_width; // szerokosc glowki szyny (w), metres
|
|
std::vector<turnout_preset_piece> pieces;
|
|
};
|
|
|
|
// typical Polish turnouts (rozjazdy zwyczajne). the (skos, R) pairs are the recognised
|
|
// standard; confirm the piece lengths and the blade against Id-1
|
|
std::vector<turnout_preset> const &turnout_presets();
|
|
|
|
} // namespace editor
|