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); }
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); }
public Chart() { InitializeComponent(); Global g = Global.instance(); var values = g.reader.GetChannelVoltage(0); _values.AddRange(values); }
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); }
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, // }, //}; }
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); }