/// <summary>
 /// Initializes a new instance of the <see cref="ColorMapBrushContainer" /> class.
 /// </summary>
 /// <param name="colorMap">The color map.</param>
 /// <param name="range">The range.</param>
 /// <param name="colorMapLength">Length of the HSV color map.</param>
 /// <exception cref="System.ArgumentException">HSV color map requires length &gt; 1; colorMapLength</exception>
 public ColorMapBrushContainer(ColorMap colorMap, RealRange range, int colorMapLength = -1)
 {
     this.colorMap = colorMap;
     this.range    = range;
     this.SetColorMapBrushes(colorMapLength);
     this.yIncrement = range.Delta / (this.brushes.Length - 1);
 }
        /// <summary>
        /// Parses the 2d array.
        /// </summary>
        /// <param name="dataArray">The data array.</param>
        /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param>
        /// <param name="realRange">The real range.</param>
        /// <param name="viewModel">The view model.</param>
        private static void Parse2DArray(Array dataArray, bool getRangeFromData, RealRange realRange, ref MatrixCanvasViewModel viewModel)
        {
            viewModel.RowSums = new double[dataArray.Length];

            for (int i = 0; i < dataArray.GetLength(0); i++)
            {
                for (int j = 0; j < dataArray.GetLength(1); j++)
                {
                    object val  = dataArray.GetValue(i, j);
                    double dval = Convert.ToDouble(val);
                    viewModel.DataType    = Type.GetTypeCode(val.GetType());
                    viewModel.RowSums[i] += dval;

                    if (!getRangeFromData)
                    {
                        continue;
                    }

                    realRange.Expand(dval);
                }
            }

            realRange.FixErrors();
            viewModel.DataRange = realRange;
            viewModel.Rows      = dataArray.GetLength(0);
            viewModel.Cols      = dataArray.GetLength(1);
        }
        /// <summary>
        /// Parses the jagged array.
        /// </summary>
        /// <param name="dataArray">The data array.</param>
        /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param>
        /// <param name="realRange">The real range.</param>
        /// <param name="viewModel">The view model.</param>
        private static void ParseJaggedArray(Array dataArray, bool getRangeFromData, RealRange realRange, ref MatrixCanvasViewModel viewModel)
        {
            // This is a jagged array
            // First get the length of the longest row
            List <int> rowLengths = new List <int>();

            viewModel.RowSums = new double[dataArray.Length];

            for (int i = 0; i < dataArray.Length; i++)
            {
                Array row = dataArray.GetValue(i) as Array;
                if ((row == null) || (row.Rank == 0) || (row.Length == 0))
                {
                    rowLengths.Add(0);
                    continue;
                }

                if (row.Rank > 1)
                {
                    // Deeper than two dimensions - return without creating data object
                    viewModel.DataType = TypeCode.Empty;
                    break;
                }

                rowLengths.Add(row.Length);

                for (int j = 0; j < row.Length; j++)
                {
                    var val = row.GetValue(j);
                    if (viewModel.DataType == TypeCode.Empty && val != null)
                    {
                        viewModel.DataType = Type.GetTypeCode(val.GetType());
                    }

                    double dval = Convert.ToDouble(val);
                    viewModel.RowSums[i] += dval;

                    if (!getRangeFromData)
                    {
                        continue;
                    }

                    realRange.Expand(dval);
                }
            }

            realRange.FixErrors();
            viewModel.RowLengths = rowLengths.ToArray();
            viewModel.DataRange  = realRange;
            viewModel.Rows       = dataArray.Length;
            viewModel.Cols       = rowLengths.Max();
        }
        /// <summary>
        /// Parses the array.
        /// </summary>
        /// <param name="dataArray">The data array.</param>
        /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param>
        /// <param name="realRange">The real range.</param>
        /// <returns>The <see cref="MatrixCanvasViewModel"/></returns>
        /// <exception cref="System.ArgumentException">If getRangeFromData is false yMin and yMax must be specified</exception>
        private static MatrixCanvasViewModel ParseArray(Array dataArray, bool getRangeFromData, RealRange realRange)
        {
            MatrixCanvasViewModel viewModel = new MatrixCanvasViewModel
            {
                DataType  = TypeCode.Empty,
                Rows      = 0,
                Cols      = 0,
                DataRange = new RealRange(),
                Data      = dataArray
            };

            if (getRangeFromData)
            {
                realRange = new RealRange();
            }
            else
            {
                if (realRange == null || !realRange.IsValid())
                {
                    throw new ArgumentException("If getRangeFromData is false yMin and yMax must be specified");
                }
            }

            if (dataArray == null)
            {
                return(viewModel);
            }

            switch (dataArray.Rank)
            {
            case 1:
                ParseJaggedArray(dataArray, getRangeFromData, realRange, ref viewModel);
                break;

            case 2:
                Parse2DArray(dataArray, getRangeFromData, realRange, ref viewModel);
                break;
            }

            return(viewModel);
        }
Exemple #5
0
 /// <summary>
 /// Integrates the specified function using the Trapezoid rule.
 /// </summary>
 /// <param name="f">The f.</param>
 /// <param name="range">The range.</param>
 /// <returns>The area under the curve.</returns>
 public static double Integrate(this Func <double, double> f, RealRange range)
 {
     return(f.Integrate(range.Values.ToArray()));
 }
        /// <summary>
        /// Parses the array.
        /// </summary>
        /// <param name="obj">The object.</param>
        /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param>
        /// <param name="realRange">The real range.</param>
        /// <returns>The <see cref="MatrixCanvasViewModel"/></returns>
        internal static MatrixCanvasViewModel ParseArray(object obj, bool getRangeFromData, RealRange realRange)
        {
            if (obj == null)
            {
                return(null);
            }

            var enumerable = obj as IEnumerable <Array>;

            if (enumerable != null)
            {
                return(ParseArray(enumerable.ToArray(), getRangeFromData, realRange));
            }

            Array dataArray = obj as Array;

            if (dataArray != null)
            {
                return(ParseArray(dataArray, getRangeFromData, realRange));
            }

            Matrix matrix = obj as Matrix;

            if (matrix != null)
            {
                return(new MatrixCanvasViewModel
                {
                    Rows = matrix.Rows,
                    Cols = matrix.Cols,
                    DataRange = new RealRange {
                        Max = matrix.Max(), Min = matrix.Min()
                    },
                    Data = matrix.SourceArray,
                    DataType = TypeCode.Double,
                    RowSums = (matrix * Vector.Constant(matrix.Cols, 1)).ToArray()
                });
            }

            var vectors = obj as IList <Vector>;

            if (vectors != null)
            {
                return(ParseVectorList(vectors));
            }

            var sparseVectors = obj as IList <SparseVector>;

            if (sparseVectors != null)
            {
                return(ParseVectorList(sparseVectors));
            }

            return(null);
        }