|
Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
|
#include <SwitchBlock.h>
Classes | |
| struct | SwitchBranches |
| Branches topologiques résolues (pointeurs non-propriétaires). Plus de détails... | |
Fonctions membres publiques | |
| SwitchBlock ()=default | |
| SwitchBlock (std::string switchId, CoordinateLatLon junctionWGS84, std::vector< std::string > branchIds={}) | |
| Construit un SwitchBlock positionné à junctionWGS84. | |
| std::string | getId () const override |
| Retourne l'identifiant unique de l'élément (ex. "sw/3", "s/12"). | |
| ElementType | getType () const override |
| Retourne le type de l'élément. | |
| ShuntingState | getState () const override |
| Retourne l'état opérationnel courant de l'élément. | |
| void | setState (ShuntingState state) |
| const CoordinateLatLon & | getJunctionWGS84 () const |
| Coordonnée WGS-84 du point de jonction physique. | |
| const CoordinateXY & | getJunctionUTM () const |
| Coordonnée UTM du point de jonction (x = est, y = nord, mètres). | |
| const std::optional< CoordinateLatLon > & | getTipOnRoot () const |
| const std::optional< CoordinateLatLon > & | getTipOnNormal () const |
| const std::optional< CoordinateLatLon > & | getTipOnDeviation () const |
| const std::vector< CoordinateLatLon > & | getAbsorbedNormalCoordinates () const |
| Polyligne absorbée côté normal (double switch). Vide si non applicable. | |
| const std::vector< CoordinateLatLon > & | getAbsorbedDeviationCoordinates () const |
| Polyligne absorbée côté deviation (double switch). Vide si non applicable. | |
| const std::vector< CoordinateXY > & | getAbsorbedNormalCoordsUTM () const |
| UTM absorbée côté deviation (double switch). Vide si non applicable. | |
| const std::vector< CoordinateXY > & | getAbsorbedDeviationCoordsUTM () const |
| UTM absorbée côté deviation (double switch). Vide si non applicable. | |
| const std::optional< double > & | getTotalLengthMeters () const |
| Longueur physique de traversée en mètres. Absent si tips manquants. | |
| const std::vector< std::string > & | getBranchIds () const |
| IDs des StraightBlocks connectés à la jonction. Peuplé lors de la construction du graphe. | |
| bool | isOriented () const |
| True si les rôles root/normal/deviation sont assignés. | |
| const std::optional< std::string > & | getRootBranchId () const |
| ID de la branche root. Absent si non orienté. | |
| const std::optional< std::string > & | getNormalBranchId () const |
| ID de la branche normale. Absent si non orienté. | |
| const std::optional< std::string > & | getDeviationBranchId () const |
| ID de la branche déviée. Absent si non orienté. | |
| const std::optional< std::string > & | getDoubleOnNormal () const |
| ID du partenaire double switch côté normal. Absent si non applicable. | |
| const std::optional< std::string > & | getDoubleOnDeviation () const |
| ID du partenaire double switch côté deviation. Absent si non applicable. | |
| bool | isDouble () const |
| True si un segment de liaison a été absorbé (double aiguille). | |
| const SwitchBranches & | getBranches () const |
| Retourne les branches résolues. nullptr si non initialisé. | |
| ShuntingElement * | getRootBlock () const |
| Accès direct à la branche root. nullptr si non résolue. | |
| ShuntingElement * | getNormalBlock () const |
| Accès direct à la branche normale. nullptr si non résolue. | |
| ShuntingElement * | getDeviationBlock () const |
| Accès direct à la branche déviée. nullptr si non résolue. | |
| SwitchBlock * | getPartnerOnNormal () const |
| Retourne le switch partenaire côté normal, ou nullptr. Cast valide uniquement si isDouble() && getDoubleOnNormal(). | |
| SwitchBlock * | getPartnerOnDeviation () const |
| Retourne le switch partenaire côté deviation, ou nullptr. | |
| ActiveBranch | getActiveBranch () const |
| Branche actuellement active (NORMAL par défaut). | |
| bool | isDeviationActive () const |
| Raccourci — évite la comparaison explicite. | |
| std::string | activeBranchToString () const |
| Convertit ActiveBranch en chaîne lisible pour les logs. | |
| std::string | toString () const |
| Représentation textuelle pour le débogage. | |
| void | setId (std::string id) |
| Assigne l'identifiant du bloc. Appelé par Phase6_BlockExtractor lors de la création du bloc. | |
| void | setRootBranchId (std::string id) |
| void | setNormalBranchId (std::string id) |
| void | setDeviationBranchId (std::string id) |
| const std::optional< CoordinateXY > & | getTipOnRootUTM () const |
| Point CDC côté root en UTM. Absent si non orienté. Miroir UTM de getTipOnRoot(). | |
| const std::optional< CoordinateXY > & | getTipOnNormalUTM () const |
| Point CDC côté normal en UTM. Absent si non orienté. Miroir UTM de getTipOnNormal(). | |
| const std::optional< CoordinateXY > & | getTipOnDeviationUTM () const |
| Point CDC côté déviation en UTM. Absent si non orienté. Miroir UTM de getTipOnDeviation(). | |
| void | setTipsUTM (std::optional< CoordinateXY > tipRoot, std::optional< CoordinateXY > tipNormal, std::optional< CoordinateXY > tipDeviation) |
| Assigne les trois tips CDC en coordonnées UTM. | |
| void | setJunctionWGS84 (CoordinateLatLon coord) |
| Assigne la position de jonction en WGS84. | |
| void | setJunctionUTM (CoordinateXY coord) |
| Assigne la position de jonction en UTM. | |
| void | setTips (std::optional< CoordinateLatLon > tipRoot, std::optional< CoordinateLatLon > tipNormal, std::optional< CoordinateLatLon > tipDeviation) |
| Assigne les trois tips CDC en une seule opération. | |
| void | setAbsorbedCoords (const std::string &side, std::vector< CoordinateLatLon > coords) |
| Stocke les coordonnées absorbées d'un double switch. | |
| void | addBranchId (const std::string &id) |
| Ajoute un ID de branche. Pas de doublon. | |
| void | orient (std::string rootId, std::string normalId, std::string deviationId) |
| Assigne les rôles root / normal / deviation. | |
| void | swapNormalDeviation () |
| Échange normal ↔ deviation (rôles + tips + polylignes absorbées + doubles). | |
| void | absorbLink (const std::string &linkId, const std::string &partnerId, std::vector< CoordinateLatLon > linkCoordsWGS84, std::vector< CoordinateXY > linkCoordsUTM) |
| Absorbe le segment de liaison d'un double aiguille. | |
| void | replaceBranchPointer (ShuntingElement *oldElem, ShuntingElement *newElem) |
| Remplace un pointeur de branche par un autre. | |
| void | computeTotalLength () |
| Calcule et mémorise la longueur totale de traversée. Formule : root_leg + max(normal_leg, deviation_leg). No-op si non orienté ou tips absents. | |
| void | setRootPointer (ShuntingElement *elem) |
| Assigne le pointeur de la branche root. | |
| void | setNormalPointer (ShuntingElement *elem) |
| Assigne le pointeur de la branche normale. | |
| void | setDeviationPointer (ShuntingElement *elem) |
| Assigne le pointeur de la branche déviée. | |
| void | setBranchPointers (SwitchBranches branches) |
| Enregistre les branches en une seule opération. | |
| void | setActiveBranch (ActiveBranch branch, bool propagate=true) |
| Assigne la branche active. | |
| ActiveBranch | toggleActiveBranch (bool propagate=true) |
| Alterne entre NORMAL et DEVIATION. | |
Fonctions membres publiques hérités de ShuntingElement | |
| ShuntingElement ()=default | |
| virtual | ~ShuntingElement ()=default |
| ShuntingElement (ShuntingElement &&)=default | |
| ShuntingElement & | operator= (ShuntingElement &&)=default |
| bool | isFree () const |
| Retourne true si l'élément est libre. | |
| bool | isOccupied () const |
| Retourne true si l'élément est occupé. | |
| bool | isInactive () const |
| Retourne true si l'élément est hors service. | |
Fonctions membres publiques hérités de Element | |
| Element ()=default | |
| virtual | ~Element ()=default |
| Element (const Element &)=delete | |
| Interdit la copie — risque de slicing. | |
| Element & | operator= (const Element &)=delete |
| Element (Element &&)=default | |
| Déplacement autorisé — requis par le pipeline de construction. | |
| Element & | operator= (Element &&)=default |
Fonctions membres privées statiques | |
| static double | haversineDistanceMeters (const CoordinateLatLon &a, const CoordinateLatLon &b) |
| Calcule la distance de Haversine entre deux points WGS-84. | |
Attributs privés | |
| CoordinateLatLon | m_junctionWGS84 |
| CoordinateXY | m_junctionUTM |
| std::optional< CoordinateLatLon > | m_tipOnRoot |
| std::optional< CoordinateLatLon > | m_tipOnNormal |
| std::optional< CoordinateLatLon > | m_tipOnDeviation |
| std::optional< double > | m_totalLengthMeters |
| std::vector< CoordinateLatLon > | m_absorbedNormalCoords |
| std::vector< CoordinateLatLon > | m_absorbedDeviationCoords |
| std::vector< CoordinateXY > | m_absorbedNormalCoordsUTM |
| std::vector< CoordinateXY > | m_absorbedDeviationCoordsUTM |
| std::optional< CoordinateXY > | m_tipOnRootUTM |
| std::optional< CoordinateXY > | m_tipOnNormalUTM |
| std::optional< CoordinateXY > | m_tipOnDeviationUTM |
| std::vector< std::string > | m_branchIds |
| std::optional< std::string > | m_rootBranchId |
| std::optional< std::string > | m_normalBranchId |
| std::optional< std::string > | m_deviationBranchId |
| std::optional< std::string > | m_doubleOnNormal |
| std::optional< std::string > | m_doubleOnDeviation |
| SwitchBranches | m_branches |
| ActiveBranch | m_activeBranch = ActiveBranch::NORMAL |
Membres hérités additionnels | |
Attributs protégés hérités de ShuntingElement | |
| ShuntingState | m_state = ShuntingState::FREE |
Attributs protégés hérités de Element | |
| std::string | m_id |
| id de l'element | |
Attributs protégés statiques hérités de Element | |
| static Logger | m_logger |
| Logger statique partagé par TOUS les éléments interactifs. | |
|
default |
| SwitchBlock::SwitchBlock | ( | std::string | switchId, |
| CoordinateLatLon | junctionWGS84, | ||
| std::vector< std::string > | branchIds = {} |
||
| ) |
Construit un SwitchBlock positionné à junctionWGS84.
| switchId | Identifiant unique (ex. "sw/0"). |
| junctionWGS84 | Coordonnée WGS-84 du point de jonction. |
| branchIds | Branches connues à la création (optionnel). |
| void SwitchBlock::absorbLink | ( | const std::string & | linkId, |
| const std::string & | partnerId, | ||
| std::vector< CoordinateLatLon > | linkCoordsWGS84, | ||
| std::vector< CoordinateXY > | linkCoordsUTM | ||
| ) |
Absorbe le segment de liaison d'un double aiguille.
Remplace linkId par partnerId dans m_branchIds, met à jour la branchId correspondante et les tips CDC.
| linkId | ID du StraightBlock absorbé. |
| partnerId | ID du SwitchBlock partenaire. |
| linkCoordsWGS84 | Polyligne du segment absorbé (orientée depuis cette jonction). |
| linkCoordsUTM | Coordonnée XY du segment absorbé |
|
inline |
Convertit ActiveBranch en chaîne lisible pour les logs.
| void SwitchBlock::addBranchId | ( | const std::string & | id | ) |
Ajoute un ID de branche. Pas de doublon.
| void SwitchBlock::computeTotalLength | ( | ) |
Calcule et mémorise la longueur totale de traversée. Formule : root_leg + max(normal_leg, deviation_leg). No-op si non orienté ou tips absents.
|
inline |
Polyligne absorbée côté deviation (double switch). Vide si non applicable.
|
inline |
UTM absorbée côté deviation (double switch). Vide si non applicable.
|
inline |
Polyligne absorbée côté normal (double switch). Vide si non applicable.
|
inline |
UTM absorbée côté deviation (double switch). Vide si non applicable.
|
inline |
Branche actuellement active (NORMAL par défaut).
|
inline |
Retourne les branches résolues. nullptr si non initialisé.
|
inline |
IDs des StraightBlocks connectés à la jonction. Peuplé lors de la construction du graphe.
|
inline |
Accès direct à la branche déviée. nullptr si non résolue.
|
inline |
ID de la branche déviée. Absent si non orienté.
|
inline |
ID du partenaire double switch côté deviation. Absent si non applicable.
|
inline |
ID du partenaire double switch côté normal. Absent si non applicable.
|
inlineoverridevirtual |
Retourne l'identifiant unique de l'élément (ex. "sw/3", "s/12").
Implémente Element.
|
inline |
Coordonnée UTM du point de jonction (x = est, y = nord, mètres).
|
inline |
Coordonnée WGS-84 du point de jonction physique.
|
inline |
Accès direct à la branche normale. nullptr si non résolue.
|
inline |
ID de la branche normale. Absent si non orienté.
|
inline |
Retourne le switch partenaire côté deviation, ou nullptr.
|
inline |
Retourne le switch partenaire côté normal, ou nullptr. Cast valide uniquement si isDouble() && getDoubleOnNormal().
|
inline |
Accès direct à la branche root. nullptr si non résolue.
|
inline |
ID de la branche root. Absent si non orienté.
|
inlineoverridevirtual |
Retourne l'état opérationnel courant de l'élément.
Implémente ShuntingElement.
|
inline |
Point CDC côté deviation. Absent si non orienté.
|
inline |
Point CDC côté déviation en UTM. Absent si non orienté. Miroir UTM de getTipOnDeviation().
|
inline |
Point CDC côté normal. Absent si non orienté.
|
inline |
Point CDC côté normal en UTM. Absent si non orienté. Miroir UTM de getTipOnNormal().
|
inline |
Point CDC côté root. Absent si non orienté.
|
inline |
Point CDC côté root en UTM. Absent si non orienté. Miroir UTM de getTipOnRoot().
|
inline |
Longueur physique de traversée en mètres. Absent si tips manquants.
|
inlineoverridevirtual |
Retourne le type de l'élément.
Implémente Element.
|
staticprivate |
Calcule la distance de Haversine entre deux points WGS-84.
| a | Premier point. |
| b | Second point. |
|
inline |
Raccourci — évite la comparaison explicite.
|
inline |
True si un segment de liaison a été absorbé (double aiguille).
|
inline |
True si les rôles root/normal/deviation sont assignés.
| void SwitchBlock::orient | ( | std::string | rootId, |
| std::string | normalId, | ||
| std::string | deviationId | ||
| ) |
Assigne les rôles root / normal / deviation.
| std::invalid_argument | Si un ID est absent de m_branchIds. |
| void SwitchBlock::replaceBranchPointer | ( | ShuntingElement * | oldElem, |
| ShuntingElement * | newElem | ||
| ) |
Remplace un pointeur de branche par un autre.
Appelé par Phase7_DoubleSwitchDetector::absorbLinkSegment() après suppression du segment de liaison.
| oldElem | Ancien bloc pointé (ex. le StraightBlock absorbé). |
| newElem | Nouveau bloc (ex. le SwitchBlock partenaire). |
| void SwitchBlock::setAbsorbedCoords | ( | const std::string & | side, |
| std::vector< CoordinateLatLon > | coords | ||
| ) |
Stocke les coordonnées absorbées d'un double switch.
Appelé par Phase7_DoubleSwitchDetector::absorbLinkSegment().
| side | Branche absorbée ("normal" ou "deviation"). |
| coords | Polyligne WGS84 du segment absorbé. |
| void SwitchBlock::setActiveBranch | ( | ActiveBranch | branch, |
| bool | propagate = true |
||
| ) |
Assigne la branche active.
| branch | Branche à activer. |
| propagate | Si true, propage aux partenaires double switch. |
| void SwitchBlock::setBranchPointers | ( | SwitchBranches | branches | ) |
Enregistre les branches en une seule opération.
| branches | Struct contenant les trois pointeurs résolus. |
|
inline |
|
inline |
Assigne le pointeur de la branche déviée.
| elem | Pointeur non-propriétaire. nullptr si non résolu. |
|
inline |
Assigne l'identifiant du bloc. Appelé par Phase6_BlockExtractor lors de la création du bloc.
| id | Identifiant unique (ex. "sw/0"). |
|
inline |
Assigne la position de jonction en UTM.
| coord | Coordonnée UTM (x = est, y = nord, mètres). |
|
inline |
Assigne la position de jonction en WGS84.
| coord | Coordonnée WGS-84 (latitude, longitude). |
|
inline |
|
inline |
Assigne le pointeur de la branche normale.
| elem | Pointeur non-propriétaire. nullptr si non résolu. |
|
inline |
|
inline |
Assigne le pointeur de la branche root.
| elem | Pointeur non-propriétaire. nullptr si non résolu. |
|
inline |
| void SwitchBlock::setTips | ( | std::optional< CoordinateLatLon > | tipRoot, |
| std::optional< CoordinateLatLon > | tipNormal, | ||
| std::optional< CoordinateLatLon > | tipDeviation | ||
| ) |
Assigne les trois tips CDC en une seule opération.
| tipRoot | Tip côté root. |
| tipNormal | Tip côté normal. |
| tipDeviation | Tip côté deviation. |
| void SwitchBlock::setTipsUTM | ( | std::optional< CoordinateXY > | tipRoot, |
| std::optional< CoordinateXY > | tipNormal, | ||
| std::optional< CoordinateXY > | tipDeviation | ||
| ) |
Assigne les trois tips CDC en coordonnées UTM.
Appelé par Phase7_SwitchProcessor::computeTips en parallèle de setTips(). Les trois champs sont assignés en une seule opération pour garantir la cohérence (soit tous présents, soit tous absents).
| tipRoot | Tip côté root (CoordinateXY UTM). |
| tipNormal | Tip côté normal (CoordinateXY UTM). |
| tipDeviation | Tip côté déviation (CoordinateXY UTM). |
| void SwitchBlock::swapNormalDeviation | ( | ) |
Échange normal ↔ deviation (rôles + tips + polylignes absorbées + doubles).
| ActiveBranch SwitchBlock::toggleActiveBranch | ( | bool | propagate = true | ) |
Alterne entre NORMAL et DEVIATION.
| propagate | Si true, propage aux partenaires double switch. |
| std::string SwitchBlock::toString | ( | ) | const |
Représentation textuelle pour le débogage.
|
private |
Polyligne absorbée côté deviation (double switch).
|
private |
|
private |
Polyligne absorbée côté normal (double switch).
|
private |
|
private |
Branche actuellement active. NORMAL par défaut.
|
private |
Branches topologiques résolues. nullptr si non initialisées.
|
private |
IDs des StraightBlocks connectés.
|
private |
ID de la branche déviée. Absent si non orienté.
|
private |
ID du partenaire double switch côté deviation.
|
private |
ID du partenaire double switch côté normal.
|
private |
Coordonnée UTM du point de jonction (x = est, y = nord, mètres).
|
private |
Coordonnée WGS-84 du point de jonction physique.
|
private |
ID de la branche normale. Absent si non orienté.
|
private |
ID de la branche root. Absent si non orienté.
|
private |
Tip CDC côté deviation. Absent si non orienté.
|
private |
Tip CDC côté déviation en UTM. Absent si non orienté.
|
private |
Tip CDC côté normal. Absent si non orienté.
|
private |
Tip CDC côté normal en UTM. Absent si non orienté.
|
private |
Tip CDC côté root. Absent si non orienté.
|
private |
Tip CDC côté root en UTM. Absent si non orienté.
|
private |
Longueur physique de traversée (root_leg + max(normal, deviation)). Absent si tips non disponibles.