mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-03 13:10:23 +01:00
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.
This commit is contained in:
@@ -15,23 +15,33 @@ http://mozilla.org/MPL/2.0/.
|
||||
namespace editor
|
||||
{
|
||||
|
||||
// a standard turnout template: its designation and the defining pair a catalogue entry is built on -
|
||||
// the crossing mark 1:n (skos) and the radius of the diverging arc. the actual length the switch
|
||||
// works out to is computed geometrically from these (arc = R * atan(1/n)), shown next to it; the
|
||||
// exact catalogue length can be pinned later if the Id-1 tables call for a different figure
|
||||
// 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 radius; // metres
|
||||
double length; // catalogue length PR->KR along the through track, metres
|
||||
double blade_angle; // kąt nagięcia iglicy (beta), radians; the diverging leaves the straight here
|
||||
double pre_blade; // odcinek przediglicowy: straight lead PR -> blade tip, metres
|
||||
double blade_length; // the straight blade itself, tip -> heel where the arc starts, metres
|
||||
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 against Id-1 before treating the derived length as the catalogue length
|
||||
// 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
|
||||
|
||||
Reference in New Issue
Block a user