{"version":3,"file":"vendor.openbim-components-3256c836.c44128923638c476.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/clipping-fills.js","webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/edges-plane.js","webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/edges-styles.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport earcut from \"earcut\";\r\nimport { PostproductionRenderer } from \"../../PostproductionRenderer\";\r\nexport class ClippingFills {\r\n get visible() {\r\n return this.mesh.parent !== null;\r\n }\r\n set visible(value) {\r\n const style = this.getStyle();\r\n if (value) {\r\n const scene = this._components.scene.get();\r\n scene.add(this.mesh);\r\n if (style) {\r\n style.meshes.add(this.mesh);\r\n }\r\n }\r\n else {\r\n this.mesh.removeFromParent();\r\n if (style) {\r\n style.meshes.delete(this.mesh);\r\n }\r\n }\r\n }\r\n set geometry(geometry) {\r\n this._geometry = geometry;\r\n this.mesh.geometry.attributes.position = geometry.attributes.position;\r\n }\r\n constructor(components, plane, geometry, material) {\r\n // readonly worker: Worker;\r\n this.mesh = new THREE.Mesh(new THREE.BufferGeometry());\r\n this._precission = 10000;\r\n this._tempVector = new THREE.Vector3();\r\n // Used to work in the 2D coordinate system of the plane\r\n this._plane2DCoordinateSystem = new THREE.Matrix4();\r\n this._components = components;\r\n this.mesh.material = material;\r\n this.mesh.frustumCulled = false;\r\n this._plane = plane;\r\n const { x, y, z } = plane.normal;\r\n if (Math.abs(x) === 1) {\r\n this._planeAxis = \"x\";\r\n }\r\n else if (Math.abs(y) === 1) {\r\n this._planeAxis = \"y\";\r\n }\r\n else if (Math.abs(z) === 1) {\r\n this._planeAxis = \"z\";\r\n }\r\n this._geometry = geometry;\r\n this.mesh.geometry.attributes.position = geometry.attributes.position;\r\n // To prevent clipping plane overlapping the filling mesh\r\n const offset = plane.normal.clone().multiplyScalar(0.01);\r\n this.mesh.position.copy(offset);\r\n this.visible = true;\r\n }\r\n dispose() {\r\n const style = this.getStyle();\r\n if (style) {\r\n style.meshes.delete(this.mesh);\r\n }\r\n this.mesh.geometry.dispose();\r\n this.mesh.removeFromParent();\r\n this.mesh.geometry = null;\r\n this.mesh = null;\r\n this._plane = null;\r\n this._geometry = null;\r\n }\r\n update(elements, blockByIndex) {\r\n const buffer = this._geometry.attributes.position.array;\r\n if (!buffer)\r\n return;\r\n this.updatePlane2DCoordinateSystem();\r\n const allIndices = [];\r\n let start = 0;\r\n for (let i = 0; i < elements.length; i++) {\r\n const end = elements[i];\r\n const verticesByBlock = {};\r\n for (let j = start; j < end; j += 2) {\r\n let block = blockByIndex[j];\r\n if (block === undefined) {\r\n block = -1;\r\n }\r\n if (!verticesByBlock[block]) {\r\n verticesByBlock[block] = [];\r\n }\r\n verticesByBlock[block].push(j * 3);\r\n }\r\n for (const block in verticesByBlock) {\r\n const vertices = verticesByBlock[block];\r\n if (!vertices.length) {\r\n continue;\r\n }\r\n const indices = this.computeFill(vertices, buffer);\r\n for (const index of indices) {\r\n allIndices.push(index);\r\n }\r\n }\r\n start = end;\r\n }\r\n this.mesh.geometry.setIndex(allIndices);\r\n }\r\n computeFill(vertices, buffer) {\r\n const indices = new Map();\r\n const all2DVertices = {};\r\n const shapes = new Map();\r\n let nextShapeID = 0;\r\n const shapesEnds = new Map();\r\n const shapesStarts = new Map();\r\n const openShapes = new Set();\r\n const p = this._precission;\r\n for (let i = 0; i < vertices.length; i++) {\r\n // Convert vertices to indices\r\n const startVertexIndex = vertices[i];\r\n let x1 = 0;\r\n let y1 = 0;\r\n let x2 = 0;\r\n let y2 = 0;\r\n const globalX1 = buffer[startVertexIndex];\r\n const globalY1 = buffer[startVertexIndex + 1];\r\n const globalZ1 = buffer[startVertexIndex + 2];\r\n const globalX2 = buffer[startVertexIndex + 3];\r\n const globalY2 = buffer[startVertexIndex + 4];\r\n const globalZ2 = buffer[startVertexIndex + 5];\r\n this._tempVector.set(globalX1, globalY1, globalZ1);\r\n this._tempVector.applyMatrix4(this._plane2DCoordinateSystem);\r\n x1 = Math.trunc(this._tempVector.x * p) / p;\r\n y1 = Math.trunc(this._tempVector.y * p) / p;\r\n this._tempVector.set(globalX2, globalY2, globalZ2);\r\n this._tempVector.applyMatrix4(this._plane2DCoordinateSystem);\r\n x2 = Math.trunc(this._tempVector.x * p) / p;\r\n y2 = Math.trunc(this._tempVector.y * p) / p;\r\n if (x1 === x2 && y1 === y2) {\r\n continue;\r\n }\r\n const startCode = `${x1}|${y1}`;\r\n const endCode = `${x2}|${y2}`;\r\n if (!indices.has(startCode)) {\r\n indices.set(startCode, startVertexIndex / 3);\r\n }\r\n if (!indices.has(endCode)) {\r\n indices.set(endCode, startVertexIndex / 3 + 1);\r\n }\r\n const start = indices.get(startCode);\r\n const end = indices.get(endCode);\r\n all2DVertices[start] = [x1, y1];\r\n all2DVertices[end] = [x2, y2];\r\n const startMatchesStart = shapesStarts.has(start);\r\n const startMatchesEnd = shapesEnds.has(start);\r\n const endMatchesStart = shapesStarts.has(end);\r\n const endMatchesEnd = shapesEnds.has(end);\r\n const noMatches = !startMatchesStart &&\r\n !startMatchesEnd &&\r\n !endMatchesStart &&\r\n !endMatchesEnd;\r\n if (noMatches) {\r\n // New shape\r\n shapesStarts.set(start, nextShapeID);\r\n shapesEnds.set(end, nextShapeID);\r\n openShapes.add(nextShapeID);\r\n shapes.set(nextShapeID, [start, end]);\r\n nextShapeID++;\r\n }\r\n else if (startMatchesStart && endMatchesEnd) {\r\n // Close shape or merge 2 shapes\r\n const startIndex = shapesStarts.get(start);\r\n const endIndex = shapesEnds.get(end);\r\n const isShapeMerge = startIndex !== endIndex;\r\n if (isShapeMerge) {\r\n // merge start to end\r\n const endShape = shapes.get(endIndex);\r\n const startShape = shapes.get(startIndex);\r\n if (!endShape || !startShape) {\r\n continue;\r\n }\r\n shapes.delete(startIndex);\r\n openShapes.delete(startIndex);\r\n shapesEnds.set(startShape[startShape.length - 1], endIndex);\r\n shapesEnds.delete(endShape[endShape.length - 1]);\r\n for (const index of startShape) {\r\n endShape.push(index);\r\n }\r\n }\r\n else {\r\n openShapes.delete(endIndex);\r\n }\r\n shapesStarts.delete(start);\r\n shapesEnds.delete(end);\r\n }\r\n else if (startMatchesEnd && endMatchesStart) {\r\n // Close shape or merge 2 shapes\r\n const startIndex = shapesStarts.get(end);\r\n const endIndex = shapesEnds.get(start);\r\n const isShapeMerge = startIndex !== endIndex;\r\n if (isShapeMerge) {\r\n // merge start to end\r\n const endShape = shapes.get(endIndex);\r\n const startShape = shapes.get(startIndex);\r\n if (!endShape || !startShape) {\r\n continue;\r\n }\r\n shapes.delete(startIndex);\r\n openShapes.delete(startIndex);\r\n shapesEnds.set(startShape[startShape.length - 1], endIndex);\r\n shapesEnds.delete(endShape[endShape.length - 1]);\r\n for (const index of startShape) {\r\n endShape.push(index);\r\n }\r\n }\r\n else {\r\n openShapes.delete(endIndex);\r\n }\r\n shapesStarts.delete(end);\r\n shapesEnds.delete(start);\r\n }\r\n else if (startMatchesStart && endMatchesStart) {\r\n // Merge 2 shapes, mirroring one of them\r\n const startIndex1 = shapesStarts.get(end);\r\n const startIndex2 = shapesStarts.get(start);\r\n // merge start to end\r\n const startShape2 = shapes.get(startIndex2);\r\n const startShape1 = shapes.get(startIndex1);\r\n if (!startShape2 || !startShape1) {\r\n continue;\r\n }\r\n shapes.delete(startIndex1);\r\n openShapes.delete(startIndex1);\r\n shapesStarts.delete(startShape2[0]);\r\n shapesStarts.delete(startShape1[0]);\r\n shapesEnds.delete(startShape1[startShape1.length - 1]);\r\n shapesStarts.set(startShape1[startShape1.length - 1], startIndex2);\r\n startShape1.reverse();\r\n startShape2.splice(0, 0, ...startShape1);\r\n }\r\n else if (startMatchesEnd && endMatchesEnd) {\r\n // Merge 2 shapes, mirroring one of them\r\n const endIndex1 = shapesEnds.get(end);\r\n const endIndex2 = shapesEnds.get(start);\r\n // merge start to end\r\n const endShape2 = shapes.get(endIndex2);\r\n const endShape1 = shapes.get(endIndex1);\r\n if (!endShape2 || !endShape1) {\r\n continue;\r\n }\r\n shapes.delete(endIndex1);\r\n openShapes.delete(endIndex1);\r\n shapesEnds.delete(endShape2[endShape2.length - 1]);\r\n shapesEnds.delete(endShape1[endShape1.length - 1]);\r\n shapesStarts.delete(endShape1[0]);\r\n shapesEnds.set(endShape1[0], endIndex2);\r\n endShape1.reverse();\r\n endShape2.push(...endShape1);\r\n }\r\n else if (startMatchesStart) {\r\n // existing contour on start - start\r\n const shapeIndex = shapesStarts.get(start);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.unshift(end);\r\n shapesStarts.delete(start);\r\n shapesStarts.set(end, shapeIndex);\r\n }\r\n else if (startMatchesEnd) {\r\n // existing contour on start - end\r\n const shapeIndex = shapesEnds.get(start);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.push(end);\r\n shapesEnds.delete(start);\r\n shapesEnds.set(end, shapeIndex);\r\n }\r\n else if (endMatchesStart) {\r\n // existing contour on end - start\r\n const shapeIndex = shapesStarts.get(end);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.unshift(start);\r\n shapesStarts.delete(end);\r\n shapesStarts.set(start, shapeIndex);\r\n }\r\n else if (endMatchesEnd) {\r\n // existing contour on end - end\r\n const shapeIndex = shapesEnds.get(end);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.push(start);\r\n shapesEnds.delete(end);\r\n shapesEnds.set(start, shapeIndex);\r\n }\r\n }\r\n const trueIndices = [];\r\n for (const [id, shape] of shapes) {\r\n if (openShapes.has(id)) {\r\n continue;\r\n }\r\n const vertices = [];\r\n const indexMap = new Map();\r\n let counter = 0;\r\n for (const index of shape) {\r\n const vertex = all2DVertices[index];\r\n vertices.push(vertex[0], vertex[1]);\r\n indexMap.set(counter++, index);\r\n }\r\n const result = earcut(vertices);\r\n for (const index of result) {\r\n const trueIndex = indexMap.get(index);\r\n if (trueIndex === undefined) {\r\n throw new Error(\"Map error!\");\r\n }\r\n trueIndices.push(trueIndex);\r\n }\r\n }\r\n return trueIndices;\r\n }\r\n updatePlane2DCoordinateSystem() {\r\n // Assuming the normal of the plane is called Z\r\n this._plane2DCoordinateSystem = new THREE.Matrix4();\r\n const xAxis = new THREE.Vector3(1, 0, 0);\r\n const yAxis = new THREE.Vector3(0, 1, 0);\r\n const zAxis = this._plane.normal;\r\n const pos = new THREE.Vector3();\r\n this._plane.coplanarPoint(pos);\r\n if (this._planeAxis === \"x\") {\r\n xAxis.crossVectors(yAxis, zAxis);\r\n }\r\n else if (this._planeAxis === \"y\") {\r\n yAxis.crossVectors(zAxis, xAxis);\r\n }\r\n else if (this._planeAxis === \"z\") {\r\n // Axes XYZ stay the same\r\n }\r\n else {\r\n // Non-orthogonal to cardinal axis\r\n xAxis.crossVectors(yAxis, zAxis).normalize();\r\n yAxis.crossVectors(zAxis, xAxis);\r\n }\r\n // prettier-ignore\r\n this._plane2DCoordinateSystem.fromArray([\r\n xAxis.x, xAxis.y, xAxis.z, 0,\r\n yAxis.x, yAxis.y, yAxis.z, 0,\r\n zAxis.x, zAxis.y, zAxis.z, 0,\r\n pos.x, pos.y, pos.z, 1,\r\n ]);\r\n this._plane2DCoordinateSystem.invert();\r\n }\r\n getStyle() {\r\n const renderer = this._components.renderer;\r\n if (this.styleName && renderer instanceof PostproductionRenderer) {\r\n const effects = renderer.postproduction.customEffects;\r\n return effects.outlinedMeshes[this.styleName];\r\n }\r\n return null;\r\n }\r\n}\r\n//# sourceMappingURL=clipping-fills.js.map","import { SimplePlane } from \"../../../core\";\r\nimport { ClippingEdges } from \"./clipping-edges\";\r\n/**\r\n * A more advanced version of {@link SimpleClipper} that also includes\r\n * {@link ClippingEdges} with customizable lines.\r\n */\r\nexport class EdgesPlane extends SimplePlane {\r\n constructor(components, origin, normal, material, styles) {\r\n super(components, origin, normal, material, 5, false);\r\n /**\r\n * The max rate in milliseconds at which edges can be regenerated.\r\n * To disable this behaviour set this to 0.\r\n */\r\n this.edgesMaxUpdateRate = 50;\r\n this.lastUpdate = -1;\r\n this.updateTimeout = -1;\r\n this.updateFill = async () => {\r\n this.edges.fillNeedsUpdate = true;\r\n await this.edges.update();\r\n if (this._visible) {\r\n this.edges.fillVisible = true;\r\n }\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 // Rate limited edges update\r\n const now = Date.now();\r\n if (this.lastUpdate + this.edgesMaxUpdateRate < now) {\r\n this.lastUpdate = now;\r\n await this.edges.update();\r\n }\r\n else if (this.updateTimeout === -1) {\r\n this.updateTimeout = window.setTimeout(() => {\r\n this.update();\r\n this.updateTimeout = -1;\r\n }, this.edgesMaxUpdateRate);\r\n }\r\n };\r\n this.hideFills = () => {\r\n this.edges.fillVisible = false;\r\n };\r\n this.edges = new ClippingEdges(components, this._plane, styles);\r\n this.toggleControls(true);\r\n this.edges.setVisible(true);\r\n this.onDraggingEnded.add(this.updateFill);\r\n this.onDraggingStarted.add(this.hideFills);\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 Component.enabled} */\r\n get enabled() {\r\n return super.enabled;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n await super.dispose();\r\n await this.edges.dispose();\r\n }\r\n /** {@link Component.enabled} */\r\n async setEnabled(state) {\r\n super.enabled = state;\r\n if (state) {\r\n await this.update();\r\n }\r\n }\r\n async setVisible(state) {\r\n super.visible = state;\r\n this.toggleControls(state);\r\n await this.edges.setVisible(true);\r\n }\r\n}\r\n//# sourceMappingURL=edges-plane.js.map","import { LineBasicMaterial } from \"three\";\r\nimport { Component, Event } from \"../../../base-types\";\r\nexport class EdgesStyles extends Component {\r\n constructor(components) {\r\n super(components);\r\n this.name = \"EdgesStyles\";\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.enabled = true;\r\n this._styles = {};\r\n this._defaultLineMaterial = new LineBasicMaterial({\r\n color: 0x000000,\r\n linewidth: 0.001,\r\n });\r\n this.onAfterUpdate = new Event();\r\n this.onBeforeUpdate = new Event();\r\n }\r\n get() {\r\n return this._styles;\r\n }\r\n async update(_delta) {\r\n await this.onBeforeUpdate.trigger(this._styles);\r\n await this.onAfterUpdate.trigger(this._styles);\r\n }\r\n // Creates a new style that applies to all clipping edges for generic models\r\n create(name, meshes, lineMaterial = this._defaultLineMaterial, fillMaterial, outlineMaterial) {\r\n for (const mesh of meshes) {\r\n if (!mesh.geometry.boundsTree)\r\n mesh.geometry.computeBoundsTree();\r\n }\r\n const renderer = this.components.renderer;\r\n lineMaterial.clippingPlanes = renderer.clippingPlanes;\r\n const newStyle = {\r\n name,\r\n lineMaterial,\r\n meshes,\r\n fillMaterial,\r\n outlineMaterial,\r\n fragments: {},\r\n };\r\n this._styles[name] = newStyle;\r\n return newStyle;\r\n }\r\n async dispose() {\r\n const styles = Object.keys(this._styles);\r\n for (const style of styles) {\r\n this.deleteStyle(style);\r\n }\r\n this._styles = {};\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n deleteStyle(id, disposeMaterials = true) {\r\n var _a, _b;\r\n const style = this._styles[id];\r\n if (style) {\r\n style.meshes.clear();\r\n if (disposeMaterials) {\r\n style.lineMaterial.dispose();\r\n (_a = style.fillMaterial) === null || _a === void 0 ? void 0 : _a.dispose();\r\n (_b = style.outlineMaterial) === null || _b === void 0 ? void 0 : _b.dispose();\r\n }\r\n }\r\n delete this._styles[id];\r\n }\r\n}\r\n//# sourceMappingURL=edges-styles.js.map"],"names":["ClippingFills","visible","this","mesh","parent","value","style","getStyle","_components","scene","get","add","meshes","removeFromParent","delete","geometry","_geometry","attributes","position","constructor","components","plane","material","_precission","_tempVector","_plane2DCoordinateSystem","frustumCulled","_plane","x","y","z","normal","Math","abs","_planeAxis","offset","clone","multiplyScalar","copy","dispose","update","elements","blockByIndex","buffer","array","updatePlane2DCoordinateSystem","allIndices","start","i","length","end","verticesByBlock","j","block","undefined","push","vertices","indices","computeFill","index","setIndex","Map","all2DVertices","shapes","nextShapeID","shapesEnds","shapesStarts","openShapes","Set","p","startVertexIndex","x1","y1","x2","y2","globalX1","globalY1","globalZ1","globalX2","globalY2","globalZ2","set","applyMatrix4","trunc","startCode","endCode","has","startMatchesStart","startMatchesEnd","endMatchesStart","endMatchesEnd","startIndex","endIndex","endShape","startShape","startIndex1","startIndex2","startShape2","startShape1","reverse","splice","endIndex1","endIndex2","endShape2","endShape1","shapeIndex","shape","unshift","trueIndices","id","indexMap","counter","vertex","result","trueIndex","Error","xAxis","yAxis","zAxis","pos","coplanarPoint","crossVectors","normalize","fromArray","invert","renderer","styleName","postproduction","customEffects","outlinedMeshes","EdgesPlane","origin","styles","super","edgesMaxUpdateRate","lastUpdate","updateTimeout","updateFill","async","edges","fillNeedsUpdate","_visible","fillVisible","enabled","setFromNormalAndCoplanarPoint","_helper","now","Date","window","setTimeout","hideFills","toggleControls","setVisible","onDraggingEnded","onDraggingStarted","state","_enabled","togglePlane","EdgesStyles","name","onDisposed","_styles","_defaultLineMaterial","LineBasicMaterial","color","linewidth","onAfterUpdate","onBeforeUpdate","_delta","trigger","create","lineMaterial","fillMaterial","outlineMaterial","boundsTree","computeBoundsTree","clippingPlanes","newStyle","fragments","Object","keys","deleteStyle","reset","disposeMaterials","_a","_b","clear"],"sourceRoot":""}