/// <inheritdoc/> public void DrawLineSegments( IList <ScreenPoint> points, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null, LineJoin lineJoin = LineJoin.Miter) { if (points.Count < 2 || !stroke.IsVisible() || thickness <= 0) { return; } var paint = this.GetLinePaint(stroke, thickness, edgeRenderingMode, dashArray, lineJoin); var skPoints = new SKPoint[points.Count]; switch (edgeRenderingMode) { case EdgeRenderingMode.Automatic when this.RendersToPixels: case EdgeRenderingMode.Adaptive when this.RendersToPixels: case EdgeRenderingMode.PreferSharpness when this.RendersToPixels: var snapOffset = this.GetSnapOffset(thickness, edgeRenderingMode); for (var i = 0; i < points.Count - 1; i += 2) { var p1 = points[i]; var p2 = points[i + 1]; if (RenderContextBase.IsStraightLine(p1, p2)) { skPoints[i] = this.ConvertSnap(p1, snapOffset); skPoints[i + 1] = this.ConvertSnap(p2, snapOffset); } else { skPoints[i] = this.Convert(p1); skPoints[i + 1] = this.Convert(p2); } } break; default: for (var i = 0; i < points.Count; i += 2) { skPoints[i] = this.Convert(points[i]); skPoints[i + 1] = this.Convert(points[i + 1]); } break; } this.SkCanvas.DrawPoints(SKPointMode.Lines, skPoints, paint); }
/// <summary> /// Gets the <see cref="SKPoint"/>s that should actually be rendered from the list of <see cref="ScreenPoint"/>s, taking into account DPI scaling and snapping if necessary. /// </summary> /// <param name="screenPoints">The points.</param> /// <param name="strokeThickness">The stroke thickness.</param> /// <param name="edgeRenderingMode">The edge rendering mode.</param> /// <returns>The actual points.</returns> private IEnumerable <SKPoint> GetActualPoints(IList <ScreenPoint> screenPoints, double strokeThickness, EdgeRenderingMode edgeRenderingMode) { switch (edgeRenderingMode) { case EdgeRenderingMode.Automatic when this.RendersToPixels && RenderContextBase.IsStraightLine(screenPoints): case EdgeRenderingMode.Adaptive when this.RendersToPixels && RenderContextBase.IsStraightLine(screenPoints): case EdgeRenderingMode.PreferSharpness when this.RendersToPixels: var snapOffset = this.GetSnapOffset(strokeThickness, edgeRenderingMode); return(screenPoints.Select(p => this.ConvertSnap(p, snapOffset))); default: return(screenPoints.Select(this.Convert)); } }