private void RenderFeature(IViewport viewport, IStyle style, IFeature feature) { var vectorStyle = style as VectorStyle; if (feature.Geometry is Point) { GdiGeometryRenderer.DrawPoint(Graphics, (Point)feature.Geometry, vectorStyle, viewport); } else if (feature.Geometry is MultiPoint) { GdiGeometryRenderer.DrawMultiPoint(Graphics, (MultiPoint)feature.Geometry, vectorStyle, viewport); } else if (feature.Geometry is LineString) { GdiGeometryRenderer.DrawLineString(Graphics, (LineString)feature.Geometry, vectorStyle.Line.ToBitmap(), viewport); } else if (feature.Geometry is MultiLineString) { GdiGeometryRenderer.DrawMultiLineString(Graphics, (MultiLineString)feature.Geometry, vectorStyle.Line.ToBitmap(), viewport); } else if (feature.Geometry is Polygon) { GdiGeometryRenderer.DrawPolygon(Graphics, (Polygon)feature.Geometry, vectorStyle.Fill.ToBitmap(), vectorStyle.Outline.ToBitmap(), viewport); } else if (feature.Geometry is MultiPolygon) { GdiGeometryRenderer.DrawMultiPolygon(Graphics, (MultiPolygon)feature.Geometry, vectorStyle.Fill.ToBitmap(), vectorStyle.Outline.ToBitmap(), viewport); } else if (feature.Geometry is IRaster) { GdiGeometryRenderer.DrawRaster(Graphics, feature.Geometry, vectorStyle, viewport); } }
private static void RenderGeometry(Graphics graphics, IViewport viewport, IFeature feature, VectorStyle style) { if (feature.Geometry is Point) { GdiGeometryRenderer.DrawPoint(graphics, (Point)feature.Geometry, style, viewport); } else if (feature.Geometry is MultiPoint) { GdiGeometryRenderer.DrawMultiPoint(graphics, (MultiPoint)feature.Geometry, style, viewport); } else if (feature.Geometry is LineString) { GdiGeometryRenderer.DrawLineString(graphics, (LineString)feature.Geometry, style.Line.ToBitmap(), viewport); } else if (feature.Geometry is MultiLineString) { GdiGeometryRenderer.DrawMultiLineString(graphics, (MultiLineString)feature.Geometry, style.Line.ToBitmap(), viewport); } else if (feature.Geometry is Polygon) { GdiGeometryRenderer.DrawPolygon(graphics, (Polygon)feature.Geometry, style.Fill.ToBitmap(), style.Outline.ToBitmap(), viewport); } else if (feature.Geometry is MultiPolygon) { GdiGeometryRenderer.DrawMultiPolygon(graphics, (MultiPolygon)feature.Geometry, style.Fill.ToBitmap(), style.Outline.ToBitmap(), viewport); } else if (feature.Geometry is IRaster) { GdiGeometryRenderer.DrawRaster(graphics, feature.Geometry, style, viewport); } }
private static void RenderLayer(Graphics graphics, IViewport viewport, ILayer layer) { graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; var layerStyles = BaseLayer.GetLayerStyles(layer); foreach (var layerStyle in layerStyles) { 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 (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 (layerStyle is IThemeStyle) { style = (layerStyle as IThemeStyle).GetStyle(feature); } RenderGeometry(graphics, viewport, feature, style as VectorStyle); } } }
public static void Render(Graphics g, IViewport viewport, LabelLayer labelLayer) { var layerStyles = BaseLayer.GetLayerStyles(labelLayer); foreach (var layerStyle in layerStyles) { if (layerStyle.Enabled && labelLayer.MaxVisible >= viewport.Resolution && labelLayer.MinVisible < viewport.Resolution) { if (labelLayer.DataSource == null) { throw (new ApplicationException("DataSource property not set")); } g.SmoothingMode = SmoothingMode.AntiAlias; var features = labelLayer.GetFeaturesInView(viewport.Extent, viewport.Resolution); //Initialize label collection var labels = new List <Label>(); var style = layerStyle as LabelStyle; //List<System.Drawing.Rectangle> LabelBoxes; //Used for collision detection //Render labels foreach (IFeature feature in features) { if (layerStyle is IThemeStyle) { style = (layerStyle as IThemeStyle).GetStyle(feature) as LabelStyle; } float rotation = 0; if (!String.IsNullOrEmpty(labelLayer.RotationColumn)) { rotation = float.Parse(feature[labelLayer.RotationColumn].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture); } int priority = labelLayer.Priority; if (labelLayer.PriorityDelegate != null) { priority = labelLayer.PriorityDelegate(feature); } else if (!String.IsNullOrEmpty(labelLayer.PriorityColumn)) { priority = int.Parse(feature[labelLayer.PriorityColumn].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture); } string text; if (labelLayer.LabelStringDelegate != null) { text = labelLayer.LabelStringDelegate(feature); } else { text = feature[labelLayer.LabelColumn].ToString(); } if (!string.IsNullOrEmpty(text)) { if (feature.Geometry is GeometryCollection) { var geometryCollection = feature.Geometry as GeometryCollection; if (labelLayer.MultipartGeometryBehaviour == LabelLayer.MultipartGeometryBehaviourEnum.All) { foreach (var geometry in geometryCollection) { var label = CreateLabel(geometry, text, rotation, priority, style, viewport, g); if (label != null) { labels.Add(label); } } } else if (labelLayer.MultipartGeometryBehaviour == LabelLayer.MultipartGeometryBehaviourEnum.CommonCenter) { var label = CreateLabel(feature.Geometry, text, rotation, priority, style, viewport, g); if (label != null) { labels.Add(label); } } else if (labelLayer.MultipartGeometryBehaviour == LabelLayer.MultipartGeometryBehaviourEnum.First) { if ((feature.Geometry as GeometryCollection).Collection.Count > 0) { Label label = CreateLabel(geometryCollection.Collection[0], text, rotation, 0, style, viewport, g); if (label != null) { labels.Add(label); } } } else if (labelLayer.MultipartGeometryBehaviour == LabelLayer.MultipartGeometryBehaviourEnum.Largest) { var coll = (feature.Geometry as GeometryCollection); if (coll.NumGeometries > 0) { double largestVal = 0; int idxOfLargest = 0; for (var j = 0; j < coll.NumGeometries; j++) { Geometry geom = coll.Geometry(j); if (geom is LineString && ((LineString)geom).Length > largestVal) { largestVal = ((LineString)geom).Length; idxOfLargest = j; } if (geom is MultiLineString && ((MultiLineString)geom).Length > largestVal) { largestVal = ((MultiLineString)geom).Length; idxOfLargest = j; } if (geom is Polygon && ((Polygon)geom).Area > largestVal) { largestVal = ((Polygon)geom).Area; idxOfLargest = j; } if (geom is MultiPolygon && ((MultiPolygon)geom).Area > largestVal) { largestVal = ((MultiPolygon)geom).Area; idxOfLargest = j; } } var label = CreateLabel(coll.Geometry(idxOfLargest), text, rotation, priority, style, viewport, g); if (label != null) { labels.Add(label); } } } } else { var label = CreateLabel(feature.Geometry, text, rotation, priority, style, viewport, g); if (label != null) { labels.Add(label); } } } } if (labels.Count > 0) //We have labels to render... { if ((layerStyle is LabelStyle) && (layerStyle as LabelStyle).CollisionDetection && labelLayer.LabelFilter != null) { labelLayer.LabelFilter(labels); } foreach (Label label in labels) { if (!label.Show) { continue; } GdiGeometryRenderer.DrawLabel(g, label.LabelPoint, label.Style.Offset, label.Style.Font, label.Style.ForeColor, label.Style.BackColor, label.Halo, label.Rotation, label.Text, viewport); } } } } }