{"version":3,"file":"vendor.bim-fragment-8e1ba2f1.cc3082b21d42561e.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/bim-fragment/src/bvh.js","webpack://client-app/./node_modules/bim-fragment/src/civil/alignment.js","webpack://client-app/./node_modules/bim-fragment/src/civil/civil-curve.js","webpack://client-app/./node_modules/bim-fragment/src/civil/curve-mesh.js","webpack://client-app/./node_modules/bim-fragment/src/flatbuffers/fragments/index/alignment.js","webpack://client-app/./node_modules/bim-fragment/src/flatbuffers/fragments/index/civil-curve.js","webpack://client-app/./node_modules/bim-fragment/src/flatbuffers/fragments/index/civil-data.js"],"sourcesContent":["import { BufferGeometry, Mesh } from \"three\";\nimport { computeBoundsTree, disposeBoundsTree, acceleratedRaycast, } from \"three-mesh-bvh\";\n// Source: https://github.com/gkjohnson/three-mesh-bvh\nexport class BVH {\n static apply(geometry) {\n if (!BVH.initialized) {\n BufferGeometry.prototype.computeBoundsTree = computeBoundsTree;\n BufferGeometry.prototype.disposeBoundsTree = disposeBoundsTree;\n Mesh.prototype.raycast = acceleratedRaycast;\n BVH.initialized = true;\n }\n if (!geometry.boundsTree) {\n geometry.computeBoundsTree();\n }\n }\n static dispose(geometry) {\n geometry.disposeBoundsTree();\n }\n}\nBVH.initialized = false;\n//# sourceMappingURL=bvh.js.map","export class Alignment {\n constructor() {\n this.vertical = [];\n this.horizontal = [];\n this.absolute = [];\n this.initialKP = 0;\n }\n getLength(type) {\n let length = 0;\n for (const curve of this[type]) {\n length += curve.getLength();\n }\n return length;\n }\n getPointAt(percentage, type) {\n const found = this.getCurveAt(percentage, type);\n return found.curve.getPointAt(found.percentage);\n }\n // Returns the percentage or null if the point is not contained in this alignment\n getPercentageAt(point, type, tolerance = 0.01) {\n const alignment = this[type];\n let currentLength = 0;\n for (const curve of alignment) {\n const factor = curve.getPercentageAt(point, tolerance);\n const curveLength = curve.getLength();\n if (factor !== null) {\n // This segment has the point\n const foundLength = currentLength + factor * curveLength;\n const totalLength = this.getLength(type);\n return foundLength / totalLength;\n }\n currentLength += curveLength;\n }\n return null;\n }\n getCurveAt(percentage, type) {\n if (percentage < 0) {\n percentage = 0;\n }\n else if (percentage > 1) {\n percentage = 1;\n }\n const alignment = this[type];\n const alignmentLength = this.getLength(type);\n const targetLength = alignmentLength * percentage;\n let accumulatedLength = 0;\n for (const curve of alignment) {\n const curveLength = curve.getLength();\n if (accumulatedLength + curveLength >= targetLength) {\n const targetCurveLength = targetLength - accumulatedLength;\n const percentage = targetCurveLength / curveLength;\n return { curve, percentage };\n }\n accumulatedLength += curveLength;\n }\n throw new Error(\"Could not compute point!\");\n }\n}\n//# sourceMappingURL=alignment.js.map","import * as THREE from \"three\";\nexport class CivilCurve {\n get _index() {\n return this.mesh.geometry.index;\n }\n get _pos() {\n return this.mesh.geometry.attributes.position.array;\n }\n constructor(index, mesh, data, alignment) {\n this.index = index;\n this.mesh = mesh;\n this.data = data;\n this.alignment = alignment;\n }\n getLength() {\n let length = 0;\n for (let i = 0; i < this._index.array.length - 1; i += 2) {\n const { startPoint, endPoint } = this.getSegment(i);\n length += startPoint.distanceTo(endPoint);\n }\n return length;\n }\n getPointAt(percentage) {\n // Strategy: get start-end segment, normalize it,\n // multiply by target length and add it to start point\n const { startPoint, endPoint, distanceToStart } = this.getSegmentAt(percentage);\n const targetPoint = endPoint.clone();\n targetPoint.sub(startPoint);\n targetPoint.normalize();\n targetPoint.multiplyScalar(distanceToStart);\n targetPoint.add(startPoint);\n return targetPoint;\n }\n getSegmentAt(percentage) {\n if (percentage < 0) {\n percentage = 0;\n }\n else if (percentage > 1) {\n percentage = 1;\n }\n const totalLength = this.getLength();\n const targetLength = totalLength * percentage;\n let accumulatedLength = 0;\n for (let index = 0; index < this._index.array.length - 1; index += 2) {\n const { startPoint, endPoint } = this.getSegment(index);\n const segmentLength = startPoint.distanceTo(endPoint);\n if (accumulatedLength + segmentLength >= targetLength) {\n // Position is the distance from the startPoint to the target point\n const distanceToStart = targetLength - accumulatedLength;\n return { distanceToStart, index, startPoint, endPoint };\n }\n accumulatedLength += segmentLength;\n }\n throw new Error(\"Could not compute point\");\n }\n // Returns the percentage or null if the point is not contained in this curve\n getPercentageAt(point, tolerance = 0.01) {\n let currentLength = 0;\n for (let i = 0; i < this._index.array.length - 1; i += 2) {\n const { startPoint, endPoint } = this.getSegment(i);\n // Strategy: all points contained in a segment fulfill that\n // distanceToStart + distanceToEnd = segmentLength\n const segmentLength = startPoint.distanceTo(endPoint);\n const startLength = point.distanceTo(startPoint);\n const endLength = point.distanceTo(endPoint);\n const combinedLength = startLength + endLength;\n const hasPoint = combinedLength - segmentLength <= tolerance;\n if (hasPoint) {\n // Length from start to the found point\n const foundLength = currentLength + startLength;\n const totalLength = this.getLength();\n return foundLength / totalLength;\n }\n currentLength += segmentLength;\n }\n return null;\n }\n getSegment(index) {\n const start = this._index.array[index] * 3;\n const end = this._index.array[index + 1] * 3;\n const startPoint = new THREE.Vector3(this._pos[start], this._pos[start + 1], this._pos[start + 2]);\n const endPoint = new THREE.Vector3(this._pos[end], this._pos[end + 1], this._pos[end + 2]);\n return { startPoint, endPoint };\n }\n}\n//# sourceMappingURL=civil-curve.js.map","import * as THREE from \"three\";\nimport { CivilCurve } from \"./civil-curve\";\nexport class CurveMesh extends THREE.LineSegments {\n constructor(index, data, alignment, geometry, material) {\n super(geometry, material);\n this.curve = new CivilCurve(index, this, data, alignment);\n }\n}\n//# sourceMappingURL=curve-mesh.js.map","// automatically generated by the FlatBuffers compiler, do not modify\nimport * as flatbuffers from 'flatbuffers';\nimport { CivilCurve } from '../../fragments/index/civil-curve.js';\nexport class Alignment {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsAlignment(bb, obj) {\n return (obj || new Alignment()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsAlignment(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Alignment()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n vertical(index, obj) {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? (obj || new CivilCurve()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n }\n verticalLength() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n horizontal(index, obj) {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? (obj || new CivilCurve()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n }\n horizontalLength() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n absolute(index, obj) {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? (obj || new CivilCurve()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n }\n absoluteLength() {\n const offset = this.bb.__offset(this.bb_pos, 8);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n initialPk() {\n const offset = this.bb.__offset(this.bb_pos, 10);\n return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;\n }\n static startAlignment(builder) {\n builder.startObject(4);\n }\n static addVertical(builder, verticalOffset) {\n builder.addFieldOffset(0, verticalOffset, 0);\n }\n static createVerticalVector(builder, data) {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]);\n }\n return builder.endVector();\n }\n static startVerticalVector(builder, numElems) {\n builder.startVector(4, numElems, 4);\n }\n static addHorizontal(builder, horizontalOffset) {\n builder.addFieldOffset(1, horizontalOffset, 0);\n }\n static createHorizontalVector(builder, data) {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]);\n }\n return builder.endVector();\n }\n static startHorizontalVector(builder, numElems) {\n builder.startVector(4, numElems, 4);\n }\n static addAbsolute(builder, absoluteOffset) {\n builder.addFieldOffset(2, absoluteOffset, 0);\n }\n static createAbsoluteVector(builder, data) {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]);\n }\n return builder.endVector();\n }\n static startAbsoluteVector(builder, numElems) {\n builder.startVector(4, numElems, 4);\n }\n static addInitialPk(builder, initialPk) {\n builder.addFieldFloat32(3, initialPk, 0.0);\n }\n static endAlignment(builder) {\n const offset = builder.endObject();\n return offset;\n }\n static createAlignment(builder, verticalOffset, horizontalOffset, absoluteOffset, initialPk) {\n Alignment.startAlignment(builder);\n Alignment.addVertical(builder, verticalOffset);\n Alignment.addHorizontal(builder, horizontalOffset);\n Alignment.addAbsolute(builder, absoluteOffset);\n Alignment.addInitialPk(builder, initialPk);\n return Alignment.endAlignment(builder);\n }\n}\n//# sourceMappingURL=alignment.js.map","// automatically generated by the FlatBuffers compiler, do not modify\nimport * as flatbuffers from 'flatbuffers';\nexport class CivilCurve {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsCivilCurve(bb, obj) {\n return (obj || new CivilCurve()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsCivilCurve(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new CivilCurve()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n points(index) {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.readFloat32(this.bb.__vector(this.bb_pos + offset) + index * 4) : 0;\n }\n pointsLength() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n pointsArray() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? new Float32Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;\n }\n data(optionalEncoding) {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;\n }\n static startCivilCurve(builder) {\n builder.startObject(2);\n }\n static addPoints(builder, pointsOffset) {\n builder.addFieldOffset(0, pointsOffset, 0);\n }\n static createPointsVector(builder, data) {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addFloat32(data[i]);\n }\n return builder.endVector();\n }\n static startPointsVector(builder, numElems) {\n builder.startVector(4, numElems, 4);\n }\n static addData(builder, dataOffset) {\n builder.addFieldOffset(1, dataOffset, 0);\n }\n static endCivilCurve(builder) {\n const offset = builder.endObject();\n return offset;\n }\n static createCivilCurve(builder, pointsOffset, dataOffset) {\n CivilCurve.startCivilCurve(builder);\n CivilCurve.addPoints(builder, pointsOffset);\n CivilCurve.addData(builder, dataOffset);\n return CivilCurve.endCivilCurve(builder);\n }\n}\n//# sourceMappingURL=civil-curve.js.map","// automatically generated by the FlatBuffers compiler, do not modify\nimport * as flatbuffers from 'flatbuffers';\nimport { Alignment } from '../../fragments/index/alignment.js';\nexport class CivilData {\n constructor() {\n this.bb = null;\n this.bb_pos = 0;\n }\n __init(i, bb) {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n }\n static getRootAsCivilData(bb, obj) {\n return (obj || new CivilData()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n static getSizePrefixedRootAsCivilData(bb, obj) {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new CivilData()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n }\n alignments(index, obj) {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? (obj || new Alignment()).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;\n }\n alignmentsLength() {\n const offset = this.bb.__offset(this.bb_pos, 4);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n coordinationMatrix(index) {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.readFloat32(this.bb.__vector(this.bb_pos + offset) + index * 4) : 0;\n }\n coordinationMatrixLength() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;\n }\n coordinationMatrixArray() {\n const offset = this.bb.__offset(this.bb_pos, 6);\n return offset ? new Float32Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;\n }\n static startCivilData(builder) {\n builder.startObject(2);\n }\n static addAlignments(builder, alignmentsOffset) {\n builder.addFieldOffset(0, alignmentsOffset, 0);\n }\n static createAlignmentsVector(builder, data) {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]);\n }\n return builder.endVector();\n }\n static startAlignmentsVector(builder, numElems) {\n builder.startVector(4, numElems, 4);\n }\n static addCoordinationMatrix(builder, coordinationMatrixOffset) {\n builder.addFieldOffset(1, coordinationMatrixOffset, 0);\n }\n static createCoordinationMatrixVector(builder, data) {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addFloat32(data[i]);\n }\n return builder.endVector();\n }\n static startCoordinationMatrixVector(builder, numElems) {\n builder.startVector(4, numElems, 4);\n }\n static endCivilData(builder) {\n const offset = builder.endObject();\n return offset;\n }\n static createCivilData(builder, alignmentsOffset, coordinationMatrixOffset) {\n CivilData.startCivilData(builder);\n CivilData.addAlignments(builder, alignmentsOffset);\n CivilData.addCoordinationMatrix(builder, coordinationMatrixOffset);\n return CivilData.endCivilData(builder);\n }\n}\n//# sourceMappingURL=civil-data.js.map"],"names":["BVH","apply","geometry","initialized","BufferGeometry","prototype","computeBoundsTree","disposeBoundsTree","Mesh","raycast","boundsTree","dispose","Alignment","constructor","this","vertical","horizontal","absolute","initialKP","getLength","type","length","curve","getPointAt","percentage","found","getCurveAt","getPercentageAt","point","tolerance","alignment","currentLength","factor","curveLength","targetLength","accumulatedLength","Error","CivilCurve","_index","mesh","index","_pos","attributes","position","array","data","i","startPoint","endPoint","getSegment","distanceTo","distanceToStart","getSegmentAt","targetPoint","clone","sub","normalize","multiplyScalar","add","segmentLength","startLength","start","end","CurveMesh","material","super","bb","bb_pos","__init","getRootAsAlignment","obj","readInt32","getSizePrefixedRootAsAlignment","setPosition","offset","__offset","__indirect","__vector","verticalLength","__vector_len","horizontalLength","absoluteLength","initialPk","readFloat32","startAlignment","builder","startObject","addVertical","verticalOffset","addFieldOffset","createVerticalVector","startVector","addOffset","endVector","startVerticalVector","numElems","addHorizontal","horizontalOffset","createHorizontalVector","startHorizontalVector","addAbsolute","absoluteOffset","createAbsoluteVector","startAbsoluteVector","addInitialPk","addFieldFloat32","endAlignment","endObject","createAlignment","getRootAsCivilCurve","getSizePrefixedRootAsCivilCurve","points","pointsLength","pointsArray","Float32Array","bytes","buffer","byteOffset","optionalEncoding","__string","startCivilCurve","addPoints","pointsOffset","createPointsVector","addFloat32","startPointsVector","addData","dataOffset","endCivilCurve","createCivilCurve","CivilData","getRootAsCivilData","getSizePrefixedRootAsCivilData","alignments","alignmentsLength","coordinationMatrix","coordinationMatrixLength","coordinationMatrixArray","startCivilData","addAlignments","alignmentsOffset","createAlignmentsVector","startAlignmentsVector","addCoordinationMatrix","coordinationMatrixOffset","createCoordinationMatrixVector","startCoordinationMatrixVector","endCivilData","createCivilData"],"sourceRoot":""}