Example #1
0
        public void CalculateLocation(int time)
        {
            // search event by current time
            int previousEventIndex  = -1;
            int followingEventIndex = -1;

            for (int i = 0; i < EventList.Count - 1; i++)
            {
                PassengerEvent e     = EventList[i];
                PassengerEvent nexte = EventList[i + 1];
                if (e.Time <= time && time <= nexte.Time)
                {
                    previousEventIndex  = i;
                    followingEventIndex = i + 1;
                    break;
                }
            }

            if (previousEventIndex == -1 || followingEventIndex == -1)
            {
                PassengerView.Location = new Point(0, 0);
                return;
            }

            PassengerEvent previousEvent  = EventList[previousEventIndex];
            PassengerEvent followingEvent = EventList[followingEventIndex];

            CurrentEvent = previousEvent;

            PassengerStatus status = PassengerStatus.PublicTrip;

            PassengerView.Location = CalculateLocationByEvent(previousEvent, followingEvent, time, ref status);
            PassengerView.Status   = status;
        }
Example #2
0
        private static void ReadPassenger(XElement passengerSetElement)
        {
            EntityData.PassengerDict = new Dictionary <string, PassengerPlot.Passenger>();

            foreach (XElement element in passengerSetElement.Elements("Passenger"))
            {
                Passenger pa = new PassengerPlot.Passenger()
                {
                    ID   = element.Attribute("ID").Value,
                    Name = element.Attribute("Name").Value
                };
                EntityData.PassengerDict.Add(pa.ID, pa);

                foreach (XElement eventElement in element.Element("EventList").Elements())
                {
                    PassengerEvent e = null;
                    switch (eventElement.Name.LocalName)
                    {
                    case "PassengerPrivateTripEvent":
                        PassengerPrivateTripEvent ept = new PassengerPrivateTripEvent()
                        {
                            Location = System.Windows.Point.Parse(eventElement.Attribute("Location").Value)
                        };
                        pa.EventList.Add(ept);
                        e = ept;
                        break;

                    case "PassengerActivityEvent":
                        PassengerActivityEvent ea = new PassengerActivityEvent()
                        {
                            ActivityName = eventElement.Attribute("ActivityName").Value,
                            Location     = System.Windows.Point.Parse(eventElement.Attribute("Location").Value)
                        };
                        pa.EventList.Add(ea);
                        e = ea;
                        break;

                    case "PassengerTripEvent":
                        PassengerTripEvent et = new PassengerTripEvent()
                        {
                            AttachedCarriage = EntityData.CarriageList[eventElement.Attribute("AttachedCarriageReferenceVehicleID").Value]
                        };
                        pa.EventList.Add(et);
                        e = et;
                        break;

                    default:
                        break;
                    }
                    e.Time     = Convert.ToInt32(eventElement.Attribute("Time").Value);
                    e.Type     = (PassengerEventTypes)Enum.Parse(typeof(PassengerEventTypes), eventElement.Attribute("Type").Value);
                    e.TripType = (TripTypes)Enum.Parse(typeof(TripTypes), eventElement.Attribute("TripType").Value);
                }
            }
        }
Example #3
0
        public Dictionary <int, Point> CalculateTrack()
        {
            Dictionary <int, Point> pointList = new Dictionary <int, Point>();

            for (int i = 0; i < EventList.Count - 1; i++)
            {
                PassengerEvent e = EventList[i];
                if (!pointList.ContainsKey(e.Time))
                {
                    pointList.Add(e.Time, CalculateEventLocation(e));
                }
            }
            return(pointList);
        }
Example #4
0
        private void AddPrivateTrip(Passenger passenger, PassengerEvent lastEvent, string lastStationName,
                                    PassengerEvent currentEvent, string currentStationName)
        {
            Point lastLocation;

            if (lastStationName == "-")
            {
                lastLocation = (lastEvent as PassengerActivityEvent).Location;
            }
            else
            {
                StopFacility lastF = StopFacilityNameDic[lastStationName];
                lastLocation = lastF.LinkedStation.Location;
            }

            Point currentLocation;

            if (currentStationName == "-")
            {
                currentLocation = (currentEvent as PassengerActivityEvent).Location;
            }
            else
            {
                StopFacility currentF = StopFacilityNameDic[currentStationName];
                currentLocation = currentF.LinkedStation.Location;
            }


            PassengerPrivateTripEvent e = new PassengerPrivateTripEvent()
            {
                Type     = PassengerEventTypes.TripStart,
                Time     = lastEvent.Time,
                Location = lastLocation
            };

            passenger.EventList.Add(e);

            e = new PassengerPlot.PassengerPrivateTripEvent()
            {
                Type     = PassengerEventTypes.TripEnd,
                Time     = currentEvent.Time,
                Location = currentLocation
            };
            passenger.EventList.Add(e);
        }
Example #5
0
        public Point CalculateLocationByEvent(PassengerEvent previousEvent, PassengerEvent followingEvent, int time, ref PassengerStatus status)
        {
            // On public trip
            if (previousEvent is PassengerTripEvent && followingEvent is PassengerTripEvent)
            {
                status = PassengerStatus.PublicTrip;
                return(((PassengerTripEvent)previousEvent).AttachedCarriage.CarriageView.Location);
            }

            // On private trip
            else if (previousEvent is PassengerPrivateTripEvent && followingEvent is PassengerPrivateTripEvent)
            {
                status = PassengerStatus.PrivateTrip;

                if (previousEvent == followingEvent)
                {
                    return(((PassengerPrivateTripEvent)previousEvent).Location);
                }

                double percentage       = Convert.ToDouble(time - previousEvent.Time) / (followingEvent.Time - previousEvent.Time);
                Point  previousLocation = ((PassengerPrivateTripEvent)previousEvent).Location;
                Point  currentLocation  = ((PassengerPrivateTripEvent)followingEvent).Location;

                double x = percentage * (currentLocation.X - previousLocation.X) + previousLocation.X;
                double y = percentage * (currentLocation.Y - previousLocation.Y) + previousLocation.Y;

                return(new Point(x, y));
            }

            // On activity
            else if (previousEvent is PassengerActivityEvent && followingEvent is PassengerActivityEvent)
            {
                status = PassengerStatus.Activity;
                return(((PassengerActivityEvent)previousEvent).Location);
            }

            // switch
            else
            {
                return(PassengerView.Location);
            }
        }
Example #6
0
 private Point CalculateEventLocation(PassengerEvent e)
 {
     if (e is PassengerActivityEvent)
     {
         return(((PassengerActivityEvent)e).Location);
     }
     else if (e is PassengerPrivateTripEvent)
     {
         return(((PassengerPrivateTripEvent)e).Location);
     }
     else if (e is PassengerTripEvent)
     {
         PassengerTripEvent pte = e as PassengerTripEvent;
         return(pte.AttachedCarriage.GetLocationByTime(e.Time));
     }
     else
     {
         return(new Point(-1, -1));
     }
 }
Example #7
0
        private void PresolvePassengerEventData(string directory)
        {
            System.IO.FileStream   fs = new System.IO.FileStream(directory + "output/1.seperatePersons.txt", System.IO.FileMode.Open);
            System.IO.StreamReader sr = new System.IO.StreamReader(fs);

            sr.ReadLine();
            string l = sr.ReadLine();

            PassengerEvent lastEvent         = null;
            string         lastStationName   = "";
            int            passengerSequence = 0;

            while (l != null && l.Trim() != "")
            {
                string[] data = l.Split('\t');

                if (data[5] == "pt interaction")
                {
                    l = sr.ReadLine();
                    continue;
                }

                Passenger passenger;
                if (!EntityData.PassengerDict.ContainsKey(data[1]))
                {
                    passenger = new PassengerPlot.Passenger()
                    {
                        ID   = data[1],
                        Name = (passengerSequence++).ToString()
                    };
                    EntityData.PassengerDict.Add(data[1], passenger);
                }
                else
                {
                    passenger = EntityData.PassengerDict[data[1]];
                }

                PassengerEvent currentEvent;

                if (data[4] == "actend" || data[4] == "actstart")
                {
                    currentEvent = AddActivityEvent(passenger, data[4], data[5], (int)Convert.ToDouble(data[2]));
                }
                else
                {
                    currentEvent = SearchCarriage(passenger, data[4], data[5], (int)Convert.ToDouble(data[2]));
                }


                if (lastEvent != null &&
                    lastEvent.Time != currentEvent.Time &&
                    (lastEvent.Type == PassengerEventTypes.ActivityEnd || lastEvent.Type == PassengerEventTypes.TripEnd) &&
                    (currentEvent.Type == PassengerEventTypes.ActivityStart || currentEvent.Type == PassengerEventTypes.TripStart))
                {
                    bool isOnPublicTrip = false;
                    if (lastEvent is PassengerTripEvent && currentEvent is PassengerTripEvent)
                    {
                        PassengerTripEvent lastPtEvent    = lastEvent as PassengerTripEvent;
                        PassengerTripEvent currentPtEvent = currentEvent as PassengerTripEvent;
                        if (lastPtEvent.AttachedCarriage.ID == currentPtEvent.AttachedCarriage.ID)
                        {
                            isOnPublicTrip = true;
                        }
                    }

                    if (!isOnPublicTrip)
                    {
                        AddPrivateTrip(passenger, lastEvent, lastStationName, currentEvent, data[6]);
                    }
                }

                lastStationName = data[6];
                passenger.EventList.Add(currentEvent);
                lastEvent = currentEvent;
                l         = sr.ReadLine();
            }

            sr.Close();
            fs.Close();
        }