Exemplo n.º 1
0
        private void FindNearestItems(PointD position)
        {
            IEnumerable <ITileCoordinate <Tile> > result = TrackContent.Tiles.FindNearest(position, bottomLeft, topRight);

            if (result.First() != nearestGridTile)
            {
                nearestGridTile = result.First() as GridTile;
            }
            if (Scale < 1)
            {
                return;
            }
            double distance = double.MaxValue;

            foreach (TrackItemBase trackItem in TrackContent.TrackItems[nearestGridTile.Tile])
            {
                double itemDistance = trackItem.Location.DistanceSquared(position);
                if (itemDistance < distance)
                {
                    nearestTrackItem = trackItem;
                    distance         = itemDistance;
                }
            }
            distance = double.MaxValue;
            foreach (TrackSegment trackSegment in TrackContent.TrackSegments[nearestGridTile.Tile])
            {
                double itemDistance = position.DistanceToLineSegmentSquared(trackSegment.Location, trackSegment.Vector);
                if (itemDistance < distance)
                {
                    nearestTrackSegment = trackSegment;
                    distance            = itemDistance;
                }
            }
            distance = double.MaxValue;
            foreach (RoadSegment trackSegment in TrackContent.RoadSegments[nearestGridTile.Tile])
            {
                double itemDistance = position.DistanceToLineSegmentSquared(trackSegment.Location, trackSegment.Vector);
                if (itemDistance < distance)
                {
                    nearesRoadSegment = trackSegment;
                    distance          = itemDistance;
                }
            }
        }