{"version":3,"file":"vendor.openbim-components-493298cd.b65a3fc6467c445f.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/core/Simple2DMarker/index.js","webpack://client-app/./node_modules/openbim-components/src/core/Simple2DScene/src/infinite-2d-grid.js","webpack://client-app/./node_modules/openbim-components/src/core/Simple2DScene/index.js","webpack://client-app/./node_modules/openbim-components/src/core/SimpleCamera/index.js"],"sourcesContent":["import { CSS2DObject } from \"three/examples/jsm/renderers/CSS2DRenderer\";\r\nimport { Event } from \"../../base-types\";\r\nimport { Component } from \"../../base-types/component\";\r\nexport class Simple2DMarker extends Component {\r\n set visible(value) {\r\n this._visible = value;\r\n this._marker.visible = value;\r\n }\r\n get visible() {\r\n return this._visible;\r\n }\r\n // Define marker as setup configuration?\r\n constructor(components, marker) {\r\n super(components);\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n this._visible = true;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n let _marker;\r\n if (marker) {\r\n _marker = marker;\r\n }\r\n else {\r\n _marker = document.createElement(\"div\");\r\n _marker.className =\r\n \"w-[15px] h-[15px] border-3 border-solid border-red-600\";\r\n }\r\n this._marker = new CSS2DObject(_marker);\r\n this.components.scene.get().add(this._marker);\r\n this.visible = true;\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._marker;\r\n }\r\n toggleVisibility() {\r\n this.visible = !this.visible;\r\n }\r\n async dispose() {\r\n this._marker.removeFromParent();\r\n this._marker.element.remove();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { CSS2DObject } from \"three/examples/jsm/renderers/CSS2DRenderer\";\r\n/**\r\n * An infinite lightweight 2D grid that can be used for any\r\n * kind of 2d viewports.\r\n */\r\nexport class Infinite2dGrid {\r\n constructor(camera, container) {\r\n this.numbers = new THREE.Group();\r\n this.maxRegenerateRetrys = 4;\r\n this.gridsFactor = 5;\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n this._group = new THREE.Group();\r\n this._frustum = new THREE.Frustum();\r\n this._frustumMat = new THREE.Matrix4();\r\n this._regenerateDelay = 200;\r\n this._regenerateCounter = 0;\r\n this._camera = camera;\r\n this._container = container;\r\n const main = this.newGrid(0x222222, -1);\r\n const secondary = this.newGrid(0x111111, -2);\r\n this.grids = { main, secondary };\r\n this._group.add(secondary, main, this.numbers);\r\n }\r\n get() {\r\n return this._group;\r\n }\r\n dispose() {\r\n const { main, secondary } = this.grids;\r\n main.removeFromParent();\r\n secondary.removeFromParent();\r\n main.geometry.dispose();\r\n const mMat = main.material;\r\n mMat.dispose();\r\n secondary.geometry.dispose();\r\n const sMat = secondary.material;\r\n sMat.dispose();\r\n }\r\n regenerate() {\r\n const isReady = this.isGridReady();\r\n if (!isReady) {\r\n this._regenerateCounter++;\r\n if (this._regenerateCounter > this.maxRegenerateRetrys) {\r\n throw new Error(\"Grid could not be regenerated\");\r\n }\r\n setTimeout(() => this.regenerate, this._regenerateDelay);\r\n return;\r\n }\r\n this._regenerateCounter = 0;\r\n const matrix = this._frustumMat.multiplyMatrices(this._camera.projectionMatrix, this._camera.matrixWorldInverse);\r\n this._frustum.setFromProjectionMatrix(matrix);\r\n // Step 1: find out the distance of the visible area of the 2D scene\r\n // and the translation pixel / 3d unit\r\n const { planes } = this._frustum;\r\n const right = planes[0].constant * -planes[0].normal.x;\r\n const left = planes[1].constant * -planes[1].normal.x;\r\n const bottom = planes[2].constant * -planes[2].normal.y;\r\n const top = planes[3].constant * -planes[3].normal.y;\r\n const horizontalDistance = Math.abs(right - left);\r\n const verticalDistance = Math.abs(top - bottom);\r\n const { clientWidth, clientHeight } = this._container;\r\n const maxPixelDist = Math.max(clientWidth, clientHeight);\r\n const maxUnit3dDist = Math.max(horizontalDistance, verticalDistance);\r\n const unit3dPixelRel = maxUnit3dDist / maxPixelDist;\r\n // Step 2: find out its order of magnitude\r\n const magnitudeX = Math.ceil(Math.log10(horizontalDistance / this.scaleX));\r\n const magnitudeY = Math.ceil(Math.log10(verticalDistance / this.scaleY));\r\n // Step 3: represent main grid\r\n const sDistanceHor = 10 ** (magnitudeX - 2) * this.scaleX;\r\n const sDistanceVert = 10 ** (magnitudeY - 2) * this.scaleY;\r\n const mDistanceHor = sDistanceHor * this.gridsFactor;\r\n const mDistanceVert = sDistanceVert * this.gridsFactor;\r\n const mainGridCountVert = Math.ceil(verticalDistance / mDistanceVert);\r\n const mainGridCountHor = Math.ceil(horizontalDistance / mDistanceHor);\r\n const secondaryGridCountVert = Math.ceil(verticalDistance / sDistanceVert);\r\n const secondaryGridCountHor = Math.ceil(horizontalDistance / sDistanceHor);\r\n // Step 4: find out position of first lines\r\n const sTrueLeft = sDistanceHor * Math.ceil(left / sDistanceHor);\r\n const sTrueBottom = sDistanceVert * Math.ceil(bottom / sDistanceVert);\r\n const mTrueLeft = mDistanceHor * Math.ceil(left / mDistanceHor);\r\n const mTrueBottom = mDistanceVert * Math.ceil(bottom / mDistanceVert);\r\n // Step 5: draw lines and texts\r\n const numbers = [...this.numbers.children];\r\n for (const number of numbers) {\r\n number.removeFromParent();\r\n }\r\n this.numbers.children = [];\r\n const mPoints = [];\r\n for (let i = 0; i < mainGridCountHor; i++) {\r\n const offset = mTrueLeft + i * mDistanceHor;\r\n mPoints.push(offset, top, 0, offset, bottom, 0);\r\n const sign = this.newNumber(offset / this.scaleX);\r\n const textOffsetPixels = 12;\r\n const textOffset = textOffsetPixels * unit3dPixelRel;\r\n sign.position.set(offset, bottom + textOffset, 0);\r\n }\r\n for (let i = 0; i < mainGridCountVert; i++) {\r\n const offset = mTrueBottom + i * mDistanceVert;\r\n mPoints.push(left, offset, 0, right, offset, 0);\r\n const sign = this.newNumber(offset / this.scaleY);\r\n let textOffsetPixels = 12;\r\n if (sign.element.textContent) {\r\n textOffsetPixels += 4 * sign.element.textContent.length;\r\n }\r\n const textOffset = textOffsetPixels * unit3dPixelRel;\r\n sign.position.set(left + textOffset, offset, 0);\r\n }\r\n const sPoints = [];\r\n for (let i = 0; i < secondaryGridCountHor; i++) {\r\n const offset = sTrueLeft + i * sDistanceHor;\r\n sPoints.push(offset, top, 0, offset, bottom, 0);\r\n }\r\n for (let i = 0; i < secondaryGridCountVert; i++) {\r\n const offset = sTrueBottom + i * sDistanceVert;\r\n sPoints.push(left, offset, 0, right, offset, 0);\r\n }\r\n const mIndices = [];\r\n const sIndices = [];\r\n this.fillIndices(mPoints, mIndices);\r\n this.fillIndices(sPoints, sIndices);\r\n const mBuffer = new THREE.BufferAttribute(new Float32Array(mPoints), 3);\r\n const sBuffer = new THREE.BufferAttribute(new Float32Array(sPoints), 3);\r\n const { main, secondary } = this.grids;\r\n main.geometry.setAttribute(\"position\", mBuffer);\r\n main.geometry.setIndex(mIndices);\r\n secondary.geometry.setAttribute(\"position\", sBuffer);\r\n secondary.geometry.setIndex(sIndices);\r\n }\r\n fillIndices(points, indices) {\r\n for (let i = 0; i < points.length / 2 - 1; i += 2) {\r\n indices.push(i, i + 1);\r\n }\r\n }\r\n newNumber(offset) {\r\n const text = document.createElement(\"div\");\r\n text.textContent = `${offset}`;\r\n if (text.textContent.length > 6) {\r\n text.textContent = text.textContent.slice(0, 6);\r\n }\r\n text.style.height = \"24px\";\r\n text.style.fontSize = \"12px\";\r\n const sign = new CSS2DObject(text);\r\n this.numbers.add(sign);\r\n return sign;\r\n }\r\n newGrid(color, renderOrder) {\r\n const geometry = new THREE.BufferGeometry();\r\n const material = new THREE.LineBasicMaterial({ color });\r\n const grid = new THREE.LineSegments(geometry, material);\r\n grid.frustumCulled = false;\r\n grid.renderOrder = renderOrder;\r\n return grid;\r\n }\r\n isGridReady() {\r\n const nums = this._camera.projectionMatrix.elements;\r\n for (let i = 0; i < nums.length; i++) {\r\n const num = nums[i];\r\n if (Number.isNaN(num)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n//# sourceMappingURL=infinite-2d-grid.js.map","import * as THREE from \"three\";\r\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls\";\r\nimport { Component, Event, UIElement, } from \"../../base-types\";\r\nimport { SimpleUIComponent } from \"../../ui\";\r\nimport { Disposer } from \"../Disposer\";\r\nimport { SimpleRenderer } from \"../SimpleRenderer\";\r\nimport { PostproductionRenderer } from \"../../navigation/PostproductionRenderer\";\r\nimport { Infinite2dGrid } from \"./src\";\r\n// TODO: Make a scene manager as a Tool (so that it as an UUID)\r\n/**\r\n * A simple floating 2D scene that you can use to easily draw 2D graphics\r\n * with all the power of Three.js.\r\n */\r\nexport class Simple2DScene extends Component {\r\n get scaleX() {\r\n return this._scaleX;\r\n }\r\n set scaleX(value) {\r\n this._scaleX = value;\r\n this._root.scale.x = value;\r\n this.grid.scaleX = value;\r\n this.grid.regenerate();\r\n }\r\n get scaleY() {\r\n return this._scaleY;\r\n }\r\n set scaleY(value) {\r\n this._scaleY = value;\r\n this._root.scale.y = value;\r\n this.grid.scaleY = value;\r\n this.grid.regenerate();\r\n }\r\n constructor(components, postproduction = false) {\r\n super(components);\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 Resizeable.onResize} */\r\n this.onResize = new Event();\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** {@link UI.uiElement} */\r\n this.uiElement = new UIElement();\r\n this._scaleX = 1;\r\n this._scaleY = 1;\r\n this._root = new THREE.Group();\r\n this._size = new THREE.Vector2();\r\n this._frustumSize = 50;\r\n /** {@link Resizeable.resize} */\r\n this.resize = () => {\r\n const { height, width } = this._size;\r\n const aspect = width / height;\r\n this.camera.left = (-this._frustumSize * aspect) / 2;\r\n this.camera.right = (this._frustumSize * aspect) / 2;\r\n this.camera.top = this._frustumSize / 2;\r\n this.camera.bottom = -this._frustumSize / 2;\r\n this.camera.updateProjectionMatrix();\r\n this.camera.updateProjectionMatrix();\r\n this.renderer.resize(this._size);\r\n };\r\n if (!components.uiEnabled) {\r\n throw new Error(\"The Simple2DScene component needs to use UI elements (TODO: Decouple from them).\");\r\n }\r\n const container = new SimpleUIComponent(components);\r\n container.domElement.classList.add(\"relative\");\r\n this.uiElement.set({ container });\r\n this.scene = new THREE.Scene();\r\n this._size.set(window.innerWidth, window.innerHeight);\r\n const { width, height } = this._size;\r\n // Creates the camera (point of view of the user)\r\n this.camera = new THREE.OrthographicCamera(75, width / height);\r\n this.scene.add(this.camera);\r\n this.camera.position.z = 10;\r\n const domContainer = container.domElement;\r\n this.scene.add(this._root);\r\n this.grid = new Infinite2dGrid(this.camera, domContainer);\r\n const gridObject = this.grid.get();\r\n this.scene.add(gridObject);\r\n if (postproduction) {\r\n this.renderer = new PostproductionRenderer(this.components, domContainer);\r\n }\r\n else {\r\n this.renderer = new SimpleRenderer(this.components, domContainer);\r\n }\r\n const renderer = this.renderer.get();\r\n renderer.localClippingEnabled = false;\r\n this.renderer.setupEvents(false);\r\n this.renderer.overrideScene = this.scene;\r\n this.renderer.overrideCamera = this.camera;\r\n this.controls = new OrbitControls(this.camera, renderer.domElement);\r\n this.controls.target.set(0, 0, 0);\r\n this.controls.enableRotate = false;\r\n this.controls.enableZoom = true;\r\n this.controls.addEventListener(\"change\", () => this.grid.regenerate());\r\n }\r\n /**\r\n * {@link Component.get}\r\n * @returns the 2D scene.\r\n */\r\n get() {\r\n return this._root;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n const disposer = this.components.tools.get(Disposer);\r\n for (const child of this.scene.children) {\r\n const item = child;\r\n if (item instanceof THREE.Object3D) {\r\n disposer.destroy(item);\r\n }\r\n }\r\n await this.renderer.dispose();\r\n await this.uiElement.dispose();\r\n await this.onDisposed.trigger(Simple2DScene.uuid);\r\n this.onDisposed.reset();\r\n }\r\n /** {@link Updateable.update} */\r\n async update() {\r\n await this.onBeforeUpdate.trigger();\r\n this.controls.update();\r\n await this.renderer.update();\r\n await this.onAfterUpdate.trigger();\r\n }\r\n /** {@link Resizeable.getSize} */\r\n getSize() {\r\n return new THREE.Vector2(this._size.width, this._size.height);\r\n }\r\n setSize(height, width) {\r\n this._size.width = width;\r\n this._size.height = height;\r\n this.resize();\r\n }\r\n}\r\nSimple2DScene.uuid = \"b48b7194-0f9a-43a4-a718-270b1522595f\";\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport CameraControls from \"camera-controls\";\r\nimport { Component, Event } from \"../../base-types\";\r\n/**\r\n * A basic camera that uses\r\n * [yomotsu's cameracontrols](https://github.com/yomotsu/camera-controls) to\r\n * easily control the camera in 2D and 3D. Check out it's API to find out\r\n * what features it offers.\r\n */\r\nexport class SimpleCamera extends Component {\r\n /** {@link Component.enabled} */\r\n get enabled() {\r\n return this.controls.enabled;\r\n }\r\n /** {@link Component.enabled} */\r\n set enabled(enabled) {\r\n this.controls.enabled = enabled;\r\n }\r\n constructor(components) {\r\n super(components);\r\n /** {@link Updateable.onBeforeUpdate} */\r\n this.onBeforeUpdate = new Event();\r\n /** {@link Updateable.onAfterUpdate} */\r\n this.onAfterUpdate = new Event();\r\n this.onAspectUpdated = new Event();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /**\r\n * Updates the aspect of the camera to match the size of the\r\n * {@link Components.renderer}.\r\n */\r\n this.updateAspect = () => {\r\n if (this.components.renderer.isResizeable()) {\r\n const size = this.components.renderer.getSize();\r\n this._perspectiveCamera.aspect = size.width / size.height;\r\n this._perspectiveCamera.updateProjectionMatrix();\r\n this.onAspectUpdated.trigger();\r\n }\r\n };\r\n this._perspectiveCamera = this.setupCamera();\r\n this.activeCamera = this._perspectiveCamera;\r\n this.controls = this.setupCameraControls();\r\n const scene = components.scene.get();\r\n scene.add(this._perspectiveCamera);\r\n this.setupEvents(true);\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this.activeCamera;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this.setupEvents(false);\r\n this.enabled = false;\r\n this.onAspectUpdated.reset();\r\n this.onBeforeUpdate.reset();\r\n this.onAfterUpdate.reset();\r\n this._perspectiveCamera.removeFromParent();\r\n this.controls.dispose();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n /** {@link Updateable.update} */\r\n async update(_delta) {\r\n if (this.enabled) {\r\n await this.onBeforeUpdate.trigger(this);\r\n this.controls.update(_delta);\r\n await this.onAfterUpdate.trigger(this);\r\n }\r\n }\r\n setupCamera() {\r\n const aspect = window.innerWidth / window.innerHeight;\r\n const camera = new THREE.PerspectiveCamera(60, aspect, 1, 1000);\r\n camera.position.set(50, 50, 50);\r\n camera.lookAt(new THREE.Vector3(0, 0, 0));\r\n return camera;\r\n }\r\n setupCameraControls() {\r\n CameraControls.install({ THREE: SimpleCamera.getSubsetOfThree() });\r\n const dom = this.components.renderer.get().domElement;\r\n const controls = new CameraControls(this._perspectiveCamera, dom);\r\n controls.dampingFactor = 0.2;\r\n controls.dollyToCursor = true;\r\n controls.infinityDolly = true;\r\n controls.setTarget(0, 0, 0);\r\n return controls;\r\n }\r\n setupEvents(active) {\r\n if (active) {\r\n window.addEventListener(\"resize\", this.updateAspect);\r\n }\r\n else {\r\n window.removeEventListener(\"resize\", this.updateAspect);\r\n }\r\n }\r\n static getSubsetOfThree() {\r\n return {\r\n MOUSE: THREE.MOUSE,\r\n Vector2: THREE.Vector2,\r\n Vector3: THREE.Vector3,\r\n Vector4: THREE.Vector4,\r\n Quaternion: THREE.Quaternion,\r\n Matrix4: THREE.Matrix4,\r\n Spherical: THREE.Spherical,\r\n Box3: THREE.Box3,\r\n Sphere: THREE.Sphere,\r\n Raycaster: THREE.Raycaster,\r\n MathUtils: THREE.MathUtils,\r\n };\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map"],"names":["Simple2DMarker","visible","value","this","_visible","_marker","constructor","components","marker","super","enabled","onDisposed","document","createElement","className","scene","get","add","toggleVisibility","async","removeFromParent","element","remove","trigger","reset","Infinite2dGrid","camera","container","numbers","maxRegenerateRetrys","gridsFactor","scaleX","scaleY","_group","_frustum","_frustumMat","_regenerateDelay","_regenerateCounter","_camera","_container","main","newGrid","secondary","grids","dispose","geometry","material","regenerate","isGridReady","Error","setTimeout","matrix","multiplyMatrices","projectionMatrix","matrixWorldInverse","setFromProjectionMatrix","planes","right","constant","normal","x","left","bottom","y","top","horizontalDistance","Math","abs","verticalDistance","clientWidth","clientHeight","maxPixelDist","max","unit3dPixelRel","magnitudeX","ceil","log10","magnitudeY","sDistanceHor","sDistanceVert","mDistanceHor","mDistanceVert","mainGridCountVert","mainGridCountHor","secondaryGridCountVert","secondaryGridCountHor","sTrueLeft","sTrueBottom","mTrueLeft","mTrueBottom","children","number","mPoints","i","offset","push","textOffset","newNumber","position","set","sign","textOffsetPixels","textContent","length","sPoints","mIndices","sIndices","fillIndices","mBuffer","Float32Array","sBuffer","setAttribute","setIndex","points","indices","text","slice","style","height","fontSize","color","renderOrder","grid","frustumCulled","nums","elements","num","Number","isNaN","Simple2DScene","_scaleX","_root","scale","_scaleY","postproduction","onAfterUpdate","onBeforeUpdate","onResize","uiElement","_size","_frustumSize","resize","width","aspect","updateProjectionMatrix","renderer","uiEnabled","domElement","classList","window","innerWidth","innerHeight","z","domContainer","gridObject","PostproductionRenderer","SimpleRenderer","localClippingEnabled","setupEvents","overrideScene","overrideCamera","controls","OrbitControls","target","enableRotate","enableZoom","addEventListener","disposer","tools","Disposer","child","item","destroy","uuid","update","getSize","setSize","SimpleCamera","onAspectUpdated","updateAspect","isResizeable","size","_perspectiveCamera","setupCamera","activeCamera","setupCameraControls","_delta","lookAt","THREE","getSubsetOfThree","dom","dampingFactor","dollyToCursor","infinityDolly","setTarget","active","removeEventListener","static","MOUSE","Vector2","Vector3","Vector4","Quaternion","Matrix4","Spherical","Box3","Sphere","Raycaster","MathUtils"],"sourceRoot":""}