{"version":3,"file":"vendor.openbim-components-fb275758.6a75a106378a4edf.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/civil/CivilNavigator/index.js","webpack://client-app/./node_modules/openbim-components/src/civil/CivilNavigator/src/curve-highlighter.js","webpack://client-app/./node_modules/openbim-components/src/civil/CivilNavigator/src/kp-manager.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { Component, Event } from \"../../base-types\";\r\nimport { Simple2DMarker, Simple2DScene } from \"../../core\";\r\nexport class CivilNavigator extends Component {\r\n constructor(components) {\r\n super(components);\r\n this.enabled = true;\r\n this.onHighlight = new Event();\r\n this.onMarkerChange = new Event();\r\n this.onMarkerHidden = new Event();\r\n this._curveMeshes = [];\r\n this._previousAlignment = null;\r\n this.scene = new Simple2DScene(this.components, false);\r\n this.mouseMarkers = {\r\n select: this.newMouseMarker(\"#ffffff\"),\r\n hover: this.newMouseMarker(\"#575757\"),\r\n };\r\n this.setupEvents();\r\n this.adjustRaycasterOnZoom();\r\n }\r\n initialize() {\r\n console.log(\"View for CivilNavigator: \", this.view);\r\n }\r\n get() {\r\n return null;\r\n }\r\n async draw(model, filter) {\r\n if (!model.civilData) {\r\n throw new Error(\"The provided model doesn't have civil data!\");\r\n }\r\n const { alignments } = model.civilData;\r\n const allAlignments = filter || alignments.values();\r\n const scene = this.scene.get();\r\n const totalBBox = new THREE.Box3();\r\n totalBBox.makeEmpty();\r\n totalBBox.min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n totalBBox.max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n for (const alignment of allAlignments) {\r\n if (!alignment) {\r\n throw new Error(\"Alignment not found!\");\r\n }\r\n for (const curve of alignment[this.view]) {\r\n scene.add(curve.mesh);\r\n this._curveMeshes.push(curve.mesh);\r\n if (!totalBBox.isEmpty()) {\r\n totalBBox.expandByObject(curve.mesh);\r\n }\r\n else {\r\n curve.mesh.geometry.computeBoundingBox();\r\n const cbox = curve.mesh.geometry.boundingBox;\r\n if (cbox instanceof THREE.Box3) {\r\n totalBBox.copy(cbox).applyMatrix4(curve.mesh.matrixWorld);\r\n }\r\n }\r\n }\r\n }\r\n const scaledBbox = new THREE.Box3();\r\n const size = new THREE.Vector3();\r\n const center = new THREE.Vector3();\r\n totalBBox.getCenter(center);\r\n totalBBox.getSize(size);\r\n size.multiplyScalar(1.2);\r\n scaledBbox.setFromCenterAndSize(center, size);\r\n await this.scene.controls.fitToBox(scaledBbox, false);\r\n }\r\n setupEvents() {\r\n this.scene.uiElement\r\n .get(\"container\")\r\n .domElement.addEventListener(\"mousemove\", async (event) => {\r\n const dom = this.scene.uiElement.get(\"container\").domElement;\r\n const result = this.highlighter.castRay(event, this.scene.camera, dom, this._curveMeshes);\r\n if (result) {\r\n const { object } = result;\r\n this.highlighter.hover(object);\r\n await this.updateMarker(result, \"hover\");\r\n return;\r\n }\r\n this.mouseMarkers.hover.visible = false;\r\n this.highlighter.unHover();\r\n await this.onMarkerHidden.trigger({ type: \"hover\" });\r\n });\r\n this.scene.uiElement\r\n .get(\"container\")\r\n .domElement.addEventListener(\"click\", async (event) => {\r\n const dom = this.scene.uiElement.get(\"container\").domElement;\r\n const intersects = this.highlighter.castRay(event, this.scene.camera, dom, this._curveMeshes);\r\n if (intersects) {\r\n const result = intersects;\r\n const mesh = result.object;\r\n this.highlighter.select(mesh);\r\n await this.updateMarker(result, \"select\");\r\n await this.onHighlight.trigger({ mesh, point: result.point });\r\n if (this._previousAlignment !== mesh.curve.alignment) {\r\n this.kpManager.clearKPStations();\r\n // this.showKPStations(mesh);\r\n this.kpManager.showKPStations(mesh);\r\n // this.kpManager.createKP();\r\n this._previousAlignment = mesh.curve.alignment;\r\n }\r\n }\r\n // this.highlighter.unSelect();\r\n // this.clearKPStations();\r\n });\r\n }\r\n async dispose() {\r\n this.highlighter.dispose();\r\n this.clear();\r\n this.onHighlight.reset();\r\n await this.scene.dispose();\r\n this._curveMeshes = [];\r\n }\r\n clear() {\r\n this.highlighter.unSelect();\r\n this.highlighter.unHover();\r\n for (const mesh of this._curveMeshes) {\r\n mesh.removeFromParent();\r\n }\r\n this._curveMeshes = [];\r\n }\r\n setMarker(alignment, percentage, type) {\r\n if (!this._curveMeshes.length) {\r\n return;\r\n }\r\n const found = alignment.getCurveAt(percentage, this.view);\r\n const point = alignment.getPointAt(percentage, this.view);\r\n const { index } = found.curve.getSegmentAt(found.percentage);\r\n this.setMouseMarker(point, found.curve.mesh, index, type);\r\n }\r\n setDefSegments(segmentsArray) {\r\n const defSegments = [];\r\n const slope = [];\r\n const calculateSlopeSegment = (point1, point2) => {\r\n const deltaY = point2[1] - point1[1];\r\n const deltaX = point2[0] - point1[0];\r\n return deltaY / deltaX;\r\n };\r\n for (let i = 0; i < segmentsArray.length; i++) {\r\n const segment = segmentsArray[i];\r\n let startX;\r\n let startY;\r\n let endX;\r\n let endY;\r\n // Set start\r\n for (let j = 0; j < Object.keys(segment).length / 3; j++) {\r\n if (segment[j * 3] !== undefined && segment[j * 3 + 1] !== undefined) {\r\n startX = segment[j * 3];\r\n startY = segment[j * 3 + 1];\r\n break;\r\n }\r\n }\r\n // Set end\r\n for (let j = Object.keys(segment).length / 3 - 1; j >= 0; j--) {\r\n if (segment[j * 3] !== undefined && segment[j * 3 + 1] !== undefined) {\r\n endX = segment[j * 3];\r\n endY = segment[j * 3 + 1];\r\n break;\r\n }\r\n }\r\n const defSlope = calculateSlopeSegment(\r\n // @ts-ignore\r\n [startX, startY], \r\n // @ts-ignore\r\n [endX, endY]);\r\n const slopeSegment = (defSlope * 100).toFixed(2);\r\n slope.push({ slope: slopeSegment });\r\n }\r\n for (const segment of segmentsArray) {\r\n for (let i = 0; i < segment.length - 3; i += 3) {\r\n const startX = segment[i];\r\n const startY = segment[i + 1];\r\n const startZ = segment[i + 2];\r\n const endX = segment[i + 3];\r\n const endY = segment[i + 4];\r\n const endZ = segment[i + 5];\r\n defSegments.push({\r\n start: new THREE.Vector3(startX, startY, startZ),\r\n end: new THREE.Vector3(endX, endY, endZ),\r\n });\r\n }\r\n }\r\n return { defSegments, slope };\r\n }\r\n hideMarker(type) {\r\n this.mouseMarkers[type].visible = false;\r\n }\r\n adjustRaycasterOnZoom() {\r\n this.scene.controls.addEventListener(\"update\", () => {\r\n const { zoom, left, right, top, bottom } = this.scene.camera;\r\n const width = left - right;\r\n const height = top - bottom;\r\n const screenSize = Math.max(width, height);\r\n const realScreenSize = screenSize / zoom;\r\n const range = 40;\r\n const { caster } = this.highlighter;\r\n caster.params.Line.threshold = realScreenSize / range;\r\n });\r\n }\r\n newMouseMarker(color) {\r\n const scene = this.scene.get();\r\n const root = document.createElement(\"div\");\r\n const bar = document.createElement(\"div\");\r\n root.appendChild(bar);\r\n bar.style.backgroundColor = color;\r\n bar.style.width = \"3rem\";\r\n bar.style.height = \"3px\";\r\n const mouseMarker = new Simple2DMarker(this.components, root, scene);\r\n mouseMarker.visible = false;\r\n return mouseMarker;\r\n }\r\n setMouseMarker(point, object, index, type) {\r\n if (index === undefined) {\r\n return;\r\n }\r\n this.mouseMarkers[type].visible = true;\r\n const marker = this.mouseMarkers[type].get();\r\n marker.position.copy(point);\r\n const curveMesh = object;\r\n const { startPoint, endPoint } = curveMesh.curve.getSegment(index);\r\n const angle = Math.atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x);\r\n const bar = marker.element.children[0];\r\n const trueAngle = 90 - (angle / Math.PI) * 180;\r\n bar.style.transform = `rotate(${trueAngle}deg)`;\r\n }\r\n async updateMarker(intersects, type) {\r\n const { point, index, object } = intersects;\r\n const mesh = object;\r\n const curve = mesh.curve;\r\n const alignment = mesh.curve.alignment;\r\n const percentage = alignment.getPercentageAt(point, this.view);\r\n const markerPoint = point.clone();\r\n this.setMouseMarker(markerPoint, mesh, index, type);\r\n if (percentage !== null) {\r\n await this.onMarkerChange.trigger({ alignment, percentage, type, curve });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { LineMaterial } from \"three/examples/jsm/lines/LineMaterial\";\r\nimport { Event } from \"../../../base-types\";\r\nexport class CurveHighlighter {\r\n constructor(scene, type) {\r\n this.onSelect = new Event();\r\n this.caster = new THREE.Raycaster();\r\n this.scene = scene;\r\n this.type = type;\r\n this.hoverCurve = this.newCurve(0.003, 0x444444, false);\r\n this.hoverPoints = this.newPoints(5, 0x444444);\r\n this.selectCurve = this.newCurve(0.005, 0xffffff, true);\r\n this.selectPoints = this.newPoints(7, 0xffffff);\r\n }\r\n dispose() {\r\n if (this.selectCurve) {\r\n this.scene.remove(this.selectCurve);\r\n }\r\n this.selectCurve.material.dispose();\r\n this.selectCurve.geometry.dispose();\r\n this.selectCurve = null;\r\n this.hoverCurve.material.dispose();\r\n this.hoverCurve.geometry.dispose();\r\n this.hoverCurve = null;\r\n this.hoverPoints.material.dispose();\r\n this.hoverPoints.geometry.dispose();\r\n this.selectPoints.material.dispose();\r\n this.selectPoints.geometry.dispose();\r\n this.scene = null;\r\n }\r\n castRay(event, camera, dom, meshes) {\r\n const mouse = new THREE.Vector2();\r\n const rect = dom.getBoundingClientRect();\r\n mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\r\n mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\r\n this.caster.setFromCamera(mouse, camera);\r\n const intersects = this.caster.intersectObjects(meshes);\r\n if (!intersects.length) {\r\n return null;\r\n }\r\n return intersects[0];\r\n }\r\n select(mesh) {\r\n this.highlight(mesh, this.selectCurve, this.selectPoints, true);\r\n this.onSelect.trigger(mesh);\r\n }\r\n unSelect() {\r\n this.selectCurve.removeFromParent();\r\n this.selectPoints.removeFromParent();\r\n }\r\n hover(mesh) {\r\n this.highlight(mesh, this.hoverCurve, this.hoverPoints, false);\r\n }\r\n unHover() {\r\n this.hoverCurve.removeFromParent();\r\n this.hoverPoints.removeFromParent();\r\n }\r\n highlight(mesh, curve, points, useColors) {\r\n const { alignment } = mesh.curve;\r\n this.scene.add(curve);\r\n this.scene.add(points);\r\n const lines = [];\r\n const colors = [];\r\n const vertices = [];\r\n for (const foundCurve of alignment[this.type]) {\r\n const position = foundCurve.mesh.geometry.attributes.position;\r\n for (const coord of position.array) {\r\n lines.push(coord);\r\n }\r\n if (useColors) {\r\n let type;\r\n if (this.type === \"absolute\") {\r\n // 3D curves don't have type defined, so we take the horizontal\r\n const { horizontal } = foundCurve.alignment;\r\n type = horizontal[foundCurve.index].data.TYPE;\r\n }\r\n else {\r\n type = foundCurve.data.TYPE;\r\n }\r\n const found = CurveHighlighter.settings.colors[type] || [1, 1, 1];\r\n for (let i = 0; i < position.count; i++) {\r\n colors.push(...found);\r\n }\r\n }\r\n const [x, y, z] = position.array;\r\n vertices.push(new THREE.Vector3(x, y, z));\r\n }\r\n const lastX = lines[lines.length - 3];\r\n const lastY = lines[lines.length - 2];\r\n const lastZ = lines[lines.length - 1];\r\n vertices.push(new THREE.Vector3(lastX, lastY, lastZ));\r\n if (lines.length / 3 > curve.geometry.attributes.position.count) {\r\n curve.geometry.dispose();\r\n curve.geometry = new LineGeometry();\r\n }\r\n curve.geometry.setPositions(lines);\r\n if (useColors) {\r\n curve.geometry.setColors(colors);\r\n }\r\n points.geometry.setFromPoints(vertices);\r\n }\r\n newCurve(linewidth, color, vertexColors) {\r\n const selectGeometry = new LineGeometry();\r\n const selectMaterial = new LineMaterial({\r\n color,\r\n linewidth,\r\n vertexColors,\r\n worldUnits: false,\r\n depthTest: false,\r\n });\r\n const curve = new Line2(selectGeometry, selectMaterial);\r\n this.scene.add(curve);\r\n return curve;\r\n }\r\n newPoints(size, color) {\r\n const pointsGeometry = new THREE.BufferGeometry();\r\n const pointsAttr = new THREE.BufferAttribute(new Float32Array(), 3);\r\n pointsGeometry.setAttribute(\"position\", pointsAttr);\r\n const pointsMaterial = new THREE.PointsMaterial({\r\n size,\r\n color,\r\n sizeAttenuation: false,\r\n depthTest: false,\r\n });\r\n const points = new THREE.Points(pointsGeometry, pointsMaterial);\r\n points.frustumCulled = false;\r\n this.scene.add(points);\r\n return points;\r\n }\r\n}\r\nCurveHighlighter.settings = {\r\n colors: {\r\n LINE: [213 / 255, 0 / 255, 255 / 255],\r\n CIRCULARARC: [0 / 255, 46, 255 / 255],\r\n CLOTHOID: [0 / 255, 255 / 255, 0 / 255],\r\n PARABOLICARC: [0 / 255, 255 / 255, 72 / 255],\r\n CONSTANTGRADIENT: [213 / 255, 0 / 255, 255 / 255],\r\n },\r\n};\r\n//# sourceMappingURL=curve-highlighter.js.map","import * as THREE from \"three\";\r\nimport { MarkerManager } from \"../../../core/Simple2DMarker/src/marker-manager\";\r\nexport class KPManager extends MarkerManager {\r\n constructor(components, renderer, scene, controls, type) {\r\n super(components, renderer, scene, controls);\r\n this.divisionLength = 100;\r\n this.view = type;\r\n }\r\n showKPStations(mesh) {\r\n if (this.view === \"horizontal\") {\r\n const endKPStations = this.generateStartAndEndKP(mesh);\r\n for (const [, data] of endKPStations) {\r\n this.addKPStation(data.value, data.normal);\r\n }\r\n const constantKPStations = this.generateConstantKP(mesh);\r\n for (const [, data] of constantKPStations) {\r\n this.addKPStation(data.value, data.normal);\r\n }\r\n }\r\n }\r\n showCurveLength(points, length) {\r\n const count = points.length;\r\n const formattedLength = `${length.toFixed(2)} m`;\r\n const midpointIndex = Math.round(count / 2);\r\n const middlePoint = points[midpointIndex];\r\n this.addMarkerAtPoint(formattedLength, middlePoint, \"Length\", true);\r\n }\r\n showLineLength(line, length) {\r\n const startPoint = new THREE.Vector3();\r\n startPoint.x = line.geometry.getAttribute(\"position\").getX(0);\r\n startPoint.y = line.geometry.getAttribute(\"position\").getY(0);\r\n startPoint.z = line.geometry.getAttribute(\"position\").getZ(0);\r\n const endPoint = new THREE.Vector3();\r\n endPoint.x = line.geometry.getAttribute(\"position\").getX(1);\r\n endPoint.y = line.geometry.getAttribute(\"position\").getY(1);\r\n endPoint.z = line.geometry.getAttribute(\"position\").getZ(1);\r\n const formattedLength = `${length.toFixed(2)} m`;\r\n const middlePoint = new THREE.Vector3();\r\n middlePoint.addVectors(startPoint, endPoint).multiplyScalar(0.5);\r\n this.addMarkerAtPoint(formattedLength, middlePoint, \"Length\", true);\r\n }\r\n showCurveRadius(line, radius) {\r\n const startPoint = new THREE.Vector3();\r\n startPoint.x = line.geometry.getAttribute(\"position\").getX(0);\r\n startPoint.y = line.geometry.getAttribute(\"position\").getY(0);\r\n startPoint.z = line.geometry.getAttribute(\"position\").getZ(0);\r\n const endPoint = new THREE.Vector3();\r\n endPoint.x = line.geometry.getAttribute(\"position\").getX(1);\r\n endPoint.y = line.geometry.getAttribute(\"position\").getY(1);\r\n endPoint.z = line.geometry.getAttribute(\"position\").getZ(1);\r\n const formattedLength = `R = ${radius.toFixed(2)} m`;\r\n const middlePoint = new THREE.Vector3();\r\n middlePoint.addVectors(startPoint, endPoint).multiplyScalar(0.5);\r\n this.addMarkerAtPoint(formattedLength, middlePoint, \"Radius\", true);\r\n }\r\n generateStartAndEndKP(mesh) {\r\n const { alignment } = mesh.curve;\r\n const data = new Map();\r\n for (const curve of alignment.horizontal) {\r\n const length = curve.getLength();\r\n if (data.size > 0) {\r\n const last = curve.index - 1;\r\n const previousData = data.get(last);\r\n const updateDistance = previousData.distance + length;\r\n const curvePosition = curve.mesh.geometry.getAttribute(\"position\");\r\n const lastSegmentIndex = curvePosition.count - 1;\r\n const lastSegment = new THREE.Vector3();\r\n lastSegment.x = curvePosition.getX(lastSegmentIndex);\r\n lastSegment.y = curvePosition.getY(lastSegmentIndex);\r\n lastSegment.z = curvePosition.getZ(lastSegmentIndex);\r\n const normalLine = this.createNormalLine(curve.mesh);\r\n data.set(curve.index, {\r\n value: this.getShortendKPValue(updateDistance),\r\n distance: updateDistance,\r\n point: lastSegment,\r\n normal: normalLine,\r\n });\r\n }\r\n else {\r\n const curvePosition = curve.mesh.geometry.getAttribute(\"position\");\r\n const lastSegmentIndex = curvePosition.count - 1;\r\n const lastSegment = new THREE.Vector3();\r\n lastSegment.x = curvePosition.getX(lastSegmentIndex);\r\n lastSegment.y = curvePosition.getY(lastSegmentIndex);\r\n lastSegment.z = curvePosition.getZ(lastSegmentIndex);\r\n const normalLine = this.createNormalLine(curve.mesh);\r\n data.set(curve.index, {\r\n value: this.getShortendKPValue(length),\r\n distance: length,\r\n point: lastSegment,\r\n normal: normalLine,\r\n });\r\n }\r\n }\r\n return data;\r\n }\r\n createNormalLine(curveMesh) {\r\n const lastIndex = curveMesh.geometry.attributes.position.count - 1;\r\n const secondLastIndex = lastIndex - 1;\r\n const lastPoint = new THREE.Vector3();\r\n lastPoint.x = curveMesh.geometry.attributes.position.getX(lastIndex);\r\n lastPoint.y = curveMesh.geometry.attributes.position.getY(lastIndex);\r\n lastPoint.z = curveMesh.geometry.attributes.position.getZ(lastIndex);\r\n const secondLastPoint = new THREE.Vector3();\r\n secondLastPoint.x =\r\n curveMesh.geometry.attributes.position.getX(secondLastIndex);\r\n secondLastPoint.y =\r\n curveMesh.geometry.attributes.position.getY(secondLastIndex);\r\n secondLastPoint.z =\r\n curveMesh.geometry.attributes.position.getZ(secondLastIndex);\r\n const direction = new THREE.Vector3().subVectors(lastPoint, secondLastPoint);\r\n const normal = direction\r\n .clone()\r\n .applyAxisAngle(new THREE.Vector3(0, 0, 1), Math.PI * 0.5)\r\n .normalize();\r\n const normalGeom = new THREE.BufferGeometry().setFromPoints([\r\n normal.clone().setLength(10).add(lastPoint),\r\n normal.clone().setLength(-10).add(lastPoint),\r\n ]);\r\n const normalLine = new THREE.Line(normalGeom);\r\n // this.scene.add(normalLine);\r\n return normalLine;\r\n }\r\n generateConstantKP(mesh) {\r\n const { alignment } = mesh.curve;\r\n const data = new Map();\r\n const alignmentLength = alignment.getLength(\"horizontal\");\r\n const divisions = Math.floor(alignmentLength / this.divisionLength);\r\n for (let i = 0; i < divisions; i++) {\r\n const percentage = i / divisions;\r\n const kpPoint = alignment.getPointAt(percentage, \"horizontal\");\r\n const length = alignmentLength * percentage;\r\n // const curve = alignment.getCurveAt(percentage, \"horizontal\");\r\n const normalLine = this.getNormal(alignment, kpPoint);\r\n data.set(i, {\r\n value: this.getShortendKPValue(length),\r\n distance: length,\r\n point: kpPoint,\r\n normal: normalLine,\r\n });\r\n }\r\n return data;\r\n }\r\n // TODO: Move Generation of Points to Previous Method Call\r\n getNormal(curve, point) {\r\n const pointsInCurve = [];\r\n const normalPoints = {\r\n start: new THREE.Vector3(),\r\n end: new THREE.Vector3(),\r\n };\r\n for (let i = 0; i < curve.horizontal.length; i++) {\r\n const curveMesh = curve.horizontal[i].mesh;\r\n const position = curveMesh.geometry.attributes.position;\r\n const length = position.count;\r\n for (let j = 0; j < length; j++) {\r\n const x = position.getX(j);\r\n const y = position.getY(j);\r\n const z = position.getZ(j);\r\n pointsInCurve.push(new THREE.Vector3(x, y, z));\r\n }\r\n }\r\n for (let i = 0; i < pointsInCurve.length - 1; i++) {\r\n const p1 = pointsInCurve[i];\r\n const p2 = pointsInCurve[i + 1];\r\n const distanceP1 = p1.distanceTo(point);\r\n const distanceP2 = p2.distanceTo(point);\r\n const distanceP1P2 = p1.distanceTo(p2);\r\n const epsilion = 0.00001;\r\n const isOnLine = Math.abs(distanceP1 + distanceP2 - distanceP1P2);\r\n if (isOnLine < epsilion) {\r\n normalPoints.start = p1;\r\n normalPoints.end = p2;\r\n }\r\n }\r\n const direction = new THREE.Vector3().subVectors(normalPoints.end, normalPoints.start);\r\n const normal = direction\r\n .clone()\r\n .applyAxisAngle(new THREE.Vector3(0, 0, 1), Math.PI * 0.5)\r\n .normalize();\r\n const normalGeom = new THREE.BufferGeometry().setFromPoints([\r\n normal.clone().setLength(10).add(point),\r\n normal.clone().setLength(-10).add(point),\r\n ]);\r\n const normalLine = new THREE.Line(normalGeom, new THREE.LineBasicMaterial({ color: 0xff0000 }));\r\n return normalLine;\r\n }\r\n getShortendKPValue(value) {\r\n const formattedValue = value.toFixed(2);\r\n const [integerPart, fractionalPart] = formattedValue.toString().split(\".\");\r\n const formattedFractionalPart = fractionalPart || \"00\";\r\n if (parseInt(integerPart, 10) > 1000 && parseInt(integerPart, 10) < 10000) {\r\n const [first, ...rest] = integerPart;\r\n return `${first}+${rest.join(\"\")}.${formattedFractionalPart}`;\r\n }\r\n if (parseInt(integerPart, 10) > 10000) {\r\n const [first, second, ...rest] = integerPart;\r\n return `${first}${second}+${rest.join(\"\")}.${formattedFractionalPart}`;\r\n }\r\n return `0+${integerPart.padStart(3, \"0\")}.${formattedFractionalPart}`;\r\n }\r\n clearKPStations() {\r\n this.clearMarkers();\r\n }\r\n}\r\n//# sourceMappingURL=kp-manager.js.map"],"names":["CivilNavigator","constructor","components","super","this","enabled","onHighlight","onMarkerChange","onMarkerHidden","_curveMeshes","_previousAlignment","scene","mouseMarkers","select","newMouseMarker","hover","setupEvents","adjustRaycasterOnZoom","initialize","console","log","view","get","draw","model","filter","civilData","Error","alignments","allAlignments","values","totalBBox","makeEmpty","min","set","Number","MAX_VALUE","max","alignment","curve","add","mesh","push","isEmpty","geometry","computeBoundingBox","cbox","boundingBox","copy","applyMatrix4","matrixWorld","expandByObject","scaledBbox","size","center","getCenter","getSize","multiplyScalar","setFromCenterAndSize","controls","fitToBox","uiElement","domElement","addEventListener","async","event","dom","result","highlighter","castRay","camera","object","updateMarker","visible","unHover","trigger","type","intersects","point","kpManager","clearKPStations","showKPStations","dispose","clear","reset","unSelect","removeFromParent","setMarker","percentage","length","found","getCurveAt","getPointAt","index","getSegmentAt","setMouseMarker","setDefSegments","segmentsArray","defSegments","slope","i","segment","startX","startY","endX","endY","j","Object","keys","undefined","slopeSegment","point2","point1","toFixed","startZ","endZ","start","end","hideMarker","zoom","left","right","top","bottom","width","height","realScreenSize","Math","caster","params","Line","threshold","color","root","document","createElement","bar","appendChild","style","backgroundColor","mouseMarker","marker","position","curveMesh","startPoint","endPoint","getSegment","angle","atan2","y","x","element","children","trueAngle","PI","transform","getPercentageAt","markerPoint","clone","CurveHighlighter","onSelect","hoverCurve","newCurve","hoverPoints","newPoints","selectCurve","selectPoints","remove","material","meshes","mouse","rect","getBoundingClientRect","clientX","clientY","setFromCamera","intersectObjects","highlight","points","useColors","lines","colors","vertices","foundCurve","attributes","coord","array","horizontal","data","TYPE","settings","count","z","lastX","lastY","lastZ","setPositions","setColors","setFromPoints","linewidth","vertexColors","selectGeometry","selectMaterial","worldUnits","depthTest","pointsGeometry","pointsAttr","Float32Array","setAttribute","pointsMaterial","sizeAttenuation","frustumCulled","LINE","CIRCULARARC","CLOTHOID","PARABOLICARC","CONSTANTGRADIENT","KPManager","renderer","divisionLength","endKPStations","generateStartAndEndKP","addKPStation","value","normal","constantKPStations","generateConstantKP","showCurveLength","formattedLength","middlePoint","round","addMarkerAtPoint","showLineLength","line","getAttribute","getX","getY","getZ","addVectors","showCurveRadius","radius","Map","getLength","last","updateDistance","distance","curvePosition","lastSegmentIndex","lastSegment","normalLine","createNormalLine","getShortendKPValue","lastIndex","secondLastIndex","lastPoint","secondLastPoint","subVectors","applyAxisAngle","normalize","normalGeom","setLength","alignmentLength","divisions","floor","kpPoint","getNormal","pointsInCurve","normalPoints","p1","p2","distanceP1","distanceTo","distanceP2","distanceP1P2","epsilion","abs","formattedValue","integerPart","fractionalPart","toString","split","formattedFractionalPart","parseInt","first","rest","join","second","padStart","clearMarkers"],"sourceRoot":""}