{"version":3,"file":"vendor.openbim-components-228f3b82.54dbb55ef7814c75.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/core/SimpleClipper/simple-plane.js","webpack://client-app/./node_modules/openbim-components/src/core/SimpleClipper/index.js","webpack://client-app/./node_modules/openbim-components/src/core/SimpleGrid/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { TransformControls } from \"three/examples/jsm/controls/TransformControls\";\r\nimport { Component, Event } from \"../../base-types\";\r\n/**\r\n * Each of the planes created by {@link SimpleClipper}.\r\n */\r\nexport class SimplePlane extends Component {\r\n /** {@link Component.enabled} */\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n /** {@link Component.enabled} */\r\n set enabled(state) {\r\n this._enabled = state;\r\n this.components.renderer.togglePlane(state, this._plane);\r\n }\r\n /** {@link Hideable.visible } */\r\n get visible() {\r\n return this._visible;\r\n }\r\n /** {@link Hideable.visible } */\r\n set visible(state) {\r\n this._visible = state;\r\n this._controls.visible = state;\r\n this._helper.visible = state;\r\n this.toggleControls(state);\r\n }\r\n /** The meshes used for raycasting */\r\n get meshes() {\r\n return [this._planeMesh, this._arrowBoundBox];\r\n }\r\n /** The material of the clipping plane representation. */\r\n get planeMaterial() {\r\n return this._planeMesh.material;\r\n }\r\n /** The material of the clipping plane representation. */\r\n set planeMaterial(material) {\r\n this._planeMesh.material = material;\r\n }\r\n /** The size of the clipping plane representation. */\r\n get size() {\r\n return this._planeMesh.scale.x;\r\n }\r\n /** Sets the size of the clipping plane representation. */\r\n set size(size) {\r\n this._planeMesh.scale.set(size, size, size);\r\n }\r\n get helper() {\r\n return this._helper;\r\n }\r\n constructor(components, origin, normal, material, size = 5, activateControls = true) {\r\n super(components);\r\n /** {@link Component.name} */\r\n this.name = \"SimplePlane\";\r\n /** Event that fires when the user starts dragging a clipping plane. */\r\n this.onDraggingStarted = new Event();\r\n /** Event that fires when the user stops dragging a clipping plane. */\r\n this.onDraggingEnded = new Event();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._plane = new THREE.Plane();\r\n // TODO: Make all planes share the same geometry\r\n // TODO: Clean up unnecessary attributes, clean up constructor\r\n this._visible = true;\r\n this._enabled = true;\r\n this._controlsActive = false;\r\n this._arrowBoundBox = new THREE.Mesh();\r\n this._hiddenMaterial = new THREE.MeshBasicMaterial({\r\n visible: false,\r\n });\r\n /** {@link Updateable.update} */\r\n this.update = async () => {\r\n if (!this._enabled)\r\n return;\r\n this._plane.setFromNormalAndCoplanarPoint(this.normal, this._helper.position);\r\n };\r\n this.changeDrag = (event) => {\r\n this._visible = !event.value;\r\n this.preventCameraMovement();\r\n this.notifyDraggingChanged(event);\r\n };\r\n this.normal = normal;\r\n this.origin = origin;\r\n this.components.renderer.togglePlane(true, this._plane);\r\n this._planeMesh = SimplePlane.newPlaneMesh(size, material);\r\n this._helper = this.newHelper();\r\n this._controls = this.newTransformControls();\r\n this._plane.setFromNormalAndCoplanarPoint(normal, origin);\r\n if (activateControls) {\r\n this.toggleControls(true);\r\n }\r\n }\r\n async setFromNormalAndCoplanarPoint(normal, point) {\r\n this.reset();\r\n if (!this.normal.equals(normal)) {\r\n this.normal.copy(normal);\r\n this._helper.lookAt(normal);\r\n }\r\n this.origin.copy(point);\r\n this._helper.position.copy(point);\r\n this._helper.updateMatrix();\r\n await this.update();\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._plane;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this._enabled = false;\r\n this.onDraggingStarted.reset();\r\n this.onDraggingEnded.reset();\r\n this._helper.removeFromParent();\r\n this.components.renderer.togglePlane(false, this._plane);\r\n this._arrowBoundBox.removeFromParent();\r\n this._arrowBoundBox.geometry.dispose();\r\n this._planeMesh.geometry.dispose();\r\n this._controls.removeFromParent();\r\n this._controls.dispose();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n reset() {\r\n const normal = new THREE.Vector3(1, 0, 0);\r\n const point = new THREE.Vector3();\r\n if (!this.normal.equals(normal)) {\r\n this.normal.copy(normal);\r\n this._helper.lookAt(normal);\r\n }\r\n this.origin.copy(point);\r\n this._helper.position.copy(point);\r\n this._helper.updateMatrix();\r\n }\r\n toggleControls(state) {\r\n if (state) {\r\n if (this._controlsActive)\r\n return;\r\n this._controls.addEventListener(\"change\", this.update);\r\n this._controls.addEventListener(\"dragging-changed\", this.changeDrag);\r\n }\r\n else {\r\n this._controls.removeEventListener(\"change\", this.update);\r\n this._controls.removeEventListener(\"dragging-changed\", this.changeDrag);\r\n }\r\n this._controlsActive = state;\r\n }\r\n newTransformControls() {\r\n const camera = this.components.camera.get();\r\n const container = this.components.renderer.get().domElement;\r\n const controls = new TransformControls(camera, container);\r\n this.initializeControls(controls);\r\n this.components.scene.get().add(controls);\r\n return controls;\r\n }\r\n initializeControls(controls) {\r\n controls.attach(this._helper);\r\n controls.showX = false;\r\n controls.showY = false;\r\n controls.setSpace(\"local\");\r\n this.createArrowBoundingBox();\r\n controls.children[0].children[0].add(this._arrowBoundBox);\r\n }\r\n createArrowBoundingBox() {\r\n this._arrowBoundBox.geometry = new THREE.CylinderGeometry(0.18, 0.18, 1.2);\r\n this._arrowBoundBox.material = this._hiddenMaterial;\r\n this._arrowBoundBox.rotateX(Math.PI / 2);\r\n this._arrowBoundBox.updateMatrix();\r\n this._arrowBoundBox.geometry.applyMatrix4(this._arrowBoundBox.matrix);\r\n }\r\n notifyDraggingChanged(event) {\r\n if (event.value) {\r\n this.onDraggingStarted.trigger();\r\n }\r\n else {\r\n this.onDraggingEnded.trigger();\r\n }\r\n }\r\n preventCameraMovement() {\r\n this.components.camera.enabled = this._visible;\r\n }\r\n newHelper() {\r\n const helper = new THREE.Object3D();\r\n helper.lookAt(this.normal);\r\n helper.position.copy(this.origin);\r\n this._planeMesh.position.z += 0.01;\r\n helper.add(this._planeMesh);\r\n this.components.scene.get().add(helper);\r\n return helper;\r\n }\r\n static newPlaneMesh(size, material) {\r\n const planeGeom = new THREE.PlaneGeometry(1);\r\n const mesh = new THREE.Mesh(planeGeom, material);\r\n mesh.scale.set(size, size, size);\r\n return mesh;\r\n }\r\n}\r\n//# sourceMappingURL=simple-plane.js.map","import * as THREE from \"three\";\r\nimport { Component, Event, UIElement, } from \"../../base-types\";\r\nimport { SimplePlane } from \"./simple-plane\";\r\nimport { Button } from \"../../ui\";\r\nimport { ToolComponent } from \"../ToolsComponent\";\r\nexport * from \"./simple-plane\";\r\n// TODO: Clean up UI element\r\n/**\r\n * A lightweight component to easily create and handle\r\n * [clipping planes](https://threejs.org/docs/#api/en/materials/Material.clippingPlanes).\r\n *\r\n * @param components - the instance of {@link Components} used.\r\n * @param planeType - the type of plane to be used by the clipper.\r\n * E.g. {@link SimplePlane}.\r\n */\r\nexport class SimpleClipper extends Component {\r\n /** {@link Component.enabled} */\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n /** {@link Component.enabled} */\r\n set enabled(state) {\r\n this._enabled = state;\r\n for (const plane of this._planes) {\r\n plane.enabled = state;\r\n }\r\n this.updateMaterialsAndPlanes();\r\n if (this.components.uiEnabled) {\r\n this.uiElement.get(\"main\").active = state;\r\n }\r\n }\r\n /** {@link Hideable.visible } */\r\n get visible() {\r\n return this._visible;\r\n }\r\n /** {@link Hideable.visible } */\r\n set visible(state) {\r\n this._visible = state;\r\n for (const plane of this._planes) {\r\n plane.visible = state;\r\n }\r\n }\r\n /** The material of the clipping plane representation. */\r\n get material() {\r\n return this._material;\r\n }\r\n /** The material of the clipping plane representation. */\r\n set material(material) {\r\n this._material = material;\r\n for (const plane of this._planes) {\r\n plane.planeMaterial = material;\r\n }\r\n }\r\n /** The size of the geometric representation of the clippings planes. */\r\n get size() {\r\n return this._size;\r\n }\r\n /** The size of the geometric representation of the clippings planes. */\r\n set size(size) {\r\n this._size = size;\r\n for (const plane of this._planes) {\r\n plane.size = size;\r\n }\r\n }\r\n constructor(components) {\r\n super(components);\r\n /** {@link Createable.onAfterCreate} */\r\n this.onAfterCreate = new Event();\r\n /** {@link Createable.onAfterDelete} */\r\n this.onAfterDelete = new Event();\r\n /** Event that fires when the user starts dragging a clipping plane. */\r\n this.onBeforeDrag = new Event();\r\n /** Event that fires when the user stops dragging a clipping plane. */\r\n this.onAfterDrag = new Event();\r\n this.onBeforeCreate = new Event();\r\n this.onBeforeCancel = new Event();\r\n this.onAfterCancel = new Event();\r\n this.onBeforeDelete = new Event();\r\n /** {@link UI.uiElement} */\r\n this.uiElement = new UIElement();\r\n /**\r\n * Whether to force the clipping plane to be orthogonal in the Y direction\r\n * (up). This is desirable when clipping a building horizontally and a\r\n * clipping plane is created in it's roof, which might have a slight\r\n * slope for draining purposes.\r\n */\r\n this.orthogonalY = false;\r\n /**\r\n * The tolerance that determines whether a horizontallish clipping plane\r\n * will be forced to be orthogonal to the Y direction. {@link orthogonalY}\r\n * has to be `true` for this to apply.\r\n */\r\n this.toleranceOrthogonalY = 0.7;\r\n this._planes = [];\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** The material used in all the clipping planes. */\r\n this._material = new THREE.MeshBasicMaterial({\r\n color: 0xffff00,\r\n side: THREE.DoubleSide,\r\n transparent: true,\r\n opacity: 0.2,\r\n });\r\n this._size = 5;\r\n this._enabled = false;\r\n this._visible = false;\r\n this._onStartDragging = () => {\r\n this.onBeforeDrag.trigger();\r\n };\r\n this._onEndDragging = () => {\r\n this.onAfterDrag.trigger();\r\n };\r\n this.components.tools.add(SimpleClipper.uuid, this);\r\n this.PlaneType = SimplePlane;\r\n if (components.uiEnabled) {\r\n this.setUI(components);\r\n }\r\n }\r\n endCreation() { }\r\n cancelCreation() { }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._planes;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this._enabled = false;\r\n for (const plane of this._planes) {\r\n await plane.dispose();\r\n }\r\n this._planes.length = 0;\r\n this.uiElement.dispose();\r\n this._material.dispose();\r\n this.onBeforeCreate.reset();\r\n this.onBeforeCancel.reset();\r\n this.onBeforeDelete.reset();\r\n this.onBeforeDrag.reset();\r\n this.onAfterCreate.reset();\r\n this.onAfterCancel.reset();\r\n this.onAfterDelete.reset();\r\n this.onAfterDrag.reset();\r\n await this.onDisposed.trigger(SimpleClipper.uuid);\r\n this.onDisposed.reset();\r\n }\r\n /** {@link Createable.create} */\r\n create() {\r\n if (!this.enabled)\r\n return;\r\n const intersects = this.components.raycaster.castRay();\r\n if (!intersects)\r\n return;\r\n this.createPlaneFromIntersection(intersects);\r\n }\r\n /**\r\n * Creates a plane in a certain place and with a certain orientation,\r\n * without the need of the mouse.\r\n *\r\n * @param normal - the orientation of the clipping plane.\r\n * @param point - the position of the clipping plane.\r\n * @param isPlan - whether this is a clipping plane used for floor plan\r\n * navigation.\r\n */\r\n createFromNormalAndCoplanarPoint(normal, point) {\r\n const plane = this.newPlane(point, normal);\r\n this.updateMaterialsAndPlanes();\r\n return plane;\r\n }\r\n /**\r\n * {@link Createable.delete}\r\n *\r\n * @param plane - the plane to delete. If undefined, the the first plane\r\n * found under the cursor will be deleted.\r\n */\r\n delete(plane) {\r\n if (!this.enabled)\r\n return;\r\n if (!plane) {\r\n plane = this.pickPlane();\r\n }\r\n if (!plane) {\r\n return;\r\n }\r\n this.deletePlane(plane);\r\n }\r\n /** Deletes all the existing clipping planes. */\r\n deleteAll() {\r\n while (this._planes.length > 0) {\r\n this.delete(this._planes[0]);\r\n }\r\n }\r\n deletePlane(plane) {\r\n const index = this._planes.indexOf(plane);\r\n if (index !== -1) {\r\n this._planes.splice(index, 1);\r\n this.components.renderer.togglePlane(false, plane.get());\r\n plane.dispose();\r\n this.updateMaterialsAndPlanes();\r\n this.onAfterDelete.trigger(plane);\r\n }\r\n }\r\n setUI(components) {\r\n const main = new Button(components);\r\n main.materialIcon = \"content_cut\";\r\n main.onClick.add(() => {\r\n main.active = !main.active;\r\n this.enabled = main.active;\r\n this.visible = main.active;\r\n });\r\n this.uiElement.set({ main });\r\n }\r\n pickPlane() {\r\n const meshes = this.getAllPlaneMeshes();\r\n const intersects = this.components.raycaster.castRay(meshes);\r\n if (intersects) {\r\n const found = intersects.object;\r\n return this._planes.find((p) => p.meshes.includes(found));\r\n }\r\n return undefined;\r\n }\r\n getAllPlaneMeshes() {\r\n const meshes = [];\r\n for (const plane of this._planes) {\r\n meshes.push(...plane.meshes);\r\n }\r\n return meshes;\r\n }\r\n createPlaneFromIntersection(intersect) {\r\n const constant = intersect.point.distanceTo(new THREE.Vector3(0, 0, 0));\r\n const normal = intersect.face?.normal;\r\n if (!constant || !normal)\r\n return;\r\n const worldNormal = this.getWorldNormal(intersect, normal);\r\n const plane = this.newPlane(intersect.point, worldNormal.negate());\r\n this.components.renderer.togglePlane(true, plane.get());\r\n this.updateMaterialsAndPlanes();\r\n }\r\n getWorldNormal(intersect, normal) {\r\n const object = intersect.object;\r\n let transform = intersect.object.matrixWorld.clone();\r\n const isInstance = object instanceof THREE.InstancedMesh;\r\n if (isInstance && intersect.instanceId !== undefined) {\r\n const temp = new THREE.Matrix4();\r\n object.getMatrixAt(intersect.instanceId, temp);\r\n transform = temp.multiply(transform);\r\n }\r\n const normalMatrix = new THREE.Matrix3().getNormalMatrix(transform);\r\n const worldNormal = normal.clone().applyMatrix3(normalMatrix).normalize();\r\n this.normalizePlaneDirectionY(worldNormal);\r\n return worldNormal;\r\n }\r\n normalizePlaneDirectionY(normal) {\r\n if (this.orthogonalY) {\r\n if (normal.y > this.toleranceOrthogonalY) {\r\n normal.x = 0;\r\n normal.y = 1;\r\n normal.z = 0;\r\n }\r\n if (normal.y < -this.toleranceOrthogonalY) {\r\n normal.x = 0;\r\n normal.y = -1;\r\n normal.z = 0;\r\n }\r\n }\r\n }\r\n newPlane(point, normal) {\r\n const plane = this.newPlaneInstance(point, normal);\r\n plane.onDraggingStarted.add(this._onStartDragging);\r\n plane.onDraggingEnded.add(this._onEndDragging);\r\n this._planes.push(plane);\r\n this.onAfterCreate.trigger(plane);\r\n return plane;\r\n }\r\n newPlaneInstance(point, normal) {\r\n return new this.PlaneType(this.components, point, normal, this._material);\r\n }\r\n updateMaterialsAndPlanes() {\r\n this.components.renderer.updateClippingPlanes();\r\n const planes = this.components.renderer.clippingPlanes;\r\n for (const model of this.components.meshes) {\r\n if (Array.isArray(model.material)) {\r\n for (const mat of model.material) {\r\n mat.clippingPlanes = planes;\r\n }\r\n }\r\n else {\r\n model.material.clippingPlanes = planes;\r\n }\r\n }\r\n }\r\n}\r\nSimpleClipper.uuid = \"66290bc5-18c4-4cd1-9379-2e17a0617611\";\r\nToolComponent.libraryUUIDs.add(SimpleClipper.uuid);\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { Component, Event } from \"../../base-types\";\r\nimport { Disposer } from \"../Disposer\";\r\nimport { ToolComponent } from \"../ToolsComponent\";\r\n/**\r\n * An infinite grid. Created by\r\n * [fyrestar](https://github.com/Fyrestar/THREE.InfiniteGridHelper)\r\n * and translated to typescript by\r\n * [dkaraush](https://github.com/dkaraush/THREE.InfiniteGridHelper/blob/master/InfiniteGridHelper.ts).\r\n */\r\nexport class SimpleGrid extends Component {\r\n /** {@link Hideable.visible} */\r\n get visible() {\r\n return this._grid.visible;\r\n }\r\n /** {@link Hideable.visible} */\r\n set visible(visible) {\r\n if (visible) {\r\n const scene = this.components.scene.get();\r\n scene.add(this._grid);\r\n }\r\n else {\r\n this._grid.removeFromParent();\r\n }\r\n }\r\n /** The material of the grid. */\r\n get material() {\r\n return this._grid.material;\r\n }\r\n /**\r\n * Whether the grid should fade away with distance. Recommended to be true for\r\n * perspective cameras and false for orthographic cameras.\r\n */\r\n get fade() {\r\n return this._fade === 3;\r\n }\r\n /**\r\n * Whether the grid should fade away with distance. Recommended to be true for\r\n * perspective cameras and false for orthographic cameras.\r\n */\r\n set fade(active) {\r\n this._fade = active ? 3 : 0;\r\n this.material.uniforms.uFade.value = this._fade;\r\n }\r\n constructor(components, color = new THREE.Color(0xbbbbbb), size1 = 1, size2 = 10, distance = 500) {\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 this._fade = 3;\r\n this.updateZoom = () => {\r\n const camera = this.components.camera;\r\n this.material.uniforms.uZoom.value = camera.get().zoom;\r\n };\r\n this.components.tools.add(SimpleGrid.uuid, this);\r\n // Source: https://github.com/dkaraush/THREE.InfiniteGridHelper/blob/master/InfiniteGridHelper.ts\r\n // Author: Fyrestar https://mevedia.com (https://github.com/Fyrestar/THREE.InfiniteGridHelper)\r\n const geometry = new THREE.PlaneGeometry(2, 2, 1, 1);\r\n const material = new THREE.ShaderMaterial({\r\n side: THREE.DoubleSide,\r\n uniforms: {\r\n uSize1: {\r\n value: size1,\r\n },\r\n uSize2: {\r\n value: size2,\r\n },\r\n uColor: {\r\n value: color,\r\n },\r\n uDistance: {\r\n value: distance,\r\n },\r\n uFade: {\r\n value: this._fade,\r\n },\r\n uZoom: {\r\n value: 1,\r\n },\r\n },\r\n transparent: true,\r\n vertexShader: `\r\n \r\n varying vec3 worldPosition;\r\n \r\n uniform float uDistance;\r\n \r\n void main() {\r\n \r\n vec3 pos = position.xzy * uDistance;\r\n pos.xz += cameraPosition.xz;\r\n \r\n worldPosition = pos;\r\n \r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n \r\n }\r\n `,\r\n fragmentShader: `\r\n \r\n varying vec3 worldPosition;\r\n \r\n uniform float uZoom;\r\n uniform float uFade;\r\n uniform float uSize1;\r\n uniform float uSize2;\r\n uniform vec3 uColor;\r\n uniform float uDistance;\r\n \r\n \r\n \r\n float getGrid(float size) {\r\n \r\n vec2 r = worldPosition.xz / size;\r\n \r\n \r\n vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);\r\n float line = min(grid.x, grid.y);\r\n \r\n \r\n return 1.0 - min(line, 1.0);\r\n }\r\n \r\n void main() {\r\n \r\n \r\n float d = 1.0 - min(distance(cameraPosition.xz, worldPosition.xz) / uDistance, 1.0);\r\n \r\n float g1 = getGrid(uSize1);\r\n float g2 = getGrid(uSize2);\r\n \r\n // Ortho camera fades the grid away when zooming out\r\n float minZoom = step(0.2, uZoom);\r\n float zoomFactor = pow(min(uZoom, 1.), 2.) * minZoom;\r\n \r\n gl_FragColor = vec4(uColor.rgb, mix(g2, g1, g1) * pow(d, uFade));\r\n gl_FragColor.a = mix(0.5 * gl_FragColor.a, gl_FragColor.a, g2) * zoomFactor;\r\n \r\n if ( gl_FragColor.a <= 0.0 ) discard;\r\n \r\n \r\n }\r\n \r\n `,\r\n extensions: {\r\n derivatives: true,\r\n },\r\n });\r\n this._grid = new THREE.Mesh(geometry, material);\r\n this._grid.frustumCulled = false;\r\n const scene = components.scene.get();\r\n scene.add(this._grid);\r\n this.setupEvents(true);\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._grid;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this.setupEvents(false);\r\n const disposer = this.components.tools.get(Disposer);\r\n disposer.destroy(this._grid);\r\n await this.onDisposed.trigger(SimpleGrid.uuid);\r\n this.onDisposed.reset();\r\n }\r\n setupEvents(active) {\r\n const camera = this.components.camera;\r\n const controls = camera.controls;\r\n if (active) {\r\n controls.addEventListener(\"update\", this.updateZoom);\r\n }\r\n else {\r\n controls.removeEventListener(\"update\", this.updateZoom);\r\n }\r\n }\r\n}\r\nSimpleGrid.uuid = \"d1e814d5-b81c-4452-87a2-f039375e0489\";\r\nToolComponent.libraryUUIDs.add(SimpleGrid.uuid);\r\n//# sourceMappingURL=index.js.map"],"names":["SimplePlane","enabled","this","_enabled","state","components","renderer","togglePlane","_plane","visible","_visible","_controls","_helper","toggleControls","meshes","_planeMesh","_arrowBoundBox","planeMaterial","material","size","scale","x","set","helper","constructor","origin","normal","activateControls","super","name","onDraggingStarted","onDraggingEnded","onDisposed","_controlsActive","_hiddenMaterial","update","async","setFromNormalAndCoplanarPoint","position","changeDrag","event","value","preventCameraMovement","notifyDraggingChanged","newPlaneMesh","newHelper","newTransformControls","point","reset","equals","copy","lookAt","updateMatrix","get","dispose","removeFromParent","geometry","trigger","addEventListener","removeEventListener","camera","container","domElement","controls","TransformControls","initializeControls","scene","add","attach","showX","showY","setSpace","createArrowBoundingBox","children","rotateX","Math","PI","applyMatrix4","matrix","z","planeGeom","mesh","SimpleClipper","plane","_planes","updateMaterialsAndPlanes","uiEnabled","uiElement","active","_material","_size","onAfterCreate","onAfterDelete","onBeforeDrag","onAfterDrag","onBeforeCreate","onBeforeCancel","onAfterCancel","onBeforeDelete","orthogonalY","toleranceOrthogonalY","color","side","transparent","opacity","_onStartDragging","_onEndDragging","tools","uuid","PlaneType","setUI","endCreation","cancelCreation","length","create","intersects","raycaster","castRay","createPlaneFromIntersection","createFromNormalAndCoplanarPoint","newPlane","pickPlane","deletePlane","deleteAll","delete","index","indexOf","splice","main","materialIcon","onClick","getAllPlaneMeshes","found","object","find","p","includes","push","intersect","constant","distanceTo","face","worldNormal","getWorldNormal","negate","transform","matrixWorld","clone","undefined","instanceId","temp","getMatrixAt","multiply","normalMatrix","getNormalMatrix","applyMatrix3","normalize","normalizePlaneDirectionY","y","newPlaneInstance","updateClippingPlanes","planes","clippingPlanes","model","Array","isArray","mat","libraryUUIDs","SimpleGrid","_grid","fade","_fade","uniforms","uFade","size1","size2","distance","updateZoom","uZoom","zoom","uSize1","uSize2","uColor","uDistance","vertexShader","fragmentShader","extensions","derivatives","frustumCulled","setupEvents","destroy"],"sourceRoot":""}