private void ChartResize() // устанавливает границы представления по оси У { // вообще-то можно это автоматике доверить, но там вечно косяки какие-то, поэтому лучше самому следить за всеми осями try { if (CandleArray == null) { return; } int startPozition = 0; // первая отображаемая свеча int endPozition = chartForCandle.Series.FindByName("SeriesCandle").Points.Count; // последняя отображаемая свеча if (chartForCandle.ChartAreas[0].AxisX.ScrollBar.IsVisible == true) {// если уже выбран какой-то диапазон, назначаем первую и последнюю исходя из этого диапазона startPozition = Convert.ToInt32(chartForCandle.ChartAreas.FindByName("ChartAreaCandle").AxisX.ScaleView.Position); endPozition = Convert.ToInt32(chartForCandle.ChartAreas.FindByName("ChartAreaCandle").AxisX.ScaleView.Position) + Convert.ToInt32(chartForCandle.ChartAreas.FindByName("ChartAreaCandle").AxisX.ScaleView.Size); } chartForCandle.ChartAreas.FindByName("ChartAreaCandle").AxisY2.Maximum = GetMaxValueOnChart(CandleArray, startPozition, endPozition); chartForCandle.ChartAreas.FindByName("ChartAreaCandle").AxisY2.Minimum = GetMinValueOnChart(CandleArray, startPozition, endPozition); chartForCandle.Refresh(); } catch { return; } }
private double RangeChanged(System.Windows.Forms.DataVisualization.Charting.Chart chart, string dataSeries, float[] data, long lowerIndex, long upperIndex, double newLowerFrequency, ref double graphBinFreqInc) { if (data.Length > 0) { long graphBinCount = upperIndex - lowerIndex; long lowerResGraphBinCount; if (graphBinCount > MAXIMUM_GRAPH_BIN_COUNT) { lowerResGraphBinCount = MAXIMUM_GRAPH_BIN_COUNT; } else { lowerResGraphBinCount = graphBinCount; } double inc = (double)graphBinCount / lowerResGraphBinCount; graphBinFreqInc = inc * binSize; double index = lowerIndex; double value; double binFrequency = newLowerFrequency; double minY = 9999, maxY = -9999; System.Windows.Forms.DataVisualization.Charting.DataPoint graphPoint; for (int i = 0; i < lowerResGraphBinCount; i++) { value = data[(long)index]; if (Double.IsNaN(value) || value > 100 || value < -100) { value = -25; } else { if (i < chart.Series[dataSeries].Points.Count) { graphPoint = chart.Series[dataSeries].Points.ElementAt(i); graphPoint.SetValueXY(i, value); graphPoint.AxisLabel = (Math.Round((binFrequency / 1000000), 4)).ToString() + "MHz"; } else { graphPoint = new System.Windows.Forms.DataVisualization.Charting.DataPoint(i, value); graphPoint.AxisLabel = (Math.Round((binFrequency / 1000000), 4)).ToString() + "MHz"; chart.Series[dataSeries].Points.Add(graphPoint); } if (value < minY) { minY = value; } if (value > maxY) { maxY = value; } } index += inc; binFrequency += graphBinFreqInc; } double avgStrength = 0; int valueCount = 0; for (long i = lowerIndex + 1; i < upperIndex; i++) { value = data[i]; if (Double.IsNaN(value) || value > 100 || value < -100) { value = -25; } else { avgStrength += value; valueCount++; } } avgStrength /= valueCount; chart.Refresh(); chart.ChartAreas[0].AxisX.ScaleView.Zoom(1, lowerResGraphBinCount - 1); if (dataSeries == "Series1" || dataSeries == "Series2") { if (minY < chart.ChartAreas[0].AxisY.Minimum) { chart.ChartAreas[0].AxisY.Minimum = Math.Round(minY, 2); } if (maxY > chart.ChartAreas[0].AxisY.Maximum) { chart.ChartAreas[0].AxisY.Maximum = Math.Round(maxY, 2); } } if (dataSeries == "Series1") { textBox7.Text = avgStrength.ToString(); } if (dataSeries == "Series2") { textBox8.Text = avgStrength.ToString(); } return(avgStrength); } return(0); }