public static GraphicsPath CreatePath(SvgPolylineElement element)
        {
            GraphicsPath gp = new GraphicsPath();

            ISvgPointList list   = element.AnimatedPoints;
            ulong         nElems = list.NumberOfItems;

            PointF[] points = new PointF[nElems];

            for (uint i = 0; i < nElems; i++)
            {
                points[i] = new PointF((float)list.GetItem(i).X, (float)list.GetItem(i).Y);
            }

            gp.AddLines(points);

            string fillRule = element.GetPropertyValue("fill-rule");

            if (fillRule == "evenodd")
            {
                gp.FillMode = FillMode.Alternate;
            }
            else
            {
                gp.FillMode = FillMode.Winding;
            }

            return(gp);
        }
Beispiel #2
0
        public Geometry CreateGeometry(SvgPolylineElement element)
        {
            ISvgPointList list   = element.AnimatedPoints;
            ulong         nElems = list.NumberOfItems;

            if (nElems == 0)
            {
                return(null);
            }

            PointCollection points = new PointCollection((int)nElems);

            for (uint i = 0; i < nElems; i++)
            {
                ISvgPoint point = list.GetItem(i);
                points.Add(new Point(Math.Round(point.X, 4), Math.Round(point.Y, 4)));
            }
            PolyLineSegment polyline = new PolyLineSegment();

            polyline.Points = points;

            PathFigure polylineFigure = new PathFigure();

            polylineFigure.StartPoint = points[0];
            polylineFigure.IsClosed   = false;
            polylineFigure.IsFilled   = true;

            polylineFigure.Segments.Add(polyline);

            PathGeometry geometry = new PathGeometry();

            string fillRule = element.GetPropertyValue("fill-rule");
            string clipRule = element.GetAttribute("clip-rule");

            if (!string.IsNullOrWhiteSpace(clipRule) &&
                string.Equals(clipRule, "evenodd") || string.Equals(clipRule, CssConstants.ValNonzero))
            {
                fillRule = clipRule;
            }
            if (fillRule == "evenodd")
            {
                geometry.FillRule = FillRule.EvenOdd;
            }
            else if (fillRule == CssConstants.ValNonzero)
            {
                geometry.FillRule = FillRule.Nonzero;
            }

            geometry.Figures.Add(polylineFigure);

            return(geometry);
        }
Beispiel #3
0
        protected override void RenderPolyline(CanvasDrawingSession session, SvgPolylineElement element)
        {
            using (var builder = new CanvasPathBuilder(this.ResourceCreator))
            {
                var begin = element.Points.First();
                builder.BeginFigure(begin.X, begin.Y);
                foreach (var point in element.Points.Skip(1))
                {
                    builder.AddLine(point.X, point.Y);
                }
                builder.EndFigure(CanvasFigureLoop.Open);

                using (var geometry = CanvasGeometry.CreatePath(builder))
                {
                    this.RenderGeometory(session, geometry, element.Transform.Result, element.Style);
                }
            }
        }
        public void Visit(ISvgPolylineElement element)
        {
            ISvgPointList      list   = element.AnimatedPoints;
            ulong              nElems = list.NumberOfItems;
            SvgPolylineElement pe     = element as SvgPolylineElement;

            if (nElems == 0 || pe == null)
            {
                return;
            }

            PointCollection points = new PointCollection((int)nElems);

            for (uint i = 0; i < nElems; i++)
            {
                ISvgPoint point = list.GetItem(i);
                points.Add(new Point(Math.Round(point.X, 4), Math.Round(point.Y, 4)));
            }
            PolyLineSegment polyline = new PolyLineSegment();

            polyline.Points = points;

            PathFigure polylineFigure = new PathFigure();

            polylineFigure.StartPoint = points[0];
            polylineFigure.IsClosed   = false;
            polylineFigure.IsFilled   = true;

            polylineFigure.Segments.Add(polyline);

            PathGeometry geometry = new PathGeometry();

            FillRule fillRule;

            if (TryGetFillRule(pe, out fillRule))
            {
                geometry.FillRule = fillRule;
            }

            geometry.Figures.Add(polylineFigure);
            var shape = WrapGeometry(geometry, element);

            DisplayShape(shape, element);
        }
 public virtual void VisitPolylineElement(SvgPolylineElement element)
 => DefaultVisit(element);
 public override SvgPathSegList VisitPolylineElement(SvgPolylineElement element)
 => CreatePointsPath(element.Points, false);
 public override void VisitPolylineElement(SvgPolylineElement element)
 => VisitPathSegList(element, element.ConvertToPathSegList());
Beispiel #8
0
 public override void VisitPolylineElement(SvgPolylineElement element)
 {
     base.VisitPolylineElement(element);
     VisitSvgGeometryElement(element);
 }
Beispiel #9
0
 protected abstract void RenderPolyline(TSession session, SvgPolylineElement element);