Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
Chargement...
Recherche...
Aucune correspondance
Référence du fichier PCCLayout.h

Calcul des positions logiques X/Y du graphe PCC par parcours BFS. Plus de détails...

#include <unordered_set>
#include <vector>
#include "PCCGraph.h"
#include "Engine/Core/Logger/Logger.h"
Graphe des dépendances par inclusion de PCCLayout.h:
Ce graphe montre quels fichiers incluent directement ou indirectement ce fichier :

Aller au code source de ce fichier.

Classes

class  PCCLayout
 Calculateur de positions logiques X/Y du PCCGraph. Plus de détails...
 
struct  PCCLayout::BFSItem
 Contexte BFS d'un nœud en file d'attente. Plus de détails...
 

Description détaillée

Calcul des positions logiques X/Y du graphe PCC par parcours BFS.

Classe utilitaire statique sans état. Assigne à chaque PCCNode une PCCPosition indépendante des coordonnées GPS, utilisable directement par TCORenderer pour le dessin GDI.

Algorithme — règle linéaire topologique
  1. Détection des terminus (nœuds de départ gauche).
  2. BFS multi-sources depuis chaque terminus non visité.
  3. Règle de positionnement selon le rôle de l'arête :
    Rôle ΔX ΔY
    STRAIGHT / ROOT standard +1 0 (Y constant)
    NORMAL standard +1 0 (Y constant)
    NORMAL → SwitchNode (aiguille double) 0 ±côté géo
    ROOT forward + arrivée par déviation -1 0 (upstream)
    DEVIATION → nœud ordinaire +1 ±côté géo
    DEVIATION → SwitchNode (aiguille double) 0 ±côté géo
Détection "arrivée par déviation"
Le flag arrivedViaDeviation est stocké dans BFSItem et propagé à chaque nœud enqueué. Il est levé dès qu'un voisin est atteint via une arête DEVIATION. Quand un switch est dépilé avec ce flag à true, sa voie ROOT est traitée comme upstream (x-1) plutôt que downstream (x+1).
Côté géographique
Le côté (±1) est calculé une seule fois par PCCGraphBuilder::computeDeviationSides à partir des coordonnées UTM et stocké dans PCCSwitchNode::getDeviationSide(). C'est la seule donnée GPS tolérée dans ce calcul.
Post-traitement — branches convergentes de longueurs inégales
Après le BFS, fixCollapsedBranches détecte tout switch dont une branche (DEVIATION ou NORMAL) atterrit au même X que lui-même (longueur visuelle nulle). Il décale ce switch et tout son sous-graphe aval (via ROOT) de +1 cellule, jusqu'à ce qu'aucun cas subsiste. La logique de TCORenderer::drawStraightBlock (extension au mi-chemin vers les voisins de même Y) et de TCORenderer::drawSwitchBlock gèrent alors le rendu automatiquement, sans modification du renderer.
Graphes déconnectés
Un BFS est lancé depuis chaque terminus de chaque composante. Un décalage X est appliqué entre composantes pour éviter les superpositions.
Note
Classe entièrement statique — instanciation interdite.