static void CreateStroke(SVGPolygonElement svgElement) { string name = svgElement.attrList.GetValue("id"); if (string.IsNullOrEmpty(name)) { name = "Polygon Stroke "; } List <List <Vector2> > path = SVGSimplePath.CreateStroke(SVGGraphics.position_buffer, svgElement.paintable, ClosePathRule.ALWAYS); if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { path = SVGGeom.ClipPolygon(path, svgElement.paintable.clipPathList); } SVGGraphics.AddLayer(name, path, svgElement.paintable, svgElement.transformMatrix, true); /* * Mesh antialiasingMesh; * Mesh mesh = SVGLineUtils.TessellateStroke(stroke, SVGSimplePath.GetStrokeColor(svgElement.paintable), out antialiasingMesh); * if(mesh == null) return; * mesh.name = name; * SVGGraphics.AddLayer(new SVGMesh(mesh, svgElement.paintable.svgFill, svgElement.paintable.opacity)); * if(antialiasingMesh != null) * { * SVGFill svgFill = svgElement.paintable.svgFill.Clone(); * svgFill.blend = FILL_BLEND.ALPHA_BLENDED; * SVGGraphics.AddLayer(new SVGMesh(antialiasingMesh, svgFill, svgElement.paintable.opacity)); * } */ }
public static List <List <Vector2> > GetClipPath(SVGMatrix matrix, SVGPolygonElement svgElement) { List <Vector2> path = GetPath(matrix, svgElement); if (path == null || path.Count == 0) { return(null); } List <List <Vector2> > clipPath = new List <List <Vector2> >(); if (svgElement.paintable.IsFill()) { clipPath.Add(path); } if (svgElement.paintable.IsStroke()) { List <StrokeSegment[]> segments = new List <StrokeSegment[]>() { SVGSimplePath.GetSegments(path) }; List <List <Vector2> > strokePath = SVGLineUtils.StrokeShape(segments, svgElement.paintable.strokeWidth, Color.black, SVGSimplePath.GetStrokeLineJoin(svgElement.paintable.strokeLineJoin), SVGSimplePath.GetStrokeLineCap(svgElement.paintable.strokeLineCap), svgElement.paintable.miterLimit, svgElement.paintable.dashArray, svgElement.paintable.dashOffset, ClosePathRule.ALWAYS, SVGGraphics.roundQuality); if (strokePath != null && strokePath.Count > 0) { clipPath.AddRange(strokePath); } } return(clipPath); }
static void CreateStroke(SVGRectElement svgElement) { string name = svgElement.attrList.GetValue("id"); if (string.IsNullOrEmpty(name)) { name = "Rectangle Stroke "; } List <List <Vector2> > stroke = SVGSimplePath.CreateStroke(SVGGraphics.position_buffer, svgElement.paintable, ClosePathRule.ALWAYS); if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { stroke = SVGGeom.ClipPolygon(stroke, svgElement.paintable.clipPathList); } Mesh antialiasingMesh; Mesh mesh = SVGLineUtils.TessellateStroke(stroke, SVGSimplePath.GetStrokeColor(svgElement.paintable), out antialiasingMesh); if (mesh == null) { return; } mesh.name = name; SVGGraphics.AddMesh(new SVGMesh(mesh, svgElement.paintable.svgFill, svgElement.paintable.opacity)); if (antialiasingMesh != null) { SVGFill svgFill = svgElement.paintable.svgFill.Clone(); svgFill.blend = FILL_BLEND.ALPHA_BLENDED; SVGGraphics.AddMesh(new SVGMesh(antialiasingMesh, svgFill, svgElement.paintable.opacity)); } }
public List <List <Vector2> > GetClipPath() { List <List <Vector2> > path = GetPath(); if (path == null || path.Count == 0 || path[0] == null || path[0].Count == 0) { return(null); } List <List <Vector2> > clipPath = new List <List <Vector2> >(); if (paintable.IsFill()) { clipPath.Add(path[0]); } if (paintable.IsStroke()) { List <StrokeSegment[]> segments = new List <StrokeSegment[]>() { SVGSimplePath.GetSegments(path[0]) }; List <List <Vector2> > strokePath = SVGLineUtils.StrokeShape(segments, paintable.strokeWidth, Color.black, SVGSimplePath.GetStrokeLineJoin(paintable.strokeLineJoin), SVGSimplePath.GetStrokeLineCap(paintable.strokeLineCap), paintable.miterLimit, paintable.dashArray, paintable.dashOffset, ClosePathRule.NEVER, SVGGraphics.roundQuality); if (strokePath != null && strokePath.Count > 0) { clipPath.AddRange(strokePath); } } return(clipPath); }
public static Mesh CreateAntialiasing(List <List <Vector2> > paths, Color color, float antialiasingWidth, bool isStroke = false, ClosePathRule closePath = ClosePathRule.NEVER) { if (SVGAssetImport.antialiasingWidth <= 0f) { return(null); } return(SVGSimplePath.CreateAntialiasing(paths, color, antialiasingWidth, closePath)); }
public static void AddLayer(string name, List <List <Vector2> > inputShapes, SVGPaintable paintable, SVGMatrix matrix, bool isStroke = false) { SVGLayer layer; if (SVGSimplePath.CreatePolygon(inputShapes, paintable, matrix, out layer, isStroke)) { layer.name = name; layers.Add(layer); } }
static void CreateFill(SVGRectElement svgElement) { string name = svgElement.attrList.GetValue("id"); if (string.IsNullOrEmpty(name)) { name = "Rectangle Fill"; } List <List <Vector2> > path; if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { path = SVGGeom.ClipPolygon(new List <List <Vector2> >() { SVGGraphics.position_buffer }, svgElement.paintable.clipPathList); } else { path = new List <List <Vector2> >() { SVGGraphics.position_buffer }; } Mesh antialiasingMesh; Mesh mesh = SVGSimplePath.CreatePolygon(path, svgElement.paintable, svgElement.transformMatrix, out antialiasingMesh); if (mesh == null) { return; } mesh.name = name; SVGGraphics.AddMesh(new SVGMesh(mesh, svgElement.paintable.svgFill, svgElement.paintable.opacity)); if (antialiasingMesh != null) { SVGFill svgFill = svgElement.paintable.svgFill.Clone(); svgFill.blend = FILL_BLEND.ALPHA_BLENDED; SVGGraphics.AddMesh(new SVGMesh(antialiasingMesh, svgFill, svgElement.paintable.opacity)); } }
public static SVGShape[] GetShapes(List <List <Vector2> > inputShapes, SVGPaintable paintable, SVGMatrix matrix, bool isStroke = false) { SVGShape[] shapes = null;; SVGShape shape; SVGShape antialiasingShape; if (SVGSimplePath.CreatePolygon(inputShapes, paintable, matrix, out shape, out antialiasingShape, isStroke, _antialiasing)) { if (_antialiasing) { shapes = new SVGShape[] { shape, antialiasingShape }; } else { shapes = new SVGShape[] { shape }; } } return(shapes); }
private void CreateFill(Rect bounds) { CreateFill(); _fill.transform = SVGSimplePath.GetFillTransform(_fill, bounds, new SVGLength[] { _cx, _cy }, new SVGLength[] { _r, _r }, _transform, _gradientTransform); }
public static void Create(ISVGElement svgElement, string defaultName = null, ClosePathRule closePathRule = ClosePathRule.ALWAYS) { if (svgElement == null) { return; } if (svgElement.paintable.visibility != SVGVisibility.Visible || svgElement.paintable.display == SVGDisplay.None) { return; } List <SVGShape> shapes = new List <SVGShape>(); List <List <Vector2> > inputPaths = svgElement.GetPath(); if (inputPaths.Count == 1) { if (svgElement.paintable.IsFill()) { List <List <Vector2> > path = inputPaths; if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { path = SVGGeom.ClipPolygon(new List <List <Vector2> >() { inputPaths[0] }, svgElement.paintable.clipPathList); } SVGShape[] addShapes = SVGGraphics.GetShapes(path, svgElement.paintable, svgElement.transformMatrix); if (addShapes != null && addShapes.Length > 0) { shapes.AddRange(addShapes); } } if (svgElement.paintable.IsStroke()) { List <List <Vector2> > path = SVGSimplePath.CreateStroke(inputPaths[0], svgElement.paintable, closePathRule); if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { path = SVGGeom.ClipPolygon(path, svgElement.paintable.clipPathList); } SVGShape[] addShapes = SVGGraphics.GetShapes(path, svgElement.paintable, svgElement.transformMatrix, true); if (addShapes != null && addShapes.Length > 0) { shapes.AddRange(addShapes); } } } else { if (svgElement.paintable.IsFill()) { List <List <Vector2> > fillPaths = inputPaths; if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { fillPaths = SVGGeom.ClipPolygon(inputPaths, svgElement.paintable.clipPathList); } SVGShape[] addShapes = SVGGraphics.GetShapes(fillPaths, svgElement.paintable, svgElement.transformMatrix); if (addShapes != null && addShapes.Length > 0) { shapes.AddRange(addShapes); } } if (svgElement.paintable.IsStroke()) { List <List <Vector2> > strokePath = SVGSimplePath.CreateStroke(inputPaths, svgElement.paintable, closePathRule); if (svgElement.paintable.clipPathList != null && svgElement.paintable.clipPathList.Count > 0) { strokePath = SVGGeom.ClipPolygon(strokePath, svgElement.paintable.clipPathList); } SVGShape[] addShapes = SVGGraphics.GetShapes(strokePath, svgElement.paintable, svgElement.transformMatrix, true); if (addShapes != null && addShapes.Length > 0) { shapes.AddRange(addShapes); } } } if (shapes.Count > 0) { string name = svgElement.attrList.GetValue("id"); if (string.IsNullOrEmpty(name)) { name = defaultName; } SVGLayer layer = new SVGLayer(); layer.shapes = shapes.ToArray(); layer.name = name; SVGGraphics.AddLayer(layer); } }