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); }
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]); }
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(); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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]); }
public void ThrowExceptionOnSettingInvalidDataSource() { ILineChartSeries lineChartSeries = ChartSeriesFactory.CreateLineSeries(); lineChartSeries.DataSource = Enumerable.Range(1, 3); }