Beispiel #1
0
        public void FindPathZ(StationViewModel startStation, StationViewModel endStation)
        {
            HideStationsAndConnectionsThatIsNotOnTheSelectedPath();
            StationPathFrom.IsSelectedStationInThePath = true;
            StationPathTo.IsSelectedStationInThePath   = true;

            if (startStation.ConnectedStationO.PreviousStation == null & startStation.Line == StationPathTo.Line)
            {
                MoveToNext(startStation, endStation);
            }
            else if (startStation.ConnectedStationO.NextStation == null & startStation.Line == StationPathTo.Line)
            {
                MoveToPrevious(startStation, endStation);
            }
            else if (startStation.Line == StationPathTo.Line && check(startStation, endStation))
            {
                MoveToNext(startStation, endStation);
            }
            else if (startStation.Line == StationPathTo.Line && !check(startStation, endStation))
            {
                MoveToPrevious(startStation, endStation);
            }
            else
            {
                var transit = Stations.FirstOrDefault(s => s.TransitToLine == StationPathTo.Line & StationPathFrom.Line == s.Line);
                if (check(startStation, transit))
                {
                    MoveToNext(startStation, transit);
                    startStation = Stations.ToList().Find(s => s.Name.Trim() == transit.TransitToStation.Trim());
                    if (check(startStation, endStation))
                    {
                        MoveToNext(startStation, endStation);
                    }
                    else
                    {
                        MoveToPrevious(startStation, endStation);
                    }
                }
                else
                {
                    MoveToPrevious(startStation, transit);
                    startStation = Stations.ToList().Find(s => s.Name.Trim() == transit.TransitToStation.Trim());
                    if (!check(startStation, endStation))
                    {
                        MoveToPrevious(startStation, endStation);
                    }
                    else
                    {
                        MoveToNext(startStation, endStation);
                    }
                }
            }
        }
Beispiel #2
0
 public bool check(StationViewModel station, StationViewModel endStation)
 {
     if (station.ConnectedStationO.NextStation != null && station.ConnectedStationO.NextStation != endStation.Name)
     {
         return(check(Stations.ToList().Find(s => s.Name.Trim() == station.ConnectedStationO.NextStation.Trim()), endStation));
     }
     else if (station.ConnectedStationO.NextStation == endStation.Name)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Beispiel #3
0
 public void MoveToPrevious(StationViewModel startStation, StationViewModel endStation)
 {
     while (startStation.ConnectedStationO.PreviousStation != endStation.Name)
     {
         startStation = Stations.ToList().Find(s => s.Name.Trim() == startStation.ConnectedStationO.PreviousStation.Trim());
         StationConnections.SingleOrDefault(s =>
         {
             if (s.NextStation != null & s.NextStation.Trim() == startStation.ConnectedStationO.NextStation.Trim())
             {
                 s.IsSelectedConnection = true;
                 return(true);
             }
             return(false);
         });
         startStation.IsSelectedStationInThePath = true;
     }
 }
Beispiel #4
0
        // this method will be reworked
        private void Load()
        {
            Stations           = new ObservableCollection <StationViewModel>();
            StationConnections = new ObservableCollection <StationConnectionViewModel>();

            SelectStationCommand = new RelayCommand(SelectStation);

            List <Station> stationsData;
            double         canvasLeft;
            double         canvasBottom;
            StationControl sc = new StationControl();

            using (var context = new MetroNavigationContext())
            {
                stationsData = context.Stations.
                               Include(s => s.StationConnection).ToList();
            }

            MinX = stationsData.Min(s => s.OsX);
            MaxX = stationsData.Max(s => s.OsX);
            MinY = stationsData.Min(s => s.OsY);
            MaxY = stationsData.Max(s => s.OsY);
            List <double> l = new List <double>();

            foreach (var station in stationsData)
            {
                canvasLeft = (SystemParameters.WorkArea.Width * 0.9) *
                             (station.OsX - MinX) / (MaxX - MinX);

                canvasBottom = (SystemParameters.WorkArea.Height * 0.9) *
                               (station.OsY - MinY) / (MaxY - MinY);

                canvasLeft = canvasLeft > (SystemParameters.WorkArea.Width * 0.9)
                                          ? canvasLeft
                                          : canvasLeft;

                canvasBottom = canvasBottom > (SystemParameters.WorkArea.Height * 0.9)
                                          ? canvasBottom
                                          : canvasBottom;

                Stations.Add(new StationViewModel()
                {
                    CanvasLeft = canvasLeft, CanvasBottom = canvasBottom, Name = station.Name, Line = station.Line, ConnectedStationO = new StationConnectionViewModel()
                    {
                        NextStation = station.StationConnection.NextStation, PreviousStation = station.StationConnection.PreviousStation
                    }, TransitToLine = station.TransitToLine, TransitToStation = station.TransitToStation
                });
            }

            var temp = Stations.OrderBy(s => s.Line).ToList();

            foreach (StationViewModel station in temp)
            {
                StationViewModel connected = null;
                if (station.ConnectedStationO.NextStation != null)
                {
                    connected = temp.Find(s => s.Name.Trim() == station.ConnectedStationO.NextStation.Trim());
                }

                if (connected != null)
                {
                    Brush lineColor = Brushes.Black;
                    if (station.Line == 1)
                    {
                        lineColor = Brushes.Red;
                    }
                    else if (station.Line == 2)
                    {
                        lineColor = Brushes.Green;
                    }
                    else if (station.Line == 3)
                    {
                        lineColor = Brushes.Blue;
                    }

                    if (station.CanvasBottom > connected.CanvasBottom & station.CanvasLeft > connected.CanvasLeft | station.CanvasBottom > connected.CanvasBottom & station.CanvasLeft < connected.CanvasLeft)
                    {
                        StationConnections.Add(new StationConnectionViewModel()
                        {
                            X1 = station.CanvasLeft + sc.MaxHeight / 2, X2 = connected.CanvasLeft + sc.MaxHeight / 2, Y1 = SystemParameters.WorkArea.Height - station.CanvasBottom, Y2 = SystemParameters.WorkArea.Height - connected.CanvasBottom, CanvasBottom = connected.CanvasBottom + (sc.MaxHeight / 2) - 2, LineColor = lineColor, NextStation = connected.Name
                        });
                    }
                    else if (station.CanvasBottom < connected.CanvasBottom & station.CanvasLeft < connected.CanvasLeft | station.CanvasBottom <connected.CanvasBottom& station.CanvasLeft> connected.CanvasLeft)
                    {
                        StationConnections.Add(new StationConnectionViewModel()
                        {
                            X1 = station.CanvasLeft + sc.MaxHeight / 2, X2 = connected.CanvasLeft + sc.MaxHeight / 2, Y1 = SystemParameters.WorkArea.Height - connected.CanvasBottom + (station.CanvasBottom - connected.CanvasBottom), Y2 = (SystemParameters.WorkArea.Height - connected.CanvasBottom) + (station.CanvasBottom - connected.CanvasBottom) * 2, CanvasBottom = station.CanvasBottom + (sc.MaxHeight / 2) - 2, LineColor = lineColor, NextStation = connected.Name
                        });
                    }
                }
            }
        }