UNPKG

awv3

Version:
97 lines (87 loc) 2.66 kB
import { inflate } from 'pako/lib/inflate'; import base64 from 'base64-arraybuffer'; export function min(vec, v) { vec[0] = Math.min(vec[0], v[0]); vec[1] = Math.min(vec[1], v[1]); vec[2] = Math.min(vec[2], v[2]); } export function max(vec, v) { vec[0] = Math.max(vec[0], v[0]); vec[1] = Math.max(vec[1], v[1]); vec[2] = Math.max(vec[2], v[2]); } export function expand(vecMin, vecMax, v) { min(vecMin, v); max(vecMax, v); } export function cross(vec, v) { let [x, y, z] = vec; vec[0] = y * v[2] - z * v[1]; vec[1] = z * v[0] - x * v[2]; vec[2] = x * v[1] - y * v[0]; } export function applyMatrix(vec, e) { let [x, y, z] = vec; vec[0] = e[0] * x + e[4] * y + e[8] * z + e[12]; vec[1] = e[1] * x + e[5] * y + e[9] * z + e[13]; vec[2] = e[2] * x + e[6] * y + e[10] * z + e[14]; } export function distance(v1, v2) { let [x1, y1, z1] = v1; let [x2, y2, z2] = v2; let dx = x1 - x2, dy = y1 - y2, dz = z1 - z2; return Math.sqrt(dx * dx + dy * dy + dz * dz); } function utf8ArrayToStr(array) { let out, i, len, c; let char2, char3; out = ''; len = array.length; i = 0; while (i < len) { c = array[i++]; switch (c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += String.fromCharCode(c); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = array[i++]; out += String.fromCharCode((c & 0x1f) << 6 | char2 & 0x3f); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = array[i++]; char3 = array[i++]; out += String.fromCharCode((c & 0x0f) << 12 | (char2 & 0x3f) << 6 | (char3 & 0x3f) << 0); break; } } return out; } function decodeBuffer(buffer, length) { let data = ''; if (typeof TextDecoder !== 'undefined') { let dataView = new DataView(buffer.buffer), decoder = new TextDecoder('utf-8'); data = decoder.decode(dataView); } else data = utf8ArrayToStr(buffer); return data.slice(0, length); } export function unpack(blob) { let stream = blob.data; if (!(stream instanceof Uint8Array)) stream = base64.decode(blob.data); stream = inflate(stream, { raw: true }); stream = decodeBuffer(stream, blob.length || stream.length); blob.data = JSON.parse(stream); blob.size = stream.length; }