| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- window.onload = function () {
- var editor = CodeMirror(document.getElementById('editor'), {
- value: '[\n' +
- ' [1, 1, 1, 1, 1, 1, 1],\n' +
- ' [1, 5, 5, 5, 5, 5, 1],\n' +
- ' [1, 5, 15, 15, 15, 5, 1],\n' +
- ' [1, 5, 10, 10, 10, 5, 1],\n' +
- ' [1, 5, 5, 5, 5, 5, 1],\n' +
- ' [1, 1, 1, 1, 1, 1, 1]\n' +
- ']',
- mode: "javascript",
- styleActiveLine: true,
- matchBrackets: true,
- lineNumbers: true,
- });
- var output = CodeMirror(document.getElementById('output'), {
- styleActiveLine: true,
- matchBrackets: true,
- readOnly: true,
- });
- var intervalsInput = document.getElementById('intervals');
- var getIntervals = function () {
- var content = intervalsInput.value;
- var intervals;
- try {
- intervals = JSON.parse('[' + content + ']');
- } catch (e) {
- intervals = [];
- }
- return intervals;
- };
- var boundaries = function (data) {
- return {
- xs: d3.range(0, data[0].length),
- ys: d3.range(0, data.length)
- };
- };
- var changeIntervals = function (e) {
- try {
- var intervals = JSON.parse('[' + e.target.value + ']');
- } catch (e) {
- output.doc.setValue('Invalid intervals.');
- return;
- }
- try {
- var data = JSON.parse(editor.doc.getValue());
- } catch (e) {
- output.doc.setValue('Invalid intervals.');
- return;
- }
- run(data, intervals);
- };
- var processData = function (editor) {
- var intervals = getIntervals();
- try {
- var data = JSON.parse(editor.doc.getValue());
- } catch (e) {
- output.doc.setValue(e.message);
- return;
- }
- run(data, intervals);
- };
- var run = function (data, intervals) {
- if (!data) return;
- var bandWidths = intervals.reduce(function (bw, upperBand, i, intervals) {
- if (i > 0) {
- var lowerBand = intervals[i - 1];
- bw.push(upperBand - lowerBand);
- }
- return bw;
- }, []);
- try {
- var bands = MarchingSquaresJS
- .isoBands(data, intervals.slice(0, -1), bandWidths,);
- } catch (e) {
- output.doc.setValue(e.message);
- return;
- }
- output.doc.setValue(JSON.stringify(bands, undefined, 2));
- var isoBandObjects = bands.map(function (band, i) {
- return {
- "coords": band,
- "level": i,
- "val": intervals[i]
- };
- });
- document.getElementById('isobands').innerText = '';
- drawLines('#isobands', isoBandObjects, intervals, boundaries(data));
- };
- editor.on('change', processData);
- intervalsInput.addEventListener('keyup', changeIntervals);
- processData(editor);
- };
|