private static XElementBuilder BuildLinearGradientElement(LinearGradient gradient) { var startPositionPreTranslate = Coordinate.Cartesian(-50, 0).Rotate(gradient.Angle); var endPositionPreTranslate = Coordinate.Cartesian(-50, 0).Rotate(gradient.Angle.Plus(Angle.FromRotations(0.5M))); var startPosition = startPositionPreTranslate.Translate(new Vector(50, 50)); var endPosition = endPositionPreTranslate.Translate(new Vector(50, 50)); var startPercentX = startPosition.X.ToString() + "%"; var startPercentY = 100 - startPosition.Y + "%"; var endPercentX = endPosition.X.ToString() + "%"; var endPercentY = 100 - endPosition.Y + "%"; return (XElementBuilder.WithName("linearGradient").Add( new XAttribute("x1", startPercentX), new XAttribute("y1", startPercentY), new XAttribute("x2", endPercentX), new XAttribute("y2", endPercentY) ) .Add( new XElement("stop", new XAttribute("offset", "0%"), new XAttribute("style", $"stop-color:{SvgColor( gradient.Start )};stop-opacity:{SvgOpacity( gradient.Start )}")), new XElement("stop", new XAttribute("offset", "100%"), new XAttribute("style", $"stop-color:{SvgColor( gradient.End )};stop-opacity:{SvgOpacity( gradient.End )}")))); }