/// <summary> /// Generate train drawing information. /// </summary> /// <returns>A series of train drawing information objects containing drawing instructions.</returns> public IEnumerable <TrainDrawingInfo> GetTrainDrawingInformation() { RecomputeTimeBase(); RecomputeLocationCoordinates(); foreach (Train train in TrainList.Where(t => t.TrainTimes?.Count > 0)) { TrainDrawingInfo tdi = new TrainDrawingInfo { Properties = train.GraphProperties, Headcode = train.Headcode, Train = train }; for (int i = 0; i < train.TrainTimes.Count; ++i) { if (train.TrainTimes[i]?.ArrivalTime?.Time != null && train.TrainTimes[i]?.DepartureTime?.Time != null) { double locationCoordinate = _locationCoordinates[train.TrainTimes[i].Location.Id]; tdi.Lines.Add(new LineCoordinates( new VertexInformation(tdi, train.TrainTimes[i].ArrivalTime.Time, ArrivalDepartureOptions.Arrival, GetXPositionFromTime(train.TrainTimes[i].ArrivalTime.Time), locationCoordinate), new VertexInformation(tdi, train.TrainTimes[i].DepartureTime.Time, ArrivalDepartureOptions.Departure, GetXPositionFromTime(train.TrainTimes[i].DepartureTime.Time), locationCoordinate))); } if (i > 0 && train.TrainTimes[i - 1]?.DepartureTime?.Time != null) { VertexInformation startVertex = new VertexInformation(tdi, train.TrainTimes[i - 1].DepartureTime.Time, ArrivalDepartureOptions.Departure, GetXPositionFromTime(train.TrainTimes[i - 1].DepartureTime.Time), _locationCoordinates[train.TrainTimes[i - 1].Location.Id]); double endY = _locationCoordinates[train.TrainTimes[i].Location.Id]; if (train.TrainTimes[i]?.ArrivalTime?.Time != null) { tdi.Lines.Add(new LineCoordinates(startVertex, new VertexInformation(tdi, train.TrainTimes[i].ArrivalTime.Time, ArrivalDepartureOptions.Arrival, GetXPositionFromTime(train.TrainTimes[i].ArrivalTime.Time), endY))); } else if (train.TrainTimes[i]?.DepartureTime?.Time != null) { tdi.Lines.Add(new LineCoordinates(startVertex, new VertexInformation(tdi, train.TrainTimes[i].DepartureTime.Time, ArrivalDepartureOptions.Departure, GetXPositionFromTime(train.TrainTimes[i].DepartureTime.Time), endY))); } } } yield return(tdi); } }
/// <summary> /// Constructor which sets the vertex properties. /// </summary> /// <param name="v1">The first vertex.</param> /// <param name="v2">The second vertex.</param> public LineCoordinates(VertexInformation v1, VertexInformation v2) { Vertex1 = v1; Vertex2 = v2; }