File: PathExtensions.cs
Web Access
Project: src\src\Graphics\src\Graphics\Graphics.csproj (Microsoft.Maui.Graphics)
using System.Globalization;
using System.IO;
using System.Numerics;
 
namespace Microsoft.Maui.Graphics
{
	public static class PathExtensions
	{
		public static string ToDefinitionString(this PathF path, float ppu = 1)
		{
			var writer = new StringWriter();
 
			for (var i = 0; i < path.OperationCount; i++)
			{
				var type = path.GetSegmentType(i);
				var points = path.GetPointsForSegment(i);
 
				if (type == PathOperation.Move)
				{
					writer.Write("M");
					WritePoint(writer, points[0], ppu);
				}
				else if (type == PathOperation.Line)
				{
					writer.Write(" L");
					WritePoint(writer, points[0], ppu);
				}
				else if (type == PathOperation.Quad)
				{
					writer.Write(" Q");
					WritePoint(writer, points[0], ppu);
					writer.Write(" ");
					WritePoint(writer, points[1], ppu);
				}
				else if (type == PathOperation.Cubic)
				{
					writer.Write(" C");
					WritePoint(writer, points[0], ppu);
					writer.Write(" ");
					WritePoint(writer, points[1], ppu);
					writer.Write(" ");
					WritePoint(writer, points[2], ppu);
				}
				else if (type == PathOperation.Close)
				{
					writer.Write(" Z ");
				}
			}
 
			return writer.ToString();
		}
 
		private static void WritePoint(StringWriter writer, PointF point, float ppu)
		{
			float x = point.X * ppu;
			float y = point.Y * ppu;
 
			string cx = x.ToString(CultureInfo.InvariantCulture);
			string cy = y.ToString(CultureInfo.InvariantCulture);
 
			writer.Write(cx);
			writer.Write(" ");
			writer.Write(cy);
		}
 
		public static PathF AsScaledPath(
			this PathF target,
			float scale)
		{
			var scaledPath = new PathF(target);
			var transform = Matrix3x2.CreateScale(scale);
			scaledPath.Transform(transform);
			return scaledPath;
		}
 
		public static PathF AsScaledPath(
			this PathF target,
			float xScale,
			float yScale)
		{
			var scaledPath = new PathF(target);
			var transform = Matrix3x2.CreateScale(xScale, yScale);
			scaledPath.Transform(transform);
			return scaledPath;
		}
	}
}