コード例 #1
0
 public override void UpdateCanvas(Canvas canvas, IValueIterator iter)
 {
     markers.Clear();
     if (iter.DataRepresentation.IsAnalog == true)
     {
         RenderAnalog(canvas, iter);
     }
     else
     {
         RenderSimple(canvas, iter);
     }
 }
コード例 #2
0
 public NewSortedDictionaryScopeIterator(SignalScopeDump dump)
 {
     this.Dump = dump;
     this.Type = dump.Type;
     iterators = new List <IValueIterator>();
     foreach (AbstractSignalDump d in dump.Dumps)
     {
         IValueIterator i = d.Iterator;
         i.Reset();
         iterators.Add(i);
     }
 }
コード例 #3
0
        public override void UpdateCanvas(Canvas canvas, IValueIterator iter)
        {
            DataRepresentation datapres = iter.DataRepresentation;

            if (datapres.IsAnalog == true)
            {
                RenderAnalog(canvas, iter);
            }
            else
            {
                RenderSimpleSignal(canvas, iter, DrawValue);
            }
        }
コード例 #4
0
        /// <summary>
        /// Получение значения текущего итератора в виде строки
        /// </summary>
        /// <returns></returns>
        public static string GetStringValue(IValueIterator iterator)
        {
            if (iterator.CurrentValue == null)
            {
                return("<NULL>");
            }
            string result = string.Empty;

            AbstractValue val = iterator.CurrentValue.LastValue;

            result = DataContainer.ValueDump.DataConvertorUtils.ToString(val, iterator.DataRepresentation);

            return(result);
        }
コード例 #5
0
        public Map(IValueIterable <T> collection) : this(default_capacity)
        {
            if (collection == null)
            {
                return;
            }

            for (IValueIterator <T> x = collection.Begin(); x.IsAlive; x.Add())
            {
                if (x.Value != null)
                {
                    Add(x.Value.GetHashCode(), x.Value);
                }
            }
        }
コード例 #6
0
 public override void UpdateCanvas(Canvas canvas, IValueIterator iter)
 {
     RenderSimpleSignal(canvas, iter, DrawValue);
 }
コード例 #7
0
 public abstract void RenderAnalog(Canvas canvas, IValueIterator iter);
コード例 #8
0
 private void RenderSimple(Canvas canvas, IValueIterator iter)
 {
     RenderSimpleBus(canvas, iter, DrawValue);
 }
コード例 #9
0
 /// <summary>
 /// Обновление изображения
 /// </summary>
 /// <param name="canvas"></param>
 /// <param name="iter"></param>
 public abstract void UpdateCanvas(Canvas canvas, IValueIterator iter);
コード例 #10
0
 public override void UpdateCanvas(System.Windows.Controls.Canvas canvas, IValueIterator iter)
 {
     RenderSimpleBus(canvas, iter, DrawValue);
 }
コード例 #11
0
 private int GetValueFromItarotor(IValueIterator iter, DataRepresentation DataPres)
 {
     return((iter.CurrentValue.LastValue as IntegerValue).Value);
 }
コード例 #12
0
        public void RenderAnalog(Canvas canvas, IValueIterator iter)
        {
            DataRepresentation datapres = iter.DataRepresentation;

            RenderAnalogSimpleSignal(canvas, iter, datapres, GetValueFromTime, GetValueFromItarotor);
        }
コード例 #13
0
 public static IEnumerator <T> ToEnumerator <T>(this IValueIterator <T> inst) =>
 new IteratorToEnumeratorWrapper <T>(inst).GetEnumerator();
コード例 #14
0
        public override void RenderAnalog(Canvas canvas, IValueIterator iter)
        {
            VectorDataRepresentation datapres = iter.DataRepresentation as VectorDataRepresentation;

            RenderAnalogBus(canvas, iter, datapres, GetValueFromTime, GetValueFromItarotor);
        }
コード例 #15
0
        /// <summary>
        /// Отображение шины в обычном виде
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="iter"></param>
        /// <param name="DrawValue"></param>
        protected void RenderSimpleBus(Canvas canvas, IValueIterator iter, DrawValueDelegate DrawValue)
        {
            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))
                        {
                            Markers.Add(new TimeMarker(whitespace, scaleManager.GetOffset(whitespace)));
                            AddWhitespace(canvas, whitespace, iter.LastEvent, scaleManager);
                            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;
                }
            }
        }
コード例 #16
0
 private Double GetValueFromItarotor(IValueIterator iter, DataRepresentation DataPres)
 {
     return((double)(DataContainer.ValueDump.DataConvertorUtils.ToBigInteger((iter.CurrentValue.LastValue as STD_ULOGIC_VECTOR_VALUE), DataPres as VectorDataRepresentation).GetValueOrDefault(0)));
 }
コード例 #17
0
        /// <summary>
        /// Отображение сигнала в аналоговом виде
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="iter"></param>
        /// <param name="DataPres"></param>
        /// <param name="GetValue"></param>
        protected void RenderAnalogSimpleSignal <T>(Canvas canvas, IValueIterator iter, DataRepresentation DataPres, GetValueDelegateFromTime <T> GetValueFromTime, GetValueDelegateFromIterator <T> GetValueFromIterator) where T : IConvertible
        {
            canvas.Children.Clear();

            Polyline polyLine = new Polyline();

            polyLine.Stroke          = Brushes.Black;
            polyLine.StrokeThickness = 1;


            if (scaleManager.VisibleTimeDiapasone < (scaleManager.Width * 5.0))
            {
                iter.SetCurrentIndexByKey(scaleManager.VisibleStartTime);

                double min   = GetValueFromTime(ScaleManager.VisibleStartTime, DataPres).ToDouble(CultureInfo.InvariantCulture);;
                double max   = min;
                double value = 0;

                double height = canvas.ActualHeight;


                iter.SetCurrentIndexByKey(scaleManager.VisibleStartTime);
                value = GetValueFromTime(ScaleManager.VisibleStartTime, DataPres).ToDouble(CultureInfo.InvariantCulture);;
                polyLine.Points.Add(new Point(0, (double)(value)));

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

                x1 = scaleManager.VisibleStartTime;
                UInt64 MinimumVisibleChange = scaleManager.MinimumVisibleChange * 2;

                iter.SetCurrentIndexByKey(scaleManager.VisibleStartTime);
                x2 = iter.LastEvent;
                if (x2 > scaleManager.VisibleEndTime)
                {
                    x2 = scaleManager.VisibleEndTime;
                }
                if (x2 < scaleManager.VisibleStartTime)
                {
                    x2 = scaleManager.VisibleStartTime;
                }
                while (true)
                {
                    value = GetValueFromIterator(iter, DataPres).ToDouble(CultureInfo.InvariantCulture);;

                    if (min > value)
                    {
                        min = value;
                    }

                    if (max < value)
                    {
                        max = value;
                    }

                    polyLine.Points.Add(new Point(scaleManager.GetOffset(x1), (double)(value)));
                    polyLine.Points.Add(new Point(scaleManager.GetOffset(x2), (double)(value)));

                    iter.MoveNext();

                    x1 = x2;
                    x2 = iter.LastEvent;

                    if ((iter.LastEvent >= scaleManager.VisibleEndTime) || (iter.IsEndOfIteration == true))
                    {
                        value = GetValueFromTime(ScaleManager.VisibleEndTime, DataPres).ToDouble(CultureInfo.InvariantCulture);;
                        if (min > value)
                        {
                            min = value;
                        }

                        if (max < value)
                        {
                            max = value;
                        }
                        polyLine.Points.Add(new Point(scaleManager.GetOffset(x1), (double)(value)));
                        polyLine.Points.Add(new Point(scaleManager.GetOffset(x2), (double)(value)));
                        break;
                    }

                    if (x2 > scaleManager.VisibleEndTime)
                    {
                        x2 = scaleManager.VisibleEndTime;
                    }
                    if (x2 < scaleManager.VisibleStartTime)
                    {
                        x2 = scaleManager.VisibleStartTime;
                    }
                }
                double DeltaY = (max != min) ? (height / (double)(max - min)) : 1;
                for (int i = 0; i < polyLine.Points.Count; i++)
                {
                    Point point = polyLine.Points[i];
                    point.Y            = ((double)max - point.Y) * DeltaY;
                    polyLine.Points[i] = point;
                }
            }
            else
            {
                iter.SetCurrentIndexByKey(scaleManager.VisibleStartTime);

                double min   = GetValueFromTime(ScaleManager.VisibleStartTime, DataPres).ToDouble(CultureInfo.InvariantCulture);;
                double max   = min;
                double value = 0;

                double height = canvas.ActualHeight;

                for (double x = 0; x < scaleManager.Width; x++)
                {
                    UInt64 time = scaleManager.GetTime(x);
                    iter.SetCurrentIndexByKey(time);
                    value = GetValueFromIterator(iter, DataPres).ToDouble(CultureInfo.InvariantCulture);;
                    if (min > value)
                    {
                        min = value;
                    }

                    if (max < value)
                    {
                        max = value;
                    }
                    polyLine.Points.Add(new Point(x, (double)(value)));
                }
                double DeltaY = (max != min) ? (height / (double)(max - min)) : 1;
                for (int i = 0; i < polyLine.Points.Count; i++)
                {
                    Point point = polyLine.Points[i];
                    point.Y            = ((double)max - point.Y) * DeltaY;
                    polyLine.Points[i] = point;
                }
            }

            canvas.Children.Add(polyLine);
        }
コード例 #18
0
 public IteratorToEnumeratorWrapper(IValueIterator <T> inst) => this.inst = inst;
コード例 #19
0
ファイル: Real_View.cs プロジェクト: cuijialang/HDL_ANTLR4
 private Double GetValueFromItarotor(IValueIterator iter, DataRepresentation DataPres)
 {
     return((iter.CurrentValue.LastValue as RealValue).Value);
 }