Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }