pixel-utils
Version:
Utility Functions for Pixels
1,316 lines (1,237 loc) • 70.7 kB
JavaScript
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addAlpha;
/**
* @description adds an alpha channel to an RGB Pixel, creating a new RGBA pixel
* @param rgb - a 3-number RGB pixel
* @returns rgba - a 4-number array representing an RGBA pixel
*/
function addAlpha(rgb) {
return [...rgb, 255];
}
},{}],2:[function(require,module,exports){
"use strict";
var _addAlpha = _interopRequireDefault(require("./add-alpha"));
var _hasNoData = _interopRequireDefault(require("./has-no-data"));
var _hideRgba = _interopRequireDefault(require("./hide-rgba"));
var _isHidden = _interopRequireDefault(require("./is-hidden"));
var _isNoData = _interopRequireDefault(require("./is-no-data"));
var _makeNoDataRgb = _interopRequireDefault(require("./make-no-data-rgb"));
var _makeNoDataRgba = _interopRequireDefault(require("./make-no-data-rgba"));
var _fit = _interopRequireDefault(require("./fit"));
var _popAlpha = _interopRequireDefault(require("./pop-alpha"));
var _range = _interopRequireDefault(require("./range"));
var _rawToRgb = _interopRequireDefault(require("./raw-to-rgb"));
var _rawToRgba = _interopRequireDefault(require("./raw-to-rgba"));
var _rgbToRgba = _interopRequireDefault(require("./rgb-to-rgba"));
var _rgbaToRgb = _interopRequireDefault(require("./rgba-to-rgb"));
var _setHidden = _interopRequireDefault(require("./set-hidden"));
var _setVisible = _interopRequireDefault(require("./set-visible"));
var _showRgba = _interopRequireDefault(require("./show-rgba"));
var _sliceAlpha = _interopRequireDefault(require("./slice-alpha"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const pixelUtils = {
addAlpha: _addAlpha.default,
fit: _fit.default,
hasNoData: _hasNoData.default,
hideRgba: _hideRgba.default,
isHidden: _isHidden.default,
isNoData: _isNoData.default,
makeNoDataRgb: _makeNoDataRgb.default,
makeNoDataRgba: _makeNoDataRgba.default,
popAlpha: _popAlpha.default,
range: _range.default,
rawToRgb: _rawToRgb.default,
rawToRgba: _rawToRgba.default,
rgbToRgba: _rgbToRgba.default,
rgbaToRgb: _rgbaToRgb.default,
setHidden: _setHidden.default,
setVisible: _setVisible.default,
showRgba: _showRgba.default,
sliceAlpha: _sliceAlpha.default
};
if (typeof define === "function" && define.amd) define(() => pixelUtils);
if (typeof module === "object") module.exports = pixelUtils;
if (typeof window === "object") window.pixelUtils = pixelUtils;
if (typeof self === "object") self.pixelUtils = pixelUtils;
},{"./add-alpha":1,"./fit":4,"./has-no-data":5,"./hide-rgba":6,"./is-hidden":7,"./is-no-data":8,"./make-no-data-rgb":9,"./make-no-data-rgba":11,"./pop-alpha":12,"./range":14,"./raw-to-rgb":23,"./raw-to-rgba":34,"./rgb-to-rgba":35,"./rgba-to-rgb":39,"./set-hidden":50,"./set-visible":51,"./show-rgba":52,"./slice-alpha":53}],3:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Layout = void 0;
let Layout;
exports.Layout = Layout;
(function (Layout) {
Layout["[band][row][column]"] = "[band][row][column]";
Layout["[band][row,column]"] = "[band][row,column]";
Layout["[band,row,column]"] = "[band,row,column]";
Layout["[row,column,band]"] = "[row,column,band]";
Layout["[row,column][band]"] = "[row,column][band]";
Layout["[row][column][band]"] = "[row][column][band]";
Layout["[row][column,band]"] = "[row][column,band]";
})(Layout || (exports.Layout = Layout = {}));
},{}],4:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = fit;
var _xdim = require("xdim");
var _rawToRgba = _interopRequireDefault(require("../raw-to-rgba"));
var _selectPixel = _interopRequireDefault(require("../select-pixel"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// fit raw bands to 8-bit color space
// while slicing and scaling as necessary
function fit({
data,
debug_level = 0,
depth,
flip = false,
old_no_data_value,
old_layout,
no_data_strategy = "partial",
// png strategy
no_range_value,
no_range_value_strategy = "top",
new_layout = "[row,column,band]",
new_no_data_value,
height,
ranges,
width
}) {
if (!ranges) throw new Error("[expand] can't expand without ranges");
if (debug_level >= 1) console.log("[stretch] starting fit");
if (typeof height !== "number") throw new Error("[fit] height must be a number");
if (typeof width !== "number") throw new Error("[fit] height must be a number");
if (typeof old_layout !== "string") throw new Error("[fit] old_layout must be a string");
if (typeof new_layout !== "string") throw new Error("[fit] new_layout must be a string");
const select = (0, _selectPixel.default)(data, {
depth,
height,
layout: old_layout,
width
});
const out_sizes = {
band: 4,
row: height,
column: width
};
const {
data: out_data
} = (0, _xdim.prepareData)({
fill: new_no_data_value,
layout: new_layout,
sizes: out_sizes
});
const convert = (0, _rawToRgba.default)({
debug_level: debug_level - 1,
format: "array",
flip,
ranges,
new_no_data_value: new_no_data_value,
no_data_strategy: no_data_strategy,
no_range_value: no_range_value,
no_range_value_strategy: no_range_value_strategy,
old_no_data_value
});
const update = (0, _xdim.prepareUpdate)({
data: out_data,
layout: new_layout,
sizes: out_sizes
});
for (let row = 0; row < height; row++) {
for (let column = 0; column < width; column++) {
const [r, g, b, a] = convert(select(row, column));
update({
point: {
band: 0,
row,
column
},
value: r
});
update({
point: {
band: 1,
row,
column
},
value: g
});
update({
point: {
band: 2,
row,
column
},
value: b
});
update({
point: {
band: 3,
row,
column
},
value: a
});
}
}
if (debug_level >= 1) console.log("[pixel-utils/fit] out_data:", out_data);
return {
// @ts-ignore
data: out_data,
layout: new_layout
};
}
},{"../raw-to-rgba":34,"../select-pixel":42,"xdim":58}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = hasNoData;
function hasNoData(noDataValue, pixel) {
return pixel.includes(noDataValue);
}
},{}],6:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = hide_rgba;
/**
* @name hide_rgba
* @description make a given (scaled) rgba value transparent/invisble
* @param {RGBA} rgba pixel
* @returns a new rgba pixel with the same Red, Green and Blue values and a 0 alpha value
*/
function hide_rgba([r, g, b]) {
return [r, g, b, 0];
}
},{}],7:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = isHidden;
/**
* @description check if an RGBA pixel is hidden
* @param {number[]} pixel - an array of 4 numbers representing [R, G, B, A]
* @returns {boolean} whether the pixel is hidden
*/
function isHidden(pixel) {
return pixel[3] === 0;
}
},{}],8:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = isNoData;
/**
* @description check if an RGB pixel is a no data pixel
* @param {number} no_data_value
* @param {number[]} pixel - an array of 4 numbers representing [R, G, B, A]
* @returns {boolean} whether the pixel is a no data pixel
*/
function isNoData(no_data_value, pixel) {
return pixel[0] === no_data_value;
}
},{}],9:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = makeNoDataRGB;
function makeNoDataRGB(noDataValue) {
// typescript not smart enough to realize all values in the array will be the same
// @ts-ignore
return [noDataValue, noDataValue, noDataValue];
}
},{}],10:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = makeNoDataRgbaString;
function makeNoDataRgbaString(noDataValue) {
return `rgba(${noDataValue}, ${noDataValue}, ${noDataValue}, 0)`;
}
},{}],11:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = makeNoDataRgba;
function makeNoDataRgba(noDataValue) {
// typescript not smart enough to realize all values in the array will be the same
// @ts-ignore
return [noDataValue, noDataValue, noDataValue, 0];
}
},{}],12:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = popAlpha;
/**
*
* @param {Pixel} pixel - an RGBA Pixel, an Array of 4 Numbers [Red, Green, Blue, Alpha]
* @returns {RGBA} an RGB Pixel, an Array of 3 Numbers [Red, Green, Blue]
*/
function popAlpha(pixel) {
pixel.pop();
// @ts-ignore
return pixel;
}
},{}],13:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = pushAlpha;
/**
* @description converts an RGB to an RGBA by pushing an alpha value at the end of the RGB array
* @param rgb - a 3-number RGB pixel
* @returns rgba - a 4-number array representing an RGBA pixel
*/
function pushAlpha(pixel) {
// @ts-ignore
pixel.push(255);
// @ts-ignore
return pixel;
}
},{}],14:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = range;
function range(ct) {
return new Array(ct).fill(0).map((_, i) => i);
}
},{}],15:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_two_band_pixel_to_rgb_str;
function convert_raw_two_band_pixel_to_rgb_str(noDataValue, noDataPixel, scaleFunction1, scaleFunction2, pixel) {
if (pixel.includes(noDataValue)) return noDataPixel;
return "rgb(" + scaleFunction1(pixel[0]) + ", " + scaleFunction2(pixel[1]) + ", 0)";
}
},{}],16:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_two_band_pixel_to_rgb;
function convert_raw_two_band_pixel_to_rgb(noDataValue, noDataPixel, scaleFunction1, scaleFunction2, pixel) {
if (pixel.includes(noDataValue)) return noDataPixel;
return [scaleFunction1(pixel[0]), scaleFunction2(pixel[1]), 0];
}
},{}],17:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_two_band_pixel_to_rgb_str;
function convert_raw_two_band_pixel_to_rgb_str(noDataValue, noDataPixel, scaleFunction1, scaleFunction2, scaleFunction3, pixel) {
pixel = pixel.slice(0, 3);
if (pixel.includes(noDataValue)) return noDataPixel;
return "rgb(" + scaleFunction1(pixel[0]) + ", " + scaleFunction2(pixel[1]) + ", " + scaleFunction3(pixel[2]) + ")";
}
},{}],18:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_two_band_pixel_to_rgb;
function convert_raw_two_band_pixel_to_rgb(noDataValue, noDataPixel, scaleFunction1, scaleFunction2, scaleFunction3, pixel) {
pixel = pixel.slice(0, 3);
if (pixel.includes(noDataValue)) return noDataPixel;
return [scaleFunction1(pixel[0]), scaleFunction2(pixel[1]), scaleFunction3(pixel[2])];
}
},{}],19:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_one_band_pixel_to_rgb_str;
function convert_raw_one_band_pixel_to_rgb_str(noDataValue, noDataPixel, scale, pixel) {
if (pixel.includes(noDataValue)) return noDataPixel;
const scaled = scale(pixel[0]);
return "rgb(" + scaled + ", " + scaled + ", " + scaled + ")";
}
},{}],20:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_one_band_pixel_to_rgb;
function convert_raw_one_band_pixel_to_rgb(noDataValue, noDataPixel, scale, pixel) {
if (pixel.includes(noDataValue)) return noDataPixel;
const scaled = scale(pixel[0]);
return [scaled, scaled, scaled];
}
},{}],21:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_three_band_pixel_to_rgb_css;
function convert_raw_three_band_pixel_to_rgb_css(noDataValue, noDataPixel, scaleFunction1, scaleFunction2, scaleFunction3, pixel) {
if (pixel.includes(noDataValue)) return noDataPixel;
return "rgb(" + scaleFunction1(pixel[0]) + ", " + scaleFunction2(pixel[1]) + ", " + scaleFunction3(pixel[2]) + ")";
}
},{}],22:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_three_band_pixel_to_rgb;
function convert_raw_three_band_pixel_to_rgb(noDataValue, noDataPixel, scaleFunction1, scaleFunction2, scaleFunction3, pixel) {
if (pixel.includes(noDataValue)) return noDataPixel;
return [scaleFunction1(pixel[0]), scaleFunction2(pixel[1]), scaleFunction3(pixel[2])];
}
},{}],23:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = rawToRgb;
var _quickScale = require("quick-scale");
var _makeNoDataRgb = _interopRequireDefault(require("../make-no-data-rgb"));
var _convertSingle = _interopRequireDefault(require("./convert-single"));
var _convertSingleStr = _interopRequireDefault(require("./convert-single-str"));
var _convertDouble = _interopRequireDefault(require("./convert-double"));
var _convertDoubleStr = _interopRequireDefault(require("./convert-double-str"));
var _convertTriple = _interopRequireDefault(require("./convert-triple"));
var _convertTripleStr = _interopRequireDefault(require("./convert-triple-str"));
var _convertMany = _interopRequireDefault(require("./convert-many"));
var _convertManyStr = _interopRequireDefault(require("./convert-many-str"));
var _rgbToStr = _interopRequireDefault(require("../rgb-to-str"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function rawToRgb({
format = "array",
ranges,
flip,
new_no_data_pixel,
new_no_data_value,
no_range_value,
no_range_value_strategy,
old_no_data_value,
round = true
}) {
const nbands = ranges.length;
if (new_no_data_pixel && new_no_data_value) {
throw new Error("[pixel-utils/raw-to-rgb] can't specify both new_no_data_pixel and new_no_data_value");
}
if (new_no_data_pixel === undefined || new_no_data_pixel === null) {
if (new_no_data_value === undefined || new_no_data_value === null) {
new_no_data_pixel = (0, _makeNoDataRgb.default)(null);
} else {
new_no_data_pixel = (0, _makeNoDataRgb.default)(new_no_data_value);
}
}
if (new_no_data_pixel === undefined) throw new Error("[raw-to-rgb] undefined new_no_data_pixel");
const new_range = [0 === new_no_data_value ? 1 : 0, 255 === new_no_data_value ? 254 : 255];
const options = {
flip,
no_range_value,
no_range_value_strategy,
round
};
const scalefns = ranges.slice(0, 3).map(rng => (0, _quickScale.createScaleFunction)(rng, new_range, options));
if (nbands === 1) {
if (format === "string") {
// @ts-ignore
return _convertSingleStr.default.bind(null, old_no_data_value, (0, _rgbToStr.default)(new_no_data_pixel), ...scalefns);
} else {
// @ts-ignore
return _convertSingle.default.bind(null, old_no_data_value, new_no_data_pixel, ...scalefns);
}
} else if (nbands === 2) {
if (format === "string") {
// @ts-ignore
return _convertDoubleStr.default.bind(null, old_no_data_value, (0, _rgbToStr.default)(new_no_data_pixel), ...scalefns);
} else {
// @ts-ignore
return _convertDouble.default.bind(null, old_no_data_value, new_no_data_pixel, ...scalefns);
}
} else if (nbands === 3) {
if (format === "string") {
// @ts-ignore
return _convertTripleStr.default.bind(null, old_no_data_value, (0, _rgbToStr.default)(new_no_data_pixel), ...scalefns);
} else {
// @ts-ignore
return _convertTriple.default.bind(null, old_no_data_value, new_no_data_pixel, ...scalefns);
}
} else if (nbands >= 4) {
if (format === "string") {
// @ts-ignore
return _convertManyStr.default.bind(null, old_no_data_value, (0, _rgbToStr.default)(new_no_data_pixel), ...scalefns);
} else {
// @ts-ignore
return _convertMany.default.bind(null, old_no_data_value, new_no_data_pixel, ...scalefns);
}
} else {
throw new Error("[pixel-utils/raw-to-rgb] invalid number of bands: " + nbands);
}
}
},{"../make-no-data-rgb":9,"../rgb-to-str":38,"./convert-double":16,"./convert-double-str":15,"./convert-many":18,"./convert-many-str":17,"./convert-single":20,"./convert-single-str":19,"./convert-triple":22,"./convert-triple-str":21,"quick-scale":55}],24:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_double_all_string;
// convert a 2-band pixel
// if any no data is found, set all RGB to no data
function convert_double_all_string(old_no_data_value, noDataPixel, scalefn1, scalefn2, pixel) {
if (pixel.includes(old_no_data_value)) return noDataPixel;
return `rgba(${scalefn1(pixel[0])},${scalefn2(pixel[1])},0,255)`;
}
},{}],25:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_double_all;
// convert a 2-band pixel
// if any no data is found, set all RGB to no data
function convert_double_all(old_no_data_value, noDataPixel, scalefn1, scalefn2, pixel) {
if (pixel.includes(old_no_data_value)) return noDataPixel;
return [scalefn1(pixel[0]), scalefn2(pixel[1]), 0, 255];
}
},{}],26:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_two_band_pixel_to_rgba_string;
function convert_raw_two_band_pixel_to_rgba_string(old_no_data_value, new_no_data_value, scalefn1, scalefn2, pixel) {
const [r, g] = pixel;
return `rgba(${r === old_no_data_value ? new_no_data_value : scalefn1(r)}, ${g === old_no_data_value ? new_no_data_value : scalefn2(g)}, 0, ${r === old_no_data_value || g === old_no_data_value ? 0 : 255})`;
}
},{}],27:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_two_band_pixel_to_rgba;
function convert_raw_two_band_pixel_to_rgba(old_no_data_value, new_no_data_value, scalefn1, scalefn2, pixel) {
const [r, g] = pixel;
// @ts-ignore
return [r === old_no_data_value ? new_no_data_value : scalefn1(r), g === old_no_data_value ? new_no_data_value : scalefn2(g), 0, r === old_no_data_value || g === old_no_data_value ? 0 : 255];
}
},{}],28:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_multiband_all_to_string;
function convert_multiband_all_to_string(old_no_data_value, noDataPixel, scalefn1, scalefn2, scalefn3, pixel) {
if (pixel.includes(old_no_data_value)) return noDataPixel;
return `rgba(${scalefn1(pixel[0])}, ${scalefn2(pixel[1])}, ${scalefn3(pixel[2])}, 255)`;
}
},{}],29:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_multiband_all;
function convert_multiband_all(old_no_data_value, noDataPixel, scalefn1, scalefn2, scalefn3, pixel) {
if (pixel.includes(old_no_data_value)) return noDataPixel;
return [scalefn1(pixel[0]), scalefn2(pixel[1]), scalefn3(pixel[2]), 255];
}
},{}],30:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_multiband_to_rgba_string;
function convert_raw_multiband_to_rgba_string(old_no_data_value, new_no_data_value, scalefn1, scalefn2, scalefn3, pixel) {
const [r, g, b] = pixel;
return `rgba(${r === old_no_data_value ? new_no_data_value : scalefn1(r)}, ${g === old_no_data_value ? new_no_data_value : scalefn2(g)}, ${b === old_no_data_value ? new_no_data_value : scalefn3(b)}, ${r === old_no_data_value || g === old_no_data_value || b === old_no_data_value ? "0" : "255"})`;
}
},{}],31:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_multiband;
function convert_multiband(old_no_data_value, new_no_data_value, scalefn1, scalefn2, scalefn3, pixel) {
const [r, g, b] = pixel;
return [
// @ts-ignore
r === old_no_data_value ? new_no_data_value : scalefn1(r),
// @ts-ignore
g === old_no_data_value ? new_no_data_value : scalefn2(g),
// @ts-ignore
b === old_no_data_value ? new_no_data_value : scalefn3(b),
// @ts-ignore
r === old_no_data_value || g === old_no_data_value || b === old_no_data_value ? 0 : 255];
}
},{}],32:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_raw_one_band_pixel_to_rgba_string;
function convert_raw_one_band_pixel_to_rgba_string(old_no_data_value, noDataPixel, scalefn, pixel) {
const n = pixel[0];
if (n === old_no_data_value) return noDataPixel;
const scaled = scalefn(n);
return `rgba(${scaled}, ${scaled}, ${scaled}, 255)`;
}
},{}],33:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = convert_one;
function convert_one(old_no_data_value, noDataPixel, scalefn, pixel) {
const n = pixel[0];
if (n === old_no_data_value) return noDataPixel;
const scaled = scalefn(n);
return [scaled, scaled, scaled, 255];
}
},{}],34:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = rawToRgba;
var _quickScale = require("quick-scale");
var _makeNoDataRgba = _interopRequireDefault(require("../make-no-data-rgba"));
var _makeNoDataRgbaString = _interopRequireDefault(require("../make-no-data-rgba-string"));
var _convertSingle = _interopRequireDefault(require("./convert-single"));
var _convertSingleStr = _interopRequireDefault(require("./convert-single-str"));
var _convertDouble = _interopRequireDefault(require("./convert-double"));
var _convertDoubleStr = _interopRequireDefault(require("./convert-double-str"));
var _convertDoubleAll = _interopRequireDefault(require("./convert-double-all"));
var _convertDoubleAllStr = _interopRequireDefault(require("./convert-double-all-str"));
var _convertMultiband = _interopRequireDefault(require("./convert-multiband"));
var _convertMultibandStr = _interopRequireDefault(require("./convert-multiband-str"));
var _convertMultibandAll = _interopRequireDefault(require("./convert-multiband-all"));
var _convertMultibandAllStr = _interopRequireDefault(require("./convert-multiband-all-str"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function rawToRgba({
debug_level = 0,
format = "array",
ranges,
flip = false,
new_no_data_value,
no_data_strategy,
no_range_value,
no_range_value_strategy,
old_no_data_value
}) {
if (debug_level >= 1) console.log("[pixel-utils/raw-to-rgba] ranges:", ranges);
const nbands = ranges.length;
const new_range = [0 === new_no_data_value ? 1 : 0, 255 === new_no_data_value ? 254 : 255];
if (debug_level >= 1) console.log("[pixel-utils/raw-to-rgba] new_range:", new_range);
const options = {
no_data_value: new_no_data_value,
flip,
no_range_value,
no_range_value_strategy,
round: true
};
if (debug_level >= 1) console.log("[pixel-utils/raw-to-rgba] options:", options);
const scalefns = ranges.slice(0, 3).map(rng => (0, _quickScale.createScaleFunction)(rng, new_range, options));
if (nbands === 1) {
if (format === "string") {
// @ts-ignore
return _convertSingleStr.default.bind(null, old_no_data_value, (0, _makeNoDataRgbaString.default)(new_no_data_value !== null && new_no_data_value !== void 0 ? new_no_data_value : "null"), scalefns[0]);
} else if (format === "array") {
// @ts-ignore
return _convertSingle.default.bind(null, old_no_data_value, (0, _makeNoDataRgba.default)(new_no_data_value), scalefns[0]);
}
} else if (nbands === 2) {
if (no_data_strategy === "all") {
if (format === "string") {
// @ts-ignore
return _convertDoubleAllStr.default.bind(null, old_no_data_value, (0, _makeNoDataRgbaString.default)(new_no_data_value !== null && new_no_data_value !== void 0 ? new_no_data_value : "null"), ...scalefns);
} else if (format === "array") {
// @ts-ignore
return _convertDoubleAll.default.bind(null, old_no_data_value, (0, _makeNoDataRgba.default)(new_no_data_value), ...scalefns);
}
} else {
if (format === "string") {
// @ts-ignore
return _convertDoubleStr.default.bind(null, old_no_data_value, new_no_data_value !== null && new_no_data_value !== void 0 ? new_no_data_value : "null", ...scalefns);
} else if (format === "array") {
// @ts-ignore
return _convertDouble.default.bind(null, old_no_data_value, new_no_data_value, ...scalefns);
}
}
} else if (nbands >= 3) {
if (no_data_strategy === "all") {
if (format === "string") {
// @ts-ignore
return _convertMultibandAllStr.default.bind(null, old_no_data_value, (0, _makeNoDataRgbaString.default)(new_no_data_value), ...scalefns);
} else if (format === "array") {
// @ts-ignore
return _convertMultibandAll.default.bind(null, old_no_data_value, (0, _makeNoDataRgba.default)(new_no_data_value), ...scalefns);
}
} else {
if (format === "string") {
// @ts-ignore
return _convertMultibandStr.default.bind(null, old_no_data_value, new_no_data_value, ...scalefns);
} else if (format === "array") {
// @ts-ignore
return _convertMultiband.default.bind(null, old_no_data_value, new_no_data_value, ...scalefns);
}
}
}
throw Error("uh oh");
}
},{"../make-no-data-rgba":11,"../make-no-data-rgba-string":10,"./convert-double":27,"./convert-double-all":25,"./convert-double-all-str":24,"./convert-double-str":26,"./convert-multiband":31,"./convert-multiband-all":29,"./convert-multiband-all-str":28,"./convert-multiband-str":30,"./convert-single":33,"./convert-single-str":32,"quick-scale":55}],35:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = rgbToRgba;
var _addAlpha = _interopRequireDefault(require("../add-alpha"));
var _pushAlpha = _interopRequireDefault(require("../push-alpha"));
var _makeNoDataRgba = _interopRequireDefault(require("../make-no-data-rgba"));
var _safelyConvert = _interopRequireDefault(require("./safely-convert"));
var _quicklyConvert = _interopRequireDefault(require("./quickly-convert"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function rgbToRgba({
old_no_data_value,
new_no_data_value = null,
safe = true
} = {}) {
if (typeof old_no_data_value === "number") {
if (safe) {
// @ts-ignore
return _safelyConvert.default.bind(null, old_no_data_value, new_no_data_value);
} else {
const new_no_data_pixel = (0, _makeNoDataRgba.default)(new_no_data_value); // we will reuse this no data pixel
// @ts-ignore
return _quicklyConvert.default.bind(null, old_no_data_value, new_no_data_pixel);
}
} else {
if (safe) {
return _addAlpha.default;
} else {
return _pushAlpha.default;
}
}
}
},{"../add-alpha":1,"../make-no-data-rgba":11,"../push-alpha":13,"./quickly-convert":36,"./safely-convert":37}],36:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = quickly_convert;
var _isNoData = _interopRequireDefault(require("../is-no-data"));
var _pushAlpha = _interopRequireDefault(require("../push-alpha"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// assuming valid RGB input
function quickly_convert(old_no_data_value, new_no_data_pixel, px) {
return (0, _isNoData.default)(old_no_data_value, px) ? new_no_data_pixel : (0, _pushAlpha.default)(px);
}
},{"../is-no-data":8,"../push-alpha":13}],37:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = safely_convert_rgb_to_rgba;
var _addAlpha = _interopRequireDefault(require("../add-alpha"));
var _isNoData = _interopRequireDefault(require("../is-no-data"));
var _makeNoDataRgba = _interopRequireDefault(require("../make-no-data-rgba"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function safely_convert_rgb_to_rgba(old_no_data_value, new_no_data_value, pixel) {
return (0, _isNoData.default)(old_no_data_value, pixel) ? (0, _makeNoDataRgba.default)(new_no_data_value) : (0, _addAlpha.default)(pixel);
}
},{"../add-alpha":1,"../is-no-data":8,"../make-no-data-rgba":11}],38:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = rgbToStr;
// prettier-ignore
function rgbToStr([r, g, b]) {
return "rgb(" + r + ", " + g + ", " + b + ")";
}
},{}],39:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = rgbaToRgb;
var _makeNoDataRgb = _interopRequireDefault(require("../make-no-data-rgb"));
var _popAlpha = _interopRequireDefault(require("../pop-alpha"));
var _sliceAlpha = _interopRequireDefault(require("../slice-alpha"));
var _safelyConvert = _interopRequireDefault(require("./safely-convert"));
var _quicklyConvert = _interopRequireDefault(require("./quickly-convert"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// converting from RGBA to RGB
// where we no longer have an alpha value
// assuming pixel is already scaled
// assume no data pixels have zero transparency
function rgbaToRgb({
new_no_data_value,
safe = true
} = {}) {
if (safe) {
if (typeof new_no_data_value === "number") {
// @ts-ignore
return _safelyConvert.default.bind(null, new_no_data_value);
} else {
return _sliceAlpha.default;
}
} else {
if (typeof new_no_data_value === "number") {
// @ts-ignore
return _quicklyConvert.default.bind(null, (0, _makeNoDataRgb.default)(new_no_data_value));
} else {
return _popAlpha.default;
}
}
}
},{"../make-no-data-rgb":9,"../pop-alpha":12,"../slice-alpha":53,"./quickly-convert":40,"./safely-convert":41}],40:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = quickly_convert_rgba_to_rgb;
var _isHidden = _interopRequireDefault(require("../is-hidden"));
var _popAlpha = _interopRequireDefault(require("../pop-alpha"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function quickly_convert_rgba_to_rgb(noDataPixel, pixel) {
return (0, _isHidden.default)(pixel) ? noDataPixel : (0, _popAlpha.default)(pixel);
}
},{"../is-hidden":7,"../pop-alpha":12}],41:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = safely_convert_rgba_to_rgb;
var _isHidden = _interopRequireDefault(require("../is-hidden"));
var _makeNoDataRgb = _interopRequireDefault(require("../make-no-data-rgb"));
var _sliceAlpha = _interopRequireDefault(require("../slice-alpha"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function safely_convert_rgba_to_rgb(noDataValue, pixel) {
return (0, _isHidden.default)(pixel) ? (0, _makeNoDataRgb.default)(noDataValue) : (0, _sliceAlpha.default)(pixel);
}
},{"../is-hidden":7,"../make-no-data-rgb":9,"../slice-alpha":53}],42:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = selectPixel;
var _enums = require("../enums");
var _selectPixelFromBrc = _interopRequireDefault(require("./select-pixel-from-brc"));
var _selectPixelFromBRC = _interopRequireDefault(require("./select-pixel-from-b-r-c"));
var _selectPixelFromBRc = _interopRequireDefault(require("./select-pixel-from-b-rc"));
var _selectPixelFromRcb = _interopRequireDefault(require("./select-pixel-from-rcb"));
var _selectPixelFromRcB = _interopRequireDefault(require("./select-pixel-from-rc-b"));
var _selectPixelFromRCB = _interopRequireDefault(require("./select-pixel-from-r-c-b"));
var _selectPixelFromRCb = _interopRequireDefault(require("./select-pixel-from-r-cb"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function selectPixel(data, {
depth,
height,
layout,
width
}) {
// console.log("layout:", {layout, data, depth, width});
switch (layout) {
case _enums.Layout["[band][row][column]"]:
// @ts-ignore
return _selectPixelFromBRC.default.bind(null, data, depth);
case _enums.Layout["[band][row,column]"]:
// @ts-ignore
return _selectPixelFromBRc.default.bind(null, data, depth, width);
case _enums.Layout["[band,row,column]"]:
// @ts-ignore
return _selectPixelFromBrc.default.bind(null, data, depth, height, width);
case _enums.Layout["[row,column][band]"]:
// @ts-ignore
return _selectPixelFromRcB.default.bind(null, data, width);
case _enums.Layout["[row][column][band]"]:
// @ts-ignore
return _selectPixelFromRCB.default.bind(null, data);
case _enums.Layout["[row][column,band]"]:
// @ts-ignore
return _selectPixelFromRCb.default.bind(null, data, depth);
case _enums.Layout["[row,column,band]"]:
// @ts-ignore
return _selectPixelFromRcb.default.bind(null, data, depth, width);
default:
throw new Error("[pixel-utils] unknown layout " + layout);
}
}
},{"../enums":3,"./select-pixel-from-b-r-c":43,"./select-pixel-from-b-rc":44,"./select-pixel-from-brc":45,"./select-pixel-from-r-c-b":46,"./select-pixel-from-r-cb":47,"./select-pixel-from-rc-b":48,"./select-pixel-from-rcb":49}],43:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_b_r_c;
function select_b_r_c(data, depth, r, c) {
const pixel = [];
for (let b = 0; b < depth; b++) {
pixel.push(data[b][r][c]);
}
return pixel;
}
},{}],44:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_b_rc;
function select_b_rc(data, depth, width, r, c) {
const pixel = [];
const i = r * width + c;
for (let b = 0; b < depth; b++) {
pixel.push(data[b][i]);
}
return pixel;
}
},{}],45:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_brc;
function select_brc(data, depth, height, width, r, c) {
const pixel = [];
const size = height * width;
const i = r * width + c;
for (let b = 0; b < depth; b++) {
pixel.push(data[b * size + i]);
}
return pixel;
}
},{}],46:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_r_c_b;
function select_r_c_b(data, r, c) {
return data[r][c];
}
},{}],47:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_r_cb;
// each row is its own array
function select_r_cb(data, depth, r, c) {
const pixel = [];
const row = data[r];
let i = c * depth;
const imax = i + depth;
for (; i < imax; i++) {
pixel.push(row[i]);
}
return pixel;
}
},{}],48:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_rc_b;
function select_rc_b(data, width, r, c) {
return data[r * width + c];
}
},{}],49:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = select_rcb;
// like ImageData.data
function select_rcb(data, depth, width, r, c) {
const pixel = [];
let i = (r * width + c) * depth;
const imax = i + depth;
for (; i < imax; i++) {
pixel.push(data[i]);
}
return pixel;
}
},{}],50:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setHidden;
// make a given rgba value transparent
function setHidden(pixel) {
// @ts-ignore
pixel[3] = 0;
// @ts-ignore
return pixel;
}
},{}],51:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setVisible;
// make a given rgba value visible
function setVisible(pixel) {
// @ts-ignore
pixel[3] = 255;
// @ts-ignore
return pixel;
}
},{}],52:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = showRGBA;
/**
* @name show_rgba
* @description // make a given (scaled) rgba value visible
* @param {RGBA} rgba pixel
* @returns a new rgba pixel with the same Red, Green and Blue values and a 255 alpha value
*/
function showRGBA([r, g, b]) {
return [r, g, b, 255];
}
},{}],53:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = sliceAlpha;
/**
* @name sliceAlpha
* @description slices off the alpha value of a 4-number RGBA pixel array,
* leaving a new 3-Number RGB pixel array
* @param {RGBA} pixel - an RGBA
* @returns {RGBA} an RGBA pixel as an array of 4 numbers
*/
function sliceAlpha(pixel) {
// @ts-ignore
return pixel.slice(0, 3);
}
},{}],54:[function(require,module,exports){
function addSymbolIterator(obj) {
try {
obj[Symbol.iterator] = function () {
return this;
};
} catch (error) {
// pass
}
}
function addSymbolIteratorFallback(obj) {
obj["@@iterator"] = function () {
return this;
};
}
function wrapNextFunction(next) {
const iter = { next };
addSymbolIterator(iter);
addSymbolIteratorFallback(iter);
return iter;
}
function isArray(data) {
try {
return data.constructor.name.endsWith("Array");
} catch {
return false;
}
}
function hasNext(data) {
try {
return typeof data.next === "function";
} catch {
return false;
}
}
function hasIterator(data) {
try {
return "@@iterator" in data;
} catch {
return false;
}
}
function hasSymbolIterator(data) {
try {
return Symbol.iterator in data.constructor.prototype;
} catch {
return false;
}
}
function isIterator(data) {
try {
return (
Symbol.iterator in data &&
typeof data.next === "function" &&
data.propertyIsEnumerable("next") === false
);
} catch {
return false;
}
}
function getIterator(data) {
const iter = data["@@iterator"];
if (hasNext(iter)) {
return iter;
} else if (typeof iter === "function") {
return iter();
}
}
function createIterator(data) {
let i = 0;
let len = data.length;
const next = () =>
i++ < len ? { value: data[i], done: false } : { done: true };
return wrapNextFunction(next);
}
function getOrCreateIterator(data) {
if (isIterator(data)) {
return data;
} else if (hasSymbolIterator(data)) {
return data[Symbol.iterator]();
} else if (hasNext(data)) {
return wrapNextFunction(data.next);
} else if (hasIterator(data)) {
return getIterator(data);
} else if (typeof data === "string" || isArray(data)) {
return createIterator(data);
} else {
throw "[iter-fun] unable to determine iterator";
}
}
function zip(iters) {
// convert input to iters just in case
iters = iters.map(getOrCreateIterator);
return wrapNextFunction(function next() {
const values = iters.map(iter => iter.next());
// if they are all done, stop
if (values.every(({ done }) => done)) {
return { done: true };
} else {
return {
done: false,
value: values.map(({ value }) => value)
};
}
});
}
if (typeof module === "object") {
module.exports = {
addSymbolIterator,
addSymbolIteratorFallback,
isIterator,
isArray,
hasNext,
hasSymbolIterator,
hasIterator,
getIterator,
createIterator,
getOrCreateIterator,
wrapNextFunction,
zip
};
}
},{}],55:[function(require,module,exports){
// to-do: provide offsets, so evenly distributed when rounding
function _identity(n) {
return n;
}
function _scale_number(old_min, old_range, new_min, new_range, n) {
return new_min + (new_range * (n - old_min)) / old_range;
}
function _scale_and_flip_number(old_min, old_range, new_max, new_range, n) {
return new_max - (new_range * (n - old_min)) / old_range;
}
function _scale_and_round_number(old_min, old_range, new_min, new_range, n) {
return Math.round(new_min + (new_range * (n - old_min)) / old_range);
}
function _scale_and_flip_and_round_number(old_min, old_range, new_max, new_range, n) {
return Math.round(new_max - (new_range * (n - old_min)) / old_range);
}
// assuming not no data
function createScaleFunction([old_min, old_max], [new_min, new_max], { flip, no_range_value, no_range_value_strategy = "highest", round = false } = {}) {
const old_range = old_max - old_min;
const new_range = new_max - new_min;
if (old_range === 0) {
if (typeof no_range_value === "number") {
return _identity.bind(null, no_range_value);
} else if (no_range_value_strategy === "highest") {
return _identity.bind(null, new_max);
} else if (no_range_value_strategy === "lowest") {
return _identity.bind(null, new_min);
} else if (no_range_value_strategy === "middle") {
let n = (new_max - new_min) / 2;
if (round) n = Math.round(n);
return _identity.bind(null, n);
}
}
if (flip) {
if (round) {
return _scale_and_flip_and_round_number.bind(null, old_min, old_range, new_max, new_range);
} else {
return _scale_and_flip_number.bind(null, old_min, old_range, new_max, new_range);
}
} else {
if (round) {
return _scale_and_round_number.bind(null, old_min, old_range, new_min, new_range);
} else {
return _scale_number.bind(null, old_min, old_range, new_min, new_range);
}
}
}
function _scale(pixel, ...rest) {
return create(rest)(pixel);
}
const quickScale = {
_identity,
_scale,
_scale_number,
_scale_and_flip_number,
_scale_and_round_number,
_scale_and_flip_and_round_number,
createScaleFunction
};
if (typeof define === "object")
define(function () {
return quickScale;
});
if (typeof module === "object") module.exports = quickScale;
if (typeof window === "object") window.quickScale = quickScale;
if (typeof self === "object") self.quickScale = quickScale;
},{}],56:[function(require,module,exports){
module.exports = {
"1": function ({ point }) { const parent = this.data; const index = point[this.d0v0]; return { parent, index, value: parent[index] }; },
"2": function ({ point }) { const parent = this.data; const index = this.m0v0*point[this.d0v0]+this.m0v1*point[this.d0v1]; return { parent, index, value: parent[index] }; },
"3": function ({ point }) { const parent = this.data; const index = this.m0v0*point[this.d0v0]+this.m0v1*point[this.d0v1]+this.m0v2*point[this.d0v2]; return { parent, index, value: parent[index] }; },
"4": function ({ point }) { const parent = this.data; const index = this.m0v0*point[this.d0v0]+this.m0v1*point[this.d0v1]+this.m0v2*point[this.d0v2]+this.m0v3*point[this.d0v3]; return { parent, index, value: parent[index] }; },
"5": function ({ point }) { const parent = this.data; const index = this.m0v0*point[this.d0v0]+this.m0v1*point[this.d0v1]+this.m0v2*point[this.d0v2]+this.m0v3*point[this.d0v3]+this.m0v4*point[this.d0v4]; return { parent, index, value: parent[index] }; },
"1,1": function ({ point }) { const parent = this.data[point[this.d0v0]]; const index = point[this.d1v0]; return { parent, index, value: parent[index] }; },
"1,2": function ({ point }) { const parent = this.data[point[this.d0v0]]; const index = this.m1v0*point[this.d1v0]+this.m1v1*point[this.d1v1]; return { parent, index, value: parent[index] }; },
"1,3": function ({ point }) { const parent = this.data[point[this.d0v0]]; const index = this.m1v0*point[this.d1v0]+this.m1v1*point[this.d1v1]+this.m1v2*point[this.d1v2]; return { parent, index, value: parent[index] }; },
"1,4": function ({ point }) { const parent = this.data[point[this.d0v0]]; const index = this.m1v0*point[this.d1v0]+this.m1v1*point[this.d1v1]+this.m1v2*point[this.d1v2]+this.m1v3*point[this.d1v3]; return { parent, index, value: parent[index] }; },
"1,5": function ({ point }) { const parent = this.data[point[this.d0v0]]; const index = this.m1v0*point[this.d1v0]+this.m1v1*point[this.d1v1]+this.m1v2*point[this.d1v2]+this.m1v3*point[this.d1v3]+this.m1v4*point[this.d1v4]; return { parent, index, value: parent[index] }; },
"1,1,1": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]]; const index = point[this.d2v0]; return { parent, index, value: parent[index] }; },
"1,1,2": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]]; const index = this.m2v0*point[this.d2v0]+this.m2v1*point[this.d2v1]; return { parent, index, value: parent[index] }; },
"1,1,3": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]]; const index = this.m2v0*point[this.d2v0]+this.m2v1*point[this.d2v1]+this.m2v2*point[this.d2v2]; return { parent, index, value: parent[index] }; },
"1,1,4": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]]; const index = this.m2v0*point[this.d2v0]+this.m2v1*point[this.d2v1]+this.m2v2*point[this.d2v2]+this.m2v3*point[this.d2v3]; return { parent, index, value: parent[index] }; },
"1,1,5": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]]; const index = this.m2v0*point[this.d2v0]+this.m2v1*point[this.d2v1]+this.m2v2*point[this.d2v2]+this.m2v3*point[this.d2v3]+this.m2v4*point[this.d2v4]; return { parent, index, value: parent[index] }; },
"1,1,1,1": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]]; const index = point[this.d3v0]; return { parent, index, value: parent[index] }; },
"1,1,1,2": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]]; const index = this.m3v0*point[this.d3v0]+this.m3v1*point[this.d3v1]; return { parent, index, value: parent[index] }; },
"1,1,1,3": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]]; const index = this.m3v0*point[this.d3v0]+this.m3v1*point[this.d3v1]+this.m3v2*point[this.d3v2]; return { parent, index, value: parent[index] }; },
"1,1,1,4": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]]; const index = this.m3v0*point[this.d3v0]+this.m3v1*point[this.d3v1]+this.m3v2*point[this.d3v2]+this.m3v3*point[this.d3v3]; return { parent, index, value: parent[index] }; },
"1,1,1,5": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]]; const index = this.m3v0*point[this.d3v0]+this.m3v1*point[this.d3v1]+this.m3v2*point[this.d3v2]+this.m3v3*point[this.d3v3]+this.m3v4*point[this.d3v4]; return { parent, index, value: parent[index] }; },
"1,1,1,1,1": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]][point[this.d3v0]]; const index = point[this.d4v0]; return { parent, index, value: parent[index] }; },
"1,1,1,1,2": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]][point[this.d3v0]]; const index = this.m4v0*point[this.d4v0]+this.m4v1*point[this.d4v1]; return { parent, index, value: parent[index] }; },
"1,1,1,1,3": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]][point[this.d3v0]]; const index = this.m4v0*point[this.d4v0]+this.m4v1*point[this.d4v1]+this.m4v2*point[this.d4v2]; return { parent, index, value: parent[index] }; },
"1,1,1,1,4": function ({ point }) { const parent = this.data[point[this.d0v0]][point[this.d1v0]][point[this.d2v0]][point[this.d3v0]]; const index = this.m4v0*point[this.d4v0]+this.m4v1*point[this.d4v1]+this.m4v2*point[th