示例#1
0
        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;
            }
        }
示例#2
0
        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;
        }