/// <summary> /// Формирование массива значений оси Y /// </summary> public static double[] getYArrayLine_PCP(double[] xValue, string Line, SettingForPCP pcp) { double speed = pcp.Speed; int size = xValue.Length; double[] arr = new double[size]; for (int i = 0; i < size; i++) { double H = xValue[i]; switch (Line) { case "Расход": arr[i] = pcp.CalcRate(H, speed); break; case "Кр. момент": arr[i] = pcp.CalcTorque(H, speed); break; case "Мощность": arr[i] = pcp.CalcPower(H, speed); break; default: MessageBox.Show("Ошибка при выводе графика ВШН", "Ошибка!"); return(null); } } return(arr); }
/// <summary> /// Формирование массива значений оси Х графика ВШН /// </summary> public static double[] getXArrayGasH_PCP(SettingForPCP pcp) { double dH = 4.0; int size = 0; for (size = 0; size < 2000; size++) { if (pcp.CalcRate(size * dH, pcp.Speed) <= 0) { break; } } double[] arr = new double[size]; for (int i = 0; i < size; i++) { arr[i] = i * dH; } return(arr); }
/// <summary> /// Загрузка графика ВШН /// </summary> public static void DrawPcpChart(Chart Chart_PCP, SettingForPCP settings) { Chart_PCP.ChartAreas.Clear(); Chart_PCP.Legends.Clear(); Chart_PCP.Series.Clear(); var Area = new ChartArea("Area"); Area.Position = new ElementPosition(10, 10, 91, 85); Area.InnerPlotPosition = new ElementPosition(12, 0, 75, 90); Chart_PCP.ChartAreas.Add(Area); Chart_PCP.Legends.Add(new Legend("Legend")); Chart_PCP.Palette = ChartColorPalette.Bright; Chart_PCP.ChartAreas["Area"].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; Chart_PCP.ChartAreas["Area"].AxisY.MajorGrid.LineColor = Color.Gray; Chart_PCP.ChartAreas["Area"].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash; Chart_PCP.ChartAreas["Area"].AxisX.MajorGrid.LineColor = Color.Gray; // Добавим линию расхода Chart_PCP.Series.Add(new Series("Расход")); Chart_PCP.Series["Расход"].ChartArea = "Area"; Chart_PCP.Series["Расход"].Legend = "Legend"; Chart_PCP.Series["Расход"].ChartType = SeriesChartType.Line; // Добавим линию Кр. момент Chart_PCP.Series.Add(new Series("Кр. момент")); Chart_PCP.Series["Кр. момент"].ChartArea = "Area"; Chart_PCP.Series["Кр. момент"].Legend = "Legend"; Chart_PCP.Series["Кр. момент"].ChartType = SeriesChartType.Line; Chart_PCP.Series["Кр. момент"].YAxisType = AxisType.Primary; // Добавим линию Мощность Chart_PCP.Series.Add(new Series("Мощность")); Chart_PCP.Series["Мощность"].ChartArea = "Area"; Chart_PCP.Series["Мощность"].Legend = "Legend"; Chart_PCP.Series["Мощность"].ChartType = SeriesChartType.Line; // Добавим данные линии double[] xArrayGasH = getXArrayGasH_PCP(settings); double[] yArrayRate = getYArrayLine_PCP(xArrayGasH, Chart_PCP.Series["Расход"].Name, settings); Chart_PCP.Series["Расход"].Points.DataBindXY(xArrayGasH, yArrayRate); Chart_PCP.Series["Расход"].BorderWidth = 3; double[] yArrayEfficiency = getYArrayLine_PCP(xArrayGasH, Chart_PCP.Series["Кр. момент"].Name, settings); Chart_PCP.Series["Кр. момент"].Points.DataBindXY(xArrayGasH, yArrayEfficiency); Chart_PCP.Series["Кр. момент"].BorderWidth = 3; double[] yArrayPower = getYArrayLine_PCP(xArrayGasH, Chart_PCP.Series["Мощность"].Name, settings); Chart_PCP.Series["Мощность"].Points.DataBindXY(xArrayGasH, yArrayPower); Chart_PCP.Series["Мощность"].BorderWidth = 3; // Дополнительные шкалы для графиков CreateYAxis(Chart_PCP, Area, Chart_PCP.Series["Расход"], 6, 17, 18, true); CreateYAxis(Chart_PCP, Area, Chart_PCP.Series["Мощность"], 67, 26, -3, false); Axis areaAxisAxisY = Area.AxisY; areaAxisAxisY.IsStartedFromZero = Area.AxisY.IsStartedFromZero; areaAxisAxisY.LabelStyle.Font = Area.AxisY.LabelStyle.Font; areaAxisAxisY.Title = Chart_PCP.Series["Кр. момент"].Name + ", кгс·м"; areaAxisAxisY.TitleForeColor = Color.DarkCyan; areaAxisAxisY.Minimum = 0; areaAxisAxisY.LineWidth = 3; areaAxisAxisY.LineColor = Chart_PCP.Series["Кр. момент"].Color; Axis areaAxisAxisX = Area.AxisX; areaAxisAxisX.Minimum = 0; areaAxisAxisX.IsStartedFromZero = Area.AxisX.IsStartedFromZero; areaAxisAxisX.LabelStyle.Font = Area.AxisX.LabelStyle.Font; areaAxisAxisX.Title = "Напор, м"; areaAxisAxisX.TitleForeColor = Color.DarkCyan; }