59 std::vector<std::string> branchIds = {});
65 [[nodiscard]] std::string
getId()
const override {
return m_id; }
203 [[nodiscard]] std::string
toString()
const;
265 void setTipsUTM(std::optional<CoordinateXY> tipRoot,
266 std::optional<CoordinateXY> tipNormal,
267 std::optional<CoordinateXY> tipDeviation);
290 void setTips(std::optional<CoordinateLatLon> tipRoot,
291 std::optional<CoordinateLatLon> tipNormal,
292 std::optional<CoordinateLatLon> tipDeviation);
303 std::vector<CoordinateLatLon> coords);
319 void orient(std::string rootId, std::string normalId, std::string deviationId);
338 const std::string& partnerId,
339 std::vector<CoordinateLatLon> linkCoordsWGS84,
340 std::vector<CoordinateXY> linkCoordsUTM);
Représentation d'une coordonnée géographique WGS-84 (latitude, longitude).
Représentation d'une coordonnée plane en mètres (système métrique UTM).
ElementType
Types d'éléments interactifs ferroviaires.
Definition Element.h:18
Interface abstraite pour tous les éléments de shuntage ferroviaire.
ShuntingState
État opérationnel d'un élément de shuntage.
Definition ShuntingElement.h:18
ActiveBranch
Branche active d'un aiguillage.
Definition SwitchBlock.h:37
Coordonnée géographique WGS-84 exprimée en degrés décimaux.
Definition CoordinateLatLon.h:22
Coordonnée plane en mètres dans un système métrique (UTM ou similaire).
Definition CoordinateXY.h:23
std::string m_id
id de l'element
Definition Element.h:71
Interface abstraite pour tous les éléments de shuntage ferroviaire.
Definition ShuntingElement.h:39
ShuntingState m_state
Definition ShuntingElement.h:82
Definition SwitchBlock.h:41
void computeTotalLength()
Calcule et mémorise la longueur totale de traversée. Formule : root_leg + max(normal_leg,...
Definition SwitchBlock.cpp:57
ElementType getType() const override
Retourne le type de l'élément.
Definition SwitchBlock.h:66
std::vector< CoordinateXY > m_absorbedNormalCoordsUTM
Definition SwitchBlock.h:446
std::optional< CoordinateXY > m_tipOnDeviationUTM
Definition SwitchBlock.h:456
void setTipsUTM(std::optional< CoordinateXY > tipRoot, std::optional< CoordinateXY > tipNormal, std::optional< CoordinateXY > tipDeviation)
Assigne les trois tips CDC en coordonnées UTM.
Definition SwitchBlock.cpp:294
void setJunctionWGS84(CoordinateLatLon coord)
Assigne la position de jonction en WGS84.
Definition SwitchBlock.h:274
const SwitchBranches & getBranches() const
Retourne les branches résolues. nullptr si non initialisé.
Definition SwitchBlock.h:154
bool isDouble() const
True si un segment de liaison a été absorbé (double aiguille).
Definition SwitchBlock.h:134
void setJunctionUTM(CoordinateXY coord)
Assigne la position de jonction en UTM.
Definition SwitchBlock.h:281
std::optional< CoordinateXY > m_tipOnNormalUTM
Definition SwitchBlock.h:453
void setTips(std::optional< CoordinateLatLon > tipRoot, std::optional< CoordinateLatLon > tipNormal, std::optional< CoordinateLatLon > tipDeviation)
Assigne les trois tips CDC en une seule opération.
Definition SwitchBlock.cpp:39
const CoordinateLatLon & getJunctionWGS84() const
Coordonnée WGS-84 du point de jonction physique.
Definition SwitchBlock.h:76
std::vector< CoordinateXY > m_absorbedDeviationCoordsUTM
Definition SwitchBlock.h:447
const std::optional< CoordinateLatLon > & getTipOnNormal() const
Definition SwitchBlock.h:85
void setDeviationPointer(ShuntingElement *elem)
Assigne le pointeur de la branche déviée.
Definition SwitchBlock.h:383
const std::vector< std::string > & getBranchIds() const
IDs des StraightBlocks connectés à la jonction. Peuplé lors de la construction du graphe.
Definition SwitchBlock.h:113
std::vector< CoordinateLatLon > m_absorbedDeviationCoords
Definition SwitchBlock.h:444
void setRootPointer(ShuntingElement *elem)
Assigne le pointeur de la branche root.
Definition SwitchBlock.h:369
const std::optional< CoordinateLatLon > & getTipOnRoot() const
Definition SwitchBlock.h:82
ShuntingElement * getDeviationBlock() const
Accès direct à la branche déviée. nullptr si non résolue.
Definition SwitchBlock.h:163
std::optional< CoordinateLatLon > m_tipOnNormal
Definition SwitchBlock.h:429
std::string activeBranchToString() const
Convertit ActiveBranch en chaîne lisible pour les logs.
Definition SwitchBlock.h:197
ActiveBranch toggleActiveBranch(bool propagate=true)
Alterne entre NORMAL et DEVIATION.
Definition SwitchBlock.cpp:178
const std::optional< std::string > & getRootBranchId() const
ID de la branche root. Absent si non orienté.
Definition SwitchBlock.h:119
const std::vector< CoordinateLatLon > & getAbsorbedNormalCoordinates() const
Polyligne absorbée côté normal (double switch). Vide si non applicable.
Definition SwitchBlock.h:91
std::optional< std::string > m_deviationBranchId
Definition SwitchBlock.h:472
CoordinateLatLon m_junctionWGS84
Definition SwitchBlock.h:420
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.
Definition SwitchBlock.cpp:109
std::vector< CoordinateLatLon > m_absorbedNormalCoords
Definition SwitchBlock.h:441
std::vector< std::string > m_branchIds
Definition SwitchBlock.h:463
const std::optional< std::string > & getNormalBranchId() const
ID de la branche normale. Absent si non orienté.
Definition SwitchBlock.h:122
std::optional< std::string > m_doubleOnNormal
Definition SwitchBlock.h:475
std::optional< std::string > m_normalBranchId
Definition SwitchBlock.h:469
void setRootBranchId(std::string id)
Definition SwitchBlock.h:221
const std::optional< std::string > & getDeviationBranchId() const
ID de la branche déviée. Absent si non orienté.
Definition SwitchBlock.h:125
SwitchBlock * getPartnerOnNormal() const
Retourne le switch partenaire côté normal, ou nullptr. Cast valide uniquement si isDouble() && getDou...
Definition SwitchBlock.h:169
std::optional< std::string > m_doubleOnDeviation
Definition SwitchBlock.h:478
ActiveBranch m_activeBranch
Definition SwitchBlock.h:492
void setState(ShuntingState state)
Definition SwitchBlock.h:69
std::string toString() const
Représentation textuelle pour le débogage.
Definition SwitchBlock.cpp:200
const std::vector< CoordinateXY > & getAbsorbedNormalCoordsUTM() const
UTM absorbée côté deviation (double switch). Vide si non applicable.
Definition SwitchBlock.h:97
bool isOriented() const
True si les rôles root/normal/deviation sont assignés.
Definition SwitchBlock.h:116
void setAbsorbedCoords(const std::string &side, std::vector< CoordinateLatLon > coords)
Stocke les coordonnées absorbées d'un double switch.
Definition SwitchBlock.cpp:48
const std::optional< CoordinateXY > & getTipOnRootUTM() const
Point CDC côté root en UTM. Absent si non orienté. Miroir UTM de getTipOnRoot().
Definition SwitchBlock.h:229
void setNormalBranchId(std::string id)
Definition SwitchBlock.h:222
std::optional< std::string > m_rootBranchId
Definition SwitchBlock.h:466
const std::vector< CoordinateLatLon > & getAbsorbedDeviationCoordinates() const
Polyligne absorbée côté deviation (double switch). Vide si non applicable.
Definition SwitchBlock.h:94
ShuntingElement * getRootBlock() const
Accès direct à la branche root. nullptr si non résolue.
Definition SwitchBlock.h:157
const std::optional< std::string > & getDoubleOnDeviation() const
ID du partenaire double switch côté deviation. Absent si non applicable.
Definition SwitchBlock.h:131
std::optional< CoordinateLatLon > m_tipOnDeviation
Definition SwitchBlock.h:432
std::optional< CoordinateXY > m_tipOnRootUTM
Definition SwitchBlock.h:450
const std::optional< double > & getTotalLengthMeters() const
Longueur physique de traversée en mètres. Absent si tips manquants.
Definition SwitchBlock.h:103
static double haversineDistanceMeters(const CoordinateLatLon &a, const CoordinateLatLon &b)
Calcule la distance de Haversine entre deux points WGS-84.
Definition SwitchBlock.cpp:310
void replaceBranchPointer(ShuntingElement *oldElem, ShuntingElement *newElem)
Remplace un pointeur de branche par un autre.
Definition SwitchBlock.cpp:155
ShuntingState getState() const override
Retourne l'état opérationnel courant de l'élément.
Definition SwitchBlock.h:67
ActiveBranch getActiveBranch() const
Branche actuellement active (NORMAL par défaut).
Definition SwitchBlock.h:191
void setDeviationBranchId(std::string id)
Definition SwitchBlock.h:223
std::optional< double > m_totalLengthMeters
Definition SwitchBlock.h:438
const CoordinateXY & getJunctionUTM() const
Coordonnée UTM du point de jonction (x = est, y = nord, mètres).
Definition SwitchBlock.h:79
const std::vector< CoordinateXY > & getAbsorbedDeviationCoordsUTM() const
UTM absorbée côté deviation (double switch). Vide si non applicable.
Definition SwitchBlock.h:100
void orient(std::string rootId, std::string normalId, std::string deviationId)
Assigne les rôles root / normal / deviation.
Definition SwitchBlock.cpp:80
void setBranchPointers(SwitchBranches branches)
Enregistre les branches en une seule opération.
Definition SwitchBlock.cpp:144
ShuntingElement * getNormalBlock() const
Accès direct à la branche normale. nullptr si non résolue.
Definition SwitchBlock.h:160
bool isDeviationActive() const
Raccourci — évite la comparaison explicite.
Definition SwitchBlock.h:194
std::optional< CoordinateLatLon > m_tipOnRoot
Definition SwitchBlock.h:426
std::string getId() const override
Retourne l'identifiant unique de l'élément (ex. "sw/3", "s/12").
Definition SwitchBlock.h:65
SwitchBranches m_branches
Definition SwitchBlock.h:485
const std::optional< std::string > & getDoubleOnNormal() const
ID du partenaire double switch côté normal. Absent si non applicable.
Definition SwitchBlock.h:128
const std::optional< CoordinateLatLon > & getTipOnDeviation() const
Definition SwitchBlock.h:88
void setId(std::string id)
Assigne l'identifiant du bloc. Appelé par Phase6_BlockExtractor lors de la création du bloc.
Definition SwitchBlock.h:215
void setActiveBranch(ActiveBranch branch, bool propagate=true)
Assigne la branche active.
Definition SwitchBlock.cpp:168
const std::optional< CoordinateXY > & getTipOnNormalUTM() const
Point CDC côté normal en UTM. Absent si non orienté. Miroir UTM de getTipOnNormal().
Definition SwitchBlock.h:238
const std::optional< CoordinateXY > & getTipOnDeviationUTM() const
Point CDC côté déviation en UTM. Absent si non orienté. Miroir UTM de getTipOnDeviation().
Definition SwitchBlock.h:247
void addBranchId(const std::string &id)
Ajoute un ID de branche. Pas de doublon.
Definition SwitchBlock.cpp:74
SwitchBlock * getPartnerOnDeviation() const
Retourne le switch partenaire côté deviation, ou nullptr.
Definition SwitchBlock.h:179
CoordinateXY m_junctionUTM
Definition SwitchBlock.h:423
void setNormalPointer(ShuntingElement *elem)
Assigne le pointeur de la branche normale.
Definition SwitchBlock.h:376
void swapNormalDeviation()
Échange normal ↔ deviation (rôles + tips + polylignes absorbées + doubles).
Definition SwitchBlock.cpp:99
Branches topologiques résolues (pointeurs non-propriétaires).
Definition SwitchBlock.h:147
ShuntingElement * deviation
Sortie déviée.
Definition SwitchBlock.h:150
ShuntingElement * normal
Sortie directe.
Definition SwitchBlock.h:149
ShuntingElement * root
Tronc entrant.
Definition SwitchBlock.h:148