public void UpdateWaveform(double[] samples, int rows, int columns) { replayDithering = true; var filterChannels = FilterChannels; EnsureWaveformRows(rows); var graphPanes = MasterPane.PaneList; var seriesCount = graphPanes.Sum(pane => pane.CurveList.Count); for (int i = 0; i < values.Length; i++) { var setBounds = AutoScaleX; var seriesIndex = sequenceIndices[i] * values.Length + i; if (seriesIndex < seriesCount) { var curveList = graphPanes[seriesIndex % graphPanes.Count].CurveList; var curveItem = curveList[seriesIndex / graphPanes.Count]; values[i] = (DownsampledPointPairList)curveItem.Points; } else { values[i] = new DownsampledPointPairList(random); setBounds = true; } var points = values[i]; random.Mode = i == 0 ? ReplayMode.Recording : ReplayMode.Replaying; points.HistoryLength = columns * HistoryLength; var channel = selectedPage * channelsPerPage + i; if (filterChannels) { channel = selectedChannels[channel]; } for (int j = 0; j < columns; j++) { points.Add(samples[channel * columns + j] + i * ChannelOffset); } if (setBounds) { points.SetBounds(0, points.HistoryLength, maxPointsPerChannel); } } random.Mode = ReplayMode.None; if (sequenceIndices[0] * values.Length >= seriesCount || values.Length > seriesCount) { for (int i = 0; i < values.Length; i++) { var channel = selectedPage * channelsPerPage + i; if (filterChannels) { channel = selectedChannels[channel]; } InsertTimeSeries(i, channel); } } var maxSeries = WaveformBufferLength * values.Length; if (seriesCount >= maxSeries) { if (overlayChannels) { EnsureMaxSeries(GraphPane.CurveList, maxSeries); } else { var maxPaneSeries = maxSeries / values.Length; foreach (var pane in graphPanes) { EnsureMaxSeries(pane.CurveList, maxPaneSeries); } } } for (int i = 0; i < sequenceIndices.Length; i++) { sequenceIndices[i] = (sequenceIndices[i] + 1) % WaveformBufferLength; } }
public void UpdateWaveform(int channel, double[] samples, int rows, int columns) { var channelLabel = channel; var graphPanes = MasterPane.PaneList; if (FilterChannels) { channel = selectedChannels.IndexOf(channel); } var channelPage = channel / channelsPerPage; if (channelPage != selectedPage || channel < 0) { return; } var channelPane = channel % channelsPerPage; var seriesPane = !overlayChannels && channelPane < graphPanes.Count ? graphPanes[channelPane] : graphPanes[0]; var seriesCount = seriesPane.CurveList.Count; var setBounds = AutoScaleX; var seriesIndex = sequenceIndices[channelPane]; if (!overlayChannels && seriesIndex < seriesCount) { var curveList = graphPanes[channelPane].CurveList; var curveItem = curveList[seriesIndex]; values[channelPane] = (DownsampledPointPairList)curveItem.Points; } else { values[channelPane] = new DownsampledPointPairList(random); setBounds = true; } var points = values[channelPane]; points.HistoryLength = columns * HistoryLength; for (int j = 0; j < samples.Length; j++) { points.Add(samples[j] + channelPane * ChannelOffset); } if (setBounds) { points.SetBounds(0, points.HistoryLength, maxPointsPerChannel); } if (overlayChannels || seriesIndex >= seriesCount) { InsertTimeSeries(channelPane, channelLabel); } var maxSeries = WaveformBufferLength; if (seriesCount >= maxSeries) { if (overlayChannels) { EnsureMaxSeries(GraphPane.CurveList, maxSeries); } else { EnsureMaxSeries(graphPanes[channelPane].CurveList, maxSeries); } } sequenceIndices[channelPane] = (sequenceIndices[channelPane] + 1) % WaveformBufferLength; }