{"version":3,"file":"vendor.openbim-components-499d762e.a010bf2ea6964957.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/navigation/ShadowDropper/index.js","webpack://client-app/./node_modules/openbim-components/src/services/CloudStorage/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { HorizontalBlurShader } from \"three/examples/jsm/shaders/HorizontalBlurShader\";\r\nimport { VerticalBlurShader } from \"three/examples/jsm/shaders/VerticalBlurShader\";\r\nimport { Component, Event } from \"../../base-types\";\r\nimport { Disposer, ToolComponent } from \"../../core\";\r\nexport class ShadowDropper extends Component {\r\n constructor(components) {\r\n super(components);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.enabled = true;\r\n // Controls how far away the shadow is computed\r\n this.cameraHeight = 10;\r\n this.darkness = 1.2;\r\n this.opacity = 1;\r\n this.resolution = 512;\r\n this.amount = 3.5;\r\n this.planeColor = 0xffffff;\r\n this.shadowOffset = 0;\r\n this.shadowExtraScaleFactor = 1.5;\r\n this.shadows = {};\r\n this.tempMaterial = new THREE.MeshBasicMaterial({ visible: false });\r\n this.depthMaterial = new THREE.MeshDepthMaterial();\r\n this.components.tools.add(ShadowDropper.uuid, this);\r\n this.initializeDepthMaterial();\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this.shadows;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n for (const id in this.shadows) {\r\n this.deleteShadow(id);\r\n }\r\n this.tempMaterial.dispose();\r\n this.depthMaterial.dispose();\r\n this.components = null;\r\n await this.onDisposed.trigger(ShadowDropper.uuid);\r\n this.onDisposed.reset();\r\n }\r\n /**\r\n * Creates a blurred dropped shadow of the given mesh.\r\n *\r\n * @param model - the mesh whose shadow to generate.\r\n * @param id - the name of this shadow.\r\n */\r\n renderShadow(model, id) {\r\n if (this.shadows[id]) {\r\n throw new Error(`There is already a shadow with ID ${id}`);\r\n }\r\n const { size, center, min } = this.getSizeCenterMin(model);\r\n const shadow = this.createShadow(id, size);\r\n this.initializeShadow(shadow, center, min);\r\n this.createPlanes(shadow, size);\r\n this.bakeShadow(model, shadow);\r\n return shadow.root;\r\n }\r\n /**\r\n * Deletes the specified shadow (if it exists).\r\n *\r\n * @param id - the name of this shadow.\r\n */\r\n deleteShadow(id) {\r\n const disposer = this.components.tools.get(Disposer);\r\n const shadow = this.shadows[id];\r\n delete this.shadows[id];\r\n if (!shadow)\r\n throw new Error(`No shadow with ID ${id} was found.`);\r\n disposer.destroy(shadow.root);\r\n disposer.destroy(shadow.blurPlane);\r\n shadow.rt.dispose();\r\n shadow.rtBlur.dispose();\r\n }\r\n createPlanes(currentShadow, size) {\r\n const planeGeometry = new THREE.PlaneGeometry(size.x, size.z).rotateX(Math.PI / 2);\r\n this.createBasePlane(currentShadow, planeGeometry);\r\n ShadowDropper.createBlurPlane(currentShadow, planeGeometry);\r\n // this.createGroundColorPlane(currentShadow, planeGeometry);\r\n }\r\n initializeShadow(shadow, center, min) {\r\n this.initializeRoot(shadow, center, min);\r\n ShadowDropper.initializeRenderTargets(shadow);\r\n ShadowDropper.initializeCamera(shadow);\r\n }\r\n bakeShadow(meshes, shadow) {\r\n const scene = this.components.scene.get();\r\n const areModelsInScene = meshes.map((mesh) => !!mesh.parent);\r\n for (let i = 0; i < meshes.length; i++) {\r\n if (!areModelsInScene[i]) {\r\n scene.add(meshes[i]);\r\n }\r\n }\r\n const children = scene.children.filter((obj) => !meshes.includes(obj) && obj !== shadow.root);\r\n for (let i = children.length - 1; i >= 0; i--) {\r\n scene.remove(children[i]);\r\n }\r\n // remove the background\r\n const initialBackground = scene.background;\r\n scene.background = null;\r\n // force the depthMaterial to everything\r\n scene.overrideMaterial = this.depthMaterial;\r\n // Make meshes visible if they were invisible\r\n const previousVisibleAttributes = [];\r\n for (const mesh of meshes) {\r\n previousVisibleAttributes.push(mesh.visible);\r\n mesh.visible = true;\r\n }\r\n // render to the render target to get the depths\r\n const renderer = this.components.renderer.get();\r\n renderer.setRenderTarget(shadow.rt);\r\n renderer.render(scene, shadow.camera);\r\n // and reset the override material\r\n scene.overrideMaterial = null;\r\n this.blurShadow(shadow, this.amount);\r\n // a second pass to reduce the artifacts\r\n // (0.4 is the minimum blur amount so that the artifacts are gone)\r\n this.blurShadow(shadow, this.amount * 0.4);\r\n // reset and render the normal scene\r\n renderer.setRenderTarget(null);\r\n scene.background = initialBackground;\r\n // reset visibility\r\n for (let i = 0; i < meshes.length; i++) {\r\n meshes[i].visible = previousVisibleAttributes[i];\r\n }\r\n for (let i = children.length - 1; i >= 0; i--) {\r\n scene.add(children[i]);\r\n }\r\n for (let i = 0; i < meshes.length; i++) {\r\n if (!areModelsInScene[i]) {\r\n scene.remove(meshes[i]);\r\n }\r\n }\r\n }\r\n static initializeCamera(shadow) {\r\n shadow.camera.rotation.x = Math.PI / 2; // get the camera to look up\r\n shadow.root.add(shadow.camera);\r\n }\r\n static initializeRenderTargets(shadow) {\r\n shadow.rt.texture.generateMipmaps = false;\r\n shadow.rtBlur.texture.generateMipmaps = false;\r\n }\r\n initializeRoot(shadow, center, min) {\r\n const scene = this.components.scene.get();\r\n shadow.root.position.set(center.x, min.y - this.shadowOffset, center.z);\r\n scene.add(shadow.root);\r\n }\r\n // Plane simulating the \"ground\". This is not needed for BIM models generally\r\n // private createGroundColorPlane(_shadow: Shadow, planeGeometry: BufferGeometry) {\r\n // const fillPlaneMaterial = new MeshBasicMaterial({\r\n // color: this.planeColor,\r\n // opacity: this.opacity,\r\n // transparent: true,\r\n // depthWrite: false,\r\n // clippingPlanes: this.context.getClippingPlanes()\r\n // });\r\n // const fillPlane = new Mesh(planeGeometry, fillPlaneMaterial);\r\n // fillPlane.rotateX(Math.PI);\r\n // fillPlane.renderOrder = -1;\r\n // shadow.root.add(fillPlane);\r\n // }\r\n createBasePlane(shadow, planeGeometry) {\r\n const planeMaterial = this.createPlaneMaterial(shadow);\r\n const plane = new THREE.Mesh(planeGeometry, planeMaterial);\r\n // make sure it's rendered after the fillPlane\r\n plane.renderOrder = 2;\r\n shadow.root.add(plane);\r\n // the y from the texture is flipped!\r\n plane.scale.y = -1;\r\n }\r\n static createBlurPlane(shadow, planeGeometry) {\r\n shadow.blurPlane.geometry = planeGeometry;\r\n shadow.blurPlane.visible = false;\r\n shadow.root.add(shadow.blurPlane);\r\n }\r\n createPlaneMaterial(shadow) {\r\n const renderer = this.components.renderer;\r\n return new THREE.MeshBasicMaterial({\r\n map: shadow.rt.texture,\r\n opacity: this.opacity,\r\n transparent: true,\r\n depthWrite: false,\r\n clippingPlanes: renderer.clippingPlanes,\r\n });\r\n }\r\n // like MeshDepthMaterial, but goes from black to transparent\r\n initializeDepthMaterial() {\r\n this.depthMaterial.depthTest = false;\r\n this.depthMaterial.depthWrite = false;\r\n const oldShader = \"gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\";\r\n const newShader = \"gl_FragColor = vec4( vec3( 0.0 ), ( 1.0 - fragCoordZ ) * darkness );\";\r\n this.depthMaterial.userData.darkness = { value: this.darkness };\r\n this.depthMaterial.onBeforeCompile = (shader) => {\r\n shader.uniforms.darkness = this.depthMaterial.userData.darkness;\r\n shader.fragmentShader = /* glsl */ `\r\n\t\t\t\t\t\tuniform float darkness;\r\n\t\t\t\t\t\t${shader.fragmentShader.replace(oldShader, newShader)}\r\n\t\t\t\t\t`;\r\n };\r\n }\r\n createShadow(id, size) {\r\n this.shadows[id] = {\r\n root: new THREE.Group(),\r\n rt: new THREE.WebGLRenderTarget(this.resolution, this.resolution),\r\n rtBlur: new THREE.WebGLRenderTarget(this.resolution, this.resolution),\r\n blurPlane: new THREE.Mesh(),\r\n camera: this.createCamera(size),\r\n };\r\n return this.shadows[id];\r\n }\r\n createCamera(size) {\r\n return new THREE.OrthographicCamera(-size.x / 2, size.x / 2, size.z / 2, -size.z / 2, 0, this.cameraHeight);\r\n }\r\n getSizeCenterMin(meshes) {\r\n const parent = meshes[0].parent;\r\n const group = new THREE.Group();\r\n group.children = meshes;\r\n const boundingBox = new THREE.Box3().setFromObject(group);\r\n parent === null || parent === void 0 ? void 0 : parent.add(...meshes);\r\n const size = new THREE.Vector3();\r\n boundingBox.getSize(size);\r\n size.x *= this.shadowExtraScaleFactor;\r\n size.z *= this.shadowExtraScaleFactor;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n const min = boundingBox.min;\r\n return { size, center, min };\r\n }\r\n blurShadow(shadow, amount) {\r\n const horizontalBlurMaterial = new THREE.ShaderMaterial(HorizontalBlurShader);\r\n horizontalBlurMaterial.depthTest = false;\r\n const verticalBlurMaterial = new THREE.ShaderMaterial(VerticalBlurShader);\r\n verticalBlurMaterial.depthTest = false;\r\n shadow.blurPlane.visible = true;\r\n // blur horizontally and draw in the renderTargetBlur\r\n shadow.blurPlane.material = horizontalBlurMaterial;\r\n // @ts-ignore\r\n shadow.blurPlane.material.uniforms.tDiffuse.value = shadow.rt.texture;\r\n horizontalBlurMaterial.uniforms.h.value = (amount * 1) / 256;\r\n const renderer = this.components.renderer.get();\r\n renderer.setRenderTarget(shadow.rtBlur);\r\n renderer.render(shadow.blurPlane, shadow.camera);\r\n // blur vertically and draw in the main renderTarget\r\n shadow.blurPlane.material = verticalBlurMaterial;\r\n // @ts-ignore\r\n shadow.blurPlane.material.uniforms.tDiffuse.value = shadow.rtBlur.texture;\r\n verticalBlurMaterial.uniforms.v.value = (amount * 1) / 256;\r\n renderer.setRenderTarget(shadow.rt);\r\n renderer.render(shadow.blurPlane, shadow.camera);\r\n shadow.blurPlane.visible = false;\r\n }\r\n}\r\nShadowDropper.uuid = \"f833a09a-a3ab-4c58-b03e-da5298c7a1b6\";\r\nToolComponent.libraryUUIDs.add(ShadowDropper.uuid);\r\n//# sourceMappingURL=index.js.map","import { unzip } from \"unzipit\";\r\nimport { Component, Event } from \"../../base-types\";\r\nimport { FragmentManager } from \"../../fragments\";\r\n/**\r\n * An object to easily use the services of That Open Platform.\r\n */\r\nexport class CloudStorage extends Component {\r\n constructor(components) {\r\n super(components);\r\n this.tools = [];\r\n /** {@link Component.name} */\r\n this.name = \"CloudProcessor\";\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n this.modelProcessed = new Event();\r\n this.checkInterval = 5000;\r\n this._models = [];\r\n this._urls = {\r\n base: \"https://dev.api.dev.platform.thatopen.com/v1/models/\",\r\n tokenParam: \"?accessToken=\",\r\n };\r\n this.components.tools.add(CloudStorage.uuid, this);\r\n }\r\n /**\r\n * Retrieves a tool component by its name.\r\n */\r\n get() {\r\n return this._models;\r\n }\r\n /**\r\n * The authentication token generated in\r\n * [That Open Platform](https://platform.thatopen.com/app)\r\n */\r\n get token() {\r\n if (!this._token) {\r\n throw new Error(\"Auth token has not been initialized!\");\r\n }\r\n return this._token;\r\n }\r\n /**\r\n * The authentication token generated in\r\n * [That Open Platform](https://platform.thatopen.com/app)\r\n */\r\n set token(value) {\r\n this._token = value;\r\n }\r\n async update() {\r\n const { base, tokenParam } = this._urls;\r\n const url = `${base}${tokenParam}${this.token}`;\r\n const result = await fetch(url);\r\n const parsed = await result.json();\r\n this._models = parsed.models;\r\n }\r\n async upload(fileUrl) {\r\n const response = await this.createModel();\r\n const uploadUrl = response.uploadUrl;\r\n const read = await fetch(fileUrl);\r\n const body = await read.arrayBuffer();\r\n await fetch(uploadUrl, { method: \"PUT\", body });\r\n this.setupModelProcessEvent(response.model._id);\r\n }\r\n async delete(modelID) {\r\n const { base, tokenParam } = this._urls;\r\n const url = `${base}/${modelID}${tokenParam}${this.token}`;\r\n const result = await fetch(url, { method: \"DELETE\" });\r\n return result.json();\r\n }\r\n async getModel(modelID) {\r\n const { base, tokenParam } = this._urls;\r\n const modelUrl = `${base}/${modelID}${tokenParam}${this.token}`;\r\n const modelResponse = await fetch(modelUrl);\r\n return modelResponse.json();\r\n }\r\n setupModelProcessEvent(modelID) {\r\n const interval = setInterval(async () => {\r\n const response = await this.getModel(modelID);\r\n if (response.model.status === \"PROCESSED\") {\r\n const { entries } = await unzip(response.downloadUrl);\r\n const arrayBuffer = await entries[\"model.frag\"].arrayBuffer();\r\n const buffer = new Uint8Array(arrayBuffer);\r\n const fragments = await this.components.tools.get(FragmentManager);\r\n const model = await fragments.load(buffer);\r\n model.properties = await entries[\"properties.json\"].json();\r\n await this.modelProcessed.trigger(model);\r\n clearInterval(interval);\r\n }\r\n }, this.checkInterval);\r\n }\r\n async createModel() {\r\n const { base, tokenParam } = this._urls;\r\n const url = `${base}${tokenParam}${this.token}`;\r\n const result = await fetch(url, { method: \"POST\" });\r\n return result.json();\r\n }\r\n}\r\nCloudStorage.uuid = \"6fe6c739-d518-47b8-8057-a22a6c96e722\";\r\n//# sourceMappingURL=index.js.map"],"names":["ShadowDropper","constructor","components","super","this","onDisposed","enabled","cameraHeight","darkness","opacity","resolution","amount","planeColor","shadowOffset","shadowExtraScaleFactor","shadows","tempMaterial","visible","depthMaterial","tools","add","uuid","initializeDepthMaterial","get","async","id","deleteShadow","dispose","trigger","reset","renderShadow","model","Error","size","center","min","getSizeCenterMin","shadow","createShadow","initializeShadow","createPlanes","bakeShadow","root","disposer","destroy","blurPlane","rt","rtBlur","currentShadow","planeGeometry","x","z","rotateX","Math","PI","createBasePlane","createBlurPlane","initializeRoot","initializeRenderTargets","initializeCamera","meshes","scene","areModelsInScene","map","mesh","parent","i","length","children","filter","obj","includes","remove","initialBackground","background","overrideMaterial","previousVisibleAttributes","push","renderer","setRenderTarget","render","camera","blurShadow","static","rotation","texture","generateMipmaps","position","set","y","planeMaterial","createPlaneMaterial","plane","renderOrder","scale","geometry","transparent","depthWrite","clippingPlanes","depthTest","userData","value","onBeforeCompile","shader","uniforms","fragmentShader","replace","createCamera","group","boundingBox","setFromObject","getSize","getCenter","horizontalBlurMaterial","HorizontalBlurShader","verticalBlurMaterial","VerticalBlurShader","material","tDiffuse","h","v","CloudStorage","name","modelProcessed","checkInterval","_models","_urls","base","tokenParam","token","_token","url","result","fetch","parsed","json","models","fileUrl","response","createModel","uploadUrl","read","body","arrayBuffer","method","setupModelProcessEvent","_id","modelID","modelUrl","interval","setInterval","getModel","status","entries","downloadUrl","buffer","Uint8Array","fragments","load","properties","clearInterval"],"sourceRoot":""}