Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GrammaticalOptimization/DynamicDataDisplay/Charts/Isolines/AdditionalLinesDisplay.cs @ 12747

Last change on this file since 12747 was 12503, checked in by aballeit, 10 years ago

#2283 added GUI and charts; fixed MCTS

File size: 2.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows.Media;
6using System.Windows;
7using Microsoft.Research.DynamicDataDisplay.Common.Auxiliary;
8using Microsoft.Research.DynamicDataDisplay.Charts.NewLine;
9
10namespace Microsoft.Research.DynamicDataDisplay.Charts.Isolines
11{
12  public sealed class AdditionalLinesDisplay : IsolineGraphBase
13  {
14    protected override void OnPlotterAttached()
15    {
16      base.OnPlotterAttached();
17
18      Plotter2D.Viewport.PropertyChanged += Viewport_PropertyChanged;
19    }
20
21    protected override void OnPlotterDetaching()
22    {
23      Plotter2D.Viewport.PropertyChanged -= Viewport_PropertyChanged;
24
25      base.OnPlotterDetaching();
26    }
27
28    void Viewport_PropertyChanged(object sender, ExtendedPropertyChangedEventArgs e)
29    {
30      InvalidateVisual();
31    }
32
33    protected override void OnRender(DrawingContext drawingContext)
34    {
35      if (Plotter2D == null) return;
36      if (DataSource == null) return;
37      if (Collection == null) return;
38      if (Collection.Lines.Count == 0)
39      {
40        IsolineBuilder.DataSource = DataSource;
41      }
42
43      var dc = drawingContext;
44      var dataSource = DataSource;
45      var localMinMax = dataSource.GetMinMax();
46      var globalMinMax = dataSource.Range.Value;
47      double lengthsRatio = globalMinMax.GetLength() / localMinMax.GetLength();
48
49      if (lengthsRatio > 16)
50      {
51        double log = Math.Round(Math.Log(lengthsRatio, 2));
52        double number = 2 * Math.Pow(2, log);
53        double delta = globalMinMax.GetLength() / number;
54
55        double start = Math.Floor((localMinMax.Min - globalMinMax.Min) / delta) * delta + globalMinMax.Min;
56        double end = localMinMax.Max;
57
58        var transform = Plotter2D.Transform;
59        var strokeThickness = StrokeThickness;
60
61        double x = start;
62        while (x < end)
63        {
64          var collection = IsolineBuilder.BuildIsoline(x);
65
66          foreach (LevelLine line in collection)
67          {
68            StreamGeometry lineGeometry = new StreamGeometry();
69            using (var context = lineGeometry.Open())
70            {
71              context.BeginFigure(line.StartPoint.ViewportToScreen(transform), false, false);
72              context.PolyLineTo(line.OtherPoints.ViewportToScreen(transform).ToArray(), true, true);
73            }
74            lineGeometry.Freeze();
75
76            var paletteRatio = (line.RealValue - globalMinMax.Min) / globalMinMax.GetLength();
77            Pen pen = new Pen(new SolidColorBrush(Palette.GetColor(paletteRatio)), strokeThickness);
78
79            dc.DrawGeometry(null, pen, lineGeometry);
80          }
81
82          x += delta;
83        }
84      }
85      //dc.DrawRectangle(Brushes.Green.MakeTransparent(0.3), null, new Rect(RenderSize));
86    }
87  }
88}
Note: See TracBrowser for help on using the repository browser.