using LiveCharts; using Microsoft.VisualBasic.ApplicationServices; using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Interfaces; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows.Media; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Documents; using StructureHelperCommon.Services; using LiveCharts.Wpf; namespace StructureHelperCommon.Models.Functions { public class FormulaFunction : IOneVariableFunction { private const string COPY = "copy"; public const string GROUP_TYPE_1 = "System function"; public const string GROUP_TYPE_2 = "User function"; public bool IsUser { get; set; } public FunctionType Type { get; set; } public string Group { get; set; } public string Name { get; set; } public string Description { get ; set; } public int Step { get; set; } public string Formula { get; set; } public Guid Id => throw new NotImplementedException(); public ObservableCollection Functions { get; set; } = new ObservableCollection(); public double MinArg { get; set; } public double MaxArg { get; set; } public IShiftTraceLogger? TraceLogger { get; set; } public Color Color { get; set; } public FormulaFunction(bool isUser = false) { Type = FunctionType.FormulaFunction; if (isUser) { IsUser = true; Group = GROUP_TYPE_2; } else { IsUser = false; Group = GROUP_TYPE_1; } } public bool Check() { throw new NotImplementedException(); } public object Clone() { var formulaFunction = new FormulaFunction(); //Здесь будет стратегия formulaFunction.Type = Type; formulaFunction.Name = $"{Name} {COPY}"; formulaFunction.Description = Description; formulaFunction.Formula = Formula; formulaFunction.IsUser = true; formulaFunction.Group = GROUP_TYPE_2; formulaFunction.Step = Step; formulaFunction.MinArg = MinArg; formulaFunction.MaxArg = MaxArg; return formulaFunction; } public double GetByX(double xValue) { double yValue = 0; yValue = Math.Round(Math.Pow(xValue, 2), 2); //Временно выражение квадратичной параболы, будет разбор выражения return yValue; } public GraphSettings GetGraphSettings() { var graphSettings = new GraphSettings(Color, Color); var stepLenght = Math.Abs(MaxArg - MinArg) / Step; for (double x = MinArg; x < MaxArg; x += stepLenght) { var graphPoint = new GraphPoint(x, GetByX(x)); graphSettings.GraphPoints.Add(graphPoint); } return graphSettings; } } }