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 Phase6_BlockExtractor.cpp

Implémentation de la phase 6 — extraction des blocs ferroviaires. Plus de détails...

#include "Phase6_BlockExtractor.h"
#include <unordered_set>
#include <array>
#include <cmath>
Graphe des dépendances par inclusion de Phase6_BlockExtractor.cpp:

Description détaillée

Implémentation de la phase 6 — extraction des blocs ferroviaires.

Corrections v2

Bug 1 — Crossover : même straight pour normal et deviation Cause : la déduplication par pairKey(startNode, endNode) empêchait la création d'un second straight entre deux switches reliés par deux voies parallèles (crossover). De plus, straightByDirectedPair stockait une valeur unique par clé, la seconde insertion écrasant la première.

Correction :

  • extractStraights utilise désormais un ensemble usedEdges (indices d'arêtes) pour la déduplication. L'arête de départ (startEdgeIdx) et l'arête d'arrivée (prevEdge) sont marquées après chaque création de straight. Cela empêche la traversal inverse (B→A) mais autorise plusieurs straights entre la même paire de frontières.
  • straightByDirectedPair est désormais multi-valué (unordered_map<size_t, vector<StraightBlock*>>).
  • extractSwitches maintient un ensemble usedStraights par switch pour attribuer des straights distincts à chaque branche.

Bug 2 — Subdivision : voisins null sur les sous-blocs internes Ce bug est corrigé dans Phase8_RepositoryTransfer::resolveStraight : la résolution ne s'applique qu'aux endpoints dont neighbourId est non vide, préservant ainsi les pointeurs de chaîne posés par registerStraight.

Voir également
Phase6_BlockExtractor