MSjs
progressCallback function never called
by Stefano
HTML
<div id="container"></div>
<script>
/*
@license GNU Affero General Public License.
Copyright (c) 2015, 2015 Ronny Lorenz <[email protected]>
v. 1.2.0
https://github.com/RaumZeit/MarchingSquares.js
*/
(function(a,la){"function"===typeof define&&define.amd?define([],function(){return{isoBands:la()}}):"object"===typeof module&&module.exports?module.exports={isoBands:la()}:a.MarchingSquaresJS={isoBands:la(),isoContours:a.MarchingSquaresJS?a.MarchingSquaresJS.isoContours:null}})(this,function(){function a(a,c,d){return(a-c)/(d-c)}function la(a){return-1<a.constructor.toString().indexOf("Array")}function wa(a){for(var r=[],d=a.rows,l=a.cols,m=[],n=0;n<d;n++)for(var q=0;q<l;q++)if("undefined"!==typeof a.cells[n][q]&&
0<a.cells[n][q].edges.length){var p=xa(a.cells[n][q]),b=null,e=q,f=n;null!==p&&m.push([p.p[0]+e,p.p[1]+f]);do{b=ya(a.cells[f][e],p.x,p.y,p.o);if(null!==b)m.push([b.p[0]+e,b.p[1]+f]),e+=b.x,f+=b.y,p=b;else break;if(0>f||f>=d||0>e||e>=l||"undefined"===typeof a.cells[f][e])if(e-=b.x,f-=b.y,p=za(a,e,f,b.x,b.y,b.o),null!==p)p.path.forEach(function(a){m.push(a)}),e=p.i,f=p.j;else break}while("undefined"!==typeof a.cells[f][e]&&0<a.cells[f][e].edges.length);r.push(m);m=[];0<a.cells[n][q].edges.length&&q--}return r}
function za(a,c,d,l,m,n){for(var r,p,b=c+l,e=d+m,f=[];;){if("undefined"===typeof a.cells[e]||"undefined"===typeof a.cells[e][b])if(e-=m,b-=l,r=a.cells[e][b],p=r.cval_real,-1===m)if(0===n)if(p&ga)f.push([b,e]),l=-1,n=m=0;else if(p&fa)f.push([b+1,e]),l=1,n=m=0;else{f.push([b+r.bottomright,e]);l=0;n=m=1;break}else if(p&ga)f.push([b,e]),l=-1,n=m=0;else{p&fa?(f.push([b+r.bottomright,e]),l=0,n=m=1):(f.push([b+r.bottomleft,e]),l=0,m=1,n=0);break}else if(1===m)if(0===n)if(p&ka)f.push([b+1,e+1]),l=1,m=0,n=
1;else{p&ha?(f.push([b+r.topleft,e+1]),l=0,m=-1,n=0):(f.push([b+r.topright,e+1]),l=0,m=-1,n=1);break}else f.push([b+1,e+1]),l=1,m=0,n=1;else...
JavaScript
function drawMarchingSquaresContours(divId) {
var zs = [0, 4.5, 9, 13.5, 18];
var data = [[18, 13, 10, 9, 10, 13, 18],
[13, 8, 5, 4, 5, 8, 13],
[10, 5, 2, 1, 2, 5, 10],
[9, 4, 1, 12, 1, 4, 9],
[10, 5, 2, 1, 2, 5, 10],
[13, 8, 5, 4, 5, 8, 13],
[18, 13, 10, 9, 10, 13, 18],
[18, 13, 10, 9, 10, 13, 18]];
data = d3.transpose(data);
var xs = d3.range(0, data[0].length);
var ys = d3.range(0, data.length);
var marginBottomLabel = 0;
var width = 150;
var height = width * (ys.length / xs.length);
var xScale = d3.scale.linear()
.range([0, width])
.domain([Math.min.apply(null, xs), Math.max.apply(null, xs)]);
var yScale = d3.scale.linear()
.range([0, height])
.domain([Math.min.apply(null, ys), Math.max.apply(null, ys)]);
var colours = d3.scale.linear().domain([zs[0], zs[zs.length - 1]])
.range([d3.rgb(0, 0, 0),
d3.rgb(200, 200, 200)]);
var isoBands = [];
for (var i = 1; i < zs.length; i++) {
var lowerBand = zs[i - 1];
var upperBand = zs[i];
var band = MarchingSquaresJS.isoBands(data, lowerBand, upperBand - lowerBand, {
successCallback: function(band) {
// console.log('band', band)
},
progressCallback: function () {
console.log('progress callback:', arguments, i)
},
verbose: false,
polygons: false
});
isoBands.push({"coords": band, "level": i, "val": zs[i]});
}
var svg = d3.select(divId)
.append("svg")
.attr("width", width)
.attr("height", height + marginBottomLabel);
/*
svg.append('text')
...