| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | /* This file is automatically rebuilt by the Cesium build process. */var clamp_1 = clamp;function clamp(value, min, max) {  return min < max    ? (value < min ? min : value > max ? max : value)    : (value < max ? max : value > min ? min : value)}var bitmapSdf = calcSDF;var INF = 1e20;function calcSDF(src, options) {    if (!options) options = {};    var cutoff = options.cutoff == null ? 0.25 : options.cutoff;    var radius = options.radius == null ? 8 : options.radius;    var channel = options.channel || 0;    var w, h, size, data, intData, stride, ctx, canvas, imgData, i, l;    // handle image container    if (ArrayBuffer.isView(src) || Array.isArray(src)) {        if (!options.width || !options.height) throw Error('For raw data width and height should be provided by options')        w = options.width, h = options.height;        data = src;        if (!options.stride) stride = Math.floor(src.length / w / h);        else stride = options.stride;    }    else {        if (window.HTMLCanvasElement && src instanceof window.HTMLCanvasElement) {            canvas = src;            ctx = canvas.getContext('2d');            w = canvas.width, h = canvas.height;            imgData = ctx.getImageData(0, 0, w, h);            data = imgData.data;            stride = 4;        }        else if (window.CanvasRenderingContext2D && src instanceof window.CanvasRenderingContext2D) {            canvas = src.canvas;            ctx = src;            w = canvas.width, h = canvas.height;            imgData = ctx.getImageData(0, 0, w, h);            data = imgData.data;            stride = 4;        }        else if (window.ImageData && src instanceof window.ImageData) {            imgData = src;            w = src.width, h = src.height;            data = imgData.data;            stride = 4;        }    }    size = Math.max(w, h);    //convert int data to floats    if ((window.Uint8ClampedArray && data instanceof window.Uint8ClampedArray) || (window.Uint8Array && data instanceof window.Uint8Array)) {        intData = data;        data = Array(w*h);        for (i = 0, l = intData.length; i < l; i++) {            data[i] = intData[i*stride + channel] / 255;        }    }    else {        if (stride !== 1) throw Error('Raw data can have only 1 value per pixel')    }    // temporary arrays for the distance transform    var gridOuter = Array(w * h);    var gridInner = Array(w * h);    var f = Array(size);    var d = Array(size);    var z = Array(size + 1);    var v = Array(size);    for (i = 0, l = w * h; i < l; i++) {        var a = data[i];        gridOuter[i] = a === 1 ? 0 : a === 0 ? INF : Math.pow(Math.max(0, 0.5 - a), 2);        gridInner[i] = a === 1 ? INF : a === 0 ? 0 : Math.pow(Math.max(0, a - 0.5), 2);    }    edt(gridOuter, w, h, f, d, v, z);    edt(gridInner, w, h, f, d, v, z);    var dist = window.Float32Array ? new Float32Array(w * h) : new Array(w * h);    for (i = 0, l = w*h; i < l; i++) {        dist[i] = clamp_1(1 - ( (gridOuter[i] - gridInner[i]) / radius + cutoff), 0, 1);    }    return dist}// 2D Euclidean distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/dt/function edt(data, width, height, f, d, v, z) {    for (var x = 0; x < width; x++) {        for (var y = 0; y < height; y++) {            f[y] = data[y * width + x];        }        edt1d(f, d, v, z, height);        for (y = 0; y < height; y++) {            data[y * width + x] = d[y];        }    }    for (y = 0; y < height; y++) {        for (x = 0; x < width; x++) {            f[x] = data[y * width + x];        }        edt1d(f, d, v, z, width);        for (x = 0; x < width; x++) {            data[y * width + x] = Math.sqrt(d[x]);        }    }}// 1D squared distance transformfunction edt1d(f, d, v, z, n) {    v[0] = 0;    z[0] = -INF;    z[1] = +INF;    for (var q = 1, k = 0; q < n; q++) {        var s = ((f[q] + q * q) - (f[v[k]] + v[k] * v[k])) / (2 * q - 2 * v[k]);        while (s <= z[k]) {            k--;            s = ((f[q] + q * q) - (f[v[k]] + v[k] * v[k])) / (2 * q - 2 * v[k]);        }        k++;        v[k] = q;        z[k] = s;        z[k + 1] = +INF;    }    for (q = 0, k = 0; q < n; q++) {        while (z[k + 1] < q) k++;        d[q] = (q - v[k]) * (q - v[k]) + f[v[k]];    }}export { bitmapSdf as default };
 |