Example #1
0
 private static TilePair EnclosingTile(PixelPair pixel)
 {
     int tilex, tiley;
     TileSystem.PixelXYToTileXY(pixel.X, pixel.Y, out tilex, out tiley);
     return new TilePair(tilex, tiley);
 }
Example #2
0
        private static void ScaleTile(TilePair nw, TilePair se, int lod, int targetlod, out PixelPair pixnw, out PixelPair pixse)
        {
            se.X++;
            se.Y++;

            var diff = targetlod - lod;
            var factor = Math.Pow(2.0, diff);

            var targetnw = new TilePair((int)(nw.X * factor), (int)(nw.Y * factor));
            var targetse = new TilePair((int)(se.X * factor), (int)(se.Y * factor));

            if (targetnw.X == targetse.X) targetse.X++;
            if (targetnw.Y == targetse.Y) targetse.Y++;

            if (diff < 0) {
                if (targetse.X * (1.0 / factor) < se.X) targetse.X++;
                if (targetse.Y * (1.0 / factor) < se.Y) targetse.Y++;
            }

            pixnw = Pixel(targetnw);
            pixse = Pixel(targetse);
        }
Example #3
0
        public Point? GetScreenPosition(PixelPair pixel)
        {
            if (!this.IsScreenPositionInferred()) return null;

            return new Point(pixel.X - this.PixelNW.X, pixel.Y - this.PixelNW.Y);
        }
Example #4
0
 public TilePair GetEnclosingTile(PixelPair pixel)
 {
     return EnclosingTile(pixel);
 }
Example #5
0
        public Point? GetClippedScreenPosition(PixelPair pixel)
        {
            if (!this.IsScreenPositionInferred()) return null;

            int x;
            if (this.PixelNW.X > pixel.X)
                x = 0;
            else if (pixel.X > this.PixelSE.X)
                x = this.PixelSE.X - this.PixelNW.X;
            else
                x = pixel.X - this.PixelNW.X;

            int y;
            if (this.PixelNW.Y > pixel.Y)
                y = 0;
            else if (pixel.Y > this.PixelSE.Y)
                y = this.PixelSE.Y - this.PixelNW.Y;
            else
                y = pixel.Y - this.PixelNW.Y;

            return new Point(x, y);
        }
Example #6
0
        public static IEnumerable<TilePair> IterateTiles(PixelPair nw, PixelPair se, int lod)
        {
            var mapwidth = TileSystem.MapSize(lod);
            var boundx = se.X;
            if (nw.X > boundx)
                boundx += (int)mapwidth;

            for (int x = nw.X; x < boundx; x += TILESIZE) {
                for (int y = nw.Y; y < se.Y; y += TILESIZE) {
                    var actualx = x % (int)mapwidth;
                    yield return EnclosingTile(new PixelPair(actualx, y));
                }
            }
        }
Example #7
0
        public static int CountTiles(PixelPair nw, PixelPair se, int lod)
        {
            var mapwidth = TileSystem.MapSize(lod);
            var boundx = se.X;
            if (nw.X > boundx)
                boundx += (int)mapwidth;

            int countx = (boundx - nw.X + TILESIZE - 1) / TILESIZE;
            int county = (se.Y - nw.Y + TILESIZE - 1) / TILESIZE;
            return countx * county;
        }