{"version":3,"file":"vendor.openbim-components-ac11c6a4.311d4166351291b1.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/measurement/AngleMeasurement/src/index.js","webpack://client-app/./node_modules/openbim-components/src/measurement/AngleMeasurement/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { LineMaterial } from \"three/examples/jsm/lines/LineMaterial\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { Simple2DMarker } from \"../../../core\";\r\nimport { Event, Component } from \"../../../base-types\";\r\nimport { DimensionLabelClassName } from \"../../LengthMeasurement\";\r\nexport class AngleMeasureElement extends Component {\r\n set lineMaterial(material) {\r\n this._lineMaterial.dispose();\r\n this._lineMaterial = material;\r\n this._line.material = material;\r\n this._lineMaterial.resolution.set(window.innerWidth, window.innerHeight);\r\n }\r\n get lineMaterial() {\r\n return this._lineMaterial;\r\n }\r\n set labelMarker(marker) {\r\n this._labelMarker.dispose();\r\n this._labelMarker = marker;\r\n }\r\n get labelMarker() {\r\n return this._labelMarker;\r\n }\r\n get scene() {\r\n return this._components.scene.get();\r\n }\r\n constructor(components, points) {\r\n super(components);\r\n this.enabled = true;\r\n this.visible = true;\r\n this.points = [];\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._lineMaterial = new LineMaterial({\r\n color: 0x6528d7,\r\n linewidth: 2,\r\n });\r\n this._lineGeometry = new LineGeometry();\r\n this._line = new Line2(this._lineGeometry, this._lineMaterial);\r\n this.onAngleComputed = new Event();\r\n this.onPointAdded = new Event();\r\n this._components = components;\r\n const htmlText = document.createElement(\"div\");\r\n htmlText.className = DimensionLabelClassName;\r\n this._labelMarker = new Simple2DMarker(components, htmlText);\r\n this.labelMarker.visible = false;\r\n this.onPointAdded.add(() => {\r\n if (this.points.length === 1)\r\n this.scene.add(this._line);\r\n if (this.points.length === 3)\r\n this.labelMarker.visible = true;\r\n });\r\n this.onAngleComputed.add((angle) => {\r\n var _a;\r\n this.labelMarker.get().element.textContent = `${angle.toFixed(2)}°`;\r\n this.labelMarker\r\n .get()\r\n .position.copy((_a = this.points[1]) !== null && _a !== void 0 ? _a : new THREE.Vector3());\r\n });\r\n points === null || points === void 0 ? void 0 : points.forEach((point) => this.setPoint(point));\r\n }\r\n setPoint(point, index) {\r\n let _index;\r\n if (!index) {\r\n _index = this.points.length === 0 ? 0 : this.points.length;\r\n }\r\n else {\r\n _index = index;\r\n }\r\n if (![0, 1, 2].includes(_index))\r\n return;\r\n this.points[_index] = point;\r\n this.onPointAdded.trigger(point);\r\n const points = this.points.map((point) => {\r\n return [point.x, point.y, point.z];\r\n });\r\n this._lineGeometry.setPositions(points.flat());\r\n }\r\n toggleLabel() {\r\n this.labelMarker.toggleVisibility();\r\n }\r\n computeAngle() {\r\n const v0 = this.points[0];\r\n const v1 = this.points[1];\r\n const v2 = this.points[2];\r\n if (!(v0 && v1 && v2))\r\n return 0;\r\n const vA = new THREE.Vector3().subVectors(v1, v0);\r\n const vB = new THREE.Vector3().subVectors(v1, v2);\r\n const angle = THREE.MathUtils.radToDeg(vA.angleTo(vB));\r\n this.onAngleComputed.trigger(angle);\r\n return angle;\r\n }\r\n async dispose() {\r\n this.points = [];\r\n await this.labelMarker.dispose();\r\n this.onAngleComputed.reset();\r\n this.onPointAdded.reset();\r\n await this.labelMarker.dispose();\r\n this._line.removeFromParent();\r\n this._lineMaterial.dispose();\r\n this._lineGeometry.dispose();\r\n this._components = null;\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n get() {\r\n return {\r\n points: this.points,\r\n angle: this.computeAngle(),\r\n };\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import { LineMaterial } from \"three/examples/jsm/lines/LineMaterial\";\r\nimport { Event, Component, UIElement, } from \"../../base-types\";\r\nimport { ToolComponent } from \"../../core\";\r\nimport { Button } from \"../../ui\";\r\nimport { VertexPicker } from \"../../utils\";\r\nimport { AngleMeasureElement } from \"./src\";\r\nexport class AngleMeasurement extends Component {\r\n set lineMaterial(material) {\r\n this._lineMaterial.dispose();\r\n this._lineMaterial = material;\r\n this._lineMaterial.resolution.set(window.innerWidth, window.innerHeight);\r\n }\r\n get lineMaterial() {\r\n return this._lineMaterial;\r\n }\r\n set enabled(value) {\r\n this._enabled = value;\r\n this.setupEvents(value);\r\n this._vertexPicker.enabled = value;\r\n if (this.components.uiEnabled) {\r\n const main = this.uiElement.get(\"main\");\r\n main.active = value;\r\n }\r\n if (!value)\r\n this.cancelCreation();\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set workingPlane(plane) {\r\n this._vertexPicker.workingPlane = plane;\r\n }\r\n get workingPlane() {\r\n return this._vertexPicker.workingPlane;\r\n }\r\n constructor(components) {\r\n super(components);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.uiElement = new UIElement();\r\n this._enabled = false;\r\n this._currentAngleElement = null;\r\n this._clickCount = 0;\r\n this._measurements = [];\r\n this.onBeforeCreate = new Event();\r\n this.onAfterCreate = new Event();\r\n this.onBeforeCancel = new Event();\r\n this.onAfterCancel = new Event();\r\n this.onBeforeDelete = new Event();\r\n this.onAfterDelete = new Event();\r\n this.create = () => {\r\n if (!this.enabled)\r\n return;\r\n const point = this._vertexPicker.get();\r\n if (!point)\r\n return;\r\n if (!this._currentAngleElement) {\r\n const angleElement = new AngleMeasureElement(this.components);\r\n angleElement.lineMaterial = this.lineMaterial;\r\n // angleElement.onPointRemoved.on(() => this._clickCount--);\r\n this._currentAngleElement = angleElement;\r\n }\r\n this._currentAngleElement.setPoint(point, this._clickCount);\r\n this._currentAngleElement.setPoint(point, (this._clickCount + 1));\r\n this._currentAngleElement.setPoint(point, (this._clickCount + 2));\r\n this._currentAngleElement.computeAngle();\r\n this._clickCount++;\r\n if (this._clickCount === 3)\r\n this.endCreation();\r\n };\r\n this.onMouseMove = () => {\r\n const point = this._vertexPicker.get();\r\n if (!(point && this._currentAngleElement))\r\n return;\r\n this._currentAngleElement.setPoint(point, this._clickCount);\r\n this._currentAngleElement.computeAngle();\r\n };\r\n this.onKeyDown = (e) => {\r\n if (!this.enabled)\r\n return;\r\n if (e.key === \"z\" && e.ctrlKey && this._currentAngleElement) {\r\n // this._currentAngleElement.removePoint(this._clickCount - 1);\r\n }\r\n if (e.key === \"Escape\") {\r\n if (this._clickCount === 0 && !this._currentAngleElement) {\r\n this.enabled = false;\r\n }\r\n else {\r\n this.cancelCreation();\r\n }\r\n }\r\n };\r\n this.components.tools.add(AngleMeasurement.uuid, this);\r\n this.components = components;\r\n this._lineMaterial = new LineMaterial({\r\n color: 0x6528d7,\r\n linewidth: 2,\r\n });\r\n this._vertexPicker = new VertexPicker(components);\r\n // this.enabled = false;\r\n if (components.uiEnabled) {\r\n this.setUI();\r\n }\r\n }\r\n async dispose() {\r\n this.setupEvents(false);\r\n this.onBeforeCreate.reset();\r\n this.onAfterCreate.reset();\r\n this.onBeforeCancel.reset();\r\n this.onAfterCancel.reset();\r\n this.onBeforeDelete.reset();\r\n this.onAfterDelete.reset();\r\n this.uiElement.dispose();\r\n this._lineMaterial.dispose();\r\n await this._vertexPicker.dispose();\r\n for (const measure of this._measurements) {\r\n await measure.dispose();\r\n }\r\n if (this._currentAngleElement) {\r\n await this._currentAngleElement.dispose();\r\n }\r\n this.components = null;\r\n await this.onDisposed.trigger(AngleMeasurement.uuid);\r\n this.onDisposed.reset();\r\n }\r\n delete() { }\r\n /** Deletes all the dimensions that have been previously created. */\r\n async deleteAll() {\r\n for (const dim of this._measurements) {\r\n await dim.dispose();\r\n await this.onAfterDelete.trigger(this);\r\n }\r\n this._measurements = [];\r\n }\r\n endCreation() {\r\n if (this._currentAngleElement) {\r\n this._measurements.push(this._currentAngleElement);\r\n this._currentAngleElement.computeAngle();\r\n this._currentAngleElement = null;\r\n }\r\n this._clickCount = 0;\r\n }\r\n cancelCreation() {\r\n if (this._currentAngleElement) {\r\n this._currentAngleElement.dispose();\r\n this._currentAngleElement = null;\r\n }\r\n this._clickCount = 0;\r\n }\r\n get() {\r\n return this._measurements;\r\n }\r\n setUI() {\r\n const main = new Button(this.components);\r\n main.materialIcon = \"square_foot\";\r\n main.onClick.add(() => {\r\n if (!this.enabled) {\r\n main.active = true;\r\n this.enabled = true;\r\n }\r\n else {\r\n this.enabled = false;\r\n main.active = false;\r\n }\r\n });\r\n this.uiElement.set({ main });\r\n }\r\n setupEvents(active) {\r\n const viewerContainer = this.components.ui.viewerContainer;\r\n if (active) {\r\n viewerContainer.addEventListener(\"click\", this.create);\r\n viewerContainer.addEventListener(\"mousemove\", this.onMouseMove);\r\n window.addEventListener(\"keydown\", this.onKeyDown);\r\n }\r\n else {\r\n const main = this.uiElement.get(\"main\");\r\n main.active = false;\r\n viewerContainer.removeEventListener(\"click\", this.create);\r\n viewerContainer.removeEventListener(\"mousemove\", this.onMouseMove);\r\n window.removeEventListener(\"keydown\", this.onKeyDown);\r\n }\r\n }\r\n}\r\nAngleMeasurement.uuid = \"622fb2c9-528c-4b0a-8a0e-6a1375f0a3aa\";\r\nToolComponent.libraryUUIDs.add(AngleMeasurement.uuid);\r\n//# sourceMappingURL=index.js.map"],"names":["AngleMeasureElement","lineMaterial","material","this","_lineMaterial","dispose","_line","resolution","set","window","innerWidth","innerHeight","labelMarker","marker","_labelMarker","scene","_components","get","constructor","components","points","super","enabled","visible","onDisposed","LineMaterial","color","linewidth","_lineGeometry","LineGeometry","L","Line2","onAngleComputed","onPointAdded","htmlText","document","createElement","className","add","length","angle","_a","element","textContent","toFixed","position","copy","forEach","point","setPoint","index","_index","includes","trigger","map","x","y","z","setPositions","flat","toggleLabel","toggleVisibility","computeAngle","v0","v1","v2","vA","subVectors","vB","angleTo","async","reset","removeFromParent","AngleMeasurement","value","_enabled","setupEvents","_vertexPicker","uiEnabled","uiElement","active","cancelCreation","workingPlane","plane","_currentAngleElement","_clickCount","_measurements","onBeforeCreate","onAfterCreate","onBeforeCancel","onAfterCancel","onBeforeDelete","onAfterDelete","create","angleElement","endCreation","onMouseMove","onKeyDown","e","key","ctrlKey","tools","uuid","VertexPicker","setUI","measure","delete","dim","push","main","materialIcon","onClick","viewerContainer","ui","addEventListener","removeEventListener"],"sourceRoot":""}