protected void Render(Score score, [CallerFilePath] string callerFile = null, [CallerMemberName] string caller = null)
{
if (caller == null)
{
throw new ArgumentNullException("caller", "svg rendering failed because caller info was missing");
}
var settings = Settings.Defaults;
settings.Engine = "svg";
var renderer = new ScoreRenderer(settings);
for (int i = 0; i < score.Tracks.Count; i++)
{
Track track = score.Tracks[i];
// render track
Console.WriteLine("Rendering track {0} - {1}", i + 1, track.Name);
var totalWidth = 0;
var totalHeight = 0;
var merged = XDocument.Parse("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"1px\" height=\"1px\"></svg>");
var currentY = 0f;
renderer.PartialRenderFinished += r =>
{
var subSvg = XDocument.Parse(r.RenderResult.ToString());
var subRoot = subSvg.Root;
subRoot.SetAttributeValue("x", "0px");
subRoot.SetAttributeValue("y", ((int)currentY) + "px");
merged.Root.Add(subRoot);
currentY += r.Height;
};
renderer.RenderFinished += r =>
{
totalWidth = (int)r.TotalWidth;
totalHeight = (int)r.TotalHeight;
};
renderer.Render(track);
merged.Root.Attribute("width").Value = totalWidth + "px";
merged.Root.Attribute("height").Value = totalHeight + "px";
var svg = merged.ToString();
var dirName = Path.GetFileNameWithoutExtension(callerFile);
var path = Path.Combine(dirName, caller + "-" + i + ".svg");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
File.WriteAllText(path, svg);
}
}