{"version":3,"file":"vendor.openbim-components-cadafedb.8dfb69e740e0af1c.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/utils/Misc/index.js","webpack://client-app/./node_modules/openbim-components/src/utils/LineIntersectionPicker/index.js","webpack://client-app/./node_modules/openbim-components/src/utils/VertexPicker/index.js","webpack://client-app/./node_modules/openbim-components/src/utils/GeometryVerticesMarker/index.js","webpack://client-app/./node_modules/openbim-components/src/utils/GeometryUtils/bbox.js"],"sourcesContent":["import * as THREE from \"three\";\r\nexport function generateExpressIDFragmentIDMap(fragmentsList) {\r\n const map = {};\r\n fragmentsList.forEach((fragment) => {\r\n map[fragment.id] = new Set(fragment.ids);\r\n });\r\n return map;\r\n}\r\n// Would need to review this!\r\nexport function generateIfcGUID() {\r\n // prettier-ignore\r\n const base64Chars = [\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\",\r\n \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\r\n \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"_\", \"$\",\r\n ];\r\n const guid = THREE.MathUtils.generateUUID();\r\n const tailBytes = ((guid) => {\r\n const bytes = [];\r\n guid.split(\"-\").map((number) => {\r\n const bytesInChar = number.match(/.{1,2}/g);\r\n if (bytesInChar) {\r\n return bytesInChar.map((byte) => bytes.push(parseInt(byte, 16)));\r\n }\r\n return null;\r\n });\r\n return bytes;\r\n })(guid);\r\n const headBytes = ((guid) => {\r\n const bytes = [];\r\n guid.split(\"-\").map((number) => {\r\n const bytesInChar = number.match(/.{1,2}/g);\r\n if (bytesInChar) {\r\n return bytesInChar.map((byte) => bytes.push(byte));\r\n }\r\n return null;\r\n });\r\n return bytes;\r\n })(guid);\r\n const cvTo64 = (number, result, start, len) => {\r\n let num = number;\r\n const n = len;\r\n let i;\r\n for (i = 0; i < n; i += 1) {\r\n result[start + len - i - 1] =\r\n base64Chars[parseInt((num % 64).toString(), 10)];\r\n num /= 64;\r\n }\r\n return result;\r\n };\r\n const toUInt16 = (bytes, index) => \r\n // eslint-disable-next-line no-bitwise\r\n parseInt(bytes.slice(index, index + 2).reduce((str, v) => str + v, \"\"), 16) >>> 0;\r\n const toUInt32 = (bytes, index) => \r\n // eslint-disable-next-line no-bitwise\r\n parseInt(bytes.slice(index, index + 4).reduce((str, v) => str + v, \"\"), 16) >>> 0;\r\n const num = [];\r\n let str = [];\r\n let i;\r\n let n = 2;\r\n let pos = 0;\r\n num[0] = toUInt32(headBytes, 0) / 16777216;\r\n num[1] = toUInt32(headBytes, 0) % 16777216;\r\n // eslint-disable-next-line no-bitwise\r\n num[2] = (toUInt16(headBytes, 4) * 256 + toUInt16(headBytes, 6) / 256) >>> 0;\r\n num[3] =\r\n // eslint-disable-next-line no-bitwise\r\n ((toUInt16(headBytes, 6) % 256) * 65536 +\r\n tailBytes[8] * 256 +\r\n tailBytes[9]) >>>\r\n 0;\r\n // eslint-disable-next-line no-bitwise\r\n num[4] = (tailBytes[10] * 65536 + tailBytes[11] * 256 + tailBytes[12]) >>> 0;\r\n // eslint-disable-next-line no-bitwise\r\n num[5] = (tailBytes[13] * 65536 + tailBytes[14] * 256 + tailBytes[15]) >>> 0;\r\n for (i = 0; i < 6; i++) {\r\n str = cvTo64(num[i], str, pos, n);\r\n pos += n;\r\n n = 4;\r\n }\r\n return str.join(\"\");\r\n}\r\nexport function bufferGeometryToIndexed(geometry) {\r\n const bufferAttribute = geometry.getAttribute(\"position\");\r\n const size = bufferAttribute.itemSize;\r\n const positions = bufferAttribute.array;\r\n const indices = [];\r\n const vertices = [];\r\n const outVertices = [];\r\n for (let i = 0; i < positions.length; i += size) {\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n let vertex = `${x},${y}`;\r\n const z = positions[i + 2];\r\n if (size >= 3) {\r\n vertex += `,${z}`;\r\n }\r\n else {\r\n vertex += `,0`;\r\n }\r\n const w = positions[i + 3];\r\n if (size === 4) {\r\n vertex += `,${w}`;\r\n }\r\n if (vertices.indexOf(vertex) === -1) {\r\n vertices.push(vertex);\r\n indices.push(vertices.length - 1);\r\n const split = vertex.split(\",\");\r\n split.forEach((component) => outVertices.push(Number(component)));\r\n }\r\n else {\r\n const index = vertices.indexOf(vertex);\r\n indices.push(index);\r\n }\r\n }\r\n const outIndices = new Uint16Array(indices);\r\n const realVertices = new Float32Array(outVertices);\r\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(realVertices, size === 2 ? 3 : size));\r\n geometry.setIndex(new THREE.BufferAttribute(outIndices, 1));\r\n geometry.getAttribute(\"position\").needsUpdate = true;\r\n}\r\nexport function isPointInFrontOfPlane(point, planePoint, planeNormal) {\r\n // Calculate the vector from the plane to the point\r\n const vectorToPlane = [\r\n point[0] - planePoint[0],\r\n point[1] - planePoint[1],\r\n point[2] - planePoint[2],\r\n ];\r\n // Calculate the dot product between the normal vector and the vector to the point\r\n const dotProduct = planeNormal[0] * vectorToPlane[0] +\r\n planeNormal[1] * vectorToPlane[1] +\r\n planeNormal[2] * vectorToPlane[2];\r\n return dotProduct > 0;\r\n}\r\nexport function isTransparent(material) {\r\n return material.transparent && material.opacity < 1;\r\n}\r\n//# sourceMappingURL=index.js.map","import { Raycaster, Vector3 } from \"three\";\r\nimport { CSS2DObject } from \"three/examples/jsm/renderers/CSS2DRenderer\";\r\nimport { Component, Event, Mouse, } from \"../../base-types\";\r\nexport class LineIntersectionPicker extends Component {\r\n set enabled(value) {\r\n this._enabled = value;\r\n if (!value) {\r\n this._pickedPoint = null;\r\n }\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n get config() {\r\n return this._config;\r\n }\r\n set config(value) {\r\n this._config = { ...this._config, ...value };\r\n }\r\n constructor(components, config) {\r\n super(components);\r\n this.name = \"LineIntersectionPicker\";\r\n this.onAfterUpdate = new Event();\r\n this.onBeforeUpdate = new Event();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._pickedPoint = null;\r\n this._raycaster = new Raycaster();\r\n this._originVector = new Vector3();\r\n this.config = {\r\n snapDistance: 0.25,\r\n ...config,\r\n };\r\n if (this._raycaster.params.Line) {\r\n this._raycaster.params.Line.threshold = 0.2;\r\n }\r\n this._mouse = new Mouse(components.renderer.get().domElement);\r\n const marker = document.createElement(\"div\");\r\n marker.className = \"w-[15px] h-[15px] border-3 border-solid border-red-500\";\r\n this._marker = new CSS2DObject(marker);\r\n this._marker.visible = false;\r\n this.components.scene.get().add(this._marker);\r\n this.enabled = false;\r\n }\r\n async dispose() {\r\n this.onAfterUpdate.reset();\r\n this.onBeforeUpdate.reset();\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 /** {@link Updateable.update} */\r\n update() {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n this.onBeforeUpdate.trigger(this);\r\n this._raycaster.setFromCamera(this._mouse.position, this.components.camera.get());\r\n // @ts-ignore\r\n const lines = this.components.meshes.filter((mesh) => mesh.isLine);\r\n const intersects = this._raycaster.intersectObjects(lines);\r\n // console.log(intersects)\r\n if (intersects.length !== 2) {\r\n this._pickedPoint = null;\r\n this.updateMarker();\r\n return;\r\n }\r\n // if (!intersects[0].index || !intersects[1].index) {return}\r\n const lineA = intersects[0].object;\r\n const lineB = intersects[1].object;\r\n const indices = [intersects[0].index, intersects[1].index];\r\n const hitPoint = new Vector3()\r\n .copy(intersects[0].point)\r\n .add(intersects[1].point)\r\n .multiplyScalar(0.5);\r\n const isSameElement = lineA.uuid === lineB.uuid;\r\n if (isSameElement) {\r\n const line = lineA;\r\n const pos = line.geometry.getAttribute(\"position\");\r\n const vectorA = new Vector3().fromBufferAttribute(pos, indices[0]);\r\n const vectorB = new Vector3().fromBufferAttribute(pos, indices[0] + 1);\r\n const vectorC = new Vector3().fromBufferAttribute(pos, indices[1]);\r\n const vectorD = new Vector3().fromBufferAttribute(pos, indices[1] + 1);\r\n const point = this.findIntersection(vectorA, vectorB, vectorC, vectorD);\r\n if (!point) {\r\n return;\r\n }\r\n this._pickedPoint = point;\r\n if (this._pickedPoint.distanceTo(hitPoint) > 0.25) {\r\n return;\r\n }\r\n this.updateMarker();\r\n }\r\n else {\r\n const pos1 = lineA.geometry.getAttribute(\"position\");\r\n const pos2 = lineB.geometry.getAttribute(\"position\");\r\n const vectorA = new Vector3().fromBufferAttribute(pos1, indices[0]);\r\n const vectorB = new Vector3().fromBufferAttribute(pos1, indices[0] + 1);\r\n const vectorC = new Vector3().fromBufferAttribute(pos2, indices[1]);\r\n const vectorD = new Vector3().fromBufferAttribute(pos2, indices[1] + 1);\r\n const point = this.findIntersection(vectorA, vectorB, vectorC, vectorD);\r\n if (!point) {\r\n return;\r\n }\r\n this._pickedPoint = point;\r\n if (this._pickedPoint.distanceTo(hitPoint) > 0.25) {\r\n return;\r\n }\r\n this.updateMarker();\r\n }\r\n this.onAfterUpdate.trigger(this);\r\n }\r\n findIntersection(p1, p2, p3, p4) {\r\n const line1Dir = p2.sub(p1);\r\n const line2Dir = p4.sub(p3);\r\n const lineDirCross = new Vector3().crossVectors(line1Dir, line2Dir);\r\n const denominator = lineDirCross.lengthSq();\r\n if (denominator === 0) {\r\n return null;\r\n }\r\n const lineToPoint = p3.sub(p1);\r\n const lineToPointCross = new Vector3().crossVectors(lineDirCross, lineToPoint);\r\n const t1 = lineToPointCross.dot(line2Dir) / denominator;\r\n return new Vector3().addVectors(p1, line1Dir.multiplyScalar(t1));\r\n }\r\n updateMarker() {\r\n this._marker.visible = !!this._pickedPoint;\r\n this._marker.position.copy(this._pickedPoint ?? this._originVector);\r\n }\r\n get() {\r\n return this._pickedPoint;\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { Event } from \"../../base-types/base-types\";\r\nimport { Component } from \"../../base-types/component\";\r\nimport { Simple2DMarker } from \"../../core/Simple2DMarker\";\r\nexport class VertexPicker extends Component {\r\n set enabled(value) {\r\n this._enabled = value;\r\n if (!value) {\r\n this._marker.visible = false;\r\n this._pickedPoint = null;\r\n }\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n get _raycaster() {\r\n return this._components.raycaster;\r\n }\r\n constructor(components, config) {\r\n super(components);\r\n this.name = \"VertexPicker\";\r\n this.afterUpdate = new Event();\r\n this.beforeUpdate = new Event();\r\n this._pickedPoint = null;\r\n this._enabled = false;\r\n this._workingPlane = null;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.update = () => {\r\n if (!this.enabled)\r\n return;\r\n this.beforeUpdate.trigger(this);\r\n const intersects = this._raycaster.castRay();\r\n if (!intersects) {\r\n this._marker.visible = false;\r\n this._pickedPoint = null;\r\n return;\r\n }\r\n const point = this.getClosestVertex(intersects);\r\n if (!point) {\r\n this._marker.visible = false;\r\n this._pickedPoint = null;\r\n return;\r\n }\r\n const isOnPlane = !this.workingPlane\r\n ? true\r\n : Math.abs(this.workingPlane.distanceToPoint(point)) < 0.001;\r\n if (!isOnPlane) {\r\n this._marker.visible = false;\r\n this._pickedPoint = null;\r\n return;\r\n }\r\n this._pickedPoint = point;\r\n this._marker.visible = true;\r\n this._marker\r\n .get()\r\n .position.set(this._pickedPoint.x, this._pickedPoint.y, this._pickedPoint.z);\r\n this.afterUpdate.trigger(this);\r\n };\r\n this._components = components;\r\n this.config = {\r\n snapDistance: 0.25,\r\n showOnlyVertex: false,\r\n ...config,\r\n };\r\n this._marker = new Simple2DMarker(components, this.config.previewElement);\r\n this._marker.visible = false;\r\n this.setupEvents(true);\r\n this.enabled = false;\r\n }\r\n set workingPlane(plane) {\r\n this._workingPlane = plane;\r\n }\r\n get workingPlane() {\r\n return this._workingPlane;\r\n }\r\n set config(value) {\r\n this._config = { ...this._config, ...value };\r\n }\r\n get config() {\r\n return this._config;\r\n }\r\n async dispose() {\r\n this.setupEvents(false);\r\n await this._marker.dispose();\r\n this.afterUpdate.reset();\r\n this.beforeUpdate.reset();\r\n this._components = null;\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n get() {\r\n return this._pickedPoint;\r\n }\r\n getClosestVertex(intersects) {\r\n let closestVertex = new THREE.Vector3();\r\n let vertexFound = false;\r\n let closestDistance = Number.MAX_SAFE_INTEGER;\r\n const vertices = this.getVertices(intersects);\r\n vertices?.forEach((vertex) => {\r\n if (!vertex)\r\n return;\r\n const distance = intersects.point.distanceTo(vertex);\r\n if (distance > closestDistance || distance > this._config.snapDistance)\r\n return;\r\n vertexFound = true;\r\n closestVertex = vertex;\r\n closestDistance = intersects.point.distanceTo(vertex);\r\n });\r\n if (vertexFound)\r\n return closestVertex;\r\n return this.config.showOnlyVertex ? null : intersects.point;\r\n }\r\n getVertices(intersects) {\r\n const mesh = intersects.object;\r\n if (!intersects.face || !mesh)\r\n return null;\r\n const geom = mesh.geometry;\r\n return [\r\n this.getVertex(intersects.face.a, geom),\r\n this.getVertex(intersects.face.b, geom),\r\n this.getVertex(intersects.face.c, geom),\r\n ].map((vertex) => vertex?.applyMatrix4(mesh.matrixWorld));\r\n }\r\n getVertex(index, geom) {\r\n if (index === undefined)\r\n return null;\r\n const vertices = geom.attributes.position;\r\n return new THREE.Vector3(vertices.getX(index), vertices.getY(index), vertices.getZ(index));\r\n }\r\n setupEvents(active) {\r\n const container = this.components.renderer.get().domElement.parentElement;\r\n if (!container)\r\n return;\r\n if (active) {\r\n container.addEventListener(\"mousemove\", this.update);\r\n }\r\n else {\r\n container.removeEventListener(\"mousemove\", this.update);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import { Component } from \"../../base-types/component\";\r\nimport { Simple2DMarker } from \"../../core/Simple2DMarker\";\r\nimport { Event } from \"../../base-types/base-types\";\r\nexport class GeometryVerticesMarker extends Component {\r\n set visible(value) {\r\n this._visible = value;\r\n for (const marker of this._markers)\r\n marker.visible = value;\r\n }\r\n get visible() {\r\n return this._visible;\r\n }\r\n constructor(components, geometry) {\r\n super(components);\r\n this.name = \"GeometryVerticesMarker\";\r\n this.enabled = true;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._markers = [];\r\n this._visible = true;\r\n const position = geometry.getAttribute(\"position\");\r\n for (let index = 0; index < position.count; index++) {\r\n const marker = new Simple2DMarker(components);\r\n marker\r\n .get()\r\n .position.set(position.getX(index), position.getY(index), position.getZ(index));\r\n this._markers.push(marker);\r\n }\r\n }\r\n async dispose() {\r\n for (const marker of this._markers) {\r\n await marker.dispose();\r\n }\r\n this._markers = [];\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n get() {\r\n return this._markers;\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { ConvexHull } from \"three/examples/jsm/math/ConvexHull\";\r\nconst colVal = [2, 2, 1];\r\nconst rowVal = [1, 0, 0];\r\nfunction getElementIndex(column, row) {\r\n return column * 3 + row;\r\n}\r\nfunction frobeniusNorm(matrix) {\r\n const e = matrix.elements;\r\n let norm = 0;\r\n for (let i = 0; i < 9; i++) {\r\n norm += e[i] * e[i];\r\n }\r\n return Math.sqrt(norm);\r\n}\r\nfunction offDiagonalFrobeniusNorm(source) {\r\n const e = source.elements;\r\n let norm = 0;\r\n for (let i = 0; i < 3; i++) {\r\n const t = e[getElementIndex(colVal[i], rowVal[i])];\r\n norm += 2 * t * t; // multiply the result by two since the matrix is symetric\r\n }\r\n return Math.sqrt(norm);\r\n}\r\nfunction shurDecomposition(source, result) {\r\n let maxDiagonal = 0;\r\n let rotAxis = 1;\r\n // find pivot (rotAxis) based on largest off-diagonal term\r\n const e = source.elements;\r\n for (let i = 0; i < 3; i++) {\r\n const t = Math.abs(e[getElementIndex(colVal[i], rowVal[i])]);\r\n if (t > maxDiagonal) {\r\n maxDiagonal = t;\r\n rotAxis = i;\r\n }\r\n }\r\n let c = 1;\r\n let s = 0;\r\n const p = rowVal[rotAxis];\r\n const q = colVal[rotAxis];\r\n if (Math.abs(e[getElementIndex(q, p)]) > Number.EPSILON) {\r\n const qq = e[getElementIndex(q, q)];\r\n const pp = e[getElementIndex(p, p)];\r\n const qp = e[getElementIndex(q, p)];\r\n const tau = (qq - pp) / 2 / qp;\r\n let t;\r\n if (tau < 0) {\r\n t = -1 / (-tau + Math.sqrt(1 + tau * tau));\r\n }\r\n else {\r\n t = 1 / (tau + Math.sqrt(1.0 + tau * tau));\r\n }\r\n c = 1.0 / Math.sqrt(1.0 + t * t);\r\n s = t * c;\r\n }\r\n result.identity();\r\n result.elements[getElementIndex(p, p)] = c;\r\n result.elements[getElementIndex(q, q)] = c;\r\n result.elements[getElementIndex(q, p)] = s;\r\n result.elements[getElementIndex(p, q)] = -s;\r\n return result;\r\n}\r\nfunction eigenDecomposition(source, result) {\r\n let count = 0;\r\n let sweep = 0;\r\n const maxSweeps = 10;\r\n result.unitary.identity();\r\n result.diagonal.copy(source);\r\n const unitaryMatrix = result.unitary;\r\n const diagonalMatrix = result.diagonal;\r\n const m1 = new THREE.Matrix3();\r\n const m2 = new THREE.Matrix3();\r\n const epsilon = Number.EPSILON * frobeniusNorm(diagonalMatrix);\r\n while (sweep < maxSweeps &&\r\n offDiagonalFrobeniusNorm(diagonalMatrix) > epsilon) {\r\n shurDecomposition(diagonalMatrix, m1);\r\n m2.copy(m1).transpose();\r\n diagonalMatrix.multiply(m1);\r\n diagonalMatrix.premultiply(m2);\r\n unitaryMatrix.multiply(m1);\r\n if (++count > 2) {\r\n sweep++;\r\n count = 0;\r\n }\r\n }\r\n return result;\r\n}\r\nexport function obbFromPoints(vertices) {\r\n const points = [];\r\n for (let i = 0; i < vertices.length - 2; i += 3) {\r\n const x = vertices[i];\r\n const y = vertices[i + 1];\r\n const z = vertices[i + 2];\r\n points.push(new THREE.Vector3(x, y, z));\r\n }\r\n const convexHull = new ConvexHull();\r\n convexHull.setFromPoints(points);\r\n const eigenDecomposed = {\r\n unitary: new THREE.Matrix3(),\r\n diagonal: new THREE.Matrix3(),\r\n };\r\n // 1. iterate over all faces of the convex hull and triangulate\r\n const faces = convexHull.faces;\r\n const edges = [];\r\n const triangles = [];\r\n for (let i = 0, il = faces.length; i < il; i++) {\r\n const face = faces[i];\r\n let edge = face.edge;\r\n edges.length = 0;\r\n // gather edges\r\n do {\r\n edges.push(edge);\r\n edge = edge.next;\r\n } while (edge !== face.edge);\r\n // triangulate\r\n const triangleCount = edges.length - 2;\r\n for (let j = 1, jl = triangleCount; j <= jl; j++) {\r\n const v1 = edges[0].vertex;\r\n const v2 = edges[j + 0].vertex;\r\n const v3 = edges[j + 1].vertex;\r\n triangles.push(v1.point.x, v1.point.y, v1.point.z);\r\n triangles.push(v2.point.x, v2.point.y, v2.point.z);\r\n triangles.push(v3.point.x, v3.point.y, v3.point.z);\r\n }\r\n }\r\n // 2. build covariance matrix\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Vector3();\r\n const r = new THREE.Vector3();\r\n const qp = new THREE.Vector3();\r\n const rp = new THREE.Vector3();\r\n const v = new THREE.Vector3();\r\n const mean = new THREE.Vector3();\r\n const weightedMean = new THREE.Vector3();\r\n let areaSum = 0;\r\n let cxx = 0;\r\n let cxy = 0;\r\n let cxz = 0;\r\n let cyy = 0;\r\n let cyz = 0;\r\n let czz = 0;\r\n for (let i = 0, l = triangles.length; i < l; i += 9) {\r\n p.fromArray(triangles, i);\r\n q.fromArray(triangles, i + 3);\r\n r.fromArray(triangles, i + 6);\r\n mean.set(0, 0, 0);\r\n mean.add(p).add(q).add(r).divideScalar(3);\r\n qp.subVectors(q, p);\r\n rp.subVectors(r, p);\r\n const area = v.crossVectors(qp, rp).length() / 2; // .length() represents the frobenius norm here\r\n weightedMean.add(v.copy(mean).multiplyScalar(area));\r\n areaSum += area;\r\n cxx +=\r\n (9.0 * mean.x * mean.x + p.x * p.x + q.x * q.x + r.x * r.x) * (area / 12);\r\n cxy +=\r\n (9.0 * mean.x * mean.y + p.x * p.y + q.x * q.y + r.x * r.y) * (area / 12);\r\n cxz +=\r\n (9.0 * mean.x * mean.z + p.x * p.z + q.x * q.z + r.x * r.z) * (area / 12);\r\n cyy +=\r\n (9.0 * mean.y * mean.y + p.y * p.y + q.y * q.y + r.y * r.y) * (area / 12);\r\n cyz +=\r\n (9.0 * mean.y * mean.z + p.y * p.z + q.y * q.z + r.y * r.z) * (area / 12);\r\n czz +=\r\n (9.0 * mean.z * mean.z + p.z * p.z + q.z * q.z + r.z * r.z) * (area / 12);\r\n }\r\n weightedMean.divideScalar(areaSum);\r\n cxx /= areaSum;\r\n cxy /= areaSum;\r\n cxz /= areaSum;\r\n cyy /= areaSum;\r\n cyz /= areaSum;\r\n czz /= areaSum;\r\n cxx -= weightedMean.x * weightedMean.x;\r\n cxy -= weightedMean.x * weightedMean.y;\r\n cxz -= weightedMean.x * weightedMean.z;\r\n cyy -= weightedMean.y * weightedMean.y;\r\n cyz -= weightedMean.y * weightedMean.z;\r\n czz -= weightedMean.z * weightedMean.z;\r\n const covarianceMatrix = new THREE.Matrix3();\r\n covarianceMatrix.elements[0] = cxx;\r\n covarianceMatrix.elements[1] = cxy;\r\n covarianceMatrix.elements[2] = cxz;\r\n covarianceMatrix.elements[3] = cxy;\r\n covarianceMatrix.elements[4] = cyy;\r\n covarianceMatrix.elements[5] = cyz;\r\n covarianceMatrix.elements[6] = cxz;\r\n covarianceMatrix.elements[7] = cyz;\r\n covarianceMatrix.elements[8] = czz;\r\n // 3. compute rotation, center and half sizes\r\n eigenDecomposition(covarianceMatrix, eigenDecomposed);\r\n const unitary = eigenDecomposed.unitary;\r\n const v1 = new THREE.Vector3();\r\n const v2 = new THREE.Vector3();\r\n const v3 = new THREE.Vector3();\r\n unitary.extractBasis(v1, v2, v3);\r\n let u1 = -Infinity;\r\n let u2 = -Infinity;\r\n let u3 = -Infinity;\r\n let l1 = Infinity;\r\n let l2 = Infinity;\r\n let l3 = Infinity;\r\n for (let i = 0, l = points.length; i < l; i++) {\r\n const p = points[i];\r\n u1 = Math.max(v1.dot(p), u1);\r\n u2 = Math.max(v2.dot(p), u2);\r\n u3 = Math.max(v3.dot(p), u3);\r\n l1 = Math.min(v1.dot(p), l1);\r\n l2 = Math.min(v2.dot(p), l2);\r\n l3 = Math.min(v3.dot(p), l3);\r\n }\r\n v1.multiplyScalar(0.5 * (l1 + u1));\r\n v2.multiplyScalar(0.5 * (l2 + u2));\r\n v3.multiplyScalar(0.5 * (l3 + u3));\r\n // center\r\n const center = new THREE.Vector3();\r\n const halfSizes = new THREE.Vector3();\r\n const rotation = new THREE.Matrix3();\r\n center.add(v1).add(v2).add(v3);\r\n halfSizes.x = u1 - l1;\r\n halfSizes.y = u2 - l2;\r\n halfSizes.z = u3 - l3;\r\n // halfSizes\r\n halfSizes.multiplyScalar(0.5);\r\n // rotation\r\n rotation.copy(unitary);\r\n // Whole matrix to be multiplied by a 1x1x1 box with one of\r\n // its lower conrners at the origin\r\n const { x, y, z } = halfSizes;\r\n const scale = new THREE.Matrix4();\r\n scale.makeScale(x * 2, y * 2, z * 2);\r\n const offset = new THREE.Matrix4();\r\n offset.makeTranslation(-x, -y, -z);\r\n const translation = new THREE.Matrix4();\r\n translation.makeTranslation(center.x, center.y, center.z);\r\n const rot = new THREE.Matrix4();\r\n rot.setFromMatrix3(rotation);\r\n const transformation = new THREE.Matrix4();\r\n transformation.multiply(translation);\r\n transformation.multiply(rot);\r\n transformation.multiply(offset);\r\n transformation.multiply(scale);\r\n return { center, halfSizes, rotation, transformation };\r\n}\r\n//# sourceMappingURL=bbox.js.map"],"names":["generateIfcGUID","base64Chars","guid","generateUUID","tailBytes","bytes","split","map","number","bytesInChar","match","byte","push","parseInt","headBytes","cvTo64","result","start","len","num","n","i","toString","toUInt16","index","slice","reduce","str","v","toUInt32","pos","join","isPointInFrontOfPlane","point","planePoint","planeNormal","vectorToPlane","isTransparent","material","transparent","opacity","VertexPicker","enabled","value","this","_enabled","_marker","visible","_pickedPoint","_raycaster","_components","raycaster","constructor","components","config","super","name","afterUpdate","beforeUpdate","_workingPlane","onDisposed","update","trigger","intersects","castRay","getClosestVertex","workingPlane","Math","abs","distanceToPoint","get","position","set","x","y","z","snapDistance","showOnlyVertex","Simple2DMarker","previewElement","setupEvents","plane","_config","dispose","reset","closestVertex","vertexFound","closestDistance","Number","MAX_SAFE_INTEGER","vertices","getVertices","forEach","vertex","distance","distanceTo","mesh","object","face","geom","geometry","getVertex","a","b","c","applyMatrix4","matrixWorld","undefined","attributes","getX","getY","getZ","active","container","renderer","domElement","parentElement","addEventListener","removeEventListener","colVal","rowVal","getElementIndex","column","row","offDiagonalFrobeniusNorm","source","e","elements","norm","t","sqrt","shurDecomposition","maxDiagonal","rotAxis","s","p","q","EPSILON","tau","identity","obbFromPoints","points","length","convexHull","ConvexHull","setFromPoints","eigenDecomposed","unitary","diagonal","faces","edges","triangles","il","edge","next","j","jl","v1","v2","v3","r","qp","rp","mean","weightedMean","areaSum","cxx","cxy","cxz","cyy","cyz","czz","l","fromArray","add","divideScalar","subVectors","area","crossVectors","copy","multiplyScalar","covarianceMatrix","count","sweep","unitaryMatrix","diagonalMatrix","m1","m2","epsilon","matrix","frobeniusNorm","transpose","multiply","premultiply","eigenDecomposition","extractBasis","u1","u2","u3","l1","Infinity","l2","l3","max","dot","min","center","halfSizes","rotation","scale","makeScale","offset","makeTranslation","translation","rot","setFromMatrix3","transformation"],"sourceRoot":""}