mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-02 22:06:21 +01:00
feat(sleepers): the timbers of a switch get the fastenings of the rails from the submodels plate, chair and check of their model: a plate under each rail where it lies on a timber, slide chairs under the stock rails along the blades, a fastening of both where a check rail or another rail of the frog lies close beside, the legs of the nose in one plate where they're joined; the rails sit on the plate, the blades ride on the slide plates of the chairs as high as the model has them, their webs shortened; the fastenings drawn within 120 m; selftest fastenings
This commit is contained in:
73
world/SleeperFastenings.h
Normal file
73
world/SleeperFastenings.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
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 <vector>
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include "world/TrackSleepers.h"
|
||||
|
||||
// the fastenings of the rails on the timbers: where a rail lies on a timber, the part of the model of the timbers which holds it
|
||||
// there. a stock rail with the blade beside it lies in a slide chair, a rail with a check rail or another rail of the frog close
|
||||
// beside it in a fastening of both, the blade on the chair of its stock rail, and the other rails each in a plate of its own
|
||||
namespace track_sleepers {
|
||||
|
||||
// a fastening on a timber
|
||||
struct fastening {
|
||||
int part { part_plate };
|
||||
glm::dvec3 point { 0.0 }; // under the middle of the rail, on the top of the timber
|
||||
glm::dvec2 across { 1.0, 0.0 }; // unit vector in plan square to the rail, the way the +x of the part goes
|
||||
};
|
||||
|
||||
// the rails of the tracks around a track, which lie on its timbers
|
||||
class fastened_rails {
|
||||
|
||||
public:
|
||||
explicit fastened_rails( TTrack &Track );
|
||||
// the fastenings of the rails on the timber, of the parts the model has
|
||||
std::vector<fastening> on( beam const &Beam, beam_model const &Model ) const;
|
||||
|
||||
private:
|
||||
// what a rail is where it lies on a timber
|
||||
enum class role {
|
||||
plain,
|
||||
blade, // a blade of a switch, which slides on the chair of its stock rail
|
||||
stock, // the stock rail of a switch with the blade beside it
|
||||
checked // a rail with a check rail beside it
|
||||
};
|
||||
// a rail by points along its middle
|
||||
struct rail {
|
||||
TTrack *track { nullptr };
|
||||
int path { 0 };
|
||||
int side { 1 };
|
||||
std::vector<glm::dvec2> points;
|
||||
std::vector<double> heights;
|
||||
std::vector<glm::dvec2> inward; // unit vectors in plan from the rail toward the middle of its path
|
||||
std::vector<double> distances;
|
||||
glm::dvec2 low { 0.0 };
|
||||
glm::dvec2 high { 0.0 };
|
||||
// the stretches along the path the rail is a blade, a stock rail with a chair, checked along
|
||||
glm::dvec2 blade { -1.0 };
|
||||
glm::dvec2 stock { -1.0 };
|
||||
std::vector<glm::dvec2> checks;
|
||||
role at( double const Distance ) const;
|
||||
};
|
||||
// where a rail crosses a timber
|
||||
struct hit {
|
||||
double at { 0.0 }; // along the timber, from its from end
|
||||
role kind { role::plain };
|
||||
glm::dvec2 inward { 1.0, 0.0 };
|
||||
};
|
||||
|
||||
std::vector<rail> m_rails;
|
||||
};
|
||||
|
||||
} // namespace track_sleepers
|
||||
Reference in New Issue
Block a user