private void SetCodeString(GraphFunction value) { if (selectedFunction != null) selectedFunction.Code = CodeDocument.Text; CodeDocument.Text = value.Code; }
private void RemoveFunction(GraphFunction function) { Functions.Remove(function); if (function.PlotSeries != null) PlotModel.Series.Remove(function.PlotSeries); if (function.DerivedSeries != null) PlotModel.Series.Remove(function.DerivedSeries); if (function.IntegralSeries != null) PlotModel.Series.Remove(function.IntegralSeries); PlotModel.InvalidatePlot(true); }
private void InitFunctionSeries(GraphFunction function) { if (function.PlotSeries == null) { function.PlotSeries = new LineSeries(); function.PlotSeries.Color = GetNextColor(); PlotModel.Series.Add(function.PlotSeries); function.Color = new SolidColorBrush(oxy.ConverterExtensions.ToColor(function.PlotSeries.ActualColor)); } if (function.DerivedSeries == null) { function.DerivedSeries = new LineSeries(); function.DerivedSeries.Color = function.PlotSeries.ActualColor; function.DerivedSeries.LineStyle = LineStyle.Dash; PlotModel.Series.Add(function.DerivedSeries); } if (function.IntegralSeries == null) { function.IntegralSeries = new AreaSeries(); function.IntegralSeries.Color = function.PlotSeries.ActualColor; PlotModel.Series.Add(function.IntegralSeries); } }
private void applyFunction(GraphFunction func) { suppressOutput = true; SchemeMathWrapper.VerifyIsProcedure(func.Code); suppressOutput = false; InitFunctionSeries(func); var xydata = SchemeMathWrapper.CalcPlotData(func.Code, XMin, XMax, func.Step); var xydatapoints = xydata.Select((xy) => new DataPoint(xy.Item1, xy.Item2)); func.PlotSeries.Points.Clear(); func.PlotSeries.Points.AddRange(xydatapoints); func.PlotSeries.Title = func.Name; if (func.ShowDerivative) { var dxydata = SchemeMathWrapper.CalcDerivedPlotData(func.Code, XMin, XMax, func.Step); var dxydatapoints = dxydata.Select((xy) => new DataPoint(xy.Item1, xy.Item2)); func.DerivedSeries.Points.Clear(); func.DerivedSeries.Points.AddRange(dxydatapoints); func.DerivedSeries.Title = "'" + func.Name; } if (func.ShowIntegral) { IEnumerable<System.Tuple<double, double>> coords; if (func.IsLeftIntegral) coords = SchemeMathWrapper.CalcLeftIntegralCoords(func.Code, func.IntegralMin, func.IntegralMax, func.IntegralRes); else if (func.IsMiddleIntegral) coords = SchemeMathWrapper.CalcMidpointIntegralCoords(func.Code, func.IntegralMin, func.IntegralMax, func.IntegralRes); else if (func.IsRightIntegral) coords = SchemeMathWrapper.CalcRightIntegralCoords(func.Code, func.IntegralMin, func.IntegralMax, func.IntegralRes); else throw new ArgumentException("Integral mode not selected!"); var deltaX = SchemeMathWrapper.CalcDeltaX(func.IntegralMin, func.IntegralMax, func.IntegralRes); func.IntegralSeries.Points.Clear(); func.IntegralSeries.Points2.Clear(); foreach (var coord in coords) { func.IntegralSeries.Points.Add(new DataPoint(coord.Item1, coord.Item2)); func.IntegralSeries.Points.Add(new DataPoint(coord.Item1 + deltaX, coord.Item2)); } var bottomLineSeries = new LineSeries(); func.IntegralSeries.Points2.Add(new DataPoint(func.IntegralMin, 0)); func.IntegralSeries.Points2.Add(new DataPoint(func.IntegralMax, 0)); var area = SchemeMathWrapper.CalcDefiniteIntegral(func.IntegralMin, func.IntegralMax, func.IntegralRes, coords); func.IntegralSeries.Title = "''" + func.Name + "(A: " + area.ToString("G5") + ")"; } SetFunctionVisibility(func); }
private void AddFunction() { var func = new GraphFunction(); func.Samples = SchemeMathWrapper.StepToSamples(XMin, XMax, func.Step); func.PropertyChanged += function_propertyChanged; Functions.Add(func); }
private static void SetFunctionVisibility(GraphFunction function) { function.PlotSeries.IsVisible = function.IsEnabled; function.DerivedSeries.IsVisible = function.IsEnabled && function.ShowDerivative; function.IntegralSeries.IsVisible = function.IsEnabled && function.ShowIntegral; }