mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-02 20:56:27 +01:00
fix(editor): the exit signals of a station track stand at the ends of its longest circuit, for the longest useful length both ways as Ie-4 § 13 ust. 8 wants, not at the outer ends of the outermost long circuits, which left the trains of one way a short stretch beyond a switch within the track
This commit is contained in:
@@ -1245,7 +1245,8 @@ std::vector<signal> signals(layout const &Layout, std::vector<numbered> const &T
|
|||||||
auto const odd{digit == track.number.rend() || (*digit - '0') % 2 == 1};
|
auto const odd{digit == track.number.rend() || (*digit - '0') % 2 == 1};
|
||||||
auto upper{track.number};
|
auto upper{track.number};
|
||||||
std::transform(upper.begin(), upper.end(), upper.begin(), [](char const Letter) { return static_cast<char>(std::toupper(static_cast<unsigned char>(Letter))); });
|
std::transform(upper.begin(), upper.end(), upper.begin(), [](char const Letter) { return static_cast<char>(std::toupper(static_cast<unsigned char>(Letter))); });
|
||||||
// the outer ends of the outermost circuits long enough, else of the outermost ones
|
// the ends of the longest circuit long enough, for the longest useful length of the track both ways (Ie-4 § 13 ust. 8), else
|
||||||
|
// the outer ends of the outermost ones
|
||||||
struct reach
|
struct reach
|
||||||
{
|
{
|
||||||
track_end low;
|
track_end low;
|
||||||
@@ -1255,15 +1256,22 @@ std::vector<signal> signals(layout const &Layout, std::vector<numbered> const &T
|
|||||||
};
|
};
|
||||||
reach longest;
|
reach longest;
|
||||||
reach any;
|
reach any;
|
||||||
|
double best{0.0};
|
||||||
for (auto const &circuit : track.circuits)
|
for (auto const &circuit : track.circuits)
|
||||||
{
|
{
|
||||||
double length{0.0};
|
double length{0.0};
|
||||||
for (auto const *part : circuit)
|
for (auto const *part : circuit)
|
||||||
length += node(*part) ? 0.0 : plan_length(*part, 0);
|
length += node(*part) ? 0.0 : plan_length(*part, 0);
|
||||||
|
auto const chosen{length >= kStopping && length > best};
|
||||||
|
if (chosen)
|
||||||
|
{
|
||||||
|
best = length;
|
||||||
|
longest = reach{};
|
||||||
|
}
|
||||||
for (auto const &end : ends_out(circuit))
|
for (auto const &end : ends_out(circuit))
|
||||||
{
|
{
|
||||||
auto const x{project(Layout, end.point).x};
|
auto const x{project(Layout, end.point).x};
|
||||||
for (auto *found : {&any, length >= kStopping ? &longest : static_cast<reach *>(nullptr)})
|
for (auto *found : {&any, chosen ? &longest : static_cast<reach *>(nullptr)})
|
||||||
{
|
{
|
||||||
if (found == nullptr)
|
if (found == nullptr)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -143,11 +143,11 @@ struct signal
|
|||||||
};
|
};
|
||||||
|
|
||||||
// the signals of the station: the entry ones 300 m out along the lines beyond the circuits of the station, A, B... from the start
|
// the signals of the station: the entry ones 300 m out along the lines beyond the circuits of the station, A, B... from the start
|
||||||
// of the chainage, Z, Y... from its end, the leftmost first; the exit ones facing out at the outer ends of the outermost circuits
|
// of the chainage, Z, Y... from its end, the leftmost first; the exit ones facing out at the ends of the longest circuit at least
|
||||||
// at least 200 m long of the station tracks, a letter for the odd tracks and one for the even ones at each end, with the number:
|
// 200 m long of each station track, for its longest useful length, a letter for the odd tracks and one for the even ones at each
|
||||||
// F1, G2 towards the start, R1, P2 towards the end; the shunting ones at the ends of the shorter tracks, Tm1, Tm2... along the
|
// end, with the number: F1, G2 towards the start, R1, P2 towards the end; the shunting ones at the ends of the shorter tracks, Tm1,
|
||||||
// chainage. Each on the right of the trains, unless another track runs too close by there. Inside: a track of the circuits of the
|
// Tm2... along the chainage. Each on the right of the trains, unless another track runs too close by there. Inside: a track of the
|
||||||
// station
|
// circuits of the station
|
||||||
std::vector<signal> signals(layout const &Layout, std::vector<numbered> const &Tracks, std::function<bool(TTrack const &)> const &Inside);
|
std::vector<signal> signals(layout const &Layout, std::vector<numbered> const &Tracks, std::function<bool(TTrack const &)> const &Inside);
|
||||||
|
|
||||||
// a track of a line out beyond an entry signal of the station, to the next station or the end of the tracks
|
// a track of a line out beyond an entry signal of the station, to the next station or the end of the tracks
|
||||||
|
|||||||
Reference in New Issue
Block a user