{"version":3,"file":"vendor.openbim-components-7061cc55.fa5744ae0df4fa8c.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/civil/CivilPlanNavigator/src/plan-highlighter.js","webpack://client-app/./node_modules/openbim-components/src/civil/CivilPlanNavigator/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { CurveHighlighter } from \"../../CivilNavigator/src/curve-highlighter\";\r\nexport class PlanHighlighter extends CurveHighlighter {\r\n constructor(scene, kpManager) {\r\n super(scene, \"horizontal\");\r\n this.kpManager = kpManager;\r\n this.offset = 10;\r\n this.markupLines = [];\r\n this.markupMaterial = new THREE.LineBasicMaterial({\r\n color: 0x686868,\r\n });\r\n }\r\n showCurveInfo(curveMesh) {\r\n this.disposeMarkups();\r\n this.currentCurveMesh = curveMesh;\r\n switch (curveMesh.curve.data.TYPE) {\r\n case \"LINE\":\r\n this.showLineInfo(curveMesh, this.offset);\r\n break;\r\n case \"CIRCULARARC\":\r\n this.showCircularArcInfo(curveMesh, this.offset);\r\n break;\r\n case \"CLOTHOID\":\r\n this.showClothoidInfo(curveMesh, this.offset);\r\n break;\r\n default:\r\n console.log(\"Unknown curve type:\", curveMesh.curve.data.TYPE);\r\n break;\r\n }\r\n }\r\n updateOffset(screenSize, _zoom, _triggerRedraw) {\r\n const biggerSize = Math.max(screenSize.height, screenSize.width);\r\n const newOffset = biggerSize / (_zoom * 150);\r\n if (newOffset !== this.offset) {\r\n this.offset = newOffset;\r\n if (_triggerRedraw && this.currentCurveMesh) {\r\n this.showCurveInfo(this.currentCurveMesh);\r\n }\r\n }\r\n }\r\n dispose() {\r\n super.dispose();\r\n for (const line of this.markupLines) {\r\n this.scene.remove(line);\r\n line.removeFromParent();\r\n }\r\n this.disposeMarkups();\r\n this.markupMaterial.dispose();\r\n }\r\n disposeMarkups() {\r\n for (const line of this.markupLines) {\r\n line.geometry.dispose();\r\n this.scene.remove(line);\r\n }\r\n this.markupLines = [];\r\n }\r\n unSelect() {\r\n super.unSelect();\r\n this.disposeMarkups();\r\n }\r\n calculateTangent(positions, index) {\r\n const numComponents = 3;\r\n const pointIndex = index * numComponents;\r\n const prevPointIndex = Math.max(0, pointIndex - numComponents);\r\n const nextPointIndex = Math.min(positions.length - numComponents, pointIndex + numComponents);\r\n const prevPoint = new THREE.Vector3().fromArray(positions, prevPointIndex);\r\n const nextPoint = new THREE.Vector3().fromArray(positions, nextPointIndex);\r\n const tangent = nextPoint.clone().sub(prevPoint).normalize();\r\n return tangent;\r\n }\r\n calculateParallelCurve(positions, count, offset) {\r\n const parallelCurvePoints = [];\r\n for (let i = 0; i < count; i++) {\r\n const tangentVector = this.calculateTangent(positions, i);\r\n const perpendicularVector = tangentVector\r\n .clone()\r\n .applyAxisAngle(new THREE.Vector3(0, 0, 1), Math.PI / 2);\r\n perpendicularVector.normalize();\r\n const offsetVector = perpendicularVector.clone().multiplyScalar(offset);\r\n const pointIndex = i * 3;\r\n const parallelPoint = new THREE.Vector3()\r\n .fromArray(positions, pointIndex)\r\n .add(offsetVector);\r\n parallelCurvePoints.push(parallelPoint);\r\n }\r\n return parallelCurvePoints;\r\n }\r\n calculateDimensionLines(curve, line) {\r\n const startDimensionPoints = [];\r\n const curvePositions = curve.geometry.attributes.position.array;\r\n const linePositions = line.geometry.attributes.position.array;\r\n if (curvePositions.length < 6 && linePositions.length < 6) {\r\n throw new Error(\"Line must have at least two vertices\");\r\n }\r\n const startCurvePoint = new THREE.Vector3(curvePositions[0], curvePositions[1], curvePositions[2]);\r\n const startLinePoint = new THREE.Vector3(linePositions[0], linePositions[1], linePositions[2]);\r\n const endDimensionPoints = [];\r\n const lastCurveIndex = curvePositions.length - 3;\r\n const endCurvePoint = new THREE.Vector3(curvePositions[lastCurveIndex], curvePositions[lastCurveIndex + 1], curvePositions[lastCurveIndex + 2]);\r\n const lastLineIndex = linePositions.length - 3;\r\n const endLinePoint = new THREE.Vector3(linePositions[lastLineIndex], linePositions[lastLineIndex + 1], linePositions[lastLineIndex + 2]);\r\n startDimensionPoints.push(startCurvePoint, startLinePoint);\r\n endDimensionPoints.push(endCurvePoint, endLinePoint);\r\n return { startDimensionPoints, endDimensionPoints };\r\n }\r\n offsetDimensionLine(points, offset) {\r\n const direction = new THREE.Vector3()\r\n .copy(points[points.length - 1])\r\n .sub(points[0])\r\n .normalize();\r\n const offsetVector = direction.clone().multiplyScalar(offset);\r\n const newPoints = points.map((point) => point.clone().add(offsetVector));\r\n return newPoints;\r\n }\r\n showLineInfo(curveMesh, offset) {\r\n this.kpManager.clearMarkersByType(\"Length\");\r\n this.kpManager.clearMarkersByType(\"Radius\");\r\n const positions = curveMesh.geometry.attributes.position.array;\r\n const parallelCurvePoints = this.calculateParallelCurve(positions, positions.length / 3, offset);\r\n const lengthGeometry = new THREE.BufferGeometry().setFromPoints(parallelCurvePoints);\r\n const lineParallelLine = new THREE.Line(lengthGeometry, this.markupMaterial);\r\n this.kpManager.showLineLength(lineParallelLine, curveMesh.curve.getLength());\r\n this.scene.add(lineParallelLine);\r\n this.markupLines.push(lineParallelLine);\r\n const { startDimensionPoints, endDimensionPoints } = this.calculateDimensionLines(curveMesh, lineParallelLine);\r\n const offsetStartDimensionPoints = this.offsetDimensionLine(startDimensionPoints, offset * 0.1);\r\n const offsetEndDimensionPoints = this.offsetDimensionLine(endDimensionPoints, offset * 0.1);\r\n const startDimensionGeometry = new THREE.BufferGeometry().setFromPoints(offsetStartDimensionPoints);\r\n const endDimensionGeometry = new THREE.BufferGeometry().setFromPoints(offsetEndDimensionPoints);\r\n const lineStartDimensionlLine = new THREE.Line(startDimensionGeometry, this.markupMaterial);\r\n this.scene.add(lineStartDimensionlLine);\r\n this.markupLines.push(lineStartDimensionlLine);\r\n const lineEndDimensionlLine = new THREE.Line(endDimensionGeometry, this.markupMaterial);\r\n this.scene.add(lineEndDimensionlLine);\r\n this.markupLines.push(lineEndDimensionlLine);\r\n }\r\n showClothoidInfo(curveMesh, offset) {\r\n this.kpManager.clearMarkersByType(\"Length\");\r\n this.kpManager.clearMarkersByType(\"Radius\");\r\n const positions = curveMesh.geometry.attributes.position.array;\r\n const parallelCurvePoints = this.calculateParallelCurve(positions, positions.length / 3, offset);\r\n const lengthGeometry = new THREE.BufferGeometry().setFromPoints(parallelCurvePoints);\r\n this.kpManager.showCurveLength(parallelCurvePoints, curveMesh.curve.getLength());\r\n const clothParallelLine = new THREE.Line(lengthGeometry, this.markupMaterial);\r\n this.scene.add(clothParallelLine);\r\n this.markupLines.push(clothParallelLine);\r\n const { startDimensionPoints, endDimensionPoints } = this.calculateDimensionLines(curveMesh, clothParallelLine);\r\n const offsetStartDimensionPoints = this.offsetDimensionLine(startDimensionPoints, offset * 0.1);\r\n const offsetEndDimensionPoints = this.offsetDimensionLine(endDimensionPoints, offset * 0.1);\r\n const startDimensionGeometry = new THREE.BufferGeometry().setFromPoints(offsetStartDimensionPoints);\r\n const endDimensionGeometry = new THREE.BufferGeometry().setFromPoints(offsetEndDimensionPoints);\r\n const clothStartDimensionlLine = new THREE.Line(startDimensionGeometry, this.markupMaterial);\r\n this.scene.add(clothStartDimensionlLine);\r\n this.markupLines.push(clothStartDimensionlLine);\r\n const clothEndDimensionlLine = new THREE.Line(endDimensionGeometry, this.markupMaterial);\r\n this.scene.add(clothEndDimensionlLine);\r\n this.markupLines.push(clothEndDimensionlLine);\r\n }\r\n showCircularArcInfo(curveMesh, offset) {\r\n this.kpManager.clearMarkersByType(\"Length\");\r\n this.kpManager.clearMarkersByType(\"Radius\");\r\n const radius = curveMesh.curve.data.RADIUS;\r\n const positions = curveMesh.geometry.attributes.position.array;\r\n const count = curveMesh.geometry.attributes.position.count;\r\n const linePoints = [];\r\n const firstPoint = new THREE.Vector3(positions[0], positions[1], positions[2]);\r\n const lastPointIndex = (count - 1) * 3;\r\n const lastPoint = new THREE.Vector3(positions[lastPointIndex], positions[lastPointIndex + 1], positions[lastPointIndex + 2]);\r\n const middlePointIndex = (count / 2) * 3;\r\n const middlePoint = new THREE.Vector3(positions[middlePointIndex], positions[middlePointIndex + 1], positions[middlePointIndex + 2]);\r\n const tangentVector = lastPoint.clone().sub(firstPoint).normalize();\r\n const perpendicularVector = new THREE.Vector3(-tangentVector.y, tangentVector.x, 0);\r\n perpendicularVector.multiplyScalar(radius);\r\n const arcCenterPoint = middlePoint.clone().add(perpendicularVector);\r\n linePoints.push(middlePoint);\r\n linePoints.push(arcCenterPoint);\r\n const radiusGeometry = new THREE.BufferGeometry().setFromPoints(linePoints);\r\n const radiusLine = new THREE.Line(radiusGeometry, this.markupMaterial);\r\n this.kpManager.showCurveRadius(radiusLine, Math.abs(radius));\r\n this.scene.add(radiusLine);\r\n this.markupLines.push(radiusLine);\r\n const parallelCurvePoints = [];\r\n for (let i = 0; i < count; i++) {\r\n const tangentVector = this.calculateTangent(positions, i);\r\n const radius = curveMesh.curve.data.RADIUS;\r\n const perpendicularVector = new THREE.Vector3(tangentVector.y, -tangentVector.x, 0);\r\n perpendicularVector.normalize();\r\n if (radius < 0) {\r\n perpendicularVector.negate();\r\n }\r\n const offsetVector = perpendicularVector.clone().multiplyScalar(offset);\r\n const pointIndex = i * 3;\r\n const parallelPoint = new THREE.Vector3(positions[pointIndex] + offsetVector.x, positions[pointIndex + 1] + offsetVector.y, positions[pointIndex + 2] + offsetVector.z);\r\n parallelCurvePoints.push(parallelPoint);\r\n }\r\n const lengthGeometry = new THREE.BufferGeometry().setFromPoints(parallelCurvePoints);\r\n this.kpManager.showCurveLength(parallelCurvePoints, curveMesh.curve.getLength());\r\n const circArcParallelLine = new THREE.Line(lengthGeometry, this.markupMaterial);\r\n this.scene.add(circArcParallelLine);\r\n this.markupLines.push(circArcParallelLine);\r\n const { startDimensionPoints, endDimensionPoints } = this.calculateDimensionLines(curveMesh, circArcParallelLine);\r\n const offsetStartDimensionPoints = this.offsetDimensionLine(startDimensionPoints, offset * 0.1);\r\n const offsetEndDimensionPoints = this.offsetDimensionLine(endDimensionPoints, offset * 0.1);\r\n const startDimensionGeometry = new THREE.BufferGeometry().setFromPoints(offsetStartDimensionPoints);\r\n const endDimensionGeometry = new THREE.BufferGeometry().setFromPoints(offsetEndDimensionPoints);\r\n const circArcStartDimensionlLine = new THREE.Line(startDimensionGeometry, this.markupMaterial);\r\n this.scene.add(circArcStartDimensionlLine);\r\n this.markupLines.push(circArcStartDimensionlLine);\r\n const circArcEndDimensionlLine = new THREE.Line(endDimensionGeometry, this.markupMaterial);\r\n this.scene.add(circArcEndDimensionlLine);\r\n this.markupLines.push(circArcEndDimensionlLine);\r\n }\r\n}\r\n//# sourceMappingURL=plan-highlighter.js.map","import * as THREE from \"three\";\r\nimport { UIElement } from \"../../base-types\";\r\nimport { ToolComponent } from \"../../core\";\r\nimport { CivilNavigator } from \"../CivilNavigator\";\r\nimport { FragmentBoundingBox } from \"../../fragments\";\r\nimport { PlanHighlighter } from \"./src/plan-highlighter\";\r\nimport { CivilFloatingWindow } from \"../CivilFloatingWindow\";\r\n// import { KPStation } from \"../CivilNavigator/src/kp-station\";\r\nimport { KPManager } from \"../CivilNavigator/src/kp-manager\";\r\nexport class CivilPlanNavigator extends CivilNavigator {\r\n constructor(components) {\r\n super(components);\r\n this.view = \"horizontal\";\r\n this.uiElement = new UIElement();\r\n const scene = this.scene.get();\r\n this.kpManager = new KPManager(components, this.scene.renderer, this.scene.get(), this.scene.controls, this.view);\r\n this.highlighter = new PlanHighlighter(scene, this.kpManager);\r\n this.setUI();\r\n this.components.tools.add(CivilPlanNavigator.uuid, this);\r\n this.onHighlight.add(({ mesh }) => {\r\n this.highlighter.showCurveInfo(mesh);\r\n this.fitCameraToAlignment(mesh);\r\n });\r\n }\r\n async fitCameraToAlignment(curveMesh) {\r\n const bbox = this.components.tools.get(FragmentBoundingBox);\r\n const alignment = curveMesh.curve.alignment;\r\n for (const curve of alignment.horizontal) {\r\n bbox.addMesh(curve.mesh);\r\n }\r\n const box = bbox.get();\r\n const center = new THREE.Vector3();\r\n const { min, max } = box;\r\n const offset = 1.2;\r\n const size = new THREE.Vector3((max.x - min.x) * offset, (max.y - min.y) * offset, (max.z - min.z) * offset);\r\n box.getCenter(center);\r\n box.setFromCenterAndSize(center, size);\r\n bbox.reset();\r\n await this.scene.controls.fitToBox(box, true);\r\n }\r\n // showKPStations(curveMesh: FRAGS.CurveMesh): void {\r\n // this.kpStation.showKPStations(curveMesh);\r\n // }\r\n // clearKPStations(): void {\r\n // this.kpStation.clearKPStations();\r\n // }\r\n setUI() {\r\n const name = \"Horizontal alignment\";\r\n const floatingWindow = CivilFloatingWindow.get(this.components, this.scene, name);\r\n this.uiElement.set({ floatingWindow });\r\n this.scene.controls.addEventListener(\"update\", () => {\r\n const screenSize = floatingWindow.containerSize;\r\n const { zoom } = this.scene.camera;\r\n this.highlighter.updateOffset(screenSize, zoom, true);\r\n });\r\n floatingWindow.onResized.add(() => {\r\n const screenSize = floatingWindow.containerSize;\r\n const { zoom } = this.scene.camera;\r\n this.highlighter.updateOffset(screenSize, zoom, true);\r\n });\r\n }\r\n}\r\nCivilPlanNavigator.uuid = \"3096dea0-5bc2-41c7-abce-9089b6c9431b\";\r\nToolComponent.libraryUUIDs.add(CivilPlanNavigator.uuid);\r\n//# sourceMappingURL=index.js.map"],"names":["PlanHighlighter","constructor","scene","kpManager","super","this","offset","markupLines","markupMaterial","color","showCurveInfo","curveMesh","disposeMarkups","currentCurveMesh","curve","data","TYPE","showLineInfo","showCircularArcInfo","showClothoidInfo","console","log","updateOffset","screenSize","_zoom","_triggerRedraw","newOffset","Math","max","height","width","dispose","line","remove","removeFromParent","geometry","unSelect","calculateTangent","positions","index","pointIndex","prevPointIndex","nextPointIndex","min","length","prevPoint","fromArray","clone","sub","normalize","calculateParallelCurve","count","parallelCurvePoints","i","perpendicularVector","applyAxisAngle","PI","offsetVector","multiplyScalar","parallelPoint","add","push","calculateDimensionLines","startDimensionPoints","curvePositions","attributes","position","array","linePositions","Error","startCurvePoint","startLinePoint","endDimensionPoints","lastCurveIndex","endCurvePoint","lastLineIndex","endLinePoint","offsetDimensionLine","points","copy","map","point","clearMarkersByType","lengthGeometry","setFromPoints","lineParallelLine","showLineLength","getLength","offsetStartDimensionPoints","offsetEndDimensionPoints","startDimensionGeometry","endDimensionGeometry","lineStartDimensionlLine","lineEndDimensionlLine","showCurveLength","clothParallelLine","clothStartDimensionlLine","clothEndDimensionlLine","radius","RADIUS","linePoints","firstPoint","lastPointIndex","lastPoint","middlePointIndex","middlePoint","tangentVector","y","x","arcCenterPoint","radiusGeometry","radiusLine","showCurveRadius","abs","negate","z","circArcParallelLine","circArcStartDimensionlLine","circArcEndDimensionlLine","CivilPlanNavigator","CivilNavigator","components","view","uiElement","get","renderer","controls","highlighter","setUI","tools","uuid","onHighlight","mesh","fitCameraToAlignment","bbox","alignment","horizontal","addMesh","box","center","size","getCenter","setFromCenterAndSize","reset","fitToBox","floatingWindow","CivilFloatingWindow","set","addEventListener","containerSize","zoom","camera","onResized","libraryUUIDs"],"sourceRoot":""}