|
43 | 43 | return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
44 | 44 | };
|
45 | 45 |
|
| 46 | + var getBinary = function(url, cb) { |
| 47 | + return new Promise(function(resolve, reject) { |
| 48 | + var oReq = new XMLHttpRequest(); |
| 49 | + oReq.open("GET", url, true); |
| 50 | + oReq.responseType = "arraybuffer"; |
| 51 | + |
| 52 | + oReq.onprogress = function(e) { |
| 53 | + cb(e.loaded / e.totalSize); |
| 54 | + }; |
| 55 | + |
| 56 | + oReq.onload = function(oEvent) { |
| 57 | + if (oReq.status == 200) { |
| 58 | + console.log(oReq.getAllResponseHeaders()); |
| 59 | + |
| 60 | + return resolve(oReq.response); |
| 61 | + } |
| 62 | + |
| 63 | + reject(new Error("Could not get binary data")); |
| 64 | + }; |
| 65 | + |
| 66 | + oReq.send(); |
| 67 | + }); |
| 68 | + }; |
| 69 | + |
| 70 | + |
| 71 | + var loadData = function(name, buffer) { |
| 72 | + var lf = new LASFile(buffer); |
| 73 | + |
| 74 | + progress(0, 'Decoding ' + name + '...'); |
| 75 | + |
| 76 | + console.log('Compressed?', lf.isCompressed); |
| 77 | + lf.open().then(function() { |
| 78 | + return lf.getHeader(); |
| 79 | + }).then(function(header) { |
| 80 | + console.log('Got', header); |
| 81 | + |
| 82 | + var batcher = new ParticleSystemBatcher( |
| 83 | + $("#vertexshader").text(), |
| 84 | + $("#fragmentshader").text()); |
| 85 | + |
| 86 | + var skip = Math.round((10 - currentLoadFidelity())); |
| 87 | + console.log("Skip value:", skip); |
| 88 | + var totalRead = 0; |
| 89 | + var totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip); |
| 90 | + var reader = function() { |
| 91 | + return lf.readData(1000000, 0, skip).then(function(data) { |
| 92 | + batcher.push(new LASDecoder(data.buffer, |
| 93 | + header.pointsFormatId, |
| 94 | + header.pointsStructSize, |
| 95 | + data.count, |
| 96 | + header.scale, |
| 97 | + header.offset)); |
| 98 | + |
| 99 | + totalRead += data.count; |
| 100 | + progress(Math.round(100 * totalRead / totalToRead)); |
| 101 | + |
| 102 | + console.log('Got data', data.count); |
| 103 | + if (data.hasMoreData) |
| 104 | + return reader(); |
| 105 | + else { |
| 106 | + loadBatcher(batcher); |
| 107 | + header.totalRead = totalRead; |
| 108 | + return header; |
| 109 | + } |
| 110 | + }); |
| 111 | + }; |
| 112 | + return reader(); |
| 113 | + }).then(function(header) { |
| 114 | + $("#loaderProgress").hide(); |
| 115 | + $(".props").html( |
| 116 | + "<tr><td>Name</td><td>" + name + "</td></tr>" + |
| 117 | + "<tr><td>File Version</td><td>" + lf.versionAsString + "</td></tr>" + |
| 118 | + "<tr><td>Compressed?</td><td>" + (lf.isCompressed ? "Yes" : "No") + "</td></tr>" + |
| 119 | + "<tr><td>Total Points</td><td>" + numberWithCommas(header.pointsCount) + " (" + |
| 120 | + numberWithCommas(header.totalRead) + ") " + "</td></tr>" + |
| 121 | + "<tr><td>Point Format ID</td><td>" + header.pointsFormatId + "</td></tr>" + |
| 122 | + "<tr><td>Point Record Size</td><td>" + header.pointsStructSize + "</td></tr>"); |
| 123 | + |
| 124 | + // finally close the file |
| 125 | + return lf.close(); |
| 126 | + }).then(function() { |
| 127 | + console.log("Done"); |
| 128 | + }); |
| 129 | + }; |
| 130 | + |
46 | 131 | var setupFileOpenHandlers = function() {
|
47 | 132 | $("#loaderProgress").hide();
|
48 | 133 |
|
|
60 | 145 | };
|
61 | 146 | fr.onload = function(e) {
|
62 | 147 | var d = e.target.result;
|
63 |
| - var lf = new LASFile(d); |
64 |
| - |
65 |
| - progress(0, 'Decoding ' + file.name + '...'); |
66 |
| - |
67 |
| - console.log('Compressed?', lf.isCompressed); |
68 |
| - lf.open().then(function() { |
69 |
| - return lf.getHeader(); |
70 |
| - }).then(function(header) { |
71 |
| - console.log('Got', header); |
72 |
| - |
73 |
| - var batcher = new ParticleSystemBatcher( |
74 |
| - $("#vertexshader").text(), |
75 |
| - $("#fragmentshader").text()); |
76 |
| - |
77 |
| - var skip = Math.round((10 - currentLoadFidelity())); |
78 |
| - console.log("Skip value:", skip); |
79 |
| - var totalRead = 0; |
80 |
| - var totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip); |
81 |
| - var reader = function() { |
82 |
| - return lf.readData(1000000, 0, skip).then(function(data) { |
83 |
| - batcher.push(new LASDecoder(data.buffer, |
84 |
| - header.pointsFormatId, |
85 |
| - header.pointsStructSize, |
86 |
| - data.count, |
87 |
| - header.scale, |
88 |
| - header.offset)); |
89 |
| - |
90 |
| - totalRead += data.count; |
91 |
| - progress(Math.round(100 * totalRead / totalToRead)); |
92 |
| - |
93 |
| - console.log('Got data', data.count); |
94 |
| - if (data.hasMoreData) |
95 |
| - return reader(); |
96 |
| - else { |
97 |
| - loadBatcher(batcher); |
98 |
| - header.totalRead = totalRead; |
99 |
| - return header; |
100 |
| - } |
101 |
| - }); |
102 |
| - }; |
103 |
| - return reader(); |
104 |
| - }).then(function(header) { |
105 |
| - $("#loaderProgress").hide(); |
106 |
| - $(".props").html( |
107 |
| - "<tr><td>Name</td><td>" + file.name + "</td></tr>" + |
108 |
| - "<tr><td>File Version</td><td>" + lf.versionAsString + "</td></tr>" + |
109 |
| - "<tr><td>Compressed?</td><td>" + (lf.isCompressed ? "Yes" : "No") + "</td></tr>" + |
110 |
| - "<tr><td>Total Points</td><td>" + numberWithCommas(header.pointsCount) + " (" + |
111 |
| - numberWithCommas(header.totalRead) + ") " + "</td></tr>" + |
112 |
| - "<tr><td>Point Format ID</td><td>" + header.pointsFormatId + "</td></tr>" + |
113 |
| - "<tr><td>Point Record Size</td><td>" + header.pointsStructSize + "</td></tr>"); |
114 |
| - |
115 |
| - // finally close the file |
116 |
| - return lf.close(); |
117 |
| - }).then(function() { |
118 |
| - console.log("Done"); |
119 |
| - }); |
| 148 | + loadData(file.name, d); |
120 | 149 | };
|
121 | 150 | fr.readAsArrayBuffer(file);
|
122 | 151 | });
|
| 152 | + |
| 153 | + $("#browse").on("click", "a", function(e) { |
| 154 | + e.preventDefault(); |
| 155 | + |
| 156 | + var target = $(this).attr("href"); |
| 157 | + console.log("Will load", target); |
| 158 | + |
| 159 | + var name = target.substring(target.lastIndexOf('/')+1) |
| 160 | + |
| 161 | + var progress_fn = function(pc) { |
| 162 | + progress(pc * 100); |
| 163 | + }; |
| 164 | + |
| 165 | + progress(0, "Fetching " + name + "..."); |
| 166 | + getBinary(target, progress_fn).then(function(data) { |
| 167 | + return loadData(name, data); |
| 168 | + }); |
| 169 | + }); |
123 | 170 | };
|
124 | 171 |
|
125 | 172 | var setupSliders = function() {
|
|
0 commit comments