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); }
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); }
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());
public override void VisitPolylineElement(SvgPolylineElement element) { base.VisitPolylineElement(element); VisitSvgGeometryElement(element); }
protected abstract void RenderPolyline(TSession session, SvgPolylineElement element);