コード例 #1
0
        public Legend(Map map, ILegendFactory factory = null, ILegendSettings settings = null)
        {
            _map = map;
            _factory = factory ?? new LegendFactory();
            _settings = settings ?? new LegendSettings();

            //Regenerate();
        }
コード例 #2
0
        public Legend(Map map, ILegendFactory factory = null, ILegendSettings settings = null)
        {
            _map      = map;
            _factory  = factory ?? new LegendFactory();
            _settings = settings ?? new LegendSettings();

            //Regenerate();
        }
        private static Image CreateSymbolizerImage(ILegendFactory factory, ISymbolizer symbolizer)
        {
            var lif = factory[symbolizer];

            if (lif != null)
            {
                var item = lif.Create(null, symbolizer);
                return(item.Symbol);
            }
            return(null);
        }
        private static Image CreatePolygonSymbol(ILegendFactory factory, Size symbolSize, VectorStyle vs)
        {
            var res = new Bitmap(symbolSize.Width, symbolSize.Height);

            using (var g = Graphics.FromImage(res))
            {
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                if (vs.PolygonSymbolizer == null)
                {
                    var rect = new Rectangle(3, 3, symbolSize.Width - 6, symbolSize.Height - 6);
                    g.FillRectangle(vs.Fill, rect);
                    g.DrawRectangle(vs.Outline, rect);
                }
                else
                {
                    return(CreateSymbolizerImage(factory, vs.PolygonSymbolizer));
                }
            }
            return(res);
        }
        private static Image CreateLineSymbol(ILegendFactory legend, Size symbolSize, VectorStyle vs)
        {
            var res = new Bitmap(symbolSize.Width, symbolSize.Height);

            using (var g = Graphics.FromImage(res))
            {
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                if (vs.LineSymbolizer == null)
                {
                    var pts = new[] { new Point(2, symbolSize.Height - 4), new Point(symbolSize.Width / 3, symbolSize.Height / 2), new Point(symbolSize.Width / 2, symbolSize.Height / 2 + 1), new Point(symbolSize.Width - 4, 2) };
                    if (vs.EnableOutline)
                    {
                        g.DrawLines(vs.Outline, pts);
                    }
                    g.DrawLines(vs.Line, pts);
                }
                else
                {
                    return(CreateSymbolizerImage(legend, vs.LineSymbolizer));
                }
            }
            return(res);
        }
        private static Image CreatePointSymbol(ILegendFactory legend, Size symbolSize, VectorStyle vs)
        {
            var res = new System.Drawing.Bitmap(symbolSize.Width, symbolSize.Height);

            using (var g = Graphics.FromImage(res))
            {
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                if (vs.Symbol != null)
                {
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.DrawImage(vs.Symbol, new Rectangle(2, 2, symbolSize.Width - 4, symbolSize.Height - 4),
                                new Rectangle(0, 0, vs.Symbol.Width, vs.Symbol.Height), GraphicsUnit.Pixel);
                }
                else if (vs.PointColor != null && vs.PointColor != Brushes.Transparent)
                {
                    g.FillEllipse(vs.PointColor, new RectangleF(2, 2, symbolSize.Width - 4, symbolSize.Height - 4));
                }
                else
                {
                    return(CreateSymbolizerImage(legend, vs.PointSymbolizer));
                }
            }
            return(res);
        }
 protected virtual ILegendItem CreatePolygonalStyleLegendItem(ILegendFactory factory, ILegendSettings settings, VectorStyle vs)
 {
     return(new LegendItem {
         Symbol = CreatePolygonSymbol(factory, settings.SymbolSize, vs)
     });
 }