public static GCandleSeries ToGCandleSeries(this OhlcData data, ResolutionSourceProvider resolver = null, string title = "")
        {
            var ohlcChartPointEvaluator = new OhlcInstantChartPointMapper(resolver ?? new ResolutionSourceProvider(data.Resolution));

            var series = new GCandleSeries
            {
                Configuration = ohlcChartPointEvaluator,
                IncreaseBrush = Brushes.Aquamarine,
                DecreaseBrush = Brushes.LightCoral,
                Fill          = Brushes.Transparent,
                Title         = title
            };

            if (data == null)
            {
                return(series);
            }

            var values = new GearedValues <OhlcInstantChartPoint>();

            values.AddRange(data.OrderBy(x => x.DateTimeUtc).Select(i => new OhlcInstantChartPoint(i)));

            series.Values = values;

            return(series);
        }
            private void TransferToChartValuesHelper(
                List <PacketInfo> packetInfo,
                GearedValues <DateTimePoint> packetLengthChartValues,
                GearedValues <ObservablePoint> timeDiffChartValues,
                PacketInfoWrapper prevPacketInfoWrapper)
            {
                int timeDiffStartOffset = timeDiffChartValues.Count;
                List <DateTimePoint>   dateTimePoints = new List <DateTimePoint>();
                List <ObservablePoint> timeDiffPoints = new List <ObservablePoint>();

                foreach (PacketInfo p in packetInfo)
                {
                    DateTimePoint dtp = new DateTimePoint(p.time, p.length);
                    dateTimePoints.Add(dtp);

                    if (prevPacketInfoWrapper.p != null)
                    {
                        int diffMs =
                            (int)(p.time - prevPacketInfoWrapper.p.time).TotalMilliseconds;
                        ObservablePoint point =
                            new ObservablePoint(timeDiffPoints.Count + timeDiffStartOffset, diffMs);
                        timeDiffPoints.Add(point);
                    }
                    prevPacketInfoWrapper.p = p;
                }

                packetInfo.Clear();
                packetLengthChartValues.AddRange(dateTimePoints);
                timeDiffChartValues.AddRange(timeDiffPoints);
            }
示例#3
0
        private GearedValues <ObservablePoint> CutWave(GearedValues <ObservablePoint> wave, int cutHeaderLever = 400)
        {
            GearedValues <ObservablePoint> data = new GearedValues <ObservablePoint>();

            data.AddRange(wave.Skip(cutSkip).Take(cutTake));
            return(data);
        }
示例#4
0
        public Chart()
        {
            InitializeComponent();
            Global g      = Global.instance();
            var    values = g.reader.GetChannelVoltage(0);

            _values.AddRange(values);
        }
示例#5
0
        private void AddValue(string longFrag, ICollection <long> valueBuffer, GearedValues <long> sensorValues, string animationTitle = null)
        {
            var value = Parse(longFrag);

            if (valueBuffer.Count >= _capacity)
            {
                sensorValues.AddRange(valueBuffer);
                valueBuffer.Clear();
            }

            valueBuffer.Add(value);
            if (animationTitle != null)
            {
                sensorValues.AddRange(valueBuffer);
                valueBuffer.Clear();

                AddAnimationTitle(sensorValues.Count, animationTitle);
            }
        }
        public void Read()
        {
            GearedValues <ObservablePoint> copyValues = new GearedValues <ObservablePoint>();

            if (IsReading)
            {
                return;
            }

            //lets keep in memory only the last 20000 records,
            //to keep everything running faster

            IsReading = true;

            Action readFromTread = () =>
            {
                while (IsReading)
                {
                    Thread.Sleep(1000);

                    //when multi threading avoid indexed calls like -> Values[0]
                    //instead enumerate the collection
                    //ChartValues/GearedValues returns a thread safe copy once you enumerate it.
                    //TIPS: use foreach instead of for
                    //LINQ methods also enumerate the collections

                    chartValue.Clear();
                    chartValue.AddRange(ChartsData.ChartPositionTimeValues);
                    int len = chartValue.Count;
                    if (len > 0)
                    {
                        //copyValues.AddRange(UAClientForm.ChartPositionTimeValues);

                        ChartsData.CartesianChartPositionTimeValues.AddRange(chartValue);

                        for (int i = 0; i < len & ChartsData.ChartPositionTimeValues.Count > 1; i++)
                        {
                            ChartsData.ChartPositionTimeValues.RemoveAt(0);
                        }
                    }
                    chartValue.Clear();
                }
            };

            //2 different tasks adding a value every ms
            //add as many tasks as you want to test this feature
            Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
            //Task.Factory.StartNew(readFromTread);
        }
示例#7
0
        private void DrawWave(GearedValues <ObservablePoint> data)
        {
            var maxf = data.Select(x => x.Y).Max();
            var minf = data.Select(x => x.Y).Min();
            GearedValues <ObservablePoint> tempdata = new GearedValues <ObservablePoint>();

            tempdata.AddRange(data.Select(x =>
            {
                x.Y = maxf - Math.Abs(x.Y - minf);
                return(x);
            }));

            var max     = Math.Round(tempdata.Select(x => x.Y).Max(), 2);
            var min     = Math.Round(tempdata.Select(x => x.Y).Min(), 2);
            var avg     = Math.Round((Math.Abs(max) + Math.Abs(min)) / 5, 2);
            var step    = Math.Ceiling(Math.Abs(min) / avg);
            var stepmax = Math.Ceiling(Math.Abs(max) / avg);

            min            = min >= 0 ? (avg * step) : (-1 * avg * step);
            max            = max >= 0 ? (avg * stepmax) : (-1 * avg * stepmax);
            maxVal         = max;
            minVal         = min;
            Yaxis.MaxValue = max;
            Yaxis.MinValue = min;
            XFormatter     = val => (val).ToString() + "ms";
            YFormatter     = val =>
            {
                return(Math.Round((max - Math.Abs(val - min)), 1).ToString() + "Ω");
            };

            YaxisSpe.Step = Math.Abs(avg);
            series        = new SeriesCollection();
            series.Add(new GLineSeries
            {
                StrokeThickness   = 2,
                Stroke            = new SolidColorBrush(System.Windows.Media.Color.FromRgb(28, 142, 196)),
                Fill              = System.Windows.Media.Brushes.Transparent,
                LineSmoothness    = 10,//0为折现样式
                PointGeometrySize = 0,
                PointForeground   = new SolidColorBrush(System.Windows.Media.Color.FromRgb(34, 46, 49)),
                Values            = tempdata
            });
            chart_wave.Series = series;

            //Yaxis.Sections = new SectionsCollection {
            //     new AxisSection
            //        {
            //            Value = maxVal-Math.Abs(minVal),
            //             Stroke = Brushes.Red,
            //            StrokeThickness = 1.5,
            //        },

            //};
        }
示例#8
0
        public ISeriesView CreateLineSeries(IEnumerable <DateModel> values, Series series)
        {
            var gearedValues = new GearedValues <DateModel> {
                Quality = Quality.Low
            };

            gearedValues.AddRange(values);

            return(new GLineSeries(_dayConfig)
            {
                Values = gearedValues,
                Fill = Brushes.Transparent,
                PointGeometry = null,
                LineSmoothness = 0,
                DataLabels = false,
                Stroke = new SolidColorBrush((Color)ColorConverter.ConvertFromString(series.ColorHex)),
                StrokeThickness = series.Thickness,
                Title = series.Name,
                ScalesYAt = series.Axis == Axes.Y1 ? 0 : 1
            });
        }
        public static GColumnSeries ToVolumeSeries(this OhlcData data, ResolutionSourceProvider resolver = null, string title = "")
        {
            var chartPointEvaluator = new InstantChartPointMapper(resolver ?? new ResolutionSourceProvider(data.Resolution));

            var series = new GColumnSeries
            {
                Configuration = chartPointEvaluator,
                Title         = title
            };

            if (data == null)
            {
                return(series);
            }

            var values = new GearedValues <InstantChartPoint>();

            values.AddRange(data.OrderBy(x => x.DateTimeUtc).Select(i => new InstantChartPoint(i)));
            values.Quality = Quality.Low;
            series.Values  = values;

            return(series);
        }