public ModuleDiffEff(Chart chart, File_Acts FA, DataGrid datagrid) { InitializeComponent(); Chart_ref = chart; fileacts_ref = FA; datagrid_ref = datagrid; MyCalc = new Calculations(FA, Chart_ref); }
public void DoCurrTok_2(CancellationToken token, int milisecond, File_Acts file_Acts) { int i = 0; Parameter J2 = file_Acts.Find_Parametr("J2"); while (!token.IsCancellationRequested) { //currentTok = (Single) Math.Sin(argument); currentTok2 = (Single)((1e+10) * J2.Time_and_Value_List[i].Value) * 25000; i += 1; int delTime = (int)J2.Time_and_Value_List[i].Time.Subtract(J2.Time_and_Value_List[i - 1].Time).TotalMilliseconds; Thread.Sleep(delTime); } }
public ModuleValues(File_Acts FA, Chart chart, ListView listVgiven) { InitializeComponent(); //График, с которым работаем и прочее, ссылаемся тут. Mychart = chart; MyCalc = new Calculations(FA, chart); MylistV = listVgiven; MyFileActs = FA; chart.CursorPositionChanged += chart_CursorPositionChanged; //Values_List.ItemsSource = File_Acts_One.Find_Parametr(tempKKS).Time_and_Value_List; }
public Calculations(File_Acts FA, Chart chart) { InitializeComponent(); Fileacts_ref = FA; chart_ref = chart; //Считать состояние try { StreamReader FileRead = new StreamReader("Options.txt"); //Считать 1 линию из файла. GroupKKSMainPart = FileRead.ReadLine(); //Считать 2 линию из файла. ReactKKSMainPart = FileRead.ReadLine(); //Считать 3 линию из файла. Step_h = Convert.ToDouble(FileRead.ReadLine()); //Считать 4 линию из файла. B_eff = Convert.ToDouble(FileRead.ReadLine()); //Считать 5 линию из файла. Min_TimeReg = Convert.ToInt32(FileRead.ReadLine()); FileRead.Close(); } catch (Exception) {} GroupTexBox.Text = GroupKKSMainPart; ReactivitiTexBox.Text = ReactKKSMainPart; ShagTexBox.Text = Step_h.ToString(); BetaTexBox.Text = B_eff.ToString(); //Бушер if (GroupKKSMainPart == "YVM") { GroupKKSMainPart12 = "--------"; GroupKKSMainPart11 = "------"; GroupKKSMainPart10 = "YVM10FG900"; GroupKKSMainPart9 = "YVM10FG909"; GroupKKSMainPart8 = "YVM10FG908"; } //НВАЭС-2 if (GroupKKSMainPart == "JDA") { GroupKKSMainPart12 = "JDA00FG912"; GroupKKSMainPart11 = "JDA00FG911"; GroupKKSMainPart10 = "JDA00FG910"; GroupKKSMainPart9 = "JDA00FG909"; GroupKKSMainPart8 = "JDA00FG908"; } }
/// <summary> /// Добавить линию на основной арене. ПРи этом, один и тот же параметр можно несколько раз рисовать. Сделано, чтобы иметь возможность сшивать графики по времени. /// </summary> /// <param name="chart1">График, с которым работаем</param> /// <param name="selectedKKSs">Выбранная пользователем группа параметров</param> /// <param name="chartareaName"> Выбранное пользователем имя главной арены, на которой рисуем.</param> /// <param name="myFileActs">Передает данные</param> /// <param name="r_L">Сообщает сторону оси</param> public void AddMainLine(Chart myChart, System.Collections.IList selectedKKSs, string chartareaName, File_Acts myFileActs, string r_L) { //Сейчас обрабатываемый KKS из списка переданного. string serName = ""; //Цикл по выдленным параметрам. foreach (Parameter selectedKKS_i in selectedKKSs) { //Была ли построена серия с таким именем. (Если сшивали по времени.) Тогда, в имя номер повторно добавленной серии. Или не меняем KKS. bool isNameIn = false; // ПРисутствует ли добавляемое имя линии foreach (var Seria_i in myChart.Series) { if (Seria_i.Name == selectedKKS_i.KKS) { isNameIn = true; } } if (isNameIn) { slisesCounter++; serName = selectedKKS_i.KKS + "_" + slisesCounter; } else { serName = selectedKKS_i.KKS; } //Добавляем серию на график myChart.Series.Add(new Series(serName)); //Выбор стороны if (r_L == "left") { myChart.Series[serName].YAxisType = AxisType.Primary; } else { myChart.Series[serName].YAxisType = AxisType.Secondary; } //Легенда видимая будет. myChart.Series[serName].IsVisibleInLegend = true; //Тип линии myChart.Series[serName].ChartType = SeriesChartType.Line; myChart.Series[serName].BorderDashStyle = ChartDashStyle.Solid; //Арена линии соответствующая myChart.Series[serName].ChartArea = chartareaName; //Пополнение серии. foreach (Time_and_Value item1 in myFileActs.Find_Parametr(serName).Time_and_Value_List) { myChart.Series[serName].Points.AddXY(item1.Time, item1.Value); } } }
/// <summary> /// Добавить линию на дополнительной оси. /// Для построения 1 доп. оси создается 2 дополнительные арены: 1-ая содержит график; 2-ая содержит ось. /// Насчет положения арены: есть положение самой арены. Есть положение пространства для рисования графиков. Оно внутри арены. Таким образом, надо и то и то задать. Схема, как это работает -- в описании. Кода много, но все просто. Самое сложное -- с положением дополнительных арен, арен для рисования внутри них. /// </summary> /// <param name="myChart">График, с которым работаем</param> /// <param name="chartareaName"> Выбранное пользователем имя главной арены, на которой рисуем. Здесь для привязки к этой арене</param> /// <param name="selectedKKSs">Выбранная пользователем группа параметров</param> /// <param name="myFileActs">Передает данные</param> /// <param name="r_L">Сообщает сторону оси</param> public List <ChartArea> AddAdditional_AxisAndlLine(Chart myChart, string chartareaName, System.Collections.IList selectedKKSs, File_Acts myFileActs, string r_L) { //Что возвращать будем. Это лист арен с видимым графиком линий строящихся. List <ChartArea> ListAreas = new List <ChartArea>(); //Цикл по выделенным параметрам пользователем. foreach (Parameter selectedParameters_i in selectedKKSs) { //1) Создаем незаметную арену для видимой серии на графике. Она точно совпадает с основной ареной. В том и смысл, что начало графика будет таким образом совпадать с началом всех других и начинаться от основной оси. ChartArea areaSeria = CreateArenaSeria(myChart, chartareaName); //Добавляем на главную арену серию, переносим ее на эту невидимую арену. Так нам проще, ибо метод добавления на глав. арену уже есть. List <Parameter> itemAsCollection = new List <Parameter>(); itemAsCollection.Add(selectedParameters_i); AddMainLine(myChart, itemAsCollection, chartareaName, myFileActs, r_L); myChart.Series[selectedParameters_i.KKS].ChartArea = areaSeria.Name;//сам перенос на невидимую арену. //Определение слева/справа строить if (r_L == "left") { myChart.Series[selectedParameters_i.KKS].YAxisType = AxisType.Primary; } else { myChart.Series[selectedParameters_i.KKS].YAxisType = AxisType.Secondary; } // 2) Теперь создаем арену для оси. (Кроме оси дополнительной, на ней все остальное незаметное.) ChartArea areaAxis = CreateArenaAxis(myChart, chartareaName); // Создаем копию видимой серии. (Копия невидима.) Служит для масштабирования оси. Series seriesCopy = myChart.Series.Add(myChart.Series[selectedParameters_i.KKS].Name + "_invisibleCopy"); seriesCopy.ChartType = myChart.Series[selectedParameters_i.KKS].ChartType; // Скрываем копию серии seriesCopy.IsVisibleInLegend = false; seriesCopy.Color = Color.Transparent; seriesCopy.BorderColor = Color.Transparent; //ПОполняем серию foreach (DataPoint point in myChart.Series[selectedParameters_i.KKS].Points) { seriesCopy.Points.AddXY(point.XValue, point.YValues[0]); } seriesCopy.ChartArea = areaAxis.Name; //Определение слева/справа строить if (r_L == "left") { seriesCopy.YAxisType = AxisType.Primary; } else { seriesCopy.YAxisType = AxisType.Secondary; } //3)ПОзиции арен задаем: 2 новых арены совпадают с начальной позицеей. Задается позиция арены с серией, чтобы не была авто (тогда её нельзя уменьшить, если она ноль. И эта ошибка выскакивает реально) areaSeria.Position.FromRectangleF(myChart.ChartAreas[chartareaName].Position.ToRectangleF()); areaSeria.InnerPlotPosition.FromRectangleF(myChart.ChartAreas[chartareaName].InnerPlotPosition.ToRectangleF()); areaAxis.Position.FromRectangleF(myChart.ChartAreas[chartareaName].Position.ToRectangleF()); areaAxis.InnerPlotPosition.FromRectangleF(myChart.ChartAreas[chartareaName].InnerPlotPosition.ToRectangleF()); // 4) Задаем позицию оси. Смотрится сложно, поскольку предполагается неоднократное добавление дополнительнхы осей. //switch выбирает сторону switch (r_L) { case "left": //Cжимаем все арены, кроме нашей с осью, последней, на axisOffset. И передвигаем их вперед (расстояние между осями создаем). for (int i = 0; i < myChart.ChartAreas.Count; i++) { myChart.ChartAreas[i].Position.Width -= axisOffset; myChart.ChartAreas[i].Position.X += axisOffset; } //Последнюю (с осью) сдвинем влево. areaAxis.Position.X -= axisOffset; //Если уже еще добавлли арены, сдвинуть надо больше int countArenasLeftHere = CountArenas(myChart, chartareaName).Item1; areaAxis.Position.X -= (axisOffset) * countArenasLeftHere;//отодвинуть на число построенных дополнительных осей //Имена зададим: 10 символов 1 часть. + 7 + 2 + 1 + 1. Итого, 17-ый означает номер главной арены. (Рядом с которой рисуем.) areaSeria.Name = "invisible_" + chartareaName + "_#" + (countArenasLeftHere + 1) + "L"; areaAxis.Name = "axisYin___" + chartareaName + "_#" + (countArenasLeftHere + 1) + "L"; break; //Сдвигаем в другую сторону case "right": //Cжимаем все арены, кроме нашей с осью, последней, на axisOffset. А позицию -- без изменений. for (int i = 0; i < myChart.ChartAreas.Count; i++) { myChart.ChartAreas[i].Position.Width -= axisOffset; } //Последнюю (с осью) сдвинем вправо. areaAxis.Position.X += axisOffset; areaAxis.Position.X += (axisOffset) * CountArenas(myChart, chartareaName).Item2;//отодвинуть, учитывая число уже построенных дополнительных осей //Имена зададим: 10 символов 1 часть. + 7 + 2 + 1 + 1. Итого, 17-ый означает номер главной арены. (Рядом с которой рисуем.) areaSeria.Name = "invisible_" + chartareaName + "_#" + (CountArenas(myChart, chartareaName).Item2 + 1) + "R"; areaAxis.Name = "axisYin___" + chartareaName + "_#" + (CountArenas(myChart, chartareaName).Item2 + 1) + "R"; break; } //Конец switch ListAreas.Add(areaSeria); } //Закрыли обход по списку выделенных KKS. return(ListAreas); } //Закрыли тело метода