UNPKG

gs-json

Version:

gs-JSON is a domain agnostic unifying 3D file format for geometric and semantic modelling (hence the 'gs').

207 lines (189 loc) 9.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.multVectorMatrix = multVectorMatrix; exports.multXYZMatrix = multXYZMatrix; exports.xformMatrix = xformMatrix; exports.xformMatrixFromXYZs = xformMatrixFromXYZs; exports.matrixInv = matrixInv; exports.vectorsFromVertices = vectorsFromVertices; exports.vectorsFromPoints = vectorsFromPoints; exports.subVectors = subVectors; exports.addVectors = addVectors; exports.crossVectors = crossVectors; exports.vectorFromPointsAtoB = vectorFromPointsAtoB; exports.vectorFromVerticesAtoB = vectorFromVerticesAtoB; exports.subXYZs = subXYZs; exports.addXYZs = addXYZs; exports.crossXYZs = crossXYZs; exports.normalizeXYZ = normalizeXYZ; exports.lengthXYZ = lengthXYZ; exports.setLengthXYZ = setLengthXYZ; exports.makeXYZOrthogonal = makeXYZOrthogonal; exports.subPoints = subPoints; exports.addPoints = addPoints; exports.subVertices = subVertices; exports.addVertices = addVertices; var _three = require("three"); var three = _interopRequireWildcard(_three); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var EPS = 1e-6; /** * Utility functions for threejs. */ // Matrices ====================================================================================================== function multVectorMatrix(v, m) { var v2 = v.clone(); v2.applyMatrix4(m); return v2; } function multXYZMatrix(xyz, m) { var v2 = new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz))))(); v2.applyMatrix4(m); return v2.toArray().slice(0, 3); } function xformMatrix(o, x, y, z) { x.normalize(); y.normalize(); z.normalize(); var m1 = new three.Matrix4(); var o_neg = o.clone().negate(); m1.setPosition(o_neg); var m2 = new three.Matrix4(); m2.makeBasis(x, y, z); m2.getInverse(m2); var m3 = new three.Matrix4(); m3.multiplyMatrices(m2, m1); return m3; } function xformMatrixFromXYZs(o, axes) { return xformMatrix(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(o))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(axes[0]))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(axes[1]))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(axes[2]))))()); } function matrixInv(m) { var m2 = new three.Matrix4(); return m2.getInverse(m); } // Vectors ======================================================================================================= function vectorsFromVertices(vertices) { return vertices.map(function (v) { return new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(v.getPoint().getPosition()))))(); }); } function vectorsFromPoints(points) { return points.map(function (p) { return new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(p.getPosition()))))(); }); } function subVectors(v1, v2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var v3 = new three.Vector3(); v3.subVectors(v1, v2); if (norm) { v3.normalize(); } return v3; } function addVectors(v1, v2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var v3 = new three.Vector3(); v3.addVectors(v1, v2); if (norm) { v3.normalize(); } return v3; } function crossVectors(v1, v2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var v3 = new three.Vector3(); v3.crossVectors(v1, v2); if (norm) { v3.normalize(); } return v3; } function vectorFromPointsAtoB(a, b) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var v = subVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(b.getPosition()))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(a.getPosition()))))()); if (norm) { v.normalize(); } return v; } function vectorFromVerticesAtoB(a, b) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var v = subVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(b.getPoint().getPosition()))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(a.getPoint().getPosition()))))()); if (norm) { v.normalize(); } return v; } // XYZ =========================================================================================================== function subXYZs(xyz1, xyz2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return subVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz1))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz2))))(), norm).toArray().slice(0, 3); } function addXYZs(xyz1, xyz2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return addVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz1))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz2))))(), norm).toArray().slice(0, 3); } function crossXYZs(xyz1, xyz2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return crossVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz1))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz2))))(), norm).toArray().slice(0, 3); } function normalizeXYZ(xyz) { return new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz))))().normalize().toArray().slice(0, 3); } function lengthXYZ(xyz) { return new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz))))().length(); } function setLengthXYZ(xyz, length) { return new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz))))().setLength(length).toArray(); } function makeXYZOrthogonal(xyz1, xyz2, normalize) { // create normalised vectors var vec_x = new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz1))))(); var len = vec_x.length(); if (len < EPS) { return null; } vec_x.normalize(); var vec2 = new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(xyz2))))().normalize(); // check if vec1 and vec2 are parallel var abs_dot = Math.abs(vec_x.dot(vec2)); if (1 - abs_dot < EPS) { return null; } // make vec_z var vec_z = new three.Vector3(); vec_z.crossVectors(vec_x, vec2); // make vec_y var vec_y = new three.Vector3(); vec_y.crossVectors(vec_z, vec_x); // return if (normalize) { return [vec_x.toArray(), vec_y.toArray(), vec_z.toArray()]; } else { return [xyz1, vec_y.setLength(len).toArray(), vec_z.toArray()]; } } // Points ======================================================================================================== function subPoints(p1, p2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return subVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(p1.getPosition()))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(p2.getPosition()))))(), norm).toArray().slice(0, 3); } function addPoints(p1, p2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return addVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(p1.getPosition()))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(p2.getPosition()))))(), norm).toArray().slice(0, 3); } // Vertices ====================================================================================================== function subVertices(v1, v2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return subVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(v1.getPoint().getPosition()))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(v2.getPoint().getPosition()))))(), norm).toArray().slice(0, 3); } function addVertices(v1, v2) { var norm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return addVectors(new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(v1.getPoint().getPosition()))))(), new (Function.prototype.bind.apply(three.Vector3, [null].concat(_toConsumableArray(v2.getPoint().getPosition()))))(), norm).toArray().slice(0, 3); } //# sourceMappingURL=threex.js.map