{ "version": 3, "sources": [ "webpack://cornerstoneMath/webpack/universalModuleDefinition", "webpack://cornerstoneMath/webpack/bootstrap", "webpack://cornerstoneMath/./vector3.js", "webpack://cornerstoneMath/./math.js", "webpack://cornerstoneMath/./quaternion.js", "webpack://cornerstoneMath/./lineSegment.js", "webpack://cornerstoneMath/./index.js", "webpack://cornerstoneMath/./Line3.js", "webpack://cornerstoneMath/./matrix4.js", "webpack://cornerstoneMath/./plane.js", "webpack://cornerstoneMath/./point.js", "webpack://cornerstoneMath/./rect.js" ], "names": [ "root", "factory", "exports", "module", "define", "amd", "window", "installedModules", "__webpack_require__", "moduleId", "i", "l", "modules", "call", "m", "c", "d", "name", "getter", "o", "Object", "defineProperty", "enumerable", "get", "r", "Symbol", "toStringTag", "value", "t", "mode", "__esModule", "ns", "create", "key", "bind", "n", "object", "property", "prototype", "hasOwnProperty", "p", "s", "_math", "Vector3", "x", "y", "z", "_classCallCheck", "this", "index", "Error", "v", "w", "undefined", "console", "warn", "addVectors", "a", "b", "subVectors", "multiplyVectors", "scalar", "e", "elements", "q", "qx", "qy", "qz", "qw", "ix", "iy", "iz", "iw", "normalize", "invScalar", "min", "max", "Math", "floor", "ceil", "round", "multiplyScalar", "sqrt", "abs", "divideScalar", "length", "oldLength", "alpha", "crossVectors", "ax", "ay", "az", "bx", "by", "bz", "theta", "dot", "acos", "clamp", "distanceToSquared", "dx", "dy", "dz", "sx", "set", "sy", "sz", "matrix", "offset", "me", "array", "projectOnVector", "v1", "vector", "copy", "projectOnPlane", "planeNormal", "sub", "reflect", "normal", "clampScalar", "minVal", "maxVal", "applyAxisAngle", "quaternion", "axis", "angle", "Quaternion", "applyQuaternion", "setFromAxisAngle", "EPSILON", "degToRad", "degrees", "PI", "approximatelyEquals", "epsilon", "_epsilon", "radToDeg", "radians", "sign", "NaN", "halfAngle", "sin", "cos", "qax", "qay", "qaz", "qaw", "qbx", "qby", "qbz", "qbw", "te", "m11", "m12", "m13", "m21", "m22", "m23", "m31", "m32", "m33", "trace", "sqr", "dist2", "lineSegment", "distanceToPoint", "point", "l2", "start", "end", "distanceToPointSquared", "intersectLine", "lineSegment1", "lineSegment2", "a1", "a2", "b1", "b2", "c1", "c2", "r1", "r2", "r3", "r4", "denom", "intersectionPoint", "x1", "y1", "x2", "y2", "x3", "y3", "x4", "y4", "num", "parseFloat", "cornerstoneMath", "Line3", "Matrix4", "Plane", "rect", "line", "optionalTarget", "distanceTo", "result", "delta", "add", "clampToLine", "startP", "startEnd", "startEnd2", "closestPointToPointParameter", "applyMatrix4", "equals", "da", "clone", "db", "dc", "daCrossDb", "cross", "dcCrossDb", "normalizedCoplanarResult", "lengthSq", "isNaN", "intersection", "distanceSq", "n11", "n12", "n13", "n14", "n21", "n22", "n23", "n24", "n31", "n32", "n33", "n34", "n41", "n42", "n43", "n44", "Float32Array", "z2", "xx", "xy", "xz", "yy", "yz", "zz", "wx", "wy", "wz", "ae", "be", "a11", "a12", "a13", "a14", "a21", "a22", "a23", "a24", "a31", "a32", "a33", "a34", "a41", "a42", "a43", "a44", "b11", "b12", "b13", "b14", "b21", "b22", "b23", "b24", "b31", "b32", "b33", "b34", "b41", "b42", "b43", "b44", "multiplyMatrices", "throwOnInvertible", "det", "msg", "identity", "j", "constant", "plane", "inverseNormalLength", "negate", "sphere", "center", "radius", "orthoPoint", "perpendicularMagnitude", "startSign", "endSign", "targetPlane", "direction", "intersectionData", "origin", "h1", "h2", "n1dotn2", "setFromCoplanarPoints", "v2", "setFromNormalAndCoplanarPoint", "denominator", "subtract", "lhs", "rhs", "distance", "from", "to", "distanceSquared", "pageToPoint", "pageX", "pageY", "insideRect", "left", "width", "top", "height", "findClosestPoint", "sources", "target", "distances", "minDistance", "forEach", "source", "push", "indexOf", "rectToPoints", "topLeft", "bottomRight", "rectToLineSegments", "segment", "getIntersectionRect", "rect1", "rect2", "intersectRect", "intersectLeftRight", "intersectTopBottom", "rect1Points", "rect2Points", "doesIntersect" ], "mappings": "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", "file": "cornerstoneMath.min.js", "sourcesContent": [ "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cornerstone-math\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cornerstone-math\"] = factory();\n\telse\n\t\troot[\"cornerstoneMath\"] = factory();\n})(window, function() {\nreturn ", " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n", "import Quaternion from './quaternion.js';\r\nimport { clamp } from './math.js';\r\n\r\n// Based on THREE.JS\r\nclass Vector3 {\r\n\r\n constructor (x, y, z) {\r\n this.x = x || 0;\r\n this.y = y || 0;\r\n this.z = z || 0;\r\n }\r\n\r\n set (x, y, z) {\r\n\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n setX (x) {\r\n\r\n this.x = x;\r\n\r\n return this;\r\n\r\n }\r\n\r\n setY (y) {\r\n\r\n this.y = y;\r\n\r\n return this;\r\n\r\n }\r\n\r\n setZ (z) {\r\n\r\n this.z = z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n setComponent (index, value) {\r\n\r\n switch (index) {\r\n\r\n case 0: this.x = value; break;\r\n case 1: this.y = value; break;\r\n case 2: this.z = value; break;\r\n default: throw new Error(`index is out of range: ${index}`);\r\n\r\n }\r\n\r\n }\r\n\r\n getComponent (index) {\r\n\r\n switch (index) {\r\n\r\n case 0: return this.x;\r\n case 1: return this.y;\r\n case 2: return this.z;\r\n default: throw new Error(`index is out of range: ${index}`);\r\n\r\n }\r\n\r\n }\r\n\r\n copy (v) {\r\n\r\n this.x = v.x;\r\n this.y = v.y;\r\n this.z = v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n add (v, w) {\r\n\r\n if (w !== undefined) {\r\n\r\n console.warn('DEPRECATED: Vector3\\'s .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\r\n\r\n return this.addVectors(v, w);\r\n\r\n }\r\n\r\n this.x += v.x;\r\n this.y += v.y;\r\n this.z += v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addScalar (s) {\r\n\r\n this.x += s;\r\n this.y += s;\r\n this.z += s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n addVectors (a, b) {\r\n\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n this.z = a.z + b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n sub (v, w) {\r\n\r\n if (w !== undefined) {\r\n\r\n console.warn('DEPRECATED: Vector3\\'s .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\r\n\r\n return this.subVectors(v, w);\r\n\r\n }\r\n\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n this.z -= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n subVectors (a, b) {\r\n\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n this.z = a.z - b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiply (v, w) {\r\n\r\n if (w !== undefined) {\r\n\r\n console.warn('DEPRECATED: Vector3\\'s .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');\r\n\r\n return this.multiplyVectors(v, w);\r\n\r\n }\r\n\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n this.z *= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyScalar (scalar) {\r\n\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n this.z *= scalar;\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyVectors (a, b) {\r\n\r\n this.x = a.x * b.x;\r\n this.y = a.y * b.y;\r\n this.z = a.z * b.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n applyMatrix3 (m) {\r\n\r\n const x = this.x;\r\n const y = this.y;\r\n const z = this.z;\r\n\r\n const e = m.elements;\r\n\r\n this.x = e[0] * x + e[3] * y + e[6] * z;\r\n this.y = e[1] * x + e[4] * y + e[7] * z;\r\n this.z = e[2] * x + e[5] * y + e[8] * z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n applyMatrix4 (m) {\r\n\r\n // Input: THREE.Matrix4 affine matrix\r\n\r\n let x = this.x,\r\n y = this.y,\r\n z = this.z;\r\n\r\n const e = m.elements;\r\n\r\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\r\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\r\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\r\n\r\n return this;\r\n\r\n }\r\n\r\n applyProjection (m) {\r\n\r\n // Input: THREE.Matrix4 projection matrix\r\n\r\n let x = this.x,\r\n y = this.y,\r\n z = this.z;\r\n\r\n const e = m.elements;\r\n const d = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); // Perspective divide\r\n\r\n this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * d;\r\n this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * d;\r\n this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * d;\r\n\r\n return this;\r\n\r\n }\r\n\r\n applyQuaternion (q) {\r\n\r\n const x = this.x;\r\n const y = this.y;\r\n const z = this.z;\r\n\r\n const qx = q.x;\r\n const qy = q.y;\r\n const qz = q.z;\r\n const qw = q.w;\r\n\r\n // Calculate quat * vector\r\n\r\n const ix = qw * x + qy * z - qz * y;\r\n const iy = qw * y + qz * x - qx * z;\r\n const iz = qw * z + qx * y - qy * x;\r\n const iw = -qx * x - qy * y - qz * z;\r\n\r\n // Calculate result * inverse quat\r\n\r\n this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\r\n this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\r\n this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\r\n\r\n return this;\r\n\r\n }\r\n\r\n transformDirection (m) {\r\n\r\n // Input: THREE.Matrix4 affine matrix\r\n // Vector interpreted as a direction\r\n\r\n let x = this.x,\r\n y = this.y,\r\n z = this.z;\r\n\r\n const e = m.elements;\r\n\r\n this.x = e[0] * x + e[4] * y + e[8] * z;\r\n this.y = e[1] * x + e[5] * y + e[9] * z;\r\n this.z = e[2] * x + e[6] * y + e[10] * z;\r\n\r\n this.normalize();\r\n\r\n return this;\r\n\r\n }\r\n\r\n divide (v) {\r\n\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n this.z /= v.z;\r\n\r\n return this;\r\n\r\n }\r\n\r\n divideScalar (scalar) {\r\n\r\n if (scalar !== 0) {\r\n\r\n const invScalar = 1 / scalar;\r\n\r\n this.x *= invScalar;\r\n this.y *= invScalar;\r\n this.z *= invScalar;\r\n\r\n } else {\r\n\r\n this.x = 0;\r\n this.y = 0;\r\n this.z = 0;\r\n\r\n }\r\n\r\n return this;\r\n\r\n }\r\n\r\n min (v) {\r\n\r\n if (this.x > v.x) {\r\n\r\n this.x = v.x;\r\n\r\n }\r\n\r\n if (this.y > v.y) {\r\n\r\n this.y = v.y;\r\n\r\n }\r\n\r\n if (this.z > v.z) {\r\n\r\n this.z = v.z;\r\n\r\n }\r\n\r\n return this;\r\n\r\n }\r\n\r\n max (v) {\r\n\r\n if (this.x < v.x) {\r\n\r\n this.x = v.x;\r\n\r\n }\r\n\r\n if (this.y < v.y) {\r\n\r\n this.y = v.y;\r\n\r\n }\r\n\r\n if (this.z < v.z) {\r\n\r\n this.z = v.z;\r\n\r\n }\r\n\r\n return this;\r\n\r\n }\r\n\r\n clamp (min, max) {\r\n\r\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n\r\n if (this.x < min.x) {\r\n\r\n this.x = min.x;\r\n\r\n } else if (this.x > max.x) {\r\n\r\n this.x = max.x;\r\n\r\n }\r\n\r\n if (this.y < min.y) {\r\n\r\n this.y = min.y;\r\n\r\n } else if (this.y > max.y) {\r\n\r\n this.y = max.y;\r\n\r\n }\r\n\r\n if (this.z < min.z) {\r\n\r\n this.z = min.z;\r\n\r\n } else if (this.z > max.z) {\r\n\r\n this.z = max.z;\r\n\r\n }\r\n\r\n return this;\r\n\r\n }\r\n\r\n\r\n floor () {\r\n\r\n this.x = Math.floor(this.x);\r\n this.y = Math.floor(this.y);\r\n this.z = Math.floor(this.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n ceil () {\r\n\r\n this.x = Math.ceil(this.x);\r\n this.y = Math.ceil(this.y);\r\n this.z = Math.ceil(this.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n round () {\r\n\r\n this.x = Math.round(this.x);\r\n this.y = Math.round(this.y);\r\n this.z = Math.round(this.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n roundToZero () {\r\n\r\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n this.z = (this.z < 0) ? Math.ceil(this.z) : Math.floor(this.z);\r\n\r\n return this;\r\n\r\n }\r\n\r\n negate () {\r\n\r\n return this.multiplyScalar(-1);\r\n\r\n }\r\n\r\n dot (v) {\r\n\r\n return this.x * v.x + this.y * v.y + this.z * v.z;\r\n\r\n }\r\n\r\n lengthSq () {\r\n\r\n return this.x * this.x + this.y * this.y + this.z * this.z;\r\n\r\n }\r\n\r\n length () {\r\n\r\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\r\n\r\n }\r\n\r\n lengthManhattan () {\r\n\r\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\r\n\r\n }\r\n\r\n normalize () {\r\n\r\n return this.divideScalar(this.length());\r\n\r\n }\r\n\r\n setLength (l) {\r\n\r\n const oldLength = this.length();\r\n\r\n if (oldLength !== 0 && l !== oldLength) {\r\n\r\n this.multiplyScalar(l / oldLength);\r\n }\r\n\r\n return this;\r\n\r\n }\r\n\r\n lerp (v, alpha) {\r\n\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n this.z += (v.z - this.z) * alpha;\r\n\r\n return this;\r\n\r\n }\r\n\r\n cross (v, w) {\r\n\r\n if (w !== undefined) {\r\n\r\n console.warn('DEPRECATED: Vector3\\'s .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');\r\n\r\n return this.crossVectors(v, w);\r\n\r\n }\r\n\r\n let x = this.x,\r\n y = this.y,\r\n z = this.z;\r\n\r\n this.x = y * v.z - z * v.y;\r\n this.y = z * v.x - x * v.z;\r\n this.z = x * v.y - y * v.x;\r\n\r\n return this;\r\n\r\n }\r\n\r\n crossVectors (a, b) {\r\n\r\n let ax = a.x,\r\n ay = a.y,\r\n az = a.z;\r\n let bx = b.x,\r\n by = b.y,\r\n bz = b.z;\r\n\r\n this.x = ay * bz - az * by;\r\n this.y = az * bx - ax * bz;\r\n this.z = ax * by - ay * bx;\r\n\r\n return this;\r\n\r\n }\r\n\r\n angleTo (v) {\r\n\r\n const theta = this.dot(v) / (this.length() * v.length());\r\n\r\n // Clamp, to handle numerical problems\r\n\r\n return Math.acos(clamp(theta, -1, 1));\r\n\r\n }\r\n\r\n distanceTo (v) {\r\n\r\n return Math.sqrt(this.distanceToSquared(v));\r\n\r\n }\r\n\r\n distanceToSquared (v) {\r\n\r\n const dx = this.x - v.x;\r\n const dy = this.y - v.y;\r\n const dz = this.z - v.z;\r\n\r\n return dx * dx + dy * dy + dz * dz;\r\n\r\n }\r\n\r\n setFromMatrixPosition (m) {\r\n\r\n this.x = m.elements[12];\r\n this.y = m.elements[13];\r\n this.z = m.elements[14];\r\n\r\n return this;\r\n\r\n }\r\n\r\n setFromMatrixScale (m) {\r\n\r\n const sx = this.set(m.elements[0], m.elements[1], m.elements[2]).length();\r\n const sy = this.set(m.elements[4], m.elements[5], m.elements[6]).length();\r\n const sz = this.set(m.elements[8], m.elements[9], m.elements[10]).length();\r\n\r\n this.x = sx;\r\n this.y = sy;\r\n this.z = sz;\r\n\r\n return this;\r\n }\r\n\r\n setFromMatrixColumn (index, matrix) {\r\n\r\n const offset = index * 4;\r\n\r\n const me = matrix.elements;\r\n\r\n this.x = me[offset];\r\n this.y = me[offset + 1];\r\n this.z = me[offset + 2];\r\n\r\n return this;\r\n\r\n }\r\n\r\n equals (v) {\r\n\r\n return ((v.x === this.x) && (v.y === this.y) && (v.z === this.z));\r\n\r\n }\r\n\r\n fromArray (array) {\r\n\r\n this.x = array[0];\r\n this.y = array[1];\r\n this.z = array[2];\r\n\r\n return this;\r\n\r\n }\r\n\r\n toArray () {\r\n\r\n return [this.x, this.y, this.z];\r\n\r\n }\r\n\r\n clone () {\r\n\r\n return new Vector3(this.x, this.y, this.z);\r\n\r\n }\r\n}\r\n\r\nVector3.prototype.projectOnVector = (function () {\r\n\r\n let v1, dot;\r\n\r\n return function (vector) {\r\n\r\n if (v1 === undefined) {\r\n v1 = new Vector3();\r\n }\r\n\r\n v1.copy(vector).normalize();\r\n\r\n dot = this.dot(v1);\r\n\r\n return this.copy(v1).multiplyScalar(dot);\r\n\r\n };\r\n\r\n})();\r\n\r\nVector3.prototype.projectOnPlane = (function () {\r\n\r\n let v1;\r\n\r\n return function (planeNormal) {\r\n\r\n if (v1 === undefined) {\r\n v1 = new Vector3();\r\n }\r\n\r\n v1.copy(this).projectOnVector(planeNormal);\r\n\r\n return this.sub(v1);\r\n\r\n };\r\n\r\n})();\r\n\r\nVector3.prototype.reflect = (function () {\r\n\r\n // Reflect incident vector off plane orthogonal to normal\r\n // Normal is assumed to have unit length\r\n\r\n let v1;\r\n\r\n return function (normal) {\r\n\r\n if (v1 === undefined) {\r\n v1 = new Vector3();\r\n }\r\n\r\n return this.sub(v1.copy(normal).multiplyScalar(2 * this.dot(normal)));\r\n\r\n };\r\n\r\n})();\r\n\r\n\r\nVector3.prototype.clampScalar = (function () {\r\n\r\n let min, max;\r\n\r\n return function (minVal, maxVal) {\r\n\r\n if (min === undefined) {\r\n\r\n min = new Vector3();\r\n max = new Vector3();\r\n\r\n }\r\n\r\n min.set(minVal, minVal, minVal);\r\n max.set(maxVal, maxVal, maxVal);\r\n\r\n return this.clamp(min, max);\r\n\r\n };\r\n\r\n})();\r\n\r\nVector3.prototype.applyAxisAngle = (function () {\r\n\r\n let quaternion;\r\n\r\n return function (axis, angle) {\r\n\r\n if (quaternion === undefined) {\r\n quaternion = new Quaternion();\r\n }\r\n\r\n this.applyQuaternion(quaternion.setFromAxisAngle(axis.normalize(), angle));\r\n\r\n return this;\r\n\r\n };\r\n\r\n})();\r\n\r\nexport default Vector3;\r\n", "const EPSILON = 0.0001;\r\n// Based on THREE.JS\r\nfunction clamp (x, a, b) {\r\n return (x < a) ? a : ((x > b) ? b : x);\r\n}\r\n\r\nfunction degToRad (degrees) {\r\n const degreeToRadiansFactor = Math.PI / 180;\r\n\r\n\r\n return degrees * degreeToRadiansFactor;\r\n}\r\n\r\nfunction radToDeg (radians) {\r\n const radianToDegreesFactor = 180 / Math.PI;\r\n\r\n\r\n return radians * radianToDegreesFactor;\r\n}\r\n\r\n// Returns sign of number\r\nfunction sign (x) {\r\n return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;\r\n}\r\n\r\n\r\n/**\r\n * \r\n * Compare if two numbers are equal(if they have approximately the same value). to prevent js float precision issue\r\n * Adapted from glmatrix\r\n * @param {number} a\r\n * @param {number} b\r\n * @param {number} epsilon Precision to define proximity\r\n * @return {boolean} check whether or not the arguments have approximately the same value\r\n * \r\n */\r\nfunction approximatelyEquals (a, b, epsilon) {\r\n const _epsilon = epsilon || EPSILON;\r\n return Math.abs(a - b) <= _epsilon*Math.max(1.0, Math.abs(a), Math.abs(b));\r\n}\r\n\r\nexport {\r\n clamp,\r\n degToRad,\r\n approximatelyEquals,\r\n radToDeg,\r\n sign\r\n};\r\n", "class Quaternion {\r\n constructor (x, y, z, w) {\r\n this.x = x || 0;\r\n this.y = y || 0;\r\n this.z = z || 0;\r\n this.w = (w !== undefined) ? w : 1;\r\n }\r\n\r\n setFromAxisAngle (axis, angle) {\r\n let halfAngle = angle / 2,\r\n s = Math.sin(halfAngle);\r\n\r\n this.x = axis.x * s;\r\n this.y = axis.y * s;\r\n this.z = axis.z * s;\r\n this.w = Math.cos(halfAngle);\r\n\r\n return this;\r\n }\r\n\r\n multiplyQuaternions (a, b) {\r\n let qax = a.x,\r\n qay = a.y,\r\n qaz = a.z,\r\n qaw = a.w;\r\n let qbx = b.x,\r\n qby = b.y,\r\n qbz = b.z,\r\n qbw = b.w;\r\n\r\n this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\r\n this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\r\n this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\r\n this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\r\n\r\n return this;\r\n }\r\n\r\n setFromRotationMatrix (m) {\r\n let te = m.elements,\r\n\r\n m11 = te[0],\r\n m12 = te[4],\r\n m13 = te[8],\r\n m21 = te[1],\r\n m22 = te[5],\r\n m23 = te[9],\r\n m31 = te[2],\r\n m32 = te[6],\r\n m33 = te[10],\r\n\r\n trace = m11 + m22 + m33,\r\n s;\r\n\r\n if (trace > 0) {\r\n\r\n s = 0.5 / Math.sqrt(trace + 1.0);\r\n\r\n this.w = 0.25 / s;\r\n this.x = (m32 - m23) * s;\r\n this.y = (m13 - m31) * s;\r\n this.z = (m21 - m12) * s;\r\n\r\n } else if (m11 > m22 && m11 > m33) {\r\n\r\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\r\n\r\n this.w = (m32 - m23) / s;\r\n this.x = 0.25 * s;\r\n this.y = (m12 + m21) / s;\r\n this.z = (m13 + m31) / s;\r\n\r\n } else if (m22 > m33) {\r\n\r\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\r\n\r\n this.w = (m13 - m31) / s;\r\n this.x = (m12 + m21) / s;\r\n this.y = 0.25 * s;\r\n this.z = (m23 + m32) / s;\r\n\r\n } else {\r\n\r\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\r\n\r\n this.w = (m21 - m12) / s;\r\n this.x = (m13 + m31) / s;\r\n this.y = (m23 + m32) / s;\r\n this.z = 0.25 * s;\r\n\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport default Quaternion;\r\n", "import { sign } from './math.js';\r\n\r\n// Based on http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment\r\nfunction sqr (x) {\r\n return x * x;\r\n}\r\n\r\nfunction dist2 (v, w) {\r\n return sqr(v.x - w.x) + sqr(v.y - w.y);\r\n}\r\n\r\nfunction distanceToPointSquared (lineSegment, point) {\r\n const l2 = dist2(lineSegment.start, lineSegment.end);\r\n\r\n if(l2 === 0) {\r\n return dist2(point, lineSegment.start);\r\n }\r\n const t = ((point.x - lineSegment.start.x) * (lineSegment.end.x - lineSegment.start.x) +\r\n (point.y - lineSegment.start.y) * (lineSegment.end.y - lineSegment.start.y)) / l2;\r\n\r\n if(t < 0) {\r\n return dist2(point, lineSegment.start);\r\n }\r\n if(t > 1) {\r\n return dist2(point, lineSegment.end);\r\n }\r\n\r\n const pt = {\r\n x: lineSegment.start.x + t * (lineSegment.end.x - lineSegment.start.x),\r\n y: lineSegment.start.y + t * (lineSegment.end.y - lineSegment.start.y)\r\n };\r\n\r\n\r\n return dist2(point, pt);\r\n}\r\n\r\nfunction distanceToPoint (lineSegment, point) {\r\n return Math.sqrt(distanceToPointSquared(lineSegment, point));\r\n}\r\n\r\n// Returns intersection points of two lines\r\nfunction intersectLine (lineSegment1, lineSegment2) {\r\n const intersectionPoint = {};\r\n\r\n let x1 = lineSegment1.start.x,\r\n y1 = lineSegment1.start.y,\r\n x2 = lineSegment1.end.x,\r\n y2 = lineSegment1.end.y,\r\n x3 = lineSegment2.start.x,\r\n y3 = lineSegment2.start.y,\r\n x4 = lineSegment2.end.x,\r\n y4 = lineSegment2.end.y;\r\n\r\n // Coefficients of line equations\r\n let a1, a2, b1, b2, c1, c2;\r\n // Sign values\r\n let r1, r2, r3, r4;\r\n\r\n // Intermediate values\r\n let denom, num;\r\n\r\n // Compute a1, b1, c1, where line joining points 1 and 2 is \"a1 x + b1 y + c1 = 0\"\r\n a1 = y2 - y1;\r\n b1 = x1 - x2;\r\n c1 = x2 * y1 - x1 * y2;\r\n\r\n // Compute r3 and r4\r\n r3 = a1 * x3 + b1 * y3 + c1;\r\n r4 = a1 * x4 + b1 * y4 + c1;\r\n\r\n /* Check signs of r3 and r4. If both point 3 and point 4 lie on\r\n * same side of line 1, the line segments do not intersect.\r\n */\r\n\r\n if (r3 !== 0 &&\r\n r4 !== 0 &&\r\n sign(r3) === sign(r4)) {\r\n return;\r\n }\r\n\r\n // Compute a2, b2, c2\r\n a2 = y4 - y3;\r\n b2 = x3 - x4;\r\n c2 = x4 * y3 - x3 * y4;\r\n\r\n // Compute r1 and r2\r\n r1 = a2 * x1 + b2 * y1 + c2;\r\n r2 = a2 * x2 + b2 * y2 + c2;\r\n\r\n /* Check signs of r1 and r2. If both point 1 and point 2 lie\r\n * on same side of second line segment, the line segments do\r\n * not intersect.\r\n */\r\n\r\n if (r1 !== 0 &&\r\n r2 !== 0 &&\r\n sign(r1) === sign(r2)) {\r\n return;\r\n }\r\n\r\n /* Line segments intersect: compute intersection point.\r\n */\r\n\r\n denom = (a1 * b2) - (a2 * b1);\r\n\r\n /* The denom/2 is to get rounding instead of truncating. It\r\n * is added or subtracted to the numerator, depending upon the\r\n * sign of the numerator.\r\n */\r\n\r\n num = (b1 * c2) - (b2 * c1);\r\n const x = parseFloat(num / denom);\r\n\r\n num = (a2 * c1) - (a1 * c2);\r\n const y = parseFloat(num / denom);\r\n\r\n intersectionPoint.x = x;\r\n intersectionPoint.y = y;\r\n\r\n return intersectionPoint;\r\n}\r\n\r\n// Module exports\r\nconst lineSegment = {\r\n distanceToPoint,\r\n intersectLine\r\n};\r\n\r\nexport default lineSegment;\r\n", "import { default as Line3 } from './Line3.js';\r\nimport { default as lineSegment } from './lineSegment.js';\r\nimport { clamp,\r\n degToRad,\r\n radToDeg,\r\n sign } from './math.js';\r\n\r\nimport { default as Matrix4 } from './matrix4.js';\r\nimport { default as Plane } from './plane.js';\r\nimport { default as point } from './point.js';\r\nimport { default as quaternion } from './quaternion.js';\r\nimport { default as rect } from './rect.js';\r\nimport { default as Vector3 } from './vector3.js';\r\n\r\nconst cornerstoneMath = {\r\n Line3,\r\n lineSegment,\r\n clamp,\r\n degToRad,\r\n radToDeg,\r\n sign,\r\n Matrix4,\r\n Plane,\r\n point,\r\n quaternion,\r\n rect,\r\n Vector3\r\n};\r\n\r\nexport {\r\n Line3,\r\n lineSegment,\r\n clamp,\r\n degToRad,\r\n radToDeg,\r\n sign,\r\n Matrix4,\r\n Plane,\r\n point,\r\n quaternion,\r\n rect,\r\n Vector3\r\n};\r\n\r\nexport default cornerstoneMath;\r\n", "import Vector3 from './vector3.js';\r\nimport { clamp, approximatelyEquals } from './math.js';\r\n\r\n// Copied from THREE.JS\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\n\r\nclass Line3 {\r\n constructor (start, end) {\r\n\r\n this.start = (start !== undefined) ? start : new Vector3();\r\n this.end = (end !== undefined) ? end : new Vector3();\r\n\r\n }\r\n\r\n set (start, end) {\r\n\r\n this.start.copy(start);\r\n this.end.copy(end);\r\n\r\n return this;\r\n\r\n }\r\n\r\n copy (line) {\r\n\r\n this.start.copy(line.start);\r\n this.end.copy(line.end);\r\n\r\n return this;\r\n\r\n }\r\n\r\n center (optionalTarget) {\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n\r\n return result.addVectors(this.start, this.end).multiplyScalar(0.5);\r\n\r\n }\r\n\r\n delta (optionalTarget) {\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n\r\n return result.subVectors(this.end, this.start);\r\n\r\n }\r\n\r\n distanceSq () {\r\n\r\n return this.start.distanceToSquared(this.end);\r\n\r\n }\r\n\r\n distance () {\r\n\r\n return this.start.distanceTo(this.end);\r\n\r\n }\r\n\r\n at (t, optionalTarget) {\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n return this.delta(result).multiplyScalar(t).add(this.start);\r\n\r\n }\r\n\r\n closestPointToPointParameter (point, clampToLine) {\r\n\r\n const startP = new Vector3();\r\n const startEnd = new Vector3();\r\n\r\n startP.subVectors(point, this.start);\r\n startEnd.subVectors(this.end, this.start);\r\n\r\n const startEnd2 = startEnd.dot(startEnd);\r\n const startEnd_startP = startEnd.dot(startP);\r\n\r\n let t = startEnd_startP / startEnd2;\r\n\r\n if (clampToLine) {\r\n t = clamp(t, 0, 1);\r\n }\r\n\r\n return t;\r\n\r\n }\r\n\r\n closestPointToPoint (point, clampToLine, optionalTarget) {\r\n\r\n const t = this.closestPointToPointParameter(point, clampToLine);\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n return this.delta(result).multiplyScalar(t).add(this.start);\r\n\r\n }\r\n\r\n applyMatrix4 (matrix) {\r\n\r\n this.start.applyMatrix4(matrix);\r\n this.end.applyMatrix4(matrix);\r\n\r\n return this;\r\n\r\n }\r\n\r\n equals (line) {\r\n\r\n return line.start.equals(this.start) && line.end.equals(this.end);\r\n\r\n }\r\n\r\n clone () {\r\n\r\n return new Line3().copy(this);\r\n\r\n }\r\n\r\n intersectLine (line) {\r\n // http://stackoverflow.com/questions/2316490/the-algorithm-to-find-the-point-of-intersection-of-two-3d-line-segment/10288710#10288710\r\n // Consider two lines r1 and r2, represented by the following parametric equations:A + vt and B + us, respectively.\r\n // Where A is a point of r1 and v a vector parallel to line.\r\n // And B is a point of r2 and u a vector parallel to line.\r\n // 'this' represents r2 and 'line' represents r1\r\n const da = this.end.clone().sub(this.start); //u\r\n const db = line.end.clone().sub(line.start); //v\r\n const dc = line.start.clone().sub(this.start); // AB\r\n\r\n const daCrossDb = da.clone().cross(db);\r\n const dcCrossDb = dc.clone().cross(db);\r\n\r\n // Lines are not coplanar, stop here\r\n // Coplanar only if the vectors AB, u, v are linearly dependent, i.e AB . (u × v) = 0\r\n const coplanarResult = dc.dot(daCrossDb);\r\n const normalizedCoplanarResult =\r\n coplanarResult / (dc.lengthSq() * daCrossDb.lengthSq());\r\n if (!approximatelyEquals(normalizedCoplanarResult, 0)) {\r\n return;\r\n }\r\n\r\n const s = dcCrossDb.dot(daCrossDb) / daCrossDb.lengthSq();\r\n\r\n // Make sure we have an intersection\r\n if (s > 1.0 || isNaN(s)) {\r\n return;\r\n }\r\n\r\n const intersection = this.start.clone().add(da.clone().multiplyScalar(s));\r\n const distanceTest = intersection.clone().sub(line.start).lengthSq() + intersection.clone().sub(line.end).lengthSq();\r\n\r\n if (distanceTest <= line.distanceSq()) {\r\n return intersection;\r\n }\r\n\r\n return;\r\n }\r\n}\r\n\r\nexport default Line3;\r\n", "import Vector3 from './vector3.js';\r\n\r\n// Based on THREE.JS\r\nclass Matrix4 {\r\n\r\n constructor (n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\r\n this.elements = new Float32Array(16);\r\n\r\n // TODO: if n11 is undefined, then just set to identity, otherwise copy all other values into matrix\r\n // We should not support semi specification of Matrix4, it is just weird.\r\n\r\n const te = this.elements;\r\n\r\n te[0] = (n11 !== undefined) ? n11 : 1; te[4] = n12 || 0; te[8] = n13 || 0; te[12] = n14 || 0;\r\n te[1] = n21 || 0; te[5] = (n22 !== undefined) ? n22 : 1; te[9] = n23 || 0; te[13] = n24 || 0;\r\n te[2] = n31 || 0; te[6] = n32 || 0; te[10] = (n33 !== undefined) ? n33 : 1; te[14] = n34 || 0;\r\n te[3] = n41 || 0; te[7] = n42 || 0; te[11] = n43 || 0; te[15] = (n44 !== undefined) ? n44 : 1;\r\n\r\n }\r\n\r\n makeRotationFromQuaternion (q) {\r\n const te = this.elements;\r\n\r\n let x = q.x,\r\n y = q.y,\r\n z = q.z,\r\n w = q.w;\r\n let x2 = x + x,\r\n y2 = y + y,\r\n z2 = z + z;\r\n let xx = x * x2,\r\n xy = x * y2,\r\n xz = x * z2;\r\n let yy = y * y2,\r\n yz = y * z2,\r\n zz = z * z2;\r\n let wx = w * x2,\r\n wy = w * y2,\r\n wz = w * z2;\r\n\r\n te[0] = 1 - (yy + zz);\r\n te[4] = xy - wz;\r\n te[8] = xz + wy;\r\n\r\n te[1] = xy + wz;\r\n te[5] = 1 - (xx + zz);\r\n te[9] = yz - wx;\r\n\r\n te[2] = xz - wy;\r\n te[6] = yz + wx;\r\n te[10] = 1 - (xx + yy);\r\n\r\n // Last column\r\n te[3] = 0;\r\n te[7] = 0;\r\n te[11] = 0;\r\n\r\n // Bottom row\r\n te[12] = 0;\r\n te[13] = 0;\r\n te[14] = 0;\r\n te[15] = 1;\r\n\r\n return this;\r\n }\r\n\r\n multiplyMatrices (a, b) {\r\n const ae = a.elements;\r\n const be = b.elements;\r\n const te = this.elements;\r\n\r\n let a11 = ae[0],\r\n a12 = ae[4],\r\n a13 = ae[8],\r\n a14 = ae[12];\r\n let a21 = ae[1],\r\n a22 = ae[5],\r\n a23 = ae[9],\r\n a24 = ae[13];\r\n let a31 = ae[2],\r\n a32 = ae[6],\r\n a33 = ae[10],\r\n a34 = ae[14];\r\n let a41 = ae[3],\r\n a42 = ae[7],\r\n a43 = ae[11],\r\n a44 = ae[15];\r\n\r\n let b11 = be[0],\r\n b12 = be[4],\r\n b13 = be[8],\r\n b14 = be[12];\r\n let b21 = be[1],\r\n b22 = be[5],\r\n b23 = be[9],\r\n b24 = be[13];\r\n let b31 = be[2],\r\n b32 = be[6],\r\n b33 = be[10],\r\n b34 = be[14];\r\n let b41 = be[3],\r\n b42 = be[7],\r\n b43 = be[11],\r\n b44 = be[15];\r\n\r\n te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n\r\n te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n\r\n te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n\r\n te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n\r\n return this;\r\n }\r\n\r\n multiply (m, n) {\r\n\r\n if (n !== undefined) {\r\n\r\n console.warn('DEPRECATED: Matrix4\\'s .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.');\r\n\r\n return this.multiplyMatrices(m, n);\r\n }\r\n\r\n return this.multiplyMatrices(this, m);\r\n }\r\n\r\n getInverse (m, throwOnInvertible) {\r\n\r\n // Based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\r\n const te = this.elements;\r\n const me = m.elements;\r\n\r\n let n11 = me[0],\r\n n12 = me[4],\r\n n13 = me[8],\r\n n14 = me[12];\r\n let n21 = me[1],\r\n n22 = me[5],\r\n n23 = me[9],\r\n n24 = me[13];\r\n let n31 = me[2],\r\n n32 = me[6],\r\n n33 = me[10],\r\n n34 = me[14];\r\n let n41 = me[3],\r\n n42 = me[7],\r\n n43 = me[11],\r\n n44 = me[15];\r\n\r\n te[0] = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44;\r\n te[4] = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44;\r\n te[8] = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44;\r\n te[12] = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\r\n te[1] = n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44;\r\n te[5] = n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44;\r\n te[9] = n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44;\r\n te[13] = n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34;\r\n te[2] = n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44;\r\n te[6] = n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44;\r\n te[10] = n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44;\r\n te[14] = n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34;\r\n te[3] = n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43;\r\n te[7] = n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43;\r\n te[11] = n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43;\r\n te[15] = n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33;\r\n\r\n const det = n11 * te[0] + n21 * te[4] + n31 * te[8] + n41 * te[12];\r\n\r\n if (det === 0) {\r\n\r\n const msg = 'Matrix4.getInverse(): can\\'t invert matrix, determinant is 0';\r\n\r\n if (throwOnInvertible || false) {\r\n\r\n throw new Error(msg);\r\n\r\n } else {\r\n\r\n console.warn(msg);\r\n\r\n }\r\n\r\n this.identity();\r\n\r\n return this;\r\n }\r\n\r\n this.multiplyScalar(1 / det);\r\n\r\n return this;\r\n\r\n }\r\n\r\n applyToVector3Array () {\r\n\r\n const v1 = new Vector3();\r\n\r\n return function (array, offset, length) {\r\n\r\n if (offset === undefined) {\r\n offset = 0;\r\n }\r\n if (length === undefined) {\r\n length = array.length;\r\n }\r\n\r\n for (var i = 0, j = offset; i < length; i += 3, j += 3) {\r\n\r\n v1.x = array[j];\r\n v1.y = array[j + 1];\r\n v1.z = array[j + 2];\r\n\r\n v1.applyMatrix4(this);\r\n\r\n array[j] = v1.x;\r\n array[j + 1] = v1.y;\r\n array[j + 2] = v1.z;\r\n\r\n }\r\n\r\n return array;\r\n\r\n };\r\n\r\n }\r\n\r\n makeTranslation (x, y, z) {\r\n\r\n this.set(\r\n 1, 0, 0, x,\r\n 0, 1, 0, y,\r\n 0, 0, 1, z,\r\n 0, 0, 0, 1\r\n );\r\n\r\n return this;\r\n\r\n }\r\n\r\n multiplyScalar (s) {\r\n\r\n const te = this.elements;\r\n\r\n te[0] *= s; te[4] *= s; te[8] *= s; te[12] *= s;\r\n te[1] *= s; te[5] *= s; te[9] *= s; te[13] *= s;\r\n te[2] *= s; te[6] *= s; te[10] *= s; te[14] *= s;\r\n te[3] *= s; te[7] *= s; te[11] *= s; te[15] *= s;\r\n\r\n return this;\r\n\r\n }\r\n\r\n set (n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\r\n\r\n const te = this.elements;\r\n\r\n te[0] = n11; te[4] = n12; te[8] = n13; te[12] = n14;\r\n te[1] = n21; te[5] = n22; te[9] = n23; te[13] = n24;\r\n te[2] = n31; te[6] = n32; te[10] = n33; te[14] = n34;\r\n te[3] = n41; te[7] = n42; te[11] = n43; te[15] = n44;\r\n\r\n return this;\r\n\r\n }\r\n\r\n makeScale (x, y, z) {\r\n\r\n this.set(\r\n x, 0, 0, 0,\r\n 0, y, 0, 0,\r\n 0, 0, z, 0,\r\n 0, 0, 0, 1\r\n );\r\n\r\n return this;\r\n\r\n }\r\n}\r\n\r\nexport default Matrix4;\r\n", "import Vector3 from './vector3.js';\r\n\r\n// Copied from Three.JS\r\n/**\r\n * @author bhouston / http://exocortex.com\r\n */\r\n\r\nclass Plane {\r\n constructor (normal, constant) {\r\n\r\n this.normal = (normal !== undefined) ? normal : new Vector3(1, 0, 0);\r\n this.constant = (constant !== undefined) ? constant : 0;\r\n\r\n }\r\n\r\n set (normal, constant) {\r\n\r\n this.normal.copy(normal);\r\n this.constant = constant;\r\n\r\n return this;\r\n\r\n }\r\n\r\n setComponents (x, y, z, w) {\r\n\r\n this.normal.set(x, y, z);\r\n this.constant = w;\r\n\r\n return this;\r\n\r\n }\r\n\r\n setFromNormalAndCoplanarPoint (normal, point) {\r\n\r\n this.normal.copy(normal);\r\n // Must be this.normal, not normal, as this.normal is normalized\r\n this.constant = -point.dot(this.normal);\r\n\r\n return this;\r\n\r\n }\r\n\r\n copy (plane) {\r\n\r\n this.normal.copy(plane.normal);\r\n this.constant = plane.constant;\r\n\r\n return this;\r\n\r\n }\r\n\r\n normalize () {\r\n\r\n // Note: will lead to a divide by zero if the plane is invalid.\r\n\r\n const inverseNormalLength = 1.0 / this.normal.length();\r\n\r\n this.normal.multiplyScalar(inverseNormalLength);\r\n this.constant *= inverseNormalLength;\r\n\r\n return this;\r\n\r\n }\r\n\r\n negate () {\r\n\r\n this.constant *= -1;\r\n this.normal.negate();\r\n\r\n return this;\r\n\r\n }\r\n\r\n distanceToPoint (point) {\r\n\r\n return this.normal.dot(point) + this.constant;\r\n\r\n }\r\n\r\n distanceToSphere (sphere) {\r\n\r\n return this.distanceToPoint(sphere.center) - sphere.radius;\r\n\r\n }\r\n\r\n projectPoint (point, optionalTarget) {\r\n\r\n return this.orthoPoint(point, optionalTarget).sub(point).negate();\r\n\r\n }\r\n\r\n orthoPoint (point, optionalTarget) {\r\n\r\n const perpendicularMagnitude = this.distanceToPoint(point);\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n\r\n return result.copy(this.normal).multiplyScalar(perpendicularMagnitude);\r\n\r\n }\r\n\r\n isIntersectionLine (line) {\r\n\r\n // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\r\n\r\n const startSign = this.distanceToPoint(line.start);\r\n const endSign = this.distanceToPoint(line.end);\r\n\r\n return (startSign < 0 && endSign > 0) || (endSign < 0 && startSign > 0);\r\n\r\n }\r\n\r\n intersectPlane (targetPlane) {\r\n // Returns the intersection line between two planes\r\n const direction = this.normal.clone().cross(targetPlane.normal);\r\n const origin = new Vector3();\r\n const intersectionData = {\r\n origin,\r\n direction\r\n };\r\n\r\n // If the planes are parallel, return an empty vector for the intersection line\r\n if (this.normal.clone().cross(targetPlane.normal).length < 1e-10) {\r\n intersectionData.direction = new Vector3();\r\n\r\n return intersectionData;\r\n }\r\n\r\n const h1 = this.constant;\r\n const h2 = targetPlane.constant;\r\n const n1dotn2 = this.normal.clone().dot(targetPlane.normal);\r\n\r\n const c1 = -(h1 - h2 * n1dotn2) / (1 - n1dotn2 * n1dotn2);\r\n const c2 = -(h2 - h1 * n1dotn2) / (1 - n1dotn2 * n1dotn2);\r\n\r\n intersectionData.origin = this.normal.clone().multiplyScalar(c1).add(targetPlane.normal.clone().multiplyScalar(c2));\r\n\r\n return intersectionData;\r\n }\r\n\r\n coplanarPoint (optionalTarget) {\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n\r\n return result.copy(this.normal).multiplyScalar(-this.constant);\r\n\r\n }\r\n\r\n translate (offset) {\r\n\r\n this.constant = this.constant - offset.dot(this.normal);\r\n\r\n return this;\r\n\r\n }\r\n\r\n equals (plane) {\r\n\r\n return plane.normal.equals(this.normal) && (plane.constant === this.constant);\r\n\r\n }\r\n\r\n clone () {\r\n\r\n return new Plane().copy(this);\r\n\r\n }\r\n}\r\n\r\nPlane.prototype.setFromCoplanarPoints = (function () {\r\n\r\n const v1 = new Vector3();\r\n const v2 = new Vector3();\r\n\r\n return function (a, b, c) {\r\n\r\n const normal = v1.subVectors(c, b).cross(v2.subVectors(a, b)).normalize();\r\n\r\n // Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\r\n\r\n this.setFromNormalAndCoplanarPoint(normal, a);\r\n\r\n return this;\r\n\r\n };\r\n\r\n})();\r\n\r\nPlane.prototype.intersectLine = (function () {\r\n\r\n const v1 = new Vector3();\r\n\r\n return function (line, optionalTarget) {\r\n\r\n const result = optionalTarget || new Vector3();\r\n\r\n const direction = line.delta(v1);\r\n\r\n const denominator = this.normal.dot(direction);\r\n\r\n if (denominator === 0) {\r\n\r\n // Line is coplanar, return origin\r\n if (this.distanceToPoint(line.start) === 0) {\r\n\r\n return result.copy(line.start);\r\n\r\n }\r\n\r\n // Unsure if this is the correct method to handle this case.\r\n return undefined;\r\n\r\n }\r\n\r\n const t = -(line.start.dot(this.normal) + this.constant) / denominator;\r\n\r\n if (t < 0 || t > 1) {\r\n\r\n return undefined;\r\n\r\n }\r\n\r\n return result.copy(direction).multiplyScalar(t).add(line.start);\r\n\r\n };\r\n\r\n})();\r\n\r\nexport default Plane;\r\n", "function pageToPoint (e) {\r\n return {\r\n x: e.pageX,\r\n y: e.pageY\r\n };\r\n}\r\n\r\nfunction subtract (lhs, rhs) {\r\n return {\r\n x: lhs.x - rhs.x,\r\n y: lhs.y - rhs.y\r\n };\r\n}\r\n\r\nfunction copy (point) {\r\n return {\r\n x: point.x,\r\n y: point.y\r\n };\r\n}\r\n\r\nfunction distance (from, to) {\r\n return Math.sqrt(distanceSquared(from, to));\r\n}\r\n\r\nfunction distanceSquared (from, to) {\r\n const delta = subtract(from, to);\r\n\r\n\r\n return delta.x * delta.x + delta.y * delta.y;\r\n}\r\n\r\nfunction insideRect (point, rect) {\r\n if(point.x < rect.left ||\r\n point.x > rect.left + rect.width ||\r\n point.y < rect.top ||\r\n point.y > rect.top + rect.height) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Returns the closest source point to a target point\r\n * given an array of source points.\r\n *\r\n * @param sources An Array of source Points\r\n * @param target The target Point\r\n * @returns Point The closest point from the points array\r\n */\r\nfunction findClosestPoint (sources, target) {\r\n const distances = [];\r\n let minDistance;\r\n\r\n sources.forEach(function (source, index) {\r\n const d = distance(source, target);\r\n\r\n distances.push(d);\r\n\r\n if (index === 0) {\r\n minDistance = d;\r\n } else {\r\n minDistance = Math.min(d, minDistance);\r\n }\r\n });\r\n\r\n const index = distances.indexOf(minDistance);\r\n\r\n\r\n return sources[index];\r\n}\r\n\r\nconst point = {\r\n subtract,\r\n copy,\r\n pageToPoint,\r\n distance,\r\n distanceSquared,\r\n insideRect,\r\n findClosestPoint\r\n};\r\n\r\nexport default point;\r\n", "import lineSegment from './lineSegment.js';\r\n\r\nfunction rectToLineSegments (rect) {\r\n const top = {\r\n start: {\r\n x: rect.left,\r\n y: rect.top\r\n },\r\n end: {\r\n x: rect.left + rect.width,\r\n y: rect.top\r\n\r\n }\r\n };\r\n const right = {\r\n start: {\r\n x: rect.left + rect.width,\r\n y: rect.top\r\n },\r\n end: {\r\n x: rect.left + rect.width,\r\n y: rect.top + rect.height\r\n\r\n }\r\n };\r\n const bottom = {\r\n start: {\r\n x: rect.left + rect.width,\r\n y: rect.top + rect.height\r\n },\r\n end: {\r\n x: rect.left,\r\n y: rect.top + rect.height\r\n\r\n }\r\n };\r\n const left = {\r\n start: {\r\n x: rect.left,\r\n y: rect.top + rect.height\r\n },\r\n end: {\r\n x: rect.left,\r\n y: rect.top\r\n\r\n }\r\n };\r\n const lineSegments = [top, right, bottom, left];\r\n\r\n\r\n return lineSegments;\r\n}\r\n\r\nfunction distanceToPoint (rect, point) {\r\n let minDistance = 655535;\r\n const lineSegments = rectToLineSegments(rect);\r\n\r\n lineSegments.forEach(function (segment) {\r\n const distance = lineSegment.distanceToPoint(segment, point);\r\n\r\n if(distance < minDistance) {\r\n minDistance = distance;\r\n }\r\n });\r\n\r\n return minDistance;\r\n}\r\n\r\n// Returns top-left and bottom-right points of the rectangle\r\nfunction rectToPoints (rect) {\r\n const rectPoints = {\r\n topLeft: {\r\n x: rect.left,\r\n y: rect.top\r\n },\r\n bottomRight: {\r\n x: rect.left + rect.width,\r\n y: rect.top + rect.height\r\n }\r\n };\r\n\r\n return rectPoints;\r\n}\r\n\r\n// Returns whether two non-rotated rectangles are intersected\r\nfunction doesIntersect (rect1, rect2) {\r\n let intersectLeftRight;\r\n let intersectTopBottom;\r\n\r\n const rect1Points = rectToPoints(rect1);\r\n const rect2Points = rectToPoints(rect2);\r\n\r\n if (rect1.width >= 0) {\r\n if (rect2.width >= 0) {\r\n intersectLeftRight = !((rect1Points.bottomRight.x <= rect2Points.topLeft.x) || (rect2Points.bottomRight.x <= rect1Points.topLeft.x));\r\n } else {\r\n intersectLeftRight = !((rect1Points.bottomRight.x <= rect2Points.bottomRight.x) || (rect2Points.topLeft.x <= rect1Points.topLeft.x));\r\n }\r\n } else if (rect2.width >= 0) {\r\n intersectLeftRight = !((rect1Points.topLeft.x <= rect2Points.topLeft.x) || (rect2Points.bottomRight.x <= rect1Points.bottomRight.x));\r\n } else {\r\n intersectLeftRight = !((rect1Points.topLeft.x <= rect2Points.bottomRight.x) || (rect2Points.topLeft.x <= rect1Points.bottomRight.x));\r\n }\r\n\r\n if (rect1.height >= 0) {\r\n if (rect2.height >= 0) {\r\n intersectTopBottom = !((rect1Points.bottomRight.y <= rect2Points.topLeft.y) || (rect2Points.bottomRight.y <= rect1Points.topLeft.y));\r\n } else {\r\n intersectTopBottom = !((rect1Points.bottomRight.y <= rect2Points.bottomRight.y) || (rect2Points.topLeft.y <= rect1Points.topLeft.y));\r\n }\r\n } else if (rect2.height >= 0) {\r\n intersectTopBottom = !((rect1Points.topLeft.y <= rect2Points.topLeft.y) || (rect2Points.bottomRight.y <= rect1Points.bottomRight.y));\r\n } else {\r\n intersectTopBottom = !((rect1Points.topLeft.y <= rect2Points.bottomRight.y) || (rect2Points.top <= rect1Points.bottomRight.y));\r\n }\r\n\r\n return intersectLeftRight && intersectTopBottom;\r\n}\r\n\r\n// Returns intersection points of two non-rotated rectangles\r\nfunction getIntersectionRect (rect1, rect2) {\r\n const intersectRect = {\r\n topLeft: {},\r\n bottomRight: {}\r\n };\r\n\r\n if (!doesIntersect(rect1, rect2)) {\r\n return;\r\n }\r\n\r\n const rect1Points = rectToPoints(rect1);\r\n const rect2Points = rectToPoints(rect2);\r\n\r\n if (rect1.width >= 0) {\r\n if (rect2.width >= 0) {\r\n intersectRect.topLeft.x = Math.max(rect1Points.topLeft.x, rect2Points.topLeft.x);\r\n intersectRect.bottomRight.x = Math.min(rect1Points.bottomRight.x, rect2Points.bottomRight.x);\r\n } else {\r\n intersectRect.topLeft.x = Math.max(rect1Points.topLeft.x, rect2Points.bottomRight.x);\r\n intersectRect.bottomRight.x = Math.min(rect1Points.bottomRight.x, rect2Points.topLeft.x);\r\n }\r\n } else if (rect2.width >= 0) {\r\n intersectRect.topLeft.x = Math.min(rect1Points.topLeft.x, rect2Points.bottomRight.x);\r\n intersectRect.bottomRight.x = Math.max(rect1Points.bottomRight.x, rect2Points.topLeft.x);\r\n } else {\r\n intersectRect.topLeft.x = Math.min(rect1Points.topLeft.x, rect2Points.topLeft.x);\r\n intersectRect.bottomRight.x = Math.max(rect1Points.bottomRight.x, rect2Points.bottomRight.x);\r\n }\r\n\r\n if (rect1.height >= 0) {\r\n if (rect2.height >= 0) {\r\n intersectRect.topLeft.y = Math.max(rect1Points.topLeft.y, rect2Points.topLeft.y);\r\n intersectRect.bottomRight.y = Math.min(rect1Points.bottomRight.y, rect2Points.bottomRight.y);\r\n } else {\r\n intersectRect.topLeft.y = Math.max(rect1Points.topLeft.y, rect2Points.bottomRight.y);\r\n intersectRect.bottomRight.y = Math.min(rect1Points.bottomRight.y, rect2Points.topLeft.y);\r\n }\r\n } else if (rect2.height >= 0) {\r\n intersectRect.topLeft.y = Math.min(rect1Points.topLeft.y, rect2Points.bottomRight.y);\r\n intersectRect.bottomRight.y = Math.max(rect1Points.bottomRight.y, rect2Points.topLeft.y);\r\n } else {\r\n intersectRect.topLeft.y = Math.min(rect1Points.topLeft.y, rect2Points.topLeft.y);\r\n intersectRect.bottomRight.y = Math.max(rect1Points.bottomRight.y, rect2Points.bottomRight.y);\r\n }\r\n\r\n // Returns top-left and bottom-right points of intersected rectangle\r\n return intersectRect;\r\n\r\n}\r\n\r\nconst rect = {\r\n distanceToPoint,\r\n getIntersectionRect\r\n};\r\n\r\nexport default rect;\r\n" ], "sourceRoot": "" }