protected virtual void OnTileLoaded(object sender, TileLoadResultEventArgs e) { if (e.Result == TileLoadResult.Success) { DataRect tileBounds = tileProvider.GetTileBounds(e.ID); bool containsInDrawn = drawnBounds.Contains(tileBounds) || drawnBounds.IsEmpty; bool shouldDraw = containsInDrawn && !invalidatePending && e.ID.Level <= tileProvider.Level; if (shouldDraw) { DrawImage(e.Image, tileBounds, e.ID); } } }
protected override void OnRender(DrawingContext drawingContext) { if (DesignerProperties.GetIsInDesignMode(this)) { return; } if (plotter == null) { return; } rendering = true; base.OnRender(drawingContext); var transform = plotter.Viewport.Transform; Rect output = plotter.Viewport.Output; DataRect visible = plotter.Viewport.Visible; visibleBounds = visible; var tileInfos = GetVisibleTiles(); //Debug.WriteLine(String.Format("OnRender: {0}", DateTime.Now.TimeOfDay.ToString())); var dc = drawingContext; var lowerTilesList = GetLoadedLowerTiles(tileInfos); // displaying lower tiles if (showLowerTiles) { foreach (var tileInfo in lowerTilesList) { var tile = tileInfo.Id; if (server.IsLoaded(tile)) { var bmp = server[tile]; DataRect visibleRect = tileProvider.GetTileBounds(tile); Rect screenRect = visibleRect.ViewportToScreen(transform); Rect enlargedRect = EnlargeRect(screenRect); dc.PushClip(tileInfo.Clip); dc.DrawImage(bmp, enlargedRect); dc.Pop(); //if (!visibleRect.IntersectsWith(visible)) //{ // dc.DrawRectangle(Brushes.Red, null, output); //} if (drawDebugBounds) { DrawDebugInfo(dc, enlargedRect, tile); } } else { server.BeginLoadImage(tile); } } } foreach (var tileInfo in tileInfos) { if (server.IsLoaded(tileInfo.Tile)) { var bmp = server[tileInfo.Tile]; Rect enlargedRect = EnlargeRect(tileInfo.ScreenBounds); drawingContext.DrawImage(bmp, enlargedRect); // drawing debug bounds if (drawDebugBounds) { DrawDebugInfo(drawingContext, tileInfo.ScreenBounds, tileInfo.Tile); } } else { server.BeginLoadImage(tileInfo.Tile); } } rendering = false; }
private void OnRender() { if (Plotter == null) { return; } if (DesignerProperties.GetIsInDesignMode(this)) { return; } if (rendering && !renderingPending) { Dispatcher.BeginInvoke(OnRender); return; } else if (rendering) { return; } rendering = true; renderingPending = false; ContentPanel.Children.Clear(); var transform = Plotter.Viewport.Transform; Rect output = Plotter.Viewport.Output; DataRect visible = Plotter.Viewport.Visible; var tileInfos = GetVisibleTiles(); var lowerTiles = GetLoadedLowerTiles(tileInfos); foreach (var tile in lowerTiles) { var id = tile.Id; if (TileSystem.IsLoaded(id)) { var bmp = TileSystem[id]; DataRect visibleRect = Transform(TileProvider.GetTileBounds(id)); Rect screenRect = visibleRect.DataToScreen(transform); DrawTile(bmp, screenRect, visibleRect, tile.Clip); } else { TileSystem.BeginLoadImage(id); } } foreach (var tileInfo in tileInfos) { if (TileSystem.IsLoaded(tileInfo.Tile)) { var bmp = TileSystem[tileInfo.Tile]; DrawTile(bmp, tileInfo.ScreenBounds, tileInfo.VisibleBounds, null); } else { TileSystem.BeginLoadImage(tileInfo.Tile); } } rendering = false; }