Beispiel #1
0
        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;
        }
Beispiel #3
0
        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;
        }