public object ToJson()
{
var json = Std.NewObject();
var staveGroups = new FastList<StaveGroupBounds>();
json.StaveGroups = staveGroups;
foreach (var group in StaveGroups)
{
StaveGroupBounds g = Std.NewObject();
g.VisualBounds = BoundsToJson(group.VisualBounds);
g.RealBounds = BoundsToJson(group.RealBounds);
g.Bars = new FastList<MasterBarBounds>();
foreach (var masterBar in group.Bars)
{
MasterBarBounds mb = Std.NewObject();
mb.VisualBounds = BoundsToJson(masterBar.VisualBounds);
mb.RealBounds = BoundsToJson(masterBar.RealBounds);
mb.Bars = new FastList<BarBounds>();
foreach (var bar in masterBar.Bars)
{
BarBounds b = Std.NewObject();
b.VisualBounds = BoundsToJson(bar.VisualBounds);
b.RealBounds = BoundsToJson(bar.RealBounds);
b.Beats = new FastList<BeatBounds>();
foreach (var beat in bar.Beats)
{
var bb = Std.NewObject();
bb.VisualBounds = BoundsToJson(beat.VisualBounds);
bb.RealBounds = BoundsToJson(beat.RealBounds);
bb.BeatIndex = beat.Beat.Index;
bb.VoiceIndex = beat.Beat.Voice.Index;
bb.BarIndex = beat.Beat.Voice.Bar.Index;
bb.StaffIndex = beat.Beat.Voice.Bar.Staff.Index;
bb.TrackIndex = beat.Beat.Voice.Bar.Staff.Track.Index;
b.Beats.Add(bb);
}
mb.Bars.Add(b);
}
g.Bars.Add(mb);
}
staveGroups.Add(g);
}
return json;
}