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')
        ...