public static void Render(Viewport viewport, Canvas canvas, IEnumerable<Tile<Image>> tiles) { if (viewport == null) return; canvas.Children.Clear(); var tileList = tiles.ToList(); for (int i = 0; i < tileList.Count; i++) { var tile = tileList[i]; if (tile.Image == null) continue; var point1 = viewport.WorldToScreen(tile.Info.Extent.MinX, tile.Info.Extent.MaxY); var point2 = viewport.WorldToScreen(tile.Info.Extent.MaxX, tile.Info.Extent.MinY); var dest = new Rect(point1.ToMetroPoint(), point2.ToMetroPoint()); dest = RoundToPixel(dest); Canvas.SetLeft(tile.Image, dest.X); Canvas.SetTop(tile.Image, dest.Y); tile.Image.Width = dest.Width; tile.Image.Height = dest.Height; canvas.Children.Add(tile.Image); if (tile.StartAnimation == default(long)) { tile.StartAnimation = DateTime.Now.Ticks; Animate(tile.Image, "Opacity", 0, 1, 600, (s, e) => { }); } } }
public static void PositionImage(Image image, Extent extent, Viewport viewport) { var min = viewport.WorldToScreen(extent.MinX, extent.MinY); var max = viewport.WorldToScreen(extent.MaxX, extent.MaxY); Canvas.SetLeft(image, min.X); Canvas.SetTop(image, max.Y); image.Width = max.X - min.X; image.Height = min.Y - max.Y; }