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; } }
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; }
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); } } }