private void InvalidateDynamicSeries() { if (ClipRect.Width == 0) { return; } if (Zooming.PointEnabled == true) { return; } if (BufferedSeries.PointsCount == 0) { return; } if ((SwiftPlotDiagram)Diagram == null) { return; } SwiftPlotDiagramAxisX axisX = ((SwiftPlotDiagram)Diagram).AxisX; double visualMin = (double)axisX.VisualRange.MinValue; double visualMax = (double)axisX.VisualRange.MaxValue; double visualWidth = visualMax - visualMin; if (visualWidth == 0) { return; } double step = (visualWidth / BaseTime) / ClipRect.Width; step = (step < 1) ? 1 : step; int start = (int)(visualMin / BaseTime); int stop = (int)Math.Ceiling(visualMax / BaseTime); stop = (stop < BufferedSeries.PointsCount) ? stop : BufferedSeries.PointsCount; int count = (int)((double)(stop - start) / step); if (count <= 0) { return; } if (start >= step) { start -= (int)step; count++; } if ((start + count * step) < BufferedSeries.PointsCount) { count++; } double time; double startTime = start * BaseTime; float[] values; SeriesPoint[] points; Series.BeginUpdate(); try { ClearSeriesPoint(); BufferedSeries.Lock(); try { foreach (UlDoubleBufferedSeries bufferedSeries in BufferedSeries.IndexList) { Series series = Series[bufferedSeries.Name]; if (series.Visible == true) { points = new SeriesPoint[count]; values = bufferedSeries.Points.ToArray(start, step, count); for (int i = 0; i < values.Length; i++) { time = startTime + Math.Round(i * step) * BaseTime; points[i] = new SeriesPoint(time, values[i]); } series.Points.AddRange(points); } Win32.SwitchToThread(); } } finally { BufferedSeries.Unlock(); } } finally { Series.EndUpdate(); } }
private void InvalidateStaticSeries() { if (ClipRect.Width == 0) { return; } if (BufferedSeries.PointsCount == 0) { return; } if ((SwiftPlotDiagram)Diagram == null) { return; } Series.BeginUpdate(); try { double startTime, time; float[] values; int start, count; SeriesPoint[] points; SwiftPlotDiagramAxisX axisX = ((SwiftPlotDiagram)Diagram).AxisX; double visualMin = (double)axisX.VisualRange.MinValue; double visualMax = (double)axisX.VisualRange.MaxValue; double visualWidth = visualMax - visualMin; double wholeMin = (double)axisX.WholeRange.MinValue; double wholeMax = (double)axisX.WholeRange.MaxValue; double wholeWidth = wholeMax - wholeMin; double step; if (visualWidth == wholeWidth) { start = 0; step = (double)BufferedSeries.PointsCount / (double)ClipRect.Width; if (step > 1) { count = ClipRect.Width; } else { step = 1; count = BufferedSeries.PointsCount; } } else { start = (int)(visualMin / BaseTime); count = (int)(visualWidth / BaseTime); step = (count <= ClipRect.Width) ? 1 : ((double)count / (double)ClipRect.Width); count = (int)(count / step) + 4; if (start - step >= 0) { start -= (int)step; count++; } } startTime = start * BaseTime; ClearSeriesPoint(); BufferedSeries.Lock(); try { foreach (UlDoubleBufferedSeries bufferedSeries in BufferedSeries.IndexList) { Series series = Series[bufferedSeries.Name]; if (series.Visible == true) { points = new SeriesPoint[count]; values = bufferedSeries.Points.ToArray(start, step, count); for (int i = 0; i < values.Length; i++) { time = startTime + Math.Round(i * step) * BaseTime; points[i] = new SeriesPoint(time, values[i]); } series.Points.AddRange(points); } Win32.SwitchToThread(); } } finally { BufferedSeries.Unlock(); } } finally { Series.EndUpdate(); } }