diff --git a/README.mkd b/README.mkd index b539fd8..eb350d3 100644 --- a/README.mkd +++ b/README.mkd @@ -19,3 +19,9 @@ To run the whole node server: * run `node app.js` or `nodejs app.js` from the root directory. * navigate to http://localhost:8001/sandbox/ +You'll need coffeescript (`sudo apt-get install coffeescript`) to compile the javascript source. After editing the various .coffee files in the public directory, run make to compile them: + +* `cd public` +* `make` + + diff --git a/public/infragram.coffee b/public/infragram.coffee index 84eb40a..fe16f56 100644 --- a/public/infragram.coffee +++ b/public/infragram.coffee @@ -204,26 +204,26 @@ update = (img) -> render(result) save_expressions = (r,g,b) -> - r = r.toUpperCase().replace(/X/g,$('#slider').val()/100) - g = g.toUpperCase().replace(/X/g,$('#slider').val()/100) - b = b.toUpperCase().replace(/X/g,$('#slider').val()/100) + r = r.replace(/X/g,$('#slider').val()/100) + g = g.replace(/X/g,$('#slider').val()/100) + b = b.replace(/X/g,$('#slider').val()/100) r = "R" if r == "" g = "G" if g == "" b = "B" if b == "" - eval("r_exp = function(R,G,B){return "+r+";}") - eval("g_exp = function(R,G,B){return "+g+";}") - eval("b_exp = function(R,G,B){return "+b+";}") + eval("r_exp = function(R,G,B){var r=R,g=G,b=B;return "+r+";}") + eval("g_exp = function(R,G,B){var r=R,g=G,b=B;return "+g+";}") + eval("b_exp = function(R,G,B){var r=R,g=G,b=B;return "+b+";}") save_expressions_hsv = (h,s,v) -> - h = h.toUpperCase().replace(/X/g,$('#slider').val()/100) - s = s.toUpperCase().replace(/X/g,$('#slider').val()/100) - v = v.toUpperCase().replace(/X/g,$('#slider').val()/100) + h = h.replace(/X/g,$('#slider').val()/100) + s = s.replace(/X/g,$('#slider').val()/100) + v = v.replace(/X/g,$('#slider').val()/100) h = "H" if h == "" s = "S" if s == "" v = "V" if v == "" - eval("r_exp = function(R,G,B){var hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb("+h+","+s+","+v+")[0];}") - eval("g_exp = function(R,G,B){var hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb("+h+","+s+","+v+")[1];}") - eval("b_exp = function(R,G,B){var hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb("+h+","+s+","+v+")[2];}") + eval("r_exp = function(R,G,B){var h=H,s=S,v=V,hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb("+h+","+s+","+v+")[0];}") + eval("g_exp = function(R,G,B){var h=H,s=S,v=V,hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb("+h+","+s+","+v+")[1];}") + eval("b_exp = function(R,G,B){var h=H,s=S,v=V,hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb("+h+","+s+","+v+")[2];}") # modified from: # http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c diff --git a/public/infragram.js b/public/infragram.js index 4837c9a..bc39229 100644 --- a/public/infragram.js +++ b/public/infragram.js @@ -1,5 +1,6 @@ -// Generated by CoffeeScript 1.7.1 -var FileUpload, JsImage, b_exp, camera, colorized, colormap, colormap1, colormap2, createBuffer, createContext, createTexture, decodeParameters, downloadImage, drawScene, fetch_image, g_exp, generateShader, getCurrentImage, getURLParameter, get_channels, glGetCurrentImage, glHandleDefaultColormap, glHandleOnClickColor, glHandleOnClickGrey, glHandleOnClickNdvi, glHandleOnClickRaw, glHandleOnSlide, glHandleOnSubmitInfra, glHandleOnSubmitInfraHsv, glHandleOnSubmitInfraMono, glHandleStretchedColormap, glInitInfragram, glRestoreContext, glRunInfragrammar, glSaveExpression, glSetMode, glShaderLoaded, glUpdateImage, greyscale_colormap, histogram, hsv2rgb, image, imgContext, infragrammar, infragrammar_mono, jsColorify, jsGetCurrentImage, jsHandleOnClickGrey, jsHandleOnClickNdvi, jsHandleOnClickRaw, jsHandleOnSlide, jsHandleOnSubmitInfra, jsHandleOnSubmitInfraHsv, jsHandleOnSubmitInfraMono, jsRunInfragrammar, jsUpdateImage, log, log_hsv, log_mono, log_rgb, m_exp, mapContext, mode, ndvi, parametersObject, params, r_exp, render, rgb2hsv, run_colorize, run_infragrammar, save_expressions, save_expressions_hsv, save_infragrammar_expressions, save_infragrammar_inputs, save_log, segmented_colormap, setParametersFromURL, set_mode, update, updateImage, update_colorbar, vertices, video_live, waitForShadersToLoad, webGlSupported; +// Generated by CoffeeScript 1.4.0 +var FileUpload, JsImage, b_exp, camera, colorized, colormap, colormap1, colormap2, createBuffer, createContext, createTexture, decodeParameters, downloadImage, drawScene, fetch_image, g_exp, generateShader, getCurrentImage, getURLParameter, get_channels, glGetCurrentImage, glHandleDefaultColormap, glHandleOnClickColor, glHandleOnClickGrey, glHandleOnClickNdvi, glHandleOnClickRaw, glHandleOnSlide, glHandleOnSubmitInfra, glHandleOnSubmitInfraHsv, glHandleOnSubmitInfraMono, glHandleStretchedColormap, glInitInfragram, glRestoreContext, glRunInfragrammar, glSaveExpression, glSetMode, glShaderLoaded, glUpdateImage, greyscale_colormap, histogram, hsv2rgb, image, imgContext, infragrammar, infragrammar_mono, jsColorify, jsGetCurrentImage, jsHandleOnClickGrey, jsHandleOnClickNdvi, jsHandleOnClickRaw, jsHandleOnSlide, jsHandleOnSubmitInfra, jsHandleOnSubmitInfraHsv, jsHandleOnSubmitInfraMono, jsRunInfragrammar, jsUpdateImage, log, log_hsv, log_mono, log_rgb, m_exp, mapContext, mode, ndvi, parametersObject, params, r_exp, render, rgb2hsv, run_colorize, run_infragrammar, save_expressions, save_expressions_hsv, save_infragrammar_expressions, save_infragrammar_inputs, save_log, segmented_colormap, setParametersFromURL, set_mode, update, updateImage, update_colorbar, vertices, video_live, waitForShadersToLoad, webGlSupported, + _this = this; image = null; @@ -14,6 +15,7 @@ b_exp = ""; m_exp = ""; JsImage = (function() { + function JsImage(data, width, height, channels) { this.data = data; this.width = width; @@ -215,28 +217,26 @@ colormap2 = segmented_colormap([[0, [0, 0, 255], [0, 0, 255]], [0.1, [0, 0, 255] colormap = colormap1; -update_colorbar = (function(_this) { - return function(min, max) { - var b, ctx, d, e, g, i, j, k, r, _i, _j, _ref, _ref1, _ref2; - $('#colorbar-container')[0].style.display = 'inline-block'; - e = $('#colorbar')[0]; - ctx = e.getContext("2d"); - d = ctx.getImageData(0, 0, e.width, e.height); - for (i = _i = 0, _ref = e.width; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { - for (j = _j = 0, _ref1 = e.height; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; j = 0 <= _ref1 ? ++_j : --_j) { - _ref2 = colormap(i / e.width), r = _ref2[0], g = _ref2[1], b = _ref2[2]; - k = 4 * (i + j * e.width); - d.data[k + 0] = r; - d.data[k + 1] = g; - d.data[k + 2] = b; - d.data[k + 3] = 255; - } +update_colorbar = function(min, max) { + var b, ctx, d, e, g, i, j, k, r, _i, _j, _ref, _ref1, _ref2; + $('#colorbar-container')[0].style.display = 'inline-block'; + e = $('#colorbar')[0]; + ctx = e.getContext("2d"); + d = ctx.getImageData(0, 0, e.width, e.height); + for (i = _i = 0, _ref = e.width; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + for (j = _j = 0, _ref1 = e.height; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; j = 0 <= _ref1 ? ++_j : --_j) { + _ref2 = colormap(i / e.width), r = _ref2[0], g = _ref2[1], b = _ref2[2]; + k = 4 * (i + j * e.width); + d.data[k + 0] = r; + d.data[k + 1] = g; + d.data[k + 2] = b; + d.data[k + 3] = 255; } - ctx.putImageData(d, 0, 0); - $("#colorbar-min")[0].textContent = min.toFixed(2); - return $("#colorbar-max")[0].textContent = max.toFixed(2); - }; -})(this); + } + ctx.putImageData(d, 0, 0); + $("#colorbar-min")[0].textContent = min.toFixed(2); + return $("#colorbar-max")[0].textContent = max.toFixed(2); +}; update = function(img) { var b, g, max, min, ndvi_img, normalize, r, result, _ref, _ref1; @@ -267,9 +267,9 @@ update = function(img) { }; save_expressions = function(r, g, b) { - r = r.toUpperCase().replace(/X/g, $('#slider').val() / 100); - g = g.toUpperCase().replace(/X/g, $('#slider').val() / 100); - b = b.toUpperCase().replace(/X/g, $('#slider').val() / 100); + r = r.replace(/X/g, $('#slider').val() / 100); + g = g.replace(/X/g, $('#slider').val() / 100); + b = b.replace(/X/g, $('#slider').val() / 100); if (r === "") { r = "R"; } @@ -279,15 +279,15 @@ save_expressions = function(r, g, b) { if (b === "") { b = "B"; } - eval("r_exp = function(R,G,B){return " + r + ";}"); - eval("g_exp = function(R,G,B){return " + g + ";}"); - return eval("b_exp = function(R,G,B){return " + b + ";}"); + eval("r_exp = function(R,G,B){var r=R,g=G,b=B;return " + r + ";}"); + eval("g_exp = function(R,G,B){var r=R,g=G,b=B;return " + g + ";}"); + return eval("b_exp = function(R,G,B){var r=R,g=G,b=B;return " + b + ";}"); }; save_expressions_hsv = function(h, s, v) { - h = h.toUpperCase().replace(/X/g, $('#slider').val() / 100); - s = s.toUpperCase().replace(/X/g, $('#slider').val() / 100); - v = v.toUpperCase().replace(/X/g, $('#slider').val() / 100); + h = h.replace(/X/g, $('#slider').val() / 100); + s = s.replace(/X/g, $('#slider').val() / 100); + v = v.replace(/X/g, $('#slider').val() / 100); if (h === "") { h = "H"; } @@ -297,9 +297,9 @@ save_expressions_hsv = function(h, s, v) { if (v === "") { v = "V"; } - eval("r_exp = function(R,G,B){var hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb(" + h + "," + s + "," + v + ")[0];}"); - eval("g_exp = function(R,G,B){var hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb(" + h + "," + s + "," + v + ")[1];}"); - return eval("b_exp = function(R,G,B){var hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb(" + h + "," + s + "," + v + ")[2];}"); + eval("r_exp = function(R,G,B){var h=H,s=S,v=V,hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb(" + h + "," + s + "," + v + ")[0];}"); + eval("g_exp = function(R,G,B){var h=H,s=S,v=V,hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb(" + h + "," + s + "," + v + ")[1];}"); + return eval("b_exp = function(R,G,B){var h=H,s=S,v=V,hsv = rgb2hsv(R, G, B), H = hsv[0], S = hsv[1], V = hsv[2]; return hsv2rgb(" + h + "," + s + "," + v + ")[2];}"); }; hsv2rgb = function(h, s, v) { diff --git a/views/layout.jade b/views/layout.jade index 0cde322..6be0a6c 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -17,7 +17,7 @@ html script(src="/bootstrap/js/bootstrap-slider.js") script(src="/socket.io/socket.io.js") script(src="/webgl-utils.js") - script(src="/infragram.js?hash=4837c9a132bd450a6a5f2d60163dbd335d1f3534") + script(src="/infragram.js?hash=bc3922928c235167f815afa0f517c480779bc51c") script#shader-vs(type="x-shader/x-vertex") script#shader-fs-template(type="x-shader/x-fragment")