public void Roundtrip() { const string markup = "M0,0L10,0L10,10L0,10Z"; var square = PathMarkupConverter.Convert(markup); var squareMarkup = PathMarkupConverter.Convert(square); Assert.Equal(markup, squareMarkup); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (targetType != typeof(Geometry)) { throw new ArgumentException("Invalid destination type", nameof(targetType)); } if (value is ReadOnlyMemory <Point> polygon) { return(Geometry.Parse(PathMarkupConverter.Convert(polygon))); } throw new ArgumentException("value is not a supported data type", nameof(value)); }
public PointsToMarkup() { var points = new[] { PathMarkupConverter.Convert("M0,0Z"), PathMarkupConverter.Convert("M0,0L10,0L10,10L0,10Z"), null }; var sb = new StringBuilder(); for (var i = 0; i < 1000; i++) { sb.Append(i == 0 ? "M" : "L"); sb.Append($"{i},{i}"); } sb.Append("Z"); points[2] = PathMarkupConverter.Convert(sb.ToString()); PointsData = points; }
public ActionResult Post([FromBody] PolygonClipRequestPayload request) { if (string.IsNullOrEmpty(request.SourcePolygon)) { return(BadRequest("Missing source polygon")); } if (string.IsNullOrEmpty(request.ClipPolygon)) { return(BadRequest("Missing clipping polygon")); } var source = PathMarkupConverter.Convert(request.SourcePolygon); var clip = PathMarkupConverter.Convert(request.ClipPolygon); var result = new SutherlandHodgman().GetIntersectedPolygon(source, clip); return(Ok(new PolygonResultPayload { ResultPolygon = PathMarkupConverter.Convert(result) })); }
public ActionResult Post([FromBody] PolygonGenerateRequestPayload request) { if (string.IsNullOrEmpty(request.Generator)) { return(BadRequest("Missing clipping polygon")); } var type = typeof(PolygonGenerator).Assembly.DefinedTypes .FirstOrDefault(t => t.FullName == request.Generator); if (type == null) { return(BadRequest("Invalid generator name")); } var generator = (PolygonGenerator)Activator.CreateInstance(type); var polygon = generator.Generate(request.MaxSideLength); return(Ok(new PolygonResultPayload { ResultPolygon = PathMarkupConverter.Convert(polygon) })); }
public void PointsToString() => PathMarkupConverter.Convert(Points);
public void StringToPoints() => PathMarkupConverter.Convert(PathMarkup);
public void SquareToMarkup() { var square = new SquarePolygonGenerator().Generate(10d); Assert.Equal("M0,0L10,0L10,10L0,10Z", PathMarkupConverter.Convert(square)); }
public void EmptyStringToEmptyPolygon() { Assert.True(PathMarkupConverter.Convert(string.Empty).Length == 0); }
public void EmptyPolygonToEmptyString() { Assert.Equal(string.Empty, PathMarkupConverter.Convert(new ReadOnlyMemory <Point>(Array.Empty <Point>()))); }
public void PointToMarkup() { Assert.Equal("M0,0Z", PathMarkupConverter.Convert( new ReadOnlyMemory <Point>(new[] { new Point(0d, 0d) }))); }
public void ExceptionOnInvalidMarkup() { Assert.Throws <ArgumentException>(() => PathMarkupConverter.Convert("FooBar")); }