Example #1
0
        public My_Variable(string Name, string FullName, Signal signal)
        {
            this.name     = Name;
            this.fullname = FullName;
            this.signal   = signal;

            if (signal.Range[0].Length != 1)
            {
                DataRepresentation = new VectorDataRepresentation();
            }
            else
            {
                DataRepresentation = new DataRepresentation();
            }

            showTypeName = Visibility.Collapsed;
            showSize     = Visibility.Collapsed;
            height       = 20;

            CreateChildrens();
        }
Example #2
0
        public override void RenderAnalog(Canvas canvas, IValueIterator iter)
        {
            VectorDataRepresentation datapres = iter.DataRepresentation as VectorDataRepresentation;

            RenderAnalogBus(canvas, iter, datapres, GetValueFromTime, GetValueFromItarotor);
        }
Example #3
0
        /// <summary>
        /// Отображение шины в аналоговом виде
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="iter"></param>
        /// <param name="DataPres"></param>
        /// <param name="GetValue"></param>
        protected void RenderAnalogBus <T>(Canvas canvas, IValueIterator iter, VectorDataRepresentation 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, Convert.ToDouble(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), Convert.ToDouble(value)));
                    polyLine.Points.Add(new Point(scaleManager.GetOffset(x2), Convert.ToDouble(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), Convert.ToDouble(value)));
                        polyLine.Points.Add(new Point(scaleManager.GetOffset(x2), Convert.ToDouble(value)));
                        break;
                    }

                    if (x2 > scaleManager.VisibleEndTime)
                    {
                        x2 = scaleManager.VisibleEndTime;
                    }
                    if (x2 < scaleManager.VisibleStartTime)
                    {
                        x2 = scaleManager.VisibleStartTime;
                    }
                }
                double DeltaY = (max != min) ? (height / Convert.ToDouble(max - min)) : 1;
                for (int i = 0; i < polyLine.Points.Count; i++)
                {
                    Point point = polyLine.Points[i];
                    point.Y            = (Convert.ToDouble(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, Convert.ToDouble(value)));
                }
                double DeltaY = (max != min) ? (height / Convert.ToDouble(max - min)) : 1;
                for (int i = 0; i < polyLine.Points.Count; i++)
                {
                    Point point = polyLine.Points[i];
                    point.Y            = (Convert.ToDouble(max) - point.Y) * DeltaY;
                    polyLine.Points[i] = point;
                }
            }

            canvas.Children.Add(polyLine);
        }
Example #4
0
        /// <summary>
        /// Преобразование в Nullable<BigInteger>  с учетом формата представления данных
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static Nullable <BigInteger> ToBigInteger(bool?[] value, VectorDataRepresentation dataRepresentation)
        {
            BigInteger res = 0;
            BigInteger pow = 1;

            //if(dataRepresentation.IsInverted)

            switch (dataRepresentation.DecimalDataPresentation)
            {
            case DecimalDataPresentation.Unsigned:
            {
                for (int i = value.Length - 1; i >= 0; i--, pow *= 2)
                {
                    if (value[i] == true)
                    {
                        res += pow;
                    }

                    if (value[i] == null)
                    {
                        return(null);
                    }
                }
            }
            break;

            case DecimalDataPresentation.Complement:
            {
                if (value[0] == null)
                {
                    return(null);
                }
                if (value[0] == false)
                {
                    for (int i = value.Length - 1; i >= 1; i--, pow *= 2)
                    {
                        if (value[i] == true)
                        {
                            res += pow;
                        }

                        if (value[i] == null)
                        {
                            return(null);
                        }
                    }
                }
                else
                {
                    for (int i = value.Length - 1; i >= 1; i--, pow *= 2)
                    {
                        if (value[i] != true)
                        {
                            res += pow;
                        }

                        if (value[i] == null)
                        {
                            return(null);
                        }
                    }
                    res = -res;
                }
            }
            break;

            case DecimalDataPresentation.Twos_Сomplement:
            {
                if (value[0] == null)
                {
                    return(null);
                }

                if (value[0] == false)
                {
                    for (int i = value.Length - 1; i >= 1; i--, pow *= 2)
                    {
                        if (value[i] == true)
                        {
                            res += pow;
                        }

                        if (value[i] == null)
                        {
                            return(null);
                        }
                    }
                }
                else
                {
                    pow = -1; bool isFlag = false;
                    for (int i = value.Length - 1; i >= 1; i--, pow *= 2)
                    {
                        if (value[i] == null)
                        {
                            return(null);
                        }

                        if (value[i].Value ^ isFlag)
                        {
                            res += pow;
                        }
                        isFlag |= value[i].Value;
                    }
                    if (!isFlag)
                    {
                        res = pow;         // for values like 1000000000 .. 00
                    }
                }
            }
            break;
            }

            return(res);
        }
Example #5
0
        /// <summary>
        /// Преобразование в строку данных Nullable<bool>[]
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dataRepresentation"></param>
        /// <returns></returns>
        public static string ToString(Nullable <bool>[] data, VectorDataRepresentation dataRepresentation)
        {
            if (dataRepresentation.IsInverted)
            {
                data = Invert(data);
            }

            StringBuilder res = new StringBuilder();

            switch (dataRepresentation.EnumerationSystem)
            {
            case EnumerationSystem.Bin:
            {
                foreach (Nullable <bool> b in data)
                {
                    if (b == null)
                    {
                        res.Append('X');
                    }
                    else
                    {
                        if (b == true)
                        {
                            res.Append('1');
                        }
                        else
                        {
                            res.Append('0');
                        }
                    }
                }
            }
            break;

            case EnumerationSystem.Oct:
            {
                int index = 0;
                int count = data.Length % 3;

                Nullable <bool>[] buf = new bool?[count];

                Array.Copy(data, index, buf, 0, count);

                int num = ToInt(buf);
                if (num == -1)
                {
                    res.Append('X');
                }
                else
                {
                    res.Append(num);
                }

                index += count;

                while (index < data.Length)
                {
                    int nextindex = index + 3;
                    if (nextindex >= data.Length)
                    {
                        nextindex = data.Length;
                    }

                    count = nextindex - index;

                    buf = new bool?[count];

                    Array.Copy(data, index, buf, 0, count);

                    num = ToInt(buf);
                    if (num == -1)
                    {
                        res.Append('X');
                    }
                    else
                    {
                        res.Append(num);
                    }
                    index += 3;
                }
            }
            break;

            case EnumerationSystem.Hex:
            {
                int index = 0;
                int count = data.Length % 4;

                Nullable <bool>[] buf = new bool?[count];

                Array.Copy(data, index, buf, 0, count);

                int num = ToInt(buf);
                switch (num)
                {
                case -1:
                    res.Append('X');
                    break;

                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                    res.Append(num);
                    break;

                case 10:
                    res.Append('A');
                    break;

                case 11:
                    res.Append('B');
                    break;

                case 12:
                    res.Append('C');
                    break;

                case 13:
                    res.Append('D');
                    break;

                case 14:
                    res.Append('E');
                    break;

                case 15:
                    res.Append('F');
                    break;
                }

                index += count;

                while (index < data.Length)
                {
                    int nextindex = index + 4;
                    if (nextindex >= data.Length)
                    {
                        nextindex = data.Length;
                    }

                    count = nextindex - index;

                    buf = new Nullable <bool> [count];

                    Array.Copy(data, index, buf, 0, count);

                    num = ToInt(buf);
                    switch (num)
                    {
                    case -1:
                        res.Append('X');
                        break;

                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        res.Append(num);
                        break;

                    case 10:
                        res.Append('A');
                        break;

                    case 11:
                        res.Append('B');
                        break;

                    case 12:
                        res.Append('C');
                        break;

                    case 13:
                        res.Append('D');
                        break;

                    case 14:
                        res.Append('E');
                        break;

                    case 15:
                        res.Append('F');
                        break;
                    }
                    index += 4;
                }
            }
            break;

            case EnumerationSystem.Dec:
            {
                int num = ToInt(data);
                if (num == -1)
                {
                    res.Append('X');
                }
                else
                {
                    res.Append(num);
                }
            }
            break;
            }

            return(res.ToString());
        }
Example #6
0
        public static string BinaryToDec(bool?[] value, VectorDataRepresentation dataRepresentation)
        {
            BigInteger?res = ToBigInteger(value, dataRepresentation);

            return((res == null) ? "X" : res.Value.ToString("n0"));
        }