Example #1
0
        public static void Render(Graphics graphics, IViewport viewport, Map map, AbortRenderDelegate abortRender)
        {
            foreach (var layer in map.Layers)
            {
                if (layer.Enabled &&
                    layer.MinVisible <= viewport.Resolution &&
                    layer.MaxVisible >= viewport.Resolution)
                {
                    if (layer is LabelLayer)
                    {
                        //!!!GdiLabelRenderer.Render(graphics, view, layer as LabelLayer);
                    }
                    else if (layer is ITileLayer)
                    {
                        var tileLayer = (layer as ITileLayer);
                        GdiTileRenderer.Render(graphics, tileLayer.Schema, viewport, tileLayer.MemoryCache);
                    }
                    else
                    {
                        RenderLayer(graphics, viewport, layer, abortRender);
                    }
                }

                if (abortRender != null && abortRender())
                {
                    return;
                }
            }
        }
 public static void Render(Graphics graphics, IViewport viewport, Map map, AbortRenderDelegate abortRender)
 {
     foreach (var layer in map.Layers)
     {
         if (layer.Enabled &&
             layer.MinVisible <= viewport.Resolution &&
             layer.MaxVisible >= viewport.Resolution)
         {
             if (layer is LabelLayer)
             {
                 //!!!GdiLabelRenderer.Render(graphics, view, layer as LabelLayer);
             }
             else if (layer is ITileLayer)
             {
                 var tileLayer = (layer as ITileLayer);
                 GdiTileRenderer.Render(graphics, tileLayer.Schema, viewport, tileLayer.MemoryCache);
             }
             else
             {
                 RenderLayer(graphics, viewport, layer, abortRender);
             }
         }
         
         if (abortRender != null && abortRender()) return; 
     }
 }
Example #3
0
        private void Render(bool IsPreview)
        {
            _Abort = false;

            ToggleControls(!IsPreview, true, IsPreview);
            SetStatus("Initializing...");
            IRenderer Renderer = null;

            // *** Set up renderer config
            _RenderingConfig.IsPreview       = IsPreview;
            _RenderingConfig.Chunks          = _World.GetChunkManager(_RenderingConfig.Dimension);
            _RenderingConfig.Palette         = new BlockPalette();
            _RenderingConfig.RenderSubregion = cbCropMap.Checked;
            _RenderingConfig.MaxThreads      = cbMultithread.Checked ? (int)nudThreads.Value : 1;

            // ReSharper disable once InconsistentlySynchronizedField
            // *** This section of code is run before the parallel processing begins, so there is no danger of sync issues.
            _SkipErrors.Clear();

            if (IsPreview)
            {
                _RenderingConfig.RenderSubregion = true;
                _RenderingConfig.SubregionChunks = new Rectangle(-15, -15, 31, 31);
            }
            else if (_RenderingConfig.RenderSubregion)
            {
                _RenderingConfig.SubregionChunks = new Rectangle((int)nudXMin.Value, (int)nudZMin.Value, (int)nudXMax.Value - (int)nudXMin.Value + 1, (int)nudZMax.Value - (int)nudZMin.Value + 1);
            }
            else
            {
                _RenderingConfig.SubregionChunks = new Rectangle(_RenderingConfig.Metrics.MinX, _RenderingConfig.Metrics.MinZ, _RenderingConfig.Metrics.MaxX - _RenderingConfig.Metrics.MinX, _RenderingConfig.Metrics.MaxZ - _RenderingConfig.Metrics.MinZ);
            }

            if (_Abort)
            {
                goto Cleanup;
            }

            foreach (DataGridViewRow Row in dgPalettes.Rows)
            {
                ((PaletteFile)Row.Tag).Selected = (bool)Row.Cells[0].Value;
            }


            // *** Set up palettes
            foreach (String Palette in from PaletteFile File in PaletteManager.Instance().AllPalettes where File.Selected select File.PalettePath)
            {
                try
                {
                    _RenderingConfig.Palette.LoadPalette(Palette);
                }
                catch (BlockPalette.PaletteExecutionException Ex)
                {
                    MessageBox.Show(string.Format("The palette file {0} is invalid and will be skipped:\r\n{1}", Path.GetFileName(Palette), Ex.Message), "Palette Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    PaletteManager.Instance().AllPalettes.First(x => x.PalettePath == Palette).Selected = false;
                }
            }

            if (_Abort)
            {
                goto Cleanup;
            }

            UpdatePaletteSelection();

            _RenderingConfig.Palette.AssembleLookupTables();

            // *** Initialize renderer
            Renderer = RendererManager.Instance().InstantiateRenderer((_SelectedRenderer).RendererName);

            Renderer.ProgressUpdate += DoUpdate;
            Renderer.RenderError    += HandleError;

            Renderer.Configure(_RenderingConfig);
            Renderer.Initialize();

            _AbortRender = Renderer.Abort;

            // *** Render
            if (IsPreview)
            {
                pbPreview.Image = Renderer.Preview();
            }
            else
            {
                Renderer.Render();
            }


Cleanup:

            // *** Clean up
            if (Renderer != null)
            {
                Renderer.ProgressUpdate -= DoUpdate;
                Renderer.RenderError    -= HandleError;
            }

            ToggleControls(false, _World != null, false);
            SetStatus(_Abort ? "Aborted" : "Finished", "Render " + (_Abort ? "Aborted" : "Finished"));
            SetProgress(0);
            _AbortRender = null;
            _Abort       = false;
        }
Example #4
0
        private static void RenderLayer(Graphics graphics, IViewport viewport, ILayer layer, AbortRenderDelegate abortRender)
        {
            int       counter = 0;
            const int step    = 100;

            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            foreach (var layerStyle in layer.Styles)
            {
                var style = layerStyle;

                var features = layer.GetFeaturesInView(viewport.Extent, viewport.Resolution);

                //Linestring outlines is drawn by drawing the layer once with a thicker line
                //before drawing the "inline" on top.
                var enumerable = features as IList <IFeature> ?? features.ToList();
                foreach (var feature in enumerable)
                {
                    if ((counter++ % step == 0) && abortRender != null && abortRender())
                    {
                        return;
                    }
                    if (layerStyle is IThemeStyle)
                    {
                        style = (layerStyle as IThemeStyle).GetStyle(feature);
                    }

                    if ((style is VectorStyle) && ((style as VectorStyle).Outline != null))
                    {
                        GdiGeometryRenderer.RenderGeometryOutline(graphics, viewport, feature.Geometry, style as VectorStyle);
                    }
                }

                foreach (var feature in enumerable)
                {
                    if ((counter++ % step == 0) && abortRender != null && abortRender())
                    {
                        return;
                    }
                    if (layerStyle is IThemeStyle)
                    {
                        style = (layerStyle as IThemeStyle).GetStyle(feature);
                    }
                    RenderGeometry(graphics, viewport, feature.Geometry, style as VectorStyle);
                }
            }
        }
        private static void RenderLayer(Graphics graphics, IViewport viewport, ILayer layer, AbortRenderDelegate abortRender)
        {
            int counter = 0;
            const int step = 100;

            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            foreach (var layerStyle in layer.Styles)
            {
                var style = layerStyle;

                var features = layer.GetFeaturesInView(viewport.Extent, viewport.Resolution);

                //Linestring outlines is drawn by drawing the layer once with a thicker line
                //before drawing the "inline" on top.
                var enumerable = features as IList<IFeature> ?? features.ToList();
                foreach (var feature in enumerable)
                {
                    if ((counter++ % step == 0) && abortRender != null && abortRender()) return;
                    if (layerStyle is IThemeStyle) style = (layerStyle as IThemeStyle).GetStyle(feature);

                    if ((style is VectorStyle) && ((style as VectorStyle).Outline != null))
                    {
                        GdiGeometryRenderer.RenderGeometryOutline(graphics, viewport, feature.Geometry, style as VectorStyle);
                    }
                }

                foreach (var feature in enumerable)
                {
                    if ((counter++ % step == 0) && abortRender != null && abortRender()) return;
                    if (layerStyle is IThemeStyle) style = (layerStyle as IThemeStyle).GetStyle(feature);
                    RenderGeometry(graphics, viewport, feature.Geometry, style as VectorStyle);
                }
            }
        }