private static void WriteAnimations() { Action<string> Write = r => new IHTMLDiv { innerText = r }.AttachToDocument(); foreach (var rr in ThreeDGroup1.Create().Images) { var r = rr.src; Write(r); var u = new Uri(r); Write(u.Host); // sketchup.google.com Write(u.AbsolutePath); Write(u.Query); // /3dwarehouse/download foreach (var p in u.Query.Split('&')) { var kv = p.Split('='); if (kv.Length == 2) { Write(kv[0]); Write(kv[1]); if (kv[0] == "mid") { var container = new IHTMLDiv { innerText = "loading..." }.AttachToDocument(); var frames = Enumerable.ToArray( from imagenum in Enumerable.Range(0, 36) let e = new { mid = kv[1], imagenum } select new IHTMLImage("http://sketchup.google.com/3dwarehouse/download?mid=" + e.mid + "&rtyp=swivel&setnum=0&imagenum=" + e.imagenum) { width = 40, height = 30 } ); var cc = frames.Last(); cc.InvokeOnComplete( i => { var cf = frames.AsCyclicEnumerator(); new Timer( t => { cf.MoveNext(); container.removeChildren(); cf.Current.AttachTo(container); }, 1, 1000 / 24).StartInterval(); } ); } } } } }