{"version":3,"file":"vendor.openbim-components-228f3b82.87e315850aff0ca0.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 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 = () => {\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 setFromNormalAndCoplanarPoint(normal, point) {\r\n this.normal.copy(normal);\r\n this.origin.copy(point);\r\n this._helper.lookAt(normal);\r\n this._helper.position.copy(point);\r\n this._helper.updateMatrix();\r\n 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 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 var _a;\r\n const constant = intersect.point.distanceTo(new THREE.Vector3(0, 0, 0));\r\n const normal = (_a = intersect.face) === null || _a === void 0 ? void 0 : _a.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","constructor","origin","normal","activateControls","super","name","onDraggingStarted","onDraggingEnded","onDisposed","_controlsActive","_hiddenMaterial","update","setFromNormalAndCoplanarPoint","position","changeDrag","event","value","preventCameraMovement","notifyDraggingChanged","newPlaneMesh","newHelper","newTransformControls","point","copy","lookAt","updateMatrix","get","async","reset","removeFromParent","geometry","dispose","trigger","addEventListener","removeEventListener","camera","container","domElement","controls","TransformControls","initializeControls","scene","add","attach","showX","showY","setSpace","createArrowBoundingBox","children","rotateX","Math","PI","applyMatrix4","matrix","helper","z","static","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","delete","pickPlane","deletePlane","deleteAll","index","indexOf","splice","main","materialIcon","onClick","getAllPlaneMeshes","found","object","find","p","includes","push","intersect","_a","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","SimpleGrid","_grid","fade","_fade","uniforms","uFade","size1","size2","distance","updateZoom","uZoom","zoom","uSize1","uSize2","uColor","uDistance","vertexShader","fragmentShader","extensions","derivatives","frustumCulled","setupEvents","destroy"],"sourceRoot":""}