Exemplo n.º 1
0
        /// <summary>
        /// Добавление на канвас "серой" области
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="X1"></param>
        /// <param name="X2"></param>
        /// <param name="manager"></param>
        protected static void AddWhitespace(Canvas canvas, double X1, double X2, ScaleManager manager)
        {
            if (X2 <= X1)
            {
                return;
            }

            double d_start = manager.GetOffset((UInt64)X1);
            double d_end   = manager.GetOffset((UInt64)X2);

            Rectangle rect = new Rectangle();

            rect.Stroke = new SolidColorBrush(Colors.Green);
            rect.Fill   = new SolidColorBrush(Color.FromArgb(100, 125, 125, 125));
            rect.Width  = d_end - d_start;
            rect.Height = (canvas.ActualHeight != 0) ? canvas.ActualHeight - 4 : 4;

            canvas.Children.Add(rect);
            Canvas.SetLeft(rect, d_start);
            Canvas.SetBottom(rect, 2);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Отображение простого сигнала
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="iter"></param>
        /// <param name="DrawValue"></param>
        protected void RenderSimpleSignal(Canvas canvas, IValueIterator iter, DrawValueDelegate DrawValue)
        {
            markers.Clear();
            canvas.Children.Clear();

            UInt64 MinimumVisibleChange = scaleManager.MinimumVisibleChange;

            //Рисование начала диаграммы
            UInt64 x1 = 0, x2 = 0;
            string value = string.Empty;

            x1 = scaleManager.VisibleStartTime;

            iter.SetCurrentIndexByKey(scaleManager.VisibleStartTime);
            x2 = iter.LastEvent;
            if (x2 > scaleManager.VisibleEndTime)
            {
                x2 = scaleManager.VisibleEndTime;
            }
            if (x2 < scaleManager.VisibleStartTime)
            {
                x2 = scaleManager.VisibleStartTime;
            }

            Markers.Add(new TimeMarker(x1, scaleManager.GetOffset(x1)));

            while (true)
            {
                //Началась "серая" область
                if ((x2 - x1) <= MinimumVisibleChange)
                {
                    UInt64 whitespace = x1;

                    while (true)
                    {
                        x1 = iter.LastEvent;
                        if (x1 > scaleManager.VisibleEndTime)
                        {
                            x1 = scaleManager.VisibleEndTime;
                        }
                        if (x1 < scaleManager.VisibleStartTime)
                        {
                            x1 = scaleManager.VisibleStartTime;
                        }
                        iter.MoveNext();
                        x2 = iter.LastEvent;
                        if (x2 > scaleManager.VisibleEndTime)
                        {
                            x2 = scaleManager.VisibleEndTime;
                        }
                        if (x2 < scaleManager.VisibleStartTime)
                        {
                            x2 = scaleManager.VisibleStartTime;
                        }
                        //закончилась "серая" область
                        if ((x2 - x1) >= scaleManager.MinimumVisibleChange)
                        {
                            AddWhitespace(canvas, whitespace, x1, scaleManager);
                            value = AbstractSignalDump.GetStringValue(iter);
                            Markers.Add(new TimeMarker(x1, scaleManager.GetOffset(x1)));
                            DrawValue(canvas, x1, x2, scaleManager, value);
                            break;
                        }

                        if ((iter.LastEvent >= scaleManager.VisibleEndTime) || (iter.IsEndOfIteration == true))
                        {
                            AddWhitespace(canvas, whitespace, iter.LastEvent, scaleManager);
                            Markers.Add(new TimeMarker(iter.LastEvent, scaleManager.GetOffset(iter.LastEvent)));
                            break;
                        }
                        iter.SetCurrentIndexByKey(x1 + MinimumVisibleChange);
                    }
                }
                else
                {
                    value = AbstractSignalDump.GetStringValue(iter);
                    Markers.Add(new TimeMarker(x1, scaleManager.GetOffset(x1)));
                    DrawValue(canvas, x1, x2, scaleManager, value);
                    iter.MoveNext();
                }

                x1 = x2;
                x2 = iter.LastEvent;

                if ((iter.LastEvent >= scaleManager.VisibleEndTime) || (iter.IsEndOfIteration == true))
                {
                    value = AbstractSignalDump.GetStringValue(iter);
                    Markers.Add(new TimeMarker(x1, scaleManager.GetOffset(x1)));
                    DrawValue(canvas, x1, scaleManager.VisibleEndTime, scaleManager, value);
                    break;
                }

                if (x2 > scaleManager.VisibleEndTime)
                {
                    x2 = scaleManager.VisibleEndTime;
                }
                if (x2 < scaleManager.VisibleStartTime)
                {
                    x2 = scaleManager.VisibleStartTime;
                }
            }
        }