예제 #1
0
 internal void Update(DISP_Car car, VmPolyline zone, MovedLocationCollection routeOpacited)
 {
     if (!car.Equals(SelectedCar))
     {
         SelectedCar = car;
     }
     Application.Current.Dispatcher.BeginInvoke(new Action(() => CarsInOut.Clear()));
     foreach (var location in routeOpacited)
     {
         var inzone = CalcLeavingZone.Instance.FillContains(location, zone.MovedLocations);
         if (_findError)
         {
             if (inzone)
             {
                 continue;
             }
             AddCarToErrorLog(car, zone, location.Dates);
             _findError = false;
         }
         else
         {
             if (!inzone)
             {
                 continue;
             }
             AddBackCarToErrorLog(car, zone, location.Dates);
             _findError = true;
         }
     }
 }
예제 #2
0
        public bool FillContains(Location point, MovedLocationCollection geometry)
        {
            Point Position = Transform(point);

            var Points = geometry.Select(l => new
            {
                X    = Transform(l).X - Position.X,
                Y    = Position.Y - Transform(l).Y,
                atan = Math.Atan2(Position.Y - Transform(l).Y, Transform(l).X - Position.X)
            }).ToList();

            Points.Add(Points[0]);

            double result = 0;

            for (int i = 0; i < Points.Count() - 1; i++)
            {
                double atan = Points[i].atan - Points[i + 1].atan;
                if (Math.Abs(atan) > Math.PI)
                {
                    atan -= Math.PI * Math.Sign(atan);
                }

                result += atan;
            }
            return(Math.Abs(result) > 1);
        }
예제 #3
0
        public VmPolyline(int id, string name, string coordinate)
        {
            this.ID   = id;
            this.Name = name;
            if (string.IsNullOrEmpty(coordinate))
            {
                return;
            }
            MovedLocationCollection coord = MovedLocationCollection.Parse(coordinate);

            if (coord.Count <= 0)
            {
                return;
            }
            foreach (var el in coord)
            {
                AddLocation(el, false);
            }
        }