public static BoundsLookup FromJson(object json, Score score)
{
var lookup = new BoundsLookup();
var staveGroups = json.Member <FastList <StaveGroupBounds> >("StaveGroups");
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.Index = masterBar.Index;
mb.IsFirstOfLine = masterBar.IsFirstOfLine;
mb.LineAlignedBounds = masterBar.LineAlignedBounds;
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 <int>("TrackIndex")]
.Staves[beat.Member <int>("StaffIndex")]
.Bars[beat.Member <int>("BarIndex")]
.Voices[beat.Member <int>("VoiceIndex")]
.Beats[beat.Member <int>("BeatIndex")];
b.AddBeat(bb);
}
}
}
}
return(lookup);
}