[13072] | 1 | using System.Drawing.Drawing2D;
|
---|
| 2 | using SharpMap;
|
---|
| 3 | using SharpMap.Rendering.Decoration;
|
---|
| 4 | using System;
|
---|
| 5 | using System.Drawing;
|
---|
| 6 |
|
---|
| 7 | using System.Globalization;
|
---|
| 8 |
|
---|
| 9 |
|
---|
| 10 | namespace HeuristicLab.BioBoost.Views.MapViews {
|
---|
| 11 | public class GradientLegend : MapDecoration {
|
---|
| 12 | public Size Size { get; set; }
|
---|
| 13 | public double MinValue { get; set; }
|
---|
| 14 | public double MaxValue { get; set; }
|
---|
| 15 | public ColorBlend ColorBlend { get; set; }
|
---|
| 16 | public Point Offset { get; set; }
|
---|
| 17 | public Font Font { get; set; }
|
---|
| 18 | public String Unit { get; set; }
|
---|
| 19 |
|
---|
| 20 | public GradientLegend() {
|
---|
| 21 | Size = new Size(150, 20);
|
---|
| 22 | Anchor = MapDecorationAnchor.LeftBottom;
|
---|
| 23 | MinValue = 0;
|
---|
| 24 | MaxValue = 1;
|
---|
| 25 | Offset = new Point(10, 10);
|
---|
| 26 | // color blend does not match the gradient legend exactly
|
---|
| 27 | /*
|
---|
| 28 | ColorBlend = new ColorBlend {
|
---|
| 29 | Colors = new[] {
|
---|
| 30 | Color.FromArgb(0, 0, 127),
|
---|
| 31 | Color.FromArgb(0, 0, 255),
|
---|
| 32 | Color.FromArgb(0, 255, 255),
|
---|
| 33 | Color.FromArgb(0, 255, 0),
|
---|
| 34 | Color.FromArgb(127, 255, 0),
|
---|
| 35 | Color.FromArgb(255, 255, 0),
|
---|
| 36 | Color.FromArgb(255, 127, 0),
|
---|
| 37 | Color.FromArgb(255, 0, 0),
|
---|
| 38 | Color.FromArgb(127, 0, 0)},
|
---|
| 39 | Positions = new[] { 0.0f, 0.125f, 0.25f, 0.375f, 0.5f, 0.625f, 0.75f, 0.875f, 1f }
|
---|
| 40 | };
|
---|
| 41 | */
|
---|
| 42 | // GradientLegend uses ColorBlend from System.Drawing and we need to convert it to a SharpMap colorblend here
|
---|
| 43 | ColorBlend = new ColorBlend() {
|
---|
| 44 | Colors = LazyValueLayerGenerator.DefaultColorBlend.Colors,
|
---|
| 45 | Positions = LazyValueLayerGenerator.DefaultColorBlend.Positions
|
---|
| 46 | };
|
---|
| 47 | Font = (Font)SystemFonts.DefaultFont.Clone();
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | protected override Size InternalSize(Graphics g, Map map) {
|
---|
| 51 | return new Size(Size.Width + Offset.X + 4, Size.Height + Offset.Y + 3);
|
---|
| 52 | }
|
---|
| 53 |
|
---|
| 54 | protected override void OnRender(Graphics g, Map map) {
|
---|
| 55 | var pos = new PointF(g.ClipBounds.Left + Offset.X, g.ClipBounds.Bottom - Offset.Y - Size.Height);
|
---|
| 56 | var brush = new System.Drawing.Drawing2D.LinearGradientBrush(pos, new PointF(pos.X + Size.Width, pos.Y), Color.Black, Color.Black) {
|
---|
| 57 | InterpolationColors = ColorBlend
|
---|
| 58 | };
|
---|
| 59 | g.FillRectangle(new SolidBrush(Color.FromArgb(127, 255, 255, 255)),
|
---|
| 60 | pos.X - 1, pos.Y - 1, Size.Width + 3, Size.Height + 2);
|
---|
| 61 | var minStr = MinValue.ToString(CultureInfo.InvariantCulture);
|
---|
| 62 | var maxStr = MaxValue.ToString("G4", CultureInfo.InvariantCulture);
|
---|
| 63 | if (!String.IsNullOrEmpty(Unit)) maxStr += " " + Unit;
|
---|
| 64 | var minDim = g.MeasureString(minStr, Font);
|
---|
| 65 | var maxDim = g.MeasureString(maxStr, Font);
|
---|
| 66 | var textHeight = Math.Min(minDim.Height, maxDim.Height);
|
---|
| 67 | g.FillRectangle(brush, pos.X, pos.Y + textHeight, Size.Width, Size.Height - textHeight - 2);
|
---|
| 68 | g.DrawString(minStr, Font, Brushes.Black, pos.X, pos.Y);
|
---|
| 69 | g.DrawString(maxStr, Font, Brushes.Black, pos.X + Size.Width - maxDim.Width - 2, pos.Y);
|
---|
| 70 | g.DrawLine(Pens.Black, pos.X, pos.Y, pos.X, pos.Y + Size.Height);
|
---|
| 71 | g.DrawLine(Pens.Black, pos.X + Size.Width, pos.Y, pos.X + Size.Width, pos.Y + Size.Height);
|
---|
| 72 |
|
---|
| 73 | g.DrawLine(Pens.Black, pos.X + Size.Width / 4, pos.Y + textHeight, pos.X + Size.Width / 4, pos.Y + Size.Height);
|
---|
| 74 | g.DrawLine(Pens.Black, pos.X + Size.Width / 2, pos.Y + textHeight / 2, pos.X + Size.Width / 2, pos.Y + Size.Height);
|
---|
| 75 | g.DrawLine(Pens.Black, pos.X + Size.Width / 4 * 3, pos.Y + textHeight, pos.X + Size.Width / 4 * 3, pos.Y + Size.Height);
|
---|
| 76 | }
|
---|
| 77 |
|
---|
| 78 | }
|
---|
| 79 | }
|
---|