Files
DynamicDataDisplay/Backup/Plotter2DExtensions.cs
2024-02-23 09:29:44 -05:00

250 lines
8.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Research.DynamicDataDisplay.DataSources;
using System.Windows.Media;
using Microsoft.Research.DynamicDataDisplay.PointMarkers;
using Microsoft.Research.DynamicDataDisplay.Filters;
using System.Diagnostics.CodeAnalysis;
using Microsoft.Research.DynamicDataDisplay.Charts;
namespace Microsoft.Research.DynamicDataDisplay
{
/// <summary>
/// Extensions for <see cref="Plotter2D"/> - simplified methods to add line and marker charts.
/// </summary>
public static class Plotter2DExtensions
{
#region Line graphs
/// <summary>Adds one dimensional graph with random color of line.</summary>
/// <param name="pointSource">The point source.</param>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource)
{
return AddLineGraph(plotter, pointSource, ColorHelper.CreateRandomHsbColor());
}
/// <summary>
/// Adds one dimensional graph with specified color of line.
/// </summary>
/// <param name="pointSource">The point source.</param>
/// <param name="lineColor">Color of the line.</param>
/// <returns></returns>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, Color lineColor)
{
return AddLineGraph(plotter, pointSource, lineColor, 1);
}
/// <summary>
/// Adds one dimensional graph with random color if line.
/// </summary>
/// <param name="pointSource">The point source.</param>
/// <param name="lineThickness">The line thickness.</param>
/// <returns></returns>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, double lineThickness)
{
return AddLineGraph(plotter, pointSource, ColorHelper.CreateRandomHsbColor(), lineThickness);
}
/// <summary>
/// Adds one dimensional graph.
/// </summary>
/// <param name="pointSource">The point source.</param>
/// <param name="lineColor">Color of the line.</param>
/// <param name="lineThickness">The line thickness.</param>
/// <param name="description">Description of data</param>
/// <returns></returns>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, Color lineColor, double lineThickness,
string description)
{
return AddLineGraph(plotter, pointSource, new Pen(new SolidColorBrush(lineColor), lineThickness), new PenDescription(description));
}
/// <summary>
/// Adds one dimensional graph.
/// </summary>
/// <param name="pointSource">The point source.</param>
/// <param name="lineColor">Color of the line.</param>
/// <param name="lineThickness">The line thickness.</param>
/// <returns></returns>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, Color lineColor, double lineThickness)
{
return AddLineGraph(plotter, pointSource, new Pen(new SolidColorBrush(lineColor), lineThickness), null);
}
/// <summary>
/// Adds one dimensional graph.
/// </summary>
/// <param name="pointSource">The point source.</param>
/// <param name="description">The description.</param>
/// <returns></returns>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, string description)
{
LineGraph graph = AddLineGraph(plotter, pointSource);
graph.Description = new PenDescription(description);
NewLegend.SetDescription(graph, description);
return graph;
}
/// <summary>
/// Adds one dimensional graph.
/// </summary>
/// <param name="pointSource">The point source.</param>
/// <param name="lineThickness">The line thickness.</param>
/// <param name="description">The description.</param>
/// <returns></returns>
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, double lineThickness, string description)
{
var res = AddLineGraph(plotter, pointSource,
new Pen(new SolidColorBrush(ColorHelper.CreateRandomHsbColor()), lineThickness),
(PointMarker)null,
new PenDescription(description));
return res.LineGraph;
}
/// <summary>Adds one dimensional graph to plotter. This method allows you to specify
/// as much graph parameters as possible</summary>
/// <param name="pointSource">Source of points to plot</param>
/// <param name="linePen">Pen to draw the line. If pen is null no lines will be drawn</param>
/// <param name="marker">Marker to draw on points. If marker is null no points will be drawn</param>
/// <param name="description">Description of graph to put in legend</param>
/// <returns></returns>
[SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
public static LineAndMarker<MarkerPointsGraph> AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource,
Pen linePen, PointMarker marker, Description description)
{
if (pointSource == null)
throw new ArgumentNullException("pointSource");
var res = new LineAndMarker<MarkerPointsGraph>();
if (linePen != null) // We are requested to draw line graphs
{
LineGraph graph = new LineGraph
{
DataSource = pointSource,
LinePen = linePen
};
if (description != null)
{
NewLegend.SetDescription(graph, description.Brief);
graph.Description = description;
}
if (marker == null)
{
// Add inclination filter only to graphs without markers
// graph.Filters.Add(new InclinationFilter());
}
res.LineGraph = graph;
graph.Filters.Add(new FrequencyFilter());
plotter.Children.Add(graph);
}
if (marker != null) // We are requested to draw marker graphs
{
MarkerPointsGraph markerGraph = new MarkerPointsGraph
{
DataSource = pointSource,
Marker = marker
};
res.MarkerGraph = markerGraph;
plotter.Children.Add(markerGraph);
}
return res;
}
/// <summary>Adds one dimensional graph to plotter. This method allows you to specify
/// as much graph parameters as possible</summary>
/// <param name="pointSource">Source of points to plot</param>
/// <param name="linePen">Pen to draw the line. If pen is null no lines will be drawn</param>
/// <param name="marker">Marker to draw on points. If marker is null no points will be drawn</param>
/// <param name="description">Description of graph to put in legend</param>
/// <returns></returns>
[SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
public static LineAndMarker<ElementMarkerPointsGraph> AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource,
Pen linePen, ElementPointMarker marker, Description description)
{
if (pointSource == null)
throw new ArgumentNullException("pointSource");
var res = new LineAndMarker<ElementMarkerPointsGraph>();
if (linePen != null) // We are requested to draw line graphs
{
LineGraph graph = new LineGraph
{
DataSource = pointSource,
LinePen = linePen
};
if (description != null)
{
NewLegend.SetDescription(graph, description.Brief);
graph.Description = description;
}
if (marker == null)
{
// Add inclination filter only to graphs without markers
// graph.Filters.Add(new InclinationFilter());
}
graph.Filters.Add(new FrequencyFilter());
res.LineGraph = graph;
plotter.Children.Add(graph);
}
if (marker != null) // We are requested to draw marker graphs
{
ElementMarkerPointsGraph markerGraph = new ElementMarkerPointsGraph
{
DataSource = pointSource,
Marker = marker
};
res.MarkerGraph = markerGraph;
plotter.Children.Add(markerGraph);
}
return res;
}
[SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters")]
public static LineGraph AddLineGraph(this Plotter2D plotter, IPointDataSource pointSource, Pen linePen, Description description)
{
if (pointSource == null)
throw new ArgumentNullException("pointSource");
if (linePen == null)
throw new ArgumentNullException("linePen");
LineGraph graph = new LineGraph
{
DataSource = pointSource,
LinePen = linePen
};
if (description != null)
{
NewLegend.SetDescription(graph, description.Brief);
graph.Description = description;
}
// graph.Filters.Add(new InclinationFilter());
graph.Filters.Add(new FrequencyFilter());
plotter.Children.Add(graph);
return graph;
}
#endregion
}
}