/Main/src/DynamicDataDisplay/GenericChartPlotter.cs
C# | 121 lines | 102 code | 19 blank | 0 comment | 4 complexity | 34dfc646fe5b04c09a85fd09b61aa5f3 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Research.DynamicDataDisplay.Charts;
- using System.Windows;
- using Microsoft.Research.DynamicDataDisplay.Common;
-
- namespace Microsoft.Research.DynamicDataDisplay
- {
- public sealed class GenericChartPlotter<THorizontal, TVertical>
- {
- private readonly AxisBase<THorizontal> horizontalAxis;
- public AxisBase<THorizontal> HorizontalAxis
- {
- get { return horizontalAxis; }
- }
-
- private readonly AxisBase<TVertical> verticalAxis;
- public AxisBase<TVertical> VerticalAxis
- {
- get { return verticalAxis; }
- }
-
- private readonly ChartPlotter plotter;
- public ChartPlotter Plotter
- {
- get { return plotter; }
- }
-
- public Func<THorizontal, double> HorizontalToDoubleConverter
- {
- get { return horizontalAxis.ConvertToDouble; }
- }
-
- public Func<double, THorizontal> DoubleToHorizontalConverter
- {
- get { return horizontalAxis.ConvertFromDouble; }
- }
-
- public Func<TVertical, double> VerticalToDoubleConverter
- {
- get { return verticalAxis.ConvertToDouble; }
- }
-
- public Func<double, TVertical> DoubleToVerticalConverter
- {
- get { return verticalAxis.ConvertFromDouble; }
- }
-
- internal GenericChartPlotter(ChartPlotter plotter) : this(plotter, plotter.MainHorizontalAxis as AxisBase<THorizontal>, plotter.MainVerticalAxis as AxisBase<TVertical>) { }
-
- internal GenericChartPlotter(ChartPlotter plotter, AxisBase<THorizontal> horizontalAxis, AxisBase<TVertical> verticalAxis)
- {
- if (horizontalAxis == null)
- throw new ArgumentNullException(Strings.Exceptions.PlotterMainHorizontalAxisShouldNotBeNull);
- if (verticalAxis == null)
- throw new ArgumentNullException(Strings.Exceptions.PlotterMainVerticalAxisShouldNotBeNull);
-
- this.horizontalAxis = horizontalAxis;
- this.verticalAxis = verticalAxis;
-
- this.plotter = plotter;
- }
-
- public GenericRect<THorizontal, TVertical> ViewportRect
- {
- get
- {
- DataRect viewportRect = plotter.Viewport.Visible;
- return CreateGenericRect(viewportRect);
- }
- set
- {
- DataRect viewportRect = CreateRect(value);
- plotter.Viewport.Visible = viewportRect;
- }
- }
-
- public GenericRect<THorizontal, TVertical> DataRect
- {
- get
- {
- DataRect dataRect = plotter.Viewport.Visible.ViewportToData(plotter.Viewport.Transform);
- return CreateGenericRect(dataRect);
- }
- set
- {
- DataRect dataRect = CreateRect(value);
- plotter.Viewport.Visible = dataRect.DataToViewport(plotter.Viewport.Transform);
- }
- }
-
- private DataRect CreateRect(GenericRect<THorizontal, TVertical> value)
- {
- double xMin = HorizontalToDoubleConverter(value.XMin);
- double xMax = HorizontalToDoubleConverter(value.XMax);
- double yMin = VerticalToDoubleConverter(value.YMin);
- double yMax = VerticalToDoubleConverter(value.YMax);
-
- return new DataRect(new Point(xMin, yMin), new Point(xMax, yMax));
- }
-
- private GenericRect<THorizontal, TVertical> CreateGenericRect(DataRect rect)
- {
- double xMin = rect.XMin;
- double xMax = rect.XMax;
- double yMin = rect.YMin;
- double yMax = rect.YMax;
-
- GenericRect<THorizontal, TVertical> res = new GenericRect<THorizontal, TVertical>(
- DoubleToHorizontalConverter(xMin),
- DoubleToVerticalConverter(yMin),
- DoubleToHorizontalConverter(xMax),
- DoubleToVerticalConverter(yMax));
-
- return res;
- }
-
- }
- }