/// <summary> /// Creates the segments of FastLineSeries. /// </summary> public override void CreateSegments() { if (GroupedSeriesYValues != null && GroupedSeriesYValues[0].Contains(double.NaN)) { List <List <double> > yValList; List <List <double> > xValList; this.CreateEmptyPointSegments(GroupedSeriesYValues[0], out yValList, out xValList); } else if (YValues.Contains(double.NaN)) { List <List <double> > yValList; List <List <double> > xValList; this.CreateEmptyPointSegments(YValues, out yValList, out xValList); } else { bool isGrouping = this.ActualXAxis is CategoryAxis ? (this.ActualXAxis as CategoryAxis).IsIndexed : true; if (!isGrouping) { xValues = GroupedXValuesIndexes; } else { xValues = (ActualXValues is IList <double> && !IsIndexed) ? ActualXValues as IList <double> : GetXValues(); } if (!isGrouping) { Segments.Clear(); Adornments.Clear(); if (Segment == null || Segments.Count == 0) { FastLineSegment segment = new FastLineSegment(xValues, GroupedSeriesYValues[0], this); Segment = segment; Segments.Add(segment); } } else { ClearUnUsedAdornments(this.DataCount); if (Segment == null || Segments.Count == 0) { FastLineSegment segment = new FastLineSegment(xValues, YValues, this); Segment = segment; Segments.Add(segment); } else if (ActualXValues != null) { Segment.SetData(xValues, YValues); (Segment as FastLineSegment).SetRange(); Segment.Item = ActualData; } } isAdornmentPending = true; } }
public override void CreateEmptyPointSegments(IList <double> YValues, out List <List <double> > yValList, out List <List <double> > xValList) { if (this.ActualXAxis is CategoryAxis && (!(this.ActualXAxis as CategoryAxis).IsIndexed)) { xValues = GroupedXValuesIndexes; base.CreateEmptyPointSegments(GroupedSeriesYValues[0], out yValList, out xValList); } else { xValues = (ActualXValues is IList <double> && !IsIndexed) ? ActualXValues as IList <double> : GetXValues(); base.CreateEmptyPointSegments(YValues, out yValList, out xValList); } int j = 0; // EmptyPoint calculation if (Segments.Count != yValList.Count) { Segments.Clear(); } ClearUnUsedAdornments(this.DataCount); if (Segment == null || Segments.Count == 0) { for (int i = 0; i < yValList.Count && i < xValList.Count; i++) { if (i < xValList.Count && i < yValList.Count && xValList[i].Count > 0 && yValList[i].Count > 0) { Segment = new FastLineSegment(xValList[i], yValList[i], this); Segments.Add(Segment); } } } else if (xValues != null) { foreach (var segment in Segments) { if (j < xValList.Count && j < yValList.Count && xValList[j].Count > 0 && yValList[j].Count > 0) { segment.SetData(xValList[j], yValList[j]); (segment as FastLineSegment).SetRange(); } j++; } } isAdornmentPending = true; }
/// <summary> /// Called when DataSource property changed /// </summary> /// <param name="oldValue"></param> /// <param name="newValue"></param> protected override void OnDataSourceChanged(System.Collections.IEnumerable oldValue, System.Collections.IEnumerable newValue) { Segment = null; base.OnDataSourceChanged(oldValue, newValue); }