Beispiel #1
0
        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));
        }
Beispiel #3
0
        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)
            }));
        }
Beispiel #6
0
 public void PointsToStringOld() => PathMarkupConverter.ConvertOld(Points.Span);
Beispiel #7
0
 public void PointsToString() => PathMarkupConverter.Convert(Points);
Beispiel #8
0
 public void StringToPointsOld() => PathMarkupConverter.ConvertOld(PathMarkup);
Beispiel #9
0
        public void SquareToMarkup()
        {
            var square = new SquarePolygonGenerator().Generate(10d);

            Assert.Equal("M0,0L10,0L10,10L0,10Z", PathMarkupConverter.Convert(square));
        }
Beispiel #10
0
 public void EmptyStringToEmptyPolygon()
 {
     Assert.True(PathMarkupConverter.Convert(string.Empty).Length == 0);
 }
Beispiel #11
0
 public void EmptyPolygonToEmptyString()
 {
     Assert.Equal(string.Empty, PathMarkupConverter.Convert(new ReadOnlyMemory <Point>(Array.Empty <Point>())));
 }
Beispiel #12
0
 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"));
 }