|
Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
|
Le module PCC transforme le modèle topologique (StraightBlock / SwitchBlock) en un graphe logique indépendant des coordonnées GPS, positionnable en schéma gauche → droite pour l'affichage TCO.
Règle de dépendance :
Modules/PCC lit TopologyRepository — seul point de couplage vers le GeoParser.HMI/PCCPanel consomme PCCGraph uniquement — jamais TopologyRepository directement.| Classe | Responsabilité unique |
|---|---|
| PCCNode | Représenter un bloc ferroviaire dans le graphe |
| PCCStraightNode | Exposer les données spécifiques d'une voie droite |
| PCCSwitchNode | Exposer les données spécifiques d'un aiguillage |
| PCCEdge | Représenter une connexion orientée entre deux nœuds |
| PCCGraph | Posséder et indexer les nœuds et arêtes |
| PCCGraphBuilder | Construire le graphe depuis TopologyRepository |
| PCCLayout | Calculer les positions logiques X/Y |
Hiérarchie :
**Rôles d'arête (PCCEdgeRole) :**
| Valeur | Description |
|---|---|
STRAIGHT | Connexion entre deux blocs adjacents sans switch |
ROOT | Connexion sur la branche root d'un SwitchBlock |
NORMAL | Connexion sur la branche normale d'un SwitchBlock |
DEVIATION | Connexion sur la branche déviée d'un SwitchBlock |
PCCGraph possède l'ensemble des nœuds et arêtes via unique_ptr et expose un index de lookup O(1) par sourceId.
| Méthode | Rôle |
|---|---|
| addStraightNode() | Crée, stocke et indexe un PCCStraightNode |
| addSwitchNode() | Crée, stocke et indexe un PCCSwitchNode |
| addEdge() | Crée, stocke et câble une PCCEdge sur les deux nœuds |
| findNode() | Lookup O(1) — retourne nullptr si absent |
| clear() | Vide nœuds, arêtes et index |
Classe statique. Seule classe du module qui connaît TopologyRepository.
**Pipeline interne de PCCGraphBuilder::build() :**
Les deux passes sont séparées — toutes les arêtes référencent des nœuds par ID, l'index doit être complet avant la résolution.
Classe statique. Calcule les positions logiques X/Y par parcours BFS.
Règles de positionnement :
| Arête empruntée | Effet sur Y |
|---|---|
| ROOT / NORMAL / STRAIGHT | Y inchangé |
| DEVIATION | Y + 1 (bifurcation vers le haut) |
| Méthode | Rôle |
|---|---|
| compute() | Point d'entrée — orchestre BFS multi-sources |
| findTermini() | Détecte les nœuds de départ (1 seul voisin, non-cible de switch) |
| runBFS() | BFS depuis un terminus, assigne PCCPosition |