private void DrawOrFillMesh([NotNull] IPaintProvider provider, [NotNull] Triangle[] mesh) { using (var paint = provider.Paint.Clone()) { const SKVertexMode geometryMode = SKVertexMode.Triangles; var vertices = new SKPoint[mesh.Length * 3]; for (var i = 0; i < mesh.Length; ++i) { var j = i * 3; vertices[j] = mesh[i].Point1.ToSKPoint(); vertices[j + 1] = mesh[i].Point2.ToSKPoint(); vertices[j + 2] = mesh[i].Point3.ToSKPoint(); } var colors = new SKColor[vertices.Length]; for (var i = 0; i < colors.Length; ++i) { colors[i] = SKColors.White; } _canvas?.DrawVertices(geometryMode, vertices, colors, paint); } SetDirty(); }
private void DrawOrFillMultilineString([NotNull] IPaintProvider provider, [NotNull] Font font, [CanBeNull] string str, float x, float y, float maxWidth, float maxHeight, [CanBeNull] StringFormat stringFormat) { if (string.IsNullOrWhiteSpace(str)) { return; } if (_canvas == null) { return; } using (var paint = provider.Paint.Clone()) { SetSKPaintFontProperties(paint, font, stringFormat); var lines = SplitLines(str, paint, maxWidth, maxHeight, stringFormat); var lineHeight = DetermineLineHeight(paint, stringFormat); foreach (var line in lines) { _canvas.DrawText(line.Value, x, y, paint); y += lineHeight; } } SetDirty(); }
private void DrawOrFillString([NotNull] IPaintProvider provider, [NotNull] Font font, [CanBeNull] string str, float x, float y, [CanBeNull] StringFormat stringFormat) { if (string.IsNullOrWhiteSpace(str)) { return; } using (var paint = provider.Paint.Clone()) { SetSKPaintFontProperties(paint, font, stringFormat); _canvas?.DrawText(str, x, y, paint); } SetDirty(); }
private void DrawOrFillPolygon([NotNull] IPaintProvider provider, [NotNull] Vector2[] points) { Guard.ArgumentNotNull(points, nameof(points)); if (points.Length < 3) { throw new ArgumentException("A polygon should contain at least 3 points.", nameof(points)); } if (_canvas == null) { return; } using (var path = new SKPath()) { var skPoints = Array.ConvertAll(points, XnaExtensions.ToSKPoint); path.AddPoly(skPoints); _canvas.DrawPath(path, provider.Paint); } SetDirty(); }
private void DrawOrFillEllipse([NotNull] IPaintProvider provider, float x, float y, float width, float height) { _canvas?.DrawOval(new SKRect(x, y, x + width, y + height), provider.Paint); SetDirty(); }