MusicBoxConverter/MusicBoxConverter/SvgWriter.cs

70 lines
2.1 KiB
C#

using System;
using System.IO;
using System.Xml;
using SBRL.Utilities;
namespace MusicBoxConverter
{
public class SvgWriter
{
public XmlWriter xml;
public SvgWriter(string outputFilename, string widthspec = "100%", string heightspec = "100%")
{
xml = XmlWriter.Create(
outputFilename,
new XmlWriterSettings() { Indent = true }
);
xml.WriteStartDocument();
xml.WriteStartElement("svg", "http://www.w3.org/2000/svg");
xml.WriteAttributeString("version", "1.1");
xml.WriteAttributeString("width", widthspec);
xml.WriteAttributeString("height", heightspec);
}
public void Complete()
{
xml.WriteEndElement();
xml.WriteEndDocument();
xml.Close();
}
public void WriteLine(Vector2 start, Vector2 end, string strokeStyle = "darkgreen", int strokeWidth = 3)
{
WritePath($"M {start.X} {start.Y} L {end.X} {end.Y}", strokeStyle, strokeWidth);
}
public void WritePath(string pathData, string strokeStyle = "green", int strokeWidth = 3)
{
xml.WriteStartElement("path");
xml.WriteAttributeString("d", pathData);
xml.WriteAttributeString("stroke", strokeStyle);
xml.WriteAttributeString("stroke-width", strokeWidth.ToString());
xml.WriteEndElement();
}
public void WriteRectangle(Vector2 position, Vector2 size, string strokeStyle = "red", int strokeWidth = 3)
{
xml.WriteStartElement("rect");
xml.WriteAttributeString("x", position.X.ToString());
xml.WriteAttributeString("y", position.Y.ToString());
xml.WriteAttributeString("width", size.X.ToString());
xml.WriteAttributeString("height", size.Y.ToString());
xml.WriteAttributeString("fill", "transparent");
xml.WriteAttributeString("stroke", strokeStyle);
xml.WriteAttributeString("stroke-width", strokeWidth.ToString());
xml.WriteEndElement();
}
public void WriteCircle(Vector2 centre, int radius, string fillStyle = "blue")
{
xml.WriteStartElement("circle");
xml.WriteAttributeString("cx", centre.X.ToString());
xml.WriteAttributeString("cy", centre.Y.ToString());
xml.WriteAttributeString("r", radius.ToString());
xml.WriteAttributeString("fill", fillStyle);
xml.WriteEndElement();
}
}
}