public void drawAllMap(Scene scene, List<Station> allStations) {

    app.pushMatrix(); // Etat 0: pour préserver ControlP5
    app.translate(X0, Y0, 0);

    // Pour toutes les stations:
    for (Station station : allStations) {
      app.pushMatrix(); // Etat 1: (x0,y0)

      // 1. Dessiner des sphères
      double[] relativeKm =
          Geometry.GPSToKm(station.getLatitude(), station.getLongitude(), LAT_START, LONG_START);
      float relativeX = (float) relativeKm[0] * PIXEL_PER_KM;
      float relativeY = (float) relativeKm[1] * PIXEL_PER_KM;
      int[] rgb = Line.getRGBColor(station.getCurrentDrawColor());
      int currentFillColor = app.color((float) rgb[0], (float) rgb[1], (float) rgb[2]);
      int selectedColor = app.color(255, 0, 0);

      app.translate(relativeX, relativeY); // (x0,y0) -> (xStation, yStation)
      if (station.getId() <= 7) {
        currentFillColor = selectedColor;
      }
      app.fill(currentFillColor);
      app.sphere(STATION_RADIUS);

      // Dessiner le tunnel depuis cette station jusqu'à TOUTES les stations voisines
      for (Edge neighborEdge : station.getNeighborEdges()) {
        Station neighbor = neighborEdge.getTarget();

        app.pushMatrix(); // Etat 2 (xStation, yStation)

        double lat1 = station.getLatitude();
        double long1 = station.getLongitude();
        double lat2 = neighbor.getLatitude();
        double long2 = neighbor.getLongitude();

        double[] deltaXY = Geometry.GPSToKm(lat1, long1, lat2, long2);
        float deltaX = (float) deltaXY[0];
        float deltaY = (float) deltaXY[1];
        float r = STATION_RADIUS / 2;
        float distance = Geometry.getDistance(deltaX, deltaY) * PIXEL_PER_KM;
        float tunnelHorizonAngle = Geometry.getAngle(Math.abs(deltaX), deltaY);
        if (deltaX == 0) {
          app.rotateX((float) -Math.PI / 2 * Math.signum(deltaY));
        } else {
          float signum = Math.signum(deltaX);
          app.rotateY((float) -(signum * Math.PI / 2));
          app.rotateX(tunnelHorizonAngle);
        }

        scene.cylinder(r, distance);

        app.popMatrix(); // Etat 2
      }

      app.popMatrix(); // Etat 1 (x0,y0)
    }

    // Avant l'itération suivante on met à jour les coordonnées
    // xPrevious = xCurrent;
    // yPrevious = yCurrent;

    app.popMatrix(); // Etat 0: pour redessiner le slider au bon endroit

  }