/// <summary> /// Renders the series on the specified rendering context. /// </summary> /// <param name="rc">The rendering context.</param> public override void Render(IRenderContext rc) { // determine render range var xmin = this.XAxis.ActualMinimum; var xmax = this.XAxis.ActualMaximum; this.WindowStartIndex = this.UpdateWindowStartIndex(this.abovePoints, this.GetPointX, xmin, this.WindowStartIndex); this.WindowStartIndex2 = this.UpdateWindowStartIndex(this.belowPoints, this.GetPointX, xmin, this.WindowStartIndex2); double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength; var clippingRect = this.GetClippingRect(); rc.SetClip(clippingRect); var areaContext = new TwoColorAreaRenderContext { Points = this.abovePoints, WindowStartIndex = this.WindowStartIndex, XMax = xmax, RenderContext = rc, ClippingRect = clippingRect, MinDistSquared = minDistSquared, Reverse = false, Color = this.ActualColor, Fill = this.ActualFill, MarkerFill = this.MarkerFill, MarkerStroke = this.MarkerStroke, DashArray = this.ActualDashArray, Baseline = this.Limit }; this.RenderChunkedPoints(areaContext); areaContext.Points = this.belowPoints; areaContext.Reverse = this.Reverse2; areaContext.Color = this.ActualColor2; areaContext.Fill = this.ActualFill2; areaContext.MarkerFill = this.MarkerFill2; areaContext.MarkerStroke = this.MarkerStroke2; areaContext.DashArray = this.ActualDashArray2; if (this.IsPoints2Defined) { areaContext.Baseline = this.ConstantY2; } this.RenderChunkedPoints(areaContext); if (!this.IsPoints2Defined) { var markerSizes = new[] { this.MarkerSize }; double limit = this.Limit; var points = this.ActualPoints; var aboveMarkers = new List <ScreenPoint>(); var belowMarkers = new List <ScreenPoint>(); this.markerStartIndex = this.UpdateWindowStartIndex(points, this.GetPointX, xmin, this.markerStartIndex); int markerClipCount = 0; for (int i = this.markerStartIndex; i < points.Count; i++) { var point = points[i]; (point.y >= limit ? aboveMarkers : belowMarkers).Add(this.Transform(point.x, point.y)); markerClipCount += point.x > xmax ? 1 : 0; if (markerClipCount > 1) { break; } } rc.DrawMarkers( clippingRect, aboveMarkers, this.MarkerType, null, markerSizes, this.MarkerFill, this.MarkerStroke, this.MarkerStrokeThickness, 1); rc.DrawMarkers( clippingRect, belowMarkers, this.MarkerType, null, markerSizes, this.MarkerFill2, this.MarkerStroke2, this.MarkerStrokeThickness, 1); } rc.ResetClip(); }
/// <summary> /// Renders the series on the specified rendering context. /// </summary> /// <param name="rc">The rendering context.</param> public override void Render(IRenderContext rc) { // determine render range var xmin = this.XAxis.ActualMinimum; var xmax = this.XAxis.ActualMaximum; this.WindowStartIndex = this.UpdateWindowStartIndex(this.abovePoints, this.GetPointX, xmin, this.WindowStartIndex); this.WindowStartIndex2 = this.UpdateWindowStartIndex(this.belowPoints, this.GetPointX, xmin, this.WindowStartIndex2); double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength; var clippingRect = this.GetClippingRect(); rc.SetClip(clippingRect); var areaContext = new TwoColorAreaRenderContext { Points = this.abovePoints, WindowStartIndex = this.WindowStartIndex, XMax = xmax, RenderContext = rc, ClippingRect = clippingRect, MinDistSquared = minDistSquared, Reverse = false, Color = this.ActualColor, Fill = this.ActualFill, MarkerFill = this.MarkerFill, MarkerStroke = this.MarkerStroke, DashArray = this.ActualDashArray, Baseline = this.Limit }; this.RenderChunkedPoints(areaContext); areaContext.Points = this.belowPoints; areaContext.Reverse = this.Reverse2; areaContext.Color = this.ActualColor2; areaContext.Fill = this.ActualFill2; areaContext.MarkerFill = this.MarkerFill2; areaContext.MarkerStroke = this.MarkerStroke2; areaContext.DashArray = this.ActualDashArray2; if (this.IsPoints2Defined) { areaContext.Baseline = this.ConstantY2; } this.RenderChunkedPoints(areaContext); if (!this.IsPoints2Defined) { var markerSizes = new[] { this.MarkerSize }; double limit = this.Limit; var points = this.ActualPoints; var aboveMarkers = new List<ScreenPoint>(); var belowMarkers = new List<ScreenPoint>(); this.markerStartIndex = this.UpdateWindowStartIndex(points, this.GetPointX, xmin, this.markerStartIndex); int markerClipCount = 0; for (int i = this.markerStartIndex; i < points.Count; i++) { var point = points[i]; (point.y >= limit ? aboveMarkers : belowMarkers).Add(this.XAxis.Transform(point.x, point.y, this.YAxis)); markerClipCount += point.x > xmax ? 1 : 0; if (markerClipCount > 1) { break; } } rc.DrawMarkers( clippingRect, aboveMarkers, this.MarkerType, null, markerSizes, this.MarkerFill, this.MarkerStroke, this.MarkerStrokeThickness, 1); rc.DrawMarkers( clippingRect, belowMarkers, this.MarkerType, null, markerSizes, this.MarkerFill2, this.MarkerStroke2, this.MarkerStrokeThickness, 1); } rc.ResetClip(); }