points-to-vertices
Version:
:white_square_button: a points to vertices array convertor
188 lines (145 loc) • 5.12 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.pointsToVertices = factory());
}(this, (function () { 'use strict';
var mapChannel = (function (channel) {
return channel / 255;
});
var normalize$1 = (function (min, max, value) {
if (value < min) return min;else if (value > max) return max;else return value;
});
var rgbToVec4 = (function (color) {
var alpha = false;
if (color.startsWith('rgba(')) alpha = true;else if (color.startsWith('rgb(')) alpha = false;
var split = alpha ? 'rgba(' : 'rgb(';
var channels = color.split(split)[1].split(')')[0].split(',');
if (channels.length < 3 || channels.length > 4) {
throw new Error(color + ' is not a valid rgb(a) color');
}
channels = channels.map(function (c) {
return parseFloat(c);
}).map(function (c) {
return normalize$1(0, 255, c);
});
var _channels = channels,
r = _channels[0],
g = _channels[1],
b = _channels[2],
_channels$ = _channels[3],
a = _channels$ === undefined ? 1 : _channels$;
var aa = normalize$1(0, 1, a);
var rgb = [r, g, b].map(mapChannel);
return [].concat(rgb, [aa]);
});
var hexToRgb = (function (hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
result = result.slice(1, 4);
result = result.map(function (r) {
return parseInt(r, 16);
});
var _result = result,
r = _result[0],
g = _result[1],
b = _result[2];
var a = 1;
return { r: r, g: g, b: b, a: a };
});
var hexToVec4 = (function (color) {
var isValid = /^#[0-9A-F]{6}$/i.test(color);
if (!isValid) {
throw new Error(color + ' is not a valid hex color');
}
var colorObj = hexToRgb(color);
var r = colorObj.r,
g = colorObj.g,
b = colorObj.b;
var colors = [r, g, b];
return [].concat(colors.map(function (c) {
return mapChannel(c);
}), [1]);
});
var colorToVec4 = (function (color) {
if (typeof color === 'string') {
if (color.startsWith('rgba')) return rgbToVec4(color);else if (color.startsWith('rgb')) return rgbToVec4(color);else if (color.startsWith('#')) return hexToVec4(color);else throw new Error(color + ' is not a valid color, must be rgba, rgb, hex or vec4');
} else if (Array.isArray(color)) {
if (color.length !== 4) {
throw new Error('[' + color + '] is not a valid vec4');
}
return color;
} else {
throw new Error(color + ' is not a valid color, must be rgba, rgb, hex or vec4');
}
});
var normalize = function normalize(min, max, value) {
if (value < min) return min;else if (value > max) return max;
return value;
};
var pointToVertex = (function (point) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$color = _ref.color,
color = _ref$color === undefined ? true : _ref$color,
_ref$dx = _ref.dx,
dx = _ref$dx === undefined ? 0 : _ref$dx,
_ref$dy = _ref.dy,
dy = _ref$dy === undefined ? 0 : _ref$dy,
_ref$dz = _ref.dz,
dz = _ref$dz === undefined ? 0 : _ref$dz,
_ref$dcolor = _ref.dcolor,
dcolor = _ref$dcolor === undefined ? [0, 0, 0, 1] : _ref$dcolor;
var _point$x = point.x,
x = _point$x === undefined ? dx : _point$x,
_point$y = point.y,
y = _point$y === undefined ? dy : _point$y,
_point$z = point.z,
z = _point$z === undefined ? dz : _point$z;
x = normalize(-1, 1, x);
y = normalize(-1, 1, y);
z = normalize(-1, 1, z);
var _point$color = point.color,
pColor = _point$color === undefined ? dcolor : _point$color;
if (pColor && color) {
var colorVec = colorToVec4(pColor);
// [x, y, z, r, g, b, a]
return [x, y, z].concat(colorVec);
} else {
// [x, y, z]
return [x, y, z];
}
});
var flatten = (function (arr) {
return [].concat.apply([], arr);
});
var index = (function (points) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$color = _ref.color,
color = _ref$color === undefined ? true : _ref$color,
_ref$dx = _ref.dx,
dx = _ref$dx === undefined ? 0 : _ref$dx,
_ref$dy = _ref.dy,
dy = _ref$dy === undefined ? 0 : _ref$dy,
_ref$dz = _ref.dz,
dz = _ref$dz === undefined ? 0 : _ref$dz,
_ref$dcolor = _ref.dcolor,
dcolor = _ref$dcolor === undefined ? [0, 0, 0, 1] : _ref$dcolor,
_ref$meta = _ref.meta,
meta = _ref$meta === undefined ? false : _ref$meta;
var options = {
color: color, dx: dx, dy: dy, dz: dz, dcolor: dcolor, meta: meta
};
var vertices = flatten(points.map(function (p) {
return pointToVertex(p, options);
}));
if (meta) {
var _meta = {};
_meta.vertexLength = color ? 7 : 3;
_meta.amount = vertices.length / _meta.vertexLength;
_meta.position = { start: 0, length: 3 };
if (color) _meta.color = { start: 3, length: 4 };
return { data: vertices, meta: _meta };
} else {
return vertices;
}
});
return index;
})));