public static BoundsLookup FromJson(object json, Score score)
{
var lookup = new BoundsLookup();
var staveGroups = json.Member("StaveGroups").As<FastList<StaveGroupBounds>>();
foreach (var staveGroup in staveGroups)
{
var sg = new StaveGroupBounds();
sg.VisualBounds = staveGroup.VisualBounds;
sg.RealBounds = staveGroup.RealBounds;
lookup.AddStaveGroup(sg);
foreach (var masterBar in staveGroup.Bars)
{
var mb = new MasterBarBounds();
mb.IsFirstOfLine = masterBar.IsFirstOfLine;
mb.VisualBounds = masterBar.VisualBounds;
mb.RealBounds = masterBar.RealBounds;
sg.AddBar(mb);
foreach (var bar in masterBar.Bars)
{
var b = new BarBounds();
b.VisualBounds = bar.VisualBounds;
b.RealBounds = bar.RealBounds;
mb.AddBar(b);
foreach (var beat in bar.Beats)
{
var bb = new BeatBounds();
bb.VisualBounds = beat.VisualBounds;
bb.RealBounds = beat.RealBounds;
bb.Beat = score
.Tracks[beat.Member("TrackIndex").As<int>()]
.Staves[beat.Member("StaffIndex").As<int>()]
.Bars[beat.Member("BarIndex").As<int>()]
.Voices[beat.Member("VoiceIndex").As<int>()]
.Beats[beat.Member("BeatIndex").As<int>()];
b.AddBeat(bb);
}
}
}
}
return lookup;
}