{"version":3,"file":"vendor.openbim-components-2c228c7f.fb7ee28541279278.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/navigation/CubeMap/index.js","webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/index.js","webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/clipping-edges.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { Component, Event, } from \"../../base-types\";\r\nimport { ToolComponent } from \"../../core\";\r\nimport { OrthoPerspectiveCamera } from \"../OrthoPerspectiveCamera\";\r\n/**\r\n * A simple navigation cube to zoom the scene to its basic views (top, bottom,\r\n * left, right, back and front).\r\n */\r\nexport class CubeMap extends Component {\r\n get visible() {\r\n return this._visible;\r\n }\r\n set visible(value) {\r\n this._visible = value;\r\n if (this._visible) {\r\n this._cubeWrapper.classList.remove(\"hidden\");\r\n }\r\n else {\r\n this._cubeWrapper.classList.add(\"hidden\");\r\n }\r\n }\r\n constructor(components) {\r\n super(components);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n /** {@link Updateable.onAfterUpdate} */\r\n this.onAfterUpdate = new Event();\r\n /** {@link Updateable.onBeforeUpdate} */\r\n this.onBeforeUpdate = new Event();\r\n /** The minimum zoom distance to the scene. */\r\n this.offset = 1;\r\n this._cubeFaceClass = \"flex justify-center font-bold hover:bg-ifcjs-200 hover:text-ifcjs-100 text-white select-none text-xl items-center cursor-pointer text-center text-ifcjs-100 absolute w-[60px] h-[60px] border-solid border-ifcjs-120\";\r\n this._cyan = \"bg-[#3CE6FEDD]\";\r\n this._pink = \"bg-[#BD4BF3DD]\";\r\n this._blue = \"bg-[#201491DD]\";\r\n this._cube = document.createElement(\"div\");\r\n this._cubeWrapper = document.createElement(\"div\");\r\n this._matrix = new THREE.Matrix4();\r\n this._faceOrientations = {\r\n front: new THREE.Vector3(0, 0, 1),\r\n top: new THREE.Vector3(0, 1, 0),\r\n bottom: new THREE.Vector3(0, -1, 0),\r\n right: new THREE.Vector3(1, 0, 0),\r\n left: new THREE.Vector3(-1, 0, 0),\r\n back: new THREE.Vector3(0, 0, -1),\r\n };\r\n this.update = () => {\r\n this._matrix.extractRotation(this._camera.get().matrixWorldInverse);\r\n this._cube.style.transform = `translateZ(-300px) ${this.getCameraCSSMatrix(this._matrix)}`;\r\n };\r\n this.components.tools.add(CubeMap.uuid, this);\r\n this._cubeWrapper.id = \"tooeen-cube-map\";\r\n this._cubeWrapper.className = \"absolute z-10\";\r\n this.setPosition(\"bottom-right\");\r\n this._cube.className = \"w-[60px] h-[60px] relative\";\r\n this.setSize(\"400\");\r\n this._cube.style.transformStyle = \"preserve-3d\";\r\n this._cube.style.transform = \"translateZ(-300px)\";\r\n this._cube.style.textTransform = \"uppercase\";\r\n this._cubeWrapper.append(this._cube);\r\n if (components.camera.isUpdateable()) {\r\n components.camera.onAfterUpdate.add(this.update);\r\n }\r\n // #region Cube faces\r\n const frontFace = document.createElement(\"div\");\r\n frontFace.id = \"cube-map-front\";\r\n frontFace.className = `${this._cubeFaceClass} ${this._cyan}`;\r\n frontFace.style.transform = \"rotateX(180deg) translateZ(-30px)\";\r\n frontFace.style.transition = \"all 0.2s\";\r\n frontFace.onclick = () => this.orientToFace(\"front\");\r\n const topFace = document.createElement(\"div\");\r\n topFace.className = `${this._cubeFaceClass} ${this._pink}`;\r\n topFace.style.transform = \"rotateX(90deg) translateZ(-30px)\";\r\n topFace.style.transition = \"all 0.2s\";\r\n topFace.onclick = () => this.orientToFace(\"top\");\r\n const bottomFace = document.createElement(\"div\");\r\n bottomFace.className = `${this._cubeFaceClass} ${this._pink}`;\r\n bottomFace.style.transform = \"rotateX(270deg) translateZ(-30px)\";\r\n bottomFace.style.transition = \"all 0.2s\";\r\n bottomFace.onclick = () => this.orientToFace(\"bottom\");\r\n const rightFace = document.createElement(\"div\");\r\n rightFace.className = `${this._cubeFaceClass} ${this._blue}`;\r\n rightFace.style.transform =\r\n \"rotateY(-270deg) rotateX(180deg) translateZ(-30px)\";\r\n rightFace.style.transition = \"all 0.2s\";\r\n rightFace.onclick = () => this.orientToFace(\"right\");\r\n const leftFace = document.createElement(\"div\");\r\n leftFace.className = `${this._cubeFaceClass} ${this._blue}`;\r\n leftFace.style.transform =\r\n \"rotateY(-90deg) rotateX(180deg) translateZ(-30px)\";\r\n leftFace.style.transition = \"all 0.2s\";\r\n leftFace.onclick = () => this.orientToFace(\"left\");\r\n const backFace = document.createElement(\"div\");\r\n backFace.className = `${this._cubeFaceClass} ${this._cyan}`;\r\n backFace.style.transform = \"translateZ(-30px) rotateZ(180deg)\";\r\n backFace.style.transition = \"all 0.2s\";\r\n backFace.onclick = () => this.orientToFace(\"back\");\r\n // #endregion\r\n this._cube.append(frontFace, topFace, bottomFace, rightFace, leftFace, backFace);\r\n this._viewerContainer?.append(this._cubeWrapper);\r\n this.visible = true;\r\n }\r\n async dispose() {\r\n this.onAfterUpdate.reset();\r\n this.onBeforeUpdate.reset();\r\n this._cube.remove();\r\n this._cubeWrapper.remove();\r\n this.components = null;\r\n await this.onDisposed.trigger(CubeMap.uuid);\r\n this.onDisposed.reset();\r\n }\r\n setSize(value = \"350\") {\r\n this._cubeWrapper.style.perspective = `${value}px`;\r\n }\r\n setPosition(corner) {\r\n this._cubeWrapper.classList.remove(\"top-8\", \"bottom-8\", \"left-8\", \"right-8\");\r\n const wrapperPositions = {\r\n \"top-left\": [\"top-8\", \"left-8\"],\r\n \"top-right\": [\"top-8\", \"right-8\"],\r\n \"bottom-right\": [\"bottom-8\", \"right-8\"],\r\n \"bottom-left\": [\"bottom-8\", \"left-8\"],\r\n };\r\n this._cubeWrapper.classList.add(...wrapperPositions[corner]);\r\n }\r\n orientToFace(orientation) {\r\n const camera = this._camera.get();\r\n if (this._camera instanceof OrthoPerspectiveCamera) {\r\n const controls = this._camera.controls;\r\n const projection = this._camera.getProjection();\r\n const target = camera.position\r\n .clone()\r\n .add(this._faceOrientations[orientation].clone().multiplyScalar(-1));\r\n const { x, y, z } = camera.position;\r\n if (projection === \"Perspective\") {\r\n controls.setLookAt(x, y, z, target.x, target.y, target.z, true);\r\n }\r\n else {\r\n const pos = new THREE.Vector3();\r\n if (orientation === \"top\")\r\n pos.set(0, 200, 0);\r\n if (orientation === \"bottom\")\r\n pos.set(0, -200, 0);\r\n if (orientation === \"left\")\r\n pos.set(-200, 0, 0);\r\n if (orientation === \"right\")\r\n pos.set(200, 0, 0);\r\n if (orientation === \"front\")\r\n pos.set(0, 0, 200);\r\n if (orientation === \"back\")\r\n pos.set(0, 0, -200);\r\n controls.setPosition(pos.x, pos.y, pos.z, true);\r\n controls.setTarget(0, 0, 0, true);\r\n }\r\n this._camera.fit(undefined, this.offset);\r\n }\r\n }\r\n get _viewerContainer() {\r\n return this.components.renderer.get().domElement.parentElement;\r\n }\r\n get _camera() {\r\n return this.components.camera;\r\n }\r\n getCameraCSSMatrix(matrix) {\r\n const { elements } = matrix;\r\n const epsilon = (value) => {\r\n return Math.abs(value) < 1e-10 ? 0 : value;\r\n };\r\n return `matrix3d(\r\n ${epsilon(elements[0])},\r\n ${epsilon(-elements[1])},\r\n ${epsilon(elements[2])},\r\n ${epsilon(elements[3])},\r\n ${epsilon(elements[4])},\r\n ${epsilon(-elements[5])},\r\n ${epsilon(elements[6])},\r\n ${epsilon(elements[7])},\r\n ${epsilon(elements[8])},\r\n ${epsilon(-elements[9])},\r\n ${epsilon(elements[10])},\r\n ${epsilon(elements[11])},\r\n ${epsilon(elements[12])},\r\n ${epsilon(-elements[13])},\r\n ${epsilon(elements[14])},\r\n ${epsilon(elements[15])})\r\n `;\r\n }\r\n get() {\r\n return this._cubeWrapper;\r\n }\r\n}\r\nCubeMap.uuid = \"53311ea3-323a-476f-ae4a-d681778e8f67\";\r\nToolComponent.libraryUUIDs.add(CubeMap.uuid);\r\n//# sourceMappingURL=index.js.map","import { SimpleClipper } from \"../../core\";\r\nimport { EdgesPlane } from \"./src/edges-plane\";\r\nimport { EdgesStyles } from \"./src/edges-styles\";\r\nexport * from \"./src/edges-plane\";\r\n/**\r\n * A more advanced version of {@link SimpleClipper} that also supports\r\n * {@link ClippingEdges} with customizable lines.\r\n */\r\nexport class EdgesClipper extends SimpleClipper {\r\n constructor(components) {\r\n super(components);\r\n this.fillsNeedUpdate = false;\r\n this.components.tools.list[EdgesClipper.uuid] = this;\r\n this.PlaneType = EdgesPlane;\r\n this.styles = new EdgesStyles(components);\r\n }\r\n /** {@link Component.get} */\r\n async dispose() {\r\n await super.dispose();\r\n await this.styles.dispose();\r\n }\r\n /**\r\n * Updates all the lines of the {@link ClippingEdges}.\r\n */\r\n async updateEdges(updateFills = false) {\r\n if (!this.enabled)\r\n return;\r\n for (const plane of this._planes) {\r\n if (updateFills || this.fillsNeedUpdate) {\r\n await plane.updateFill();\r\n this.fillsNeedUpdate = false;\r\n }\r\n else {\r\n await plane.update();\r\n }\r\n }\r\n }\r\n newPlaneInstance(point, normal) {\r\n return new this.PlaneType(this.components, point, normal, this._material, this.styles);\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { FragmentMesh } from \"bim-fragment\";\r\nimport { Component, Event, } from \"../../../base-types\";\r\nimport { Disposer } from \"../../../core\";\r\nimport { ClippingFills } from \"./clipping-fills\";\r\nimport { PostproductionRenderer } from \"../../PostproductionRenderer\";\r\n/**\r\n * The edges that are drawn when the {@link EdgesPlane} sections a mesh.\r\n */\r\nexport class ClippingEdges extends Component {\r\n /** {@link Hideable.visible} */\r\n get visible() {\r\n return this._visible;\r\n }\r\n get fillVisible() {\r\n for (const name in this._edges) {\r\n const edges = this._edges[name];\r\n if (edges.fill) {\r\n return edges.fill.visible;\r\n }\r\n }\r\n return false;\r\n }\r\n set fillVisible(visible) {\r\n for (const name in this._edges) {\r\n const edges = this._edges[name];\r\n if (edges.fill) {\r\n edges.fill.visible = visible;\r\n }\r\n }\r\n }\r\n constructor(components, plane, styles) {\r\n super(components);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** {@link Updateable.onAfterUpdate} */\r\n this.onAfterUpdate = new Event();\r\n /** {@link Updateable.onBeforeUpdate} */\r\n this.onBeforeUpdate = new Event();\r\n /** {@link Component.name} */\r\n this.name = \"ClippingEdges\";\r\n /** {@link Component.enabled}. */\r\n this.enabled = true;\r\n this.fillNeedsUpdate = false;\r\n this._edges = {};\r\n this._visible = true;\r\n this._inverseMatrix = new THREE.Matrix4();\r\n this._localPlane = new THREE.Plane();\r\n this._tempLine = new THREE.Line3();\r\n this._tempVector = new THREE.Vector3();\r\n this._plane = plane;\r\n this._styles = styles;\r\n }\r\n async setVisible(visible) {\r\n this._visible = visible;\r\n const names = Object.keys(this._edges);\r\n for (const edgeName of names) {\r\n this.updateEdgesVisibility(edgeName, visible);\r\n }\r\n if (visible) {\r\n await this.update();\r\n }\r\n }\r\n /** {@link Updateable.update} */\r\n async update() {\r\n const styles = this._styles.get();\r\n await this.updateDeletedEdges(styles);\r\n for (const name in styles) {\r\n this.drawEdges(name);\r\n }\r\n this.fillNeedsUpdate = false;\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._edges;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n const names = Object.keys(this._edges);\r\n for (const name of names) {\r\n this.disposeEdge(name);\r\n }\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n newEdgesMesh(styleName) {\r\n const styles = this._styles.get();\r\n const material = styles[styleName].lineMaterial;\r\n const edgesGeometry = new THREE.BufferGeometry();\r\n const buffer = new Float32Array(300000);\r\n const linePosAttr = new THREE.BufferAttribute(buffer, 3, false);\r\n linePosAttr.setUsage(THREE.DynamicDrawUsage);\r\n edgesGeometry.setAttribute(\"position\", linePosAttr);\r\n const lines = new THREE.LineSegments(edgesGeometry, material);\r\n lines.frustumCulled = false;\r\n return lines;\r\n }\r\n newFillMesh(name, geometry) {\r\n const styles = this._styles.get();\r\n const style = styles[name];\r\n const fillMaterial = style.fillMaterial;\r\n if (fillMaterial) {\r\n const fills = new ClippingFills(this.components, this._plane, geometry, fillMaterial);\r\n this.newFillOutline(name, fills, style);\r\n return fills;\r\n }\r\n return undefined;\r\n }\r\n newFillOutline(name, fills, style) {\r\n if (!style.outlineMaterial)\r\n return;\r\n const renderer = this.components.renderer;\r\n if (renderer instanceof PostproductionRenderer) {\r\n const pRenderer = renderer;\r\n const outlines = pRenderer.postproduction.customEffects.outlinedMeshes;\r\n if (!outlines[name]) {\r\n outlines[name] = {\r\n meshes: new Set(),\r\n material: style.outlineMaterial,\r\n };\r\n }\r\n fills.styleName = name;\r\n }\r\n }\r\n // Source: https://gkjohnson.github.io/three-mesh-bvh/example/bundle/clippedEdges.html\r\n drawEdges(styleName) {\r\n const style = this._styles.get()[styleName];\r\n if (!this._edges[styleName]) {\r\n this.initializeStyle(styleName);\r\n }\r\n const edges = this._edges[styleName];\r\n let index = 0;\r\n const posAttr = edges.mesh.geometry.attributes.position;\r\n // @ts-ignore\r\n posAttr.array.fill(0);\r\n // The indexex of the points that draw the lines\r\n const indexes = [];\r\n let lastIndex = 0;\r\n for (const mesh of style.meshes) {\r\n if (!mesh.geometry) {\r\n continue;\r\n }\r\n if (!mesh.geometry.boundsTree) {\r\n throw new Error(\"Boundstree not found for clipping edges subset.\");\r\n }\r\n if (mesh instanceof THREE.InstancedMesh) {\r\n if (mesh.count === 0) {\r\n continue;\r\n }\r\n const instanced = mesh;\r\n for (let i = 0; i < instanced.count; i++) {\r\n // Exclude fragment instances that don't belong to this style\r\n const isFragment = instanced instanceof FragmentMesh;\r\n const fMesh = instanced;\r\n const ids = style.fragments[fMesh.fragment.id];\r\n if (isFragment && ids) {\r\n const itemID = fMesh.fragment.getItemID(i);\r\n if (itemID === null || !ids.has(itemID)) {\r\n continue;\r\n }\r\n }\r\n const tempMesh = new THREE.Mesh(mesh.geometry);\r\n tempMesh.matrix.copy(mesh.matrix);\r\n const tempMatrix = new THREE.Matrix4();\r\n instanced.getMatrixAt(i, tempMatrix);\r\n tempMesh.applyMatrix4(tempMatrix);\r\n tempMesh.applyMatrix4(mesh.matrix);\r\n tempMesh.updateMatrix();\r\n tempMesh.updateMatrixWorld();\r\n this._inverseMatrix.copy(tempMesh.matrixWorld).invert();\r\n this._localPlane.copy(this._plane).applyMatrix4(this._inverseMatrix);\r\n index = this.shapecast(tempMesh, posAttr, index);\r\n if (index !== lastIndex) {\r\n indexes.push(index);\r\n lastIndex = index;\r\n }\r\n }\r\n }\r\n else {\r\n this._inverseMatrix.copy(mesh.matrixWorld).invert();\r\n this._localPlane.copy(this._plane).applyMatrix4(this._inverseMatrix);\r\n index = this.shapecast(mesh, posAttr, index);\r\n if (index !== lastIndex) {\r\n indexes.push(index);\r\n lastIndex = index;\r\n }\r\n }\r\n }\r\n // set the draw range to only the new segments and offset the lines so they don't intersect with the geometry\r\n edges.mesh.geometry.setDrawRange(0, index);\r\n edges.mesh.position.copy(this._plane.normal).multiplyScalar(0.0001);\r\n posAttr.needsUpdate = true;\r\n // Update the edges geometry only if there is no NaN in the output (which means there's been an error)\r\n const attributes = edges.mesh.geometry.attributes;\r\n const position = attributes.position;\r\n if (!Number.isNaN(position.array[0])) {\r\n if (!edges.mesh.parent) {\r\n const scene = this.components.scene.get();\r\n scene.add(edges.mesh);\r\n }\r\n if (this.fillNeedsUpdate && edges.fill) {\r\n edges.fill.geometry = edges.mesh.geometry;\r\n edges.fill.update(indexes);\r\n }\r\n }\r\n }\r\n initializeStyle(name) {\r\n const mesh = this.newEdgesMesh(name);\r\n const geometry = mesh.geometry;\r\n const fill = this.newFillMesh(name, geometry);\r\n this._edges[name] = { mesh, name, fill };\r\n }\r\n shapecast(mesh, posAttr, index) {\r\n // @ts-ignore\r\n mesh.geometry.boundsTree.shapecast({\r\n intersectsBounds: (box) => {\r\n return this._localPlane.intersectsBox(box);\r\n },\r\n // @ts-ignore\r\n intersectsTriangle: (tri) => {\r\n // check each triangle edge to see if it intersects with the plane. If so then\r\n // add it to the list of segments.\r\n let count = 0;\r\n this._tempLine.start.copy(tri.a);\r\n this._tempLine.end.copy(tri.b);\r\n if (this._localPlane.intersectLine(this._tempLine, this._tempVector)) {\r\n const result = this._tempVector.applyMatrix4(mesh.matrixWorld);\r\n posAttr.setXYZ(index, result.x, result.y, result.z);\r\n count++;\r\n index++;\r\n }\r\n this._tempLine.start.copy(tri.b);\r\n this._tempLine.end.copy(tri.c);\r\n if (this._localPlane.intersectLine(this._tempLine, this._tempVector)) {\r\n const result = this._tempVector.applyMatrix4(mesh.matrixWorld);\r\n posAttr.setXYZ(index, result.x, result.y, result.z);\r\n count++;\r\n index++;\r\n }\r\n this._tempLine.start.copy(tri.c);\r\n this._tempLine.end.copy(tri.a);\r\n if (this._localPlane.intersectLine(this._tempLine, this._tempVector)) {\r\n const result = this._tempVector.applyMatrix4(mesh.matrixWorld);\r\n posAttr.setXYZ(index, result.x, result.y, result.z);\r\n count++;\r\n index++;\r\n }\r\n // If we only intersected with one or three sides then just remove it. This could be handled\r\n // more gracefully.\r\n if (count !== 2) {\r\n index -= count;\r\n }\r\n },\r\n });\r\n return index;\r\n }\r\n updateEdgesVisibility(edgeName, visible) {\r\n const edges = this._edges[edgeName];\r\n if (edges.fill) {\r\n edges.fill.visible = visible;\r\n }\r\n edges.mesh.visible = visible;\r\n if (visible) {\r\n const scene = this.components.scene.get();\r\n scene.add(edges.mesh);\r\n }\r\n else {\r\n edges.mesh.removeFromParent();\r\n }\r\n }\r\n async updateDeletedEdges(styles) {\r\n const names = Object.keys(this._edges);\r\n for (const name of names) {\r\n if (styles[name] === undefined) {\r\n this.disposeEdge(name);\r\n this.disposeOutline(name);\r\n }\r\n }\r\n }\r\n disposeOutline(name) {\r\n const renderer = this.components.renderer;\r\n if (renderer instanceof PostproductionRenderer) {\r\n const outlines = renderer.postproduction.customEffects.outlinedMeshes;\r\n delete outlines[name];\r\n }\r\n }\r\n disposeEdge(name) {\r\n const disposer = this.components.tools.get(Disposer);\r\n const edge = this._edges[name];\r\n if (edge.fill) {\r\n edge.fill.dispose();\r\n }\r\n disposer.destroy(edge.mesh, false);\r\n delete this._edges[name];\r\n }\r\n}\r\n//# sourceMappingURL=clipping-edges.js.map"],"names":["CubeMap","visible","this","_visible","value","_cubeWrapper","classList","remove","add","constructor","components","super","onDisposed","enabled","onAfterUpdate","onBeforeUpdate","offset","_cubeFaceClass","_cyan","_pink","_blue","_cube","document","createElement","_matrix","_faceOrientations","front","top","bottom","right","left","back","update","extractRotation","_camera","get","matrixWorldInverse","style","transform","getCameraCSSMatrix","tools","uuid","id","className","setPosition","setSize","transformStyle","textTransform","append","camera","isUpdateable","frontFace","transition","onclick","orientToFace","topFace","bottomFace","rightFace","leftFace","backFace","_viewerContainer","dispose","reset","trigger","perspective","corner","orientation","controls","projection","getProjection","target","position","clone","multiplyScalar","x","y","z","setLookAt","pos","set","setTarget","fit","undefined","renderer","domElement","parentElement","matrix","elements","epsilon","Math","abs","libraryUUIDs","EdgesClipper","fillsNeedUpdate","list","PlaneType","styles","updateEdges","updateFills","plane","_planes","updateFill","newPlaneInstance","point","normal","_material","ClippingEdges","fillVisible","name","_edges","edges","fill","fillNeedsUpdate","_inverseMatrix","_localPlane","_tempLine","_tempVector","_plane","_styles","setVisible","names","Object","keys","edgeName","updateEdgesVisibility","updateDeletedEdges","drawEdges","disposeEdge","newEdgesMesh","styleName","material","lineMaterial","edgesGeometry","buffer","Float32Array","linePosAttr","setUsage","setAttribute","lines","frustumCulled","newFillMesh","geometry","fillMaterial","fills","newFillOutline","outlineMaterial","outlines","postproduction","customEffects","outlinedMeshes","meshes","Set","initializeStyle","index","posAttr","mesh","attributes","array","indexes","lastIndex","boundsTree","Error","count","instanced","i","isFragment","fMesh","ids","fragments","fragment","itemID","getItemID","has","tempMesh","copy","tempMatrix","getMatrixAt","applyMatrix4","updateMatrix","updateMatrixWorld","matrixWorld","invert","shapecast","push","setDrawRange","needsUpdate","Number","isNaN","parent","scene","intersectsBounds","box","intersectsBox","intersectsTriangle","tri","start","a","end","b","intersectLine","result","setXYZ","c","removeFromParent","disposeOutline","disposer","edge","destroy"],"sourceRoot":""}