예제 #1
0
        public void ApplyCustomDateTimeFormatYears()
        {
            var random    = new Random();
            var chartView = new ChartView();
            var startTime = DateTime.Now;

            var times = Enumerable.Range(1, 1000).Select(startTime.AddYears).ToArray();
            var y     = Enumerable.Range(1000, 1000).Select(i => Convert.ToDouble(random.Next(100))).ToArray();

            var pointList  = new List <Utils.Tuple <DateTime, double> >();
            var lineSeries = ChartSeriesFactory.CreateLineSeries();
            var chart      = chartView.Chart;

            chart.Series.Add(lineSeries);

            chartView.DateTimeLabelFormatProvider = new QuarterNavigatableLabelFormatProvider();

            for (int i = 0; i < 1000; i++)
            {
                pointList.Add(new Tuple <DateTime, double>(times[i], y[i]));
            }

            lineSeries.DataSource        = pointList;
            lineSeries.XValuesDataMember = "First";
            lineSeries.YValuesDataMember = "Second";
            lineSeries.CheckDataSource();
            WindowsFormsTestHelper.ShowModal(chartView);
        }
예제 #2
0
        public void ChangeYMemberSeriesViewWithFunctionAsDataSource()
        {
            var function = new Function();
            var Y        = new Variable <double>("Y");
            var Z        = new Variable <double>("Z");
            var n        = new Variable <double>("n");

            function.Arguments.Add(Y);
            function.Components.Add(Z);
            function.Components.Add(n);

            Y.SetValues(new[] { 0.0, 3.0, 5.0, 6.0, 7.0 });
            Z.SetValues(new[] { 0.0, 10.0, 15.0, 21.0, 15.0 });
            n.SetValues(new[] { 0.001, 0.001, 0.01, 0.01, 0.01 });

            var chartView = new ChartView();

            IChartSeries series = ChartSeriesFactory.CreateLineSeries();

            series.XValuesDataMember = Y.DisplayName;
            series.YValuesDataMember = Z.DisplayName;
            series.DataSource        = new FunctionBindingList(function)
            {
                SynchronizeInvoke = chartView
            };
            chartView.Chart.Series.Add(series);

            WindowsFormsTestHelper.ShowModal(chartView);
        }
예제 #3
0
        public void ChartWithDataTableAsSeriesSource()
        {
            var table = new DataTable();

            table.Columns.Add("x", typeof(double));
            table.Columns.Add("y", typeof(double));

            table.Rows.Add(2.5, 33.3);
            table.Rows.Add(0.5, 13.3);

            // create chart and add function as a data source using object adapter class FunctionSeriesDataSource
            //IChart chart = new Chart();

            IChartSeries series = ChartSeriesFactory.CreateLineSeries();

            series.DataSource        = table;
            series.XValuesDataMember = "x";
            series.YValuesDataMember = "y";

            var chartView1 = new ChartView();

            chartView1.Chart.Series.Add(series);

            var form = new Form {
                Width = 600, Height = 100
            };

            form.Controls.Add(chartView1);
            WindowsFormsTestHelper.ShowModal(form);
        }
예제 #4
0
        public void ClearFunctionThatIsBoundToDecorator()
        {
            IFunction function = new Function("time series");

            function.Arguments.Add(new Variable <DateTime>("time"));
            function.Components.Add(new Variable <double>("water_discharge"));

            // set initial values
            DateTime time1 = DateTime.Now;
            DateTime time2 = time1.AddMinutes(1);
            DateTime time3 = time2.AddMinutes(1);

            function[time1] = 0.0;
            function[time2] = 1.0;
            function[time3] = 2.0;

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();

            lineChartSeries.XValuesDataMember = function.Arguments[0].DisplayName;
            lineChartSeries.YValuesDataMember = function.Components[0].DisplayName;

            var control = new Control();

            WindowsFormsTestHelper.Show(control);

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = control
            };

            lineChartSeries.DataSource = functionBindingList;

            function.Clear();
        }
예제 #5
0
        public void ChartWithObjectsAsSeriesSource()
        {
            IList objects = new ArrayList
            {
                new { X = 2.5, Y = 33.3 },
                new { X = 0.5, Y = 13.3 }
            };

            // create chart and add function as a data source using object adapter class FunctionSeriesDataSource

            IChartSeries series = ChartSeriesFactory.CreateLineSeries();

            series.DataSource        = objects;
            series.XValuesDataMember = "X";
            series.YValuesDataMember = "Y";

            var chartView1 = new ChartView();

            chartView1.Chart.Series.Add(series);

            // show form
            var form = new Form {
                Width = 600, Height = 100
            };

            form.Controls.Add(chartView1);
            WindowsFormsTestHelper.ShowModal(form);
        }
예제 #6
0
        public void BindToFunctionWithNaNValuesWithDateTimeArgument()
        {
            //setup a 2D function and fix one dimension
            IFunction function = new Function();

            function.Arguments.Add(new Variable <DateTime>("x"));
            function.Components.Add(new Variable <double>("y"));

            function[new DateTime(2000, 1, 1)] = 2.0;
            function[new DateTime(2001, 1, 1)] = 3.0;
            function[new DateTime(2002, 1, 1)] = double.NaN;
            function[new DateTime(2003, 1, 1)] = 4.0;

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();
            var component = function.Components[0];
            var variable  = function.Arguments[0];

            lineChartSeries.XValuesDataMember = variable.DisplayName;
            lineChartSeries.YValuesDataMember = component.DisplayName;

            var functionBindingList = new FunctionBindingList(function);

            lineChartSeries.DataSource = functionBindingList;

            Assert.AreEqual(4, lineChartSeries.XValues.Count);
            Assert.AreEqual(4, lineChartSeries.YValues.Count);

            var chartView1 = new ChartView();

            chartView1.Chart.Series.Add(lineChartSeries);

            WindowsFormsTestHelper.ShowModal(chartView1);
        }
예제 #7
0
        public void SeriesChangesWhenFunctionBindingListChanges()
        {
            IFunction function  = new Function();
            IVariable yVariable = new Variable <double>("y");
            IVariable xVariable = new Variable <double>("x");

            function.Arguments.Add(xVariable);
            function.Components.Add(yVariable);

            function[1.0] = 2.0;
            function[2.0] = 5.0;
            function[3.0] = 1.0;

            ILineChartSeries ls = ChartSeriesFactory.CreateLineSeries();

            ls.YValuesDataMember = function.Components[0].DisplayName;
            ls.XValuesDataMember = function.Arguments[0].DisplayName;

            var synchronizeObject = new Control();

            synchronizeObject.Show();

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = synchronizeObject
            };

            ls.DataSource = functionBindingList;

            //a change in the function should change the series
            function[1.0] = 20.0;

            //wait for the series to get refreshed
            Assert.AreEqual(20, ls.YValues[0]);
        }
예제 #8
0
        public void SeriesBandToolView()
        {
            var chartView = new ChartView();

            var dataTable1 = new DataTable();
            var dataTable2 = new DataTable();

            dataTable1.Columns.AddRange(new []
            {
                new DataColumn("Y", typeof(double)),
                new DataColumn("Z", typeof(double))
            });
            dataTable2.Columns.AddRange(new[]
            {
                new DataColumn("Y", typeof(double)),
                new DataColumn("Z", typeof(double))
            });

            var ySeries1 = new[] { 0.0, 2.0, 5.0, 10.0, 13.0, 15.0 };
            var zSeries1 = new[] { 0.0, 0.0, -10.0, -10.0, 0.0, 0.0 };
            var ySeries2 = new[] { 0.0, 5.0, 5.0, 10.0, 10.0, 15.0 };
            var zSeries2 = new[] { 1.0, 1.0, -9.0, -9.0, 1.0, 1.0 };

            for (int i = 0; i < ySeries1.Length; i++)
            {
                var row = dataTable1.NewRow();
                row["Y"] = ySeries1[i];
                row["Z"] = zSeries1[i];
                dataTable1.Rows.Add(row);
            }

            for (int i = 0; i < ySeries2.Length; i++)
            {
                var row = dataTable2.NewRow();
                row["Y"] = ySeries2[i];
                row["Z"] = zSeries2[i];
                dataTable2.Rows.Add(row);
            }

            var series1 = ChartSeriesFactory.CreateLineSeries();
            var series2 = ChartSeriesFactory.CreateLineSeries();

            series1.DataSource        = dataTable1;
            series1.XValuesDataMember = "Y";
            series1.YValuesDataMember = "Z";

            series2.DataSource        = dataTable2;
            series2.XValuesDataMember = "Y";
            series2.YValuesDataMember = "Z";

            chartView.Chart.Series.AddRange(new [] { series1, series2 });

            //tool
            var tool = chartView.NewSeriesBandTool(series1, series2, Color.Yellow, HatchStyle.BackwardDiagonal, Color.Red);

            chartView.Tools.Add(tool);

            WindowsFormsTestHelper.ShowModal(chartView);
        }
예제 #9
0
        /// <summary>
        /// Defines the chart series.
        /// </summary>
        /// <param name="configurator">The add action.</param>
        /// <example>
        /// <code lang="CS">
        ///  &lt;%= Html.Kendo().StockChart(Model)
        ///             .Name("Chart")
        ///             .Series(series =>
        ///             {
        ///                 series.Bar(s => s.SalesAmount);
        ///             })
        /// %&gt;
        /// </code>
        /// </example>
        public StockChartBuilder <T> Series(Action <ChartSeriesFactory <T> > configurator)
        {
            ChartSeriesFactory <T> factory = new ChartSeriesFactory <T>(Component);

            configurator(factory);

            return(this);
        }
예제 #10
0
        public void AreaSeriesView()
        {
            var chartView = new ChartView();

            var series = ChartSeriesFactory.CreateLineSeries();

            series.DataSource        = InitTable();
            series.XValuesDataMember = "Y";
            series.YValuesDataMember = "Z";

            chartView.Chart.Series.Add(series);

            WindowsFormsTestHelper.ShowModal(chartView);
        }
예제 #11
0
        public void HidingPointWithZeroY()
        {
            var view   = new ChartView();
            var series = ChartSeriesFactory.CreateLineSeries();

            series.NoDataValues.Add(1.0);

            series.Add(new double?[] { 0.0, 1.0, 3.0, 4.0, 5.0, 7.0, 8.0 },
                       new double?[] { 0.0, 1.0, 0.5, 0.0, 5.0, 3.0, 4.0 });

            view.Chart.Series.Add(series);

            WindowsFormsTestHelper.ShowModal(view);
        }
예제 #12
0
        private static ILineChartSeries GetLineSeries(IFunction function, ChartView view)
        {
            ILineChartSeries ls = ChartSeriesFactory.CreateLineSeries();

            ls.YValuesDataMember = function.Components[0].DisplayName;
            ls.XValuesDataMember = function.Arguments[0].DisplayName;

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = view
            };

            ls.DataSource = functionBindingList;
            return(ls);
        }
예제 #13
0
        public void RefreshShouldBeFastWhenFunctionDataSourceHasManyChanges()
        {
            IFunction function = new Function
            {
                Arguments  = { new Variable <int>("x") },
                Components = { new Variable <int>("f") }
            };

            var values = new int[1000];

            for (var i = 0; i < values.Length; i++)
            {
                values[i] = i;
            }

            var chartView = new ChartView();

            var lineSeries = ChartSeriesFactory.CreateLineSeries();

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = chartView
            };

            lineSeries.DataSource = functionBindingList;

            lineSeries.XValuesDataMember = function.Arguments[0].DisplayName;
            lineSeries.YValuesDataMember = function.Components[0].DisplayName;
            chartView.Chart.Series.Add(lineSeries);
            lineSeries.PointerVisible = false;

            // now do the same when table view is shown
            Action <Form> onShown = delegate
            {
                var stopwatch = new Stopwatch();
                stopwatch.Reset();
                stopwatch.Start();
                SetFunctionValuesWrappedWithChartView(function, values);
                stopwatch.Stop();

                log.DebugFormat("Refreshing chart while inserting values into function took {0}ms", stopwatch.ElapsedMilliseconds);

                stopwatch.ElapsedMilliseconds.Should("Insert of 1k values should take < 100ms").Be.LessThan(300);
            };

            WindowsFormsTestHelper.ShowModal(chartView, onShown);
        }
예제 #14
0
        private static IChart CreateMultipleSeriesChart()
        {
            IChart chart = new Chart();

            var dataTable = new DataTable("sinandcosinus");

            dataTable.Columns.Add("X", typeof(double));
            dataTable.Columns.Add("sin", typeof(double));
            dataTable.Columns.Add("cos", typeof(double));

            const double pi2 = Math.PI * 2;

            for (int i = 0; i < 100; i++)
            {
                double  angle = i * (pi2 / 100);
                DataRow row   = dataTable.NewRow();
                row["X"]   = angle;
                row["sin"] = Math.Sin(angle);
                row["cos"] = Math.Cos(angle);
                dataTable.Rows.Add(row);
            }

            ILineChartSeries sin = ChartSeriesFactory.CreateLineSeries();

            sin.Title             = "sinus";
            sin.DataSource        = dataTable;
            sin.XValuesDataMember = "X";
            sin.YValuesDataMember = "sin";
            chart.Series.Add(sin);
            sin.BrushColor     = Color.Red;
            sin.PointerVisible = false;

            ILineChartSeries cos = ChartSeriesFactory.CreateLineSeries();

            cos.Title             = "cosinus";
            cos.DataSource        = dataTable;
            cos.XValuesDataMember = "X";
            cos.YValuesDataMember = "cos";
            chart.Series.Add(cos);
            cos.BrushColor     = Color.Blue;
            cos.PointerVisible = false;

            chart.Legend.Visible = true;
            return(chart);
        }
예제 #15
0
        public void ChartWithFunctionAsSeriesSource()
        {
            // create function

            var fn = new Function();
            var x  = new Variable <double>("x");
            var y  = new Variable <double>("y");

            fn.Arguments.Add(x);
            fn.Components.Add(y);

            fn[2.5] = 33.3;
            fn[0.5] = 13.3;
            fn[1.5] = 4.0;

            var chartView1 = new ChartView();// { Data = chart };

            // create chart and add function as a data source using object adapter class FunctionSeriesDataSource
            // var chart = new Chart();

            ILineChartSeries series = ChartSeriesFactory.CreateLineSeries();

            series.DataSource = new FunctionBindingList(fn)
            {
                SynchronizeInvoke = chartView1
            };
            series.XValuesDataMember = x.DisplayName;
            series.YValuesDataMember = y.DisplayName;

            //chart.Series.Add(series);

            // TODO: add asserts
            // TODO: make all windows forms public from WindowsFormsTest which shows and hides forms on build server

            // show form
            chartView1.Chart.Series.Add(series);

            // set colors afterwards. TChart changes colors when adding a series to ChartView
            series.LinePenColor = Color.Black;

            //var form = new Form {Width = 600, Height = 100};
            //form.Controls.Add(chartView1);
            WindowsFormsTestHelper.ShowModal(chartView1);
        }
예제 #16
0
        public void RefreshShouldBeFastWhenFunctionDataSourceHasManyChanges()
        {
            var       random   = new Random();
            IFunction function = new Function
            {
                Arguments  = { new Variable <int>("x") },
                Components = { new Variable <int>("f") }
            };

            int count           = 1000;
            var componentvalues = Enumerable.Range(1, count).Select(i => random.Next(100)).ToArray();
            var argumentvalues  = Enumerable.Range(1, count).ToArray();

            var chartView = new ChartView();

            var lineSeries = ChartSeriesFactory.CreateLineSeries();

            var functionBindingList = new FunctionBindingList(function)
            {
                SynchronizeInvoke = chartView
            };

            lineSeries.DataSource = functionBindingList;
            //don't update on every change...
            lineSeries.UpdateASynchronously = true;
            lineSeries.XValuesDataMember    = function.Arguments[0].DisplayName;
            lineSeries.YValuesDataMember    = function.Components[0].DisplayName;
            chartView.Chart.Series.Add(lineSeries);
            lineSeries.PointerVisible = false;

            // call one time to make sure that internal HACK TypeUtils.CallGeneric is done, otherwise timing varies a lot
            function.SetValues(componentvalues, new VariableValueFilter <int>(function.Arguments[0], argumentvalues));
            function.Arguments[0].Clear();

            // now do the same when table view is shown
            Action <Form> onShown = delegate
            {
                //the slowdown of chart is absolute minimal
                TestHelper.AssertIsFasterThan(50, () =>
                                              function.SetValues(componentvalues, new VariableValueFilter <int>(function.Arguments[0], argumentvalues)));
            };

            WindowsFormsTestHelper.ShowModal(chartView, onShown);
        }
예제 #17
0
        public void ChangeYMemberSeriesView()
        {
            ChartView chartView = new ChartView();

            IChartSeries series = ChartSeriesFactory.CreateLineSeries();

            series.DataSource        = InitTable();
            series.XValuesDataMember = "Y";
            series.YValuesDataMember = "Z";
            chartView.Chart.Series.Add(series);

            series.YValuesDataMember = "n";
            series.CheckDataSource();


            WindowsFormsTestHelper windowsFormsTestHelper = new WindowsFormsTestHelper();

            windowsFormsTestHelper.ShowControlModal(chartView);
        }
예제 #18
0
        public void HidingPointWithZeroY()
        {
            double?[] X = new double?[] { 0.0, 1.0, 3.0, 4.0, 5.0, 7.0, 8.0 };
            double?[] Y = new double?[] { 0.0, 1.0, 0.5, 0.0, 5.0, 3.0, 4.0 };

            IChartView view = new ChartView();

            ILineChartSeries series = ChartSeriesFactory.CreateLineSeries();

            series.NoDataValues.Add(1.0);
            series.Add(X, Y);
            view.Chart.Series.Add(series);
            //CustomPoint customPoint = ((TeeChartSeriesDecorator)((LineSeries) series).decorator).series;
            //customPoint.DefaultNullValue = 3.0;
            //customPoint.YValues[0] = 89;
            //customPoint.SetNull(0);
            ////customPoint.SetNull(3);
            ////customPoint.YValues[3] = 0;
            //customPoint.TreatNulls = TreatNullsStyle.DoNotPaint;

            WindowsFormsTestHelper.ShowModal((UserControl)view);
        }
예제 #19
0
        public void BindToFilteredFuntion()
        {
            //setup a 2D function and fix one dimension
            IFunction       function = new Function();
            IVariable <int> x        = new Variable <int>();

            function.Arguments.Add(x);
            function.Arguments.Add(new Variable <int>("Y"));
            function.Components.Add(new Variable <int>());

            function[0, 0] = 2;
            function[0, 1] = 3;
            function[1, 0] = 1;
            function[1, 1] = 4;

            IFunction filteredFunction = function.Filter(new VariableValueFilter <int>(x, 0));

            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();
            var variable  = filteredFunction.Arguments[1];
            var component = filteredFunction.Components[0];

            lineChartSeries.XValuesDataMember = variable.DisplayName;
            lineChartSeries.YValuesDataMember = component.DisplayName;

            var functionBindingList = new FunctionBindingList(filteredFunction);

            lineChartSeries.DataSource = functionBindingList;
            while (functionBindingList.IsProcessing)
            {
                Application.DoEvents();
            }

            Assert.AreEqual(2, lineChartSeries.XValues.Count);
            Assert.AreEqual(2, lineChartSeries.YValues.Count);
            Assert.AreEqual(0.0, lineChartSeries.XValues[0]);
            Assert.AreEqual(1.0, lineChartSeries.XValues[1]);
            Assert.AreEqual(2.0, lineChartSeries.YValues[0]);
            Assert.AreEqual(3.0, lineChartSeries.YValues[1]);
        }
예제 #20
0
 public ChartSeriesFactoryTests()
 {
     chart   = ChartTestHelper.CreateChart <SalesData>();
     factory = new ChartSeriesFactory <SalesData>(chart);
 }
예제 #21
0
        public void ThrowExceptionOnSettingInvalidDataSource()
        {
            ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries();

            lineChartSeries.DataSource = Enumerable.Range(1, 3);
        }
 public ChartSeriesFactoryTests()
 {
     chart = ChartTestHelper.CreateChart<SalesData>();
     factory = new ChartSeriesFactory<SalesData>(chart);
 }