Taylohtio/FusionCharts/SP2010/WebPartCode/Plot.cs

156 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace FusionCharts.WebParts
{
/// <summary>
/// Represents an array of plots to graph
/// </summary>
public class Plots
{
/// <summary>
/// xValues stored in an array that contains string
/// </summary>
private List<string> _xArray = new List<string>();
/// <summary>
/// yValues stored in an array of arrays of doubles
/// _yArray[5][1] = 5th data point added, 2nd series
/// </summary>
private List<List<double>> _yArray = new List<List<double>>();
/// <summary>
/// Counts for yvalues - only used in group stats
/// yctValues stored in an array of arrays of doubles
/// _yctArray[5][1] = 5th data point added, 2nd series, #data elements
/// </summary>
private List<List<double>> _yctArray = new List<List<double>>();
/// <summary>
/// Number of y values per data point
/// which is the same thing as number of series being plotted
/// </summary>
private int _nSeries;
/// <summary>
/// Constructor
/// </summary>
/// <param name="nseries">number of y values per data point</param>
public Plots(int nseries)
{
_nSeries = nseries;
}
/// <summary>
/// Adds a new plot
/// </summary>
/// <param name="x">a string for xValue</param>
/// <param name="yvalues">array of yValues</param>
public void Add(string x, List<double> yvalues)
{
CheckPoint(x, yvalues, "Plots.Add");
_xArray.Add(x);
_yArray.Add(yvalues);
}
/// <summary>
/// Adds a new plot
/// </summary>
/// <param name="x">a string for xValue</param>
/// <param name="yvalues">array of yValues</param>
/// <param name="yctvalues">array of counts of yValues</param>
public void AddWithCounts(string x, List<double> yvalues, List<double> yctvalues)
{
CheckPoint(x, yvalues, "Plots.Add");
CheckPoint(x, yctvalues, "Plots.Add");
_xArray.Add(x);
_yArray.Add(yvalues);
_yctArray.Add(yctvalues);
}
private void CheckPoint(string x, List<double> yvalues, string method)
{
if (yvalues.Count != _nSeries)
{
throw new Exception(string.Format(
"{0}: Wrong number data points ({1} should be {2}) for x value {3}"
, method
, yvalues.Count
, _nSeries
, IfNull(x, "<null>")
));
}
}
private static string IfNull(string x, string defval)
{
return x == null ? defval : x;
}
/// <summary>
/// Gets an x value based on its position in the array
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public string GetX(int pos)
{
return _xArray[pos].ToString();
}
/// <summary>
/// Gets an y value based on its position in the array
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public List<double> GetY(int pos)
{
string x = _xArray[pos];
List<double> yvalues = _yArray[pos];
CheckPoint(x, yvalues, "Plots.GetY");
return yvalues;
}
/// <summary>
/// Gets an yct value based on its position in the array
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public List<double> GetYct(int pos)
{
string x = _xArray[pos];
List<double> yctvalues = _yctArray[pos];
CheckPoint(x, yctvalues, "Plots.GetYct");
return yctvalues;
}
/// <summary>
/// Returns true of the x value exists. Returns false if not.
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public bool Contains(string x)
{
return _xArray.Contains(x);
}
/// <summary>
/// Gets the index (position) of a element x
/// </summary>
/// <param name="x"></param>
/// <returns>-1 if the elements is not present in the array</returns>
public int XIndexOf(string x)
{
if (_xArray.Contains(x)) return _xArray.IndexOf(x);
return -1;
}
/// <summary>
/// Returns the number of elements in the array
/// </summary>
/// <returns></returns>
public int Count()
{
return _xArray.Count;
}
}
}