@inweb/viewer-visualize 25.8.21 → 25.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-visualize.module.js","sources":["../../viewer-core/dist/viewer-core.module.js","../src/Viewer/Commands/ApplyModelTransform.ts","../src/Viewer/Commands/ClearMarkup.ts","../src/Viewer/Commands/ClearSlices.ts","../src/Viewer/Commands/CreatePreview.ts","../src/Viewer/Commands/Explode.ts","../src/Viewer/Commands/GetDefaultViewPositions.ts","../src/Viewer/Commands/GetModels.ts","../src/Viewer/Commands/GetSelected.ts","../src/Viewer/Commands/HideSelected.ts","../src/Viewer/Commands/IsolateSelected.ts","../src/Viewer/Commands/RegenerateAll.ts","../src/Viewer/Commands/ResetView.ts","../src/Viewer/Commands/SelectModel.ts","../src/Viewer/Commands/SetActiveDragger.ts","../src/Viewer/Commands/SetDefaultViewPosition.ts","../src/Viewer/Commands/SetMarkupColor.ts","../src/Viewer/Commands/SetSelected.ts","../src/Viewer/Commands/ShowAll.ts","../src/Viewer/Commands/Unselect.ts","../src/Viewer/Commands/ZoomToExtents.ts","../src/Viewer/Commands/ZoomToObjects.ts","../src/Viewer/Commands/ZoomToSelected.ts","../src/Viewer/Commands/AutoTransformAllModelsToCentralPoint.ts","../../markup/dist/markup.module.js","../../eventemitter2/dist/eventemitter2.module.js","../src/Viewer/Draggers/Common/OdaGeAction.ts","../src/Viewer/Draggers/Common/OdBaseDragger.ts","../src/Viewer/Draggers/MeasureLineDragger/MeasureUtils.ts","../src/Viewer/Draggers/MeasureLineDragger/MeasureLineItem.ts","../src/Viewer/Draggers/MeasureLineDragger/index.ts","../src/Viewer/Draggers/OdaWalkDragger.ts","../src/Viewer/Draggers/OdBaseCuttingPlaneDragger.ts","../src/Viewer/Draggers/OdCuttingPlaneXAxisDragger.ts","../src/Viewer/Draggers/OdCuttingPlaneYAxisDragger.ts","../src/Viewer/Draggers/OdCuttingPlaneZAxisDragger.ts","../src/Viewer/Draggers/Actions/OrbitAction.ts","../src/Viewer/Draggers/OdOrbitDragger.ts","../src/Viewer/Draggers/Actions/PanAction.ts","../src/Viewer/Draggers/OdPanDragger.ts","../src/Viewer/Draggers/Actions/ZoomAction.ts","../src/Viewer/Draggers/OdZoomDragger.ts","../src/Viewer/Draggers/OdZoomWheelDragger.ts","../src/Viewer/Draggers/OdZoomWindowDragger/OdSelectionFrame.ts","../src/Viewer/Draggers/OdZoomWindowDragger/index.ts","../src/Viewer/Draggers/OrbitAroundBuildingDragger.ts","../src/Viewer/Draggers/Common/GestureManager.ts","../src/Viewer/utils.ts","../src/Viewer/Loaders/BaseLoader.ts","../src/Viewer/Loaders/TCSLoader.ts","../src/Viewer/Loaders/VsfXLoader.ts","../src/Viewer/Loaders/UpdaterController.ts","../src/Viewer/Loaders/VsfXStreamingLoader.ts","../src/Viewer/Loaders/VsfXPartialLoader.ts","../src/Viewer/Loaders/LoaderFactory.ts","../src/Viewer/Draggers/OdaLineDragger.ts","../src/Viewer/Draggers/OdaTextDragger.ts","../src/Viewer/Markup/Visualize/VisualizeMarkup.ts","../src/Viewer/Markup/MarkupFactory.ts","../src/Viewer/Viewer.ts"],"sourcesContent":["class Commands {\n constructor() {\n this._commands = new Map;\n }\n registerCommand(id, handler, description, thisArg) {\n this._commands.set(id, {\n id: id,\n handler: handler,\n thisArg: thisArg,\n description: description\n });\n }\n registerCommandAlias(id, alias) {\n this.registerCommand(alias, ((viewer, ...args) => this.executeCommand(id, viewer, ...args)));\n }\n getCommand(id) {\n return this._commands.get(id);\n }\n getCommands() {\n const map = new Map;\n this._commands.forEach(((value, key) => map.set(key, value)));\n return map;\n }\n executeCommand(id, viewer, ...args) {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n const {handler: handler, thisArg: thisArg} = command;\n const result = handler.apply(thisArg, [ viewer, ...args ]);\n viewer === null || viewer === void 0 ? void 0 : viewer.emit({\n type: \"command\",\n data: id,\n args: args\n });\n return result;\n }\n}\n\nconst _commands = new Map;\n\nfunction commands(viewerType = \"\") {\n let result = _commands.get(viewerType);\n if (!result) {\n result = new Commands;\n _commands.set(viewerType, result);\n }\n return result;\n}\n\ncommands(\"\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"VisualizeJS\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"ThreeJS\").registerCommand(\"noop\", (() => {}));\n\nfunction defaultOptions() {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: {\n red: 255,\n green: 152,\n blue: 0\n },\n edgesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n facesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\"\n };\n}\n\nclass Options {\n constructor(emitter) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n static defaults() {\n return defaultOptions();\n }\n notifierChangeEvent() {\n console.warn(\"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\");\n this.change();\n }\n change() {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({\n type: \"optionschange\",\n data: this\n });\n }\n }\n saveToStorage() {\n if (typeof window !== \"undefined\") try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n loadFromStorage() {\n if (typeof window !== \"undefined\") try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = {\n ...data\n };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n resetToDefaults(fields) {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce(((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }), {});\n this.data = {\n ...this.data,\n ...resetData\n };\n } else {\n this.data = {\n ...this.data,\n ...Options.defaults()\n };\n }\n }\n get data() {\n return this._data;\n }\n set data(value) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = {\n ...Options.defaults(),\n ...this._data,\n ...value,\n enablePartialMode: enablePartialMode,\n sceneGraph: sceneGraph\n };\n this.change();\n }\n get showWCS() {\n return this._data.showWCS;\n }\n set showWCS(value) {\n this._data.showWCS = value;\n this.change();\n }\n get cameraAnimation() {\n return this._data.cameraAnimation;\n }\n set cameraAnimation(value) {\n this._data.cameraAnimation = value;\n this.change();\n }\n get antialiasing() {\n return this._data.antialiasing;\n }\n set antialiasing(value) {\n this._data.antialiasing = value;\n this.change();\n }\n get groundShadow() {\n return this._data.groundShadow;\n }\n set groundShadow(value) {\n this._data.groundShadow = value;\n this.change();\n }\n get shadows() {\n return this._data.shadows;\n }\n set shadows(value) {\n this._data.shadows = value;\n this.change();\n }\n get cameraAxisXSpeed() {\n return this._data.cameraAxisXSpeed;\n }\n set cameraAxisXSpeed(value) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n get cameraAxisYSpeed() {\n return this._data.cameraAxisYSpeed;\n }\n set cameraAxisYSpeed(value) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n get ambientOcclusion() {\n return this._data.ambientOcclusion;\n }\n set ambientOcclusion(value) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n get enableStreamingMode() {\n return this._data.enableStreamingMode;\n }\n set enableStreamingMode(value) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n get enablePartialMode() {\n return this._data.enablePartialMode;\n }\n set enablePartialMode(value) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n get memoryLimit() {\n return this._data.memoryLimit;\n }\n set memoryLimit(value) {\n this._data.memoryLimit = value;\n this.change();\n }\n get cuttingPlaneFillColor() {\n return this._data.cuttingPlaneFillColor;\n }\n set cuttingPlaneFillColor(value) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n get edgesColor() {\n return this._data.edgesColor;\n }\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n get facesColor() {\n return this._data.facesColor;\n }\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n set reverseZoomWheel(value) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n set enableZoomWheel(value) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n get enableGestures() {\n return this._data.enableGestures;\n }\n set enableGestures(value) {\n this._data.enableGestures = !!value;\n this.change();\n }\n get geometryType() {\n return this._data.geometryType;\n }\n set geometryType(value) {\n this._data.geometryType = value;\n this.change();\n }\n}\n\nconst CanvasEvents = [ \"click\", \"contextmenu\", \"dblclick\", \"mousedown\", \"mouseleave\", \"mousemove\", \"mouseup\", \"pointercancel\", \"pointerdown\", \"pointerleave\", \"pointermove\", \"pointerup\", \"touchcancel\", \"touchend\", \"touchmove\", \"touchstart\", \"wheel\" ];\n\nconst CANVAS_EVENTS = CanvasEvents;\n\nclass Dragger {\n constructor(viewer) {\n this.name = \"\";\n }\n initialize() {}\n dispose() {}\n updatePreview() {}\n}\n\nexport { CANVAS_EVENTS, CanvasEvents, Dragger, Options, commands, defaultOptions };\n//# sourceMappingURL=viewer-core.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model, File, Assembly } from \"@inweb/client\";\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nexport const composeMatrixFromTransform = (transform, modelCenter, visLib) => {\n const { translate, scale, rotation } = transform;\n\n const translateMatrix = new visLib.Matrix3d();\n translateMatrix.setTranslation([translate.x, translate.y, translate.z]);\n\n const rotateMatrix = new visLib.Matrix3d();\n rotateMatrix.setToRotation(rotation.angle, [rotation.x, rotation.y, rotation.z], modelCenter);\n\n const scaleMatrix = new visLib.Matrix3d();\n scaleMatrix.setToScaling(scale, modelCenter);\n\n return rotateMatrix.postMultBy(translateMatrix).postMultBy(scaleMatrix);\n};\n\nfunction applyModelTransform(viewer: Viewer, model: Model | File | Assembly) {\n if (!viewer.visualizeJs) return;\n if (!model.getModelTransformMatrix) return; // Model.getModelTransformMatrix() since 24.3.14\n\n const visLib = viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n const transform = model.getModelTransformMatrix(modelPtr.getDatabaseHandle());\n if (transform) {\n const extents = modelPtr.getExtents();\n extents.transformBy(modelPtr.getUnitsMatrix());\n\n const matrix = composeMatrixFromTransform(transform, extents.center(), visLib);\n\n modelPtr.setModelingMatrix(matrix, true);\n }\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"applyModelTransform\", applyModelTransform);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"clearMarkup\", (viewer: Viewer) => viewer.clearOverlay());\ncommands(\"VisualizeJS\").registerCommandAlias(\"clearMarkup\", \"clearOverlay\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"clearSlices\", (viewer: Viewer) => viewer.clearSlices());\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction createPreview(viewer: Viewer, type = \"image/jpeg\", encoderOptions = 0.25): string {\n if (!viewer.visualizeJs) return \"\";\n\n return viewer.canvas?.toDataURL(type, encoderOptions) || \"\";\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"createPreview\", createPreview);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction explode(viewer: Viewer, index = 0): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.explode(index);\n\n viewer.update();\n viewer.emit({ type: \"explode\", data: index });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"explode\", explode);\ncommands(\"VisualizeJS\").registerCommand(\"collect\", (viewer: any) => explode(viewer, 0));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction getDefaultViewPositions(viewer: Viewer): string[] {\n if (!viewer.visualizeJs) return [];\n\n const visLib = viewer.visLib();\n\n const defViewPos = visLib.DefaultViewPosition;\n return Object.keys(defViewPos).filter((x) => x !== \"values\");\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"getDefaultViewPositions\", getDefaultViewPositions);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction getModels(viewer: Viewer): string[] {\n if (!viewer.visualizeJs) return [];\n\n const visViewer = viewer.visViewer();\n\n const handles: string[] = [];\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n if (modelPtr.getName()[0] !== \"$\") handles.push(modelPtr.getDatabaseHandle());\n }\n modelItr.delete();\n\n return handles;\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"getModels\", getModels);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction getSelected(viewer: Viewer): string[] {\n if (!viewer.visualizeJs) return [];\n\n const visViewer = viewer.visViewer();\n\n const handles: string[] = [];\n const selectionSet = visViewer.getSelected();\n if (!selectionSet.isNull() && selectionSet.numItems() !== 0) {\n const itr = selectionSet.getIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n\n const entityPtr =\n entityId.getType() === 1\n ? entityId.openObject()\n : entityId.getType() === 2\n ? entityId.openObjectAsInsert()\n : null;\n\n if (entityPtr) {\n const handle = entityPtr.getNativeDatabaseHandle();\n if (handle !== \"-1\") handles.push(handle);\n entityPtr.delete();\n }\n }\n itr.delete();\n }\n\n return handles;\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"getSelected\", getSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction hideSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.hideSelectedObjects(false);\n\n viewer.update();\n viewer.emit({ type: \"hide\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"hideSelected\", hideSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction isolateSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.isolateSelectedObjects(false);\n\n viewer.update();\n viewer.emit({ type: \"isolate\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"isolateSelected\", isolateSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction regenerateAll(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.regenAll();\n\n viewer.update();\n viewer.emit({ type: \"regenerateall\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"regenerateAll\", regenerateAll);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction resetView(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n viewer.executeCommand(\"setActiveDragger\", \"\");\n viewer.executeCommand(\"clearSlices\");\n viewer.executeCommand(\"clearOverlay\");\n viewer.executeCommand(\"setMarkupColor\");\n viewer.executeCommand(\"unselect\");\n viewer.executeCommand(\"showAll\");\n viewer.executeCommand(\"explode\", 0);\n viewer.executeCommand(\"zoomToExtents\", true);\n viewer.executeCommand(\"k3DViewSW\");\n\n viewer.emit({ type: \"resetview\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"resetView\", resetView);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction selectModel(viewer: Viewer, handle: string): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n const activeView = visViewer.activeView;\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n if (modelPtr.getDatabaseHandle() === handle) {\n const selectionSet = activeView.selectCrossing([0, 9999, 9999, 0], modelPtr);\n\n visViewer.setSelected(selectionSet);\n const handles = viewer.getSelected();\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: selectionSet, handles });\n\n selectionSet.delete();\n break;\n }\n }\n modelItr.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"selectModel\", selectModel);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"setActiveDragger\", (viewer: Viewer, dragger = \"\") => {\n viewer.setActiveDragger(dragger);\n});\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction setDefaultViewPosition(viewer: Viewer, position = \"\"): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const defViewPos = visLib.DefaultViewPosition;\n visViewer.setDefaultViewPositionWithAnimation(defViewPos[position]);\n\n viewer.update();\n viewer.emit({ type: \"viewposition\", data: position });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"setDefaultViewPosition\", setDefaultViewPosition);\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewTop\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewTop\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewBottom\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBottom\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewLeft\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewLeft\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewRight\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewRight\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewFront\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewFront\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewBack\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBack\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewSE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSE\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewSW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSW\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewNE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNE\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewNW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNW\"));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"setMarkupColor\", (viewer: Viewer, r = 255, g = 0, b = 0) => {\n viewer.setMarkupColor(r, g, b);\n});\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction setSelected(viewer: Viewer, handles: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const selectionSet = new visLib.OdTvSelectionSet();\n handles?.forEach((handle) => {\n const entityId = visViewer.getEntityByOriginalHandle(handle + \"\");\n if (!entityId.isNull()) selectionSet.appendEntity(entityId);\n });\n\n visViewer.setSelected(selectionSet);\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: selectionSet, handles });\n\n selectionSet.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"setSelected\", setSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction showAll(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.unisolateSelectedObjects(false);\n\n viewer.update();\n viewer.emit({ type: \"showall\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"showAll\", showAll);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction unselect(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.unselect();\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: visViewer.getSelected(), handles: [] });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"unselect\", unselect);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction zoomToExtents(viewer: Viewer, force = false, animate = viewer.options.cameraAnimation): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n const saveEnableAmination = visViewer.getEnableAnimation();\n\n visViewer.setEnableAnimation(animate);\n visViewer.zoomExtents(force);\n visViewer.update();\n visViewer.setEnableAnimation(saveEnableAmination);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToExtents\", zoomToExtents);\ncommands(\"VisualizeJS\").registerCommandAlias(\"zoomToExtents\", \"zoomExtents\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction zoomToObjects(viewer: Viewer, handles: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const selectionSet = new visLib.OdTvSelectionSet();\n handles.forEach((handle) => {\n const entityId = visViewer.getEntityByOriginalHandle(handle + \"\");\n if (!entityId.isNull()) selectionSet.appendEntity(entityId);\n });\n\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n\n selectionSet.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToObjects\", zoomToObjects);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction zoomToSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n\n const selectionSet = visViewer.getSelected();\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToSelected\", zoomToSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model, File, Assembly, version } from \"@inweb/client\";\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nimport { composeMatrixFromTransform } from \"./ApplyModelTransform\";\n\nfunction isTemplateModel(modelPtr) {\n return modelPtr.getName()[0] === \"$\";\n}\n\nasync function autoTransformAllModelsToCentralPoint(viewer: Viewer, model: Model | File | Assembly): Promise<void> {\n if (!viewer.visualizeJs) return;\n if (!model.getModelTransformMatrix) return; // Model.getModelTransformMatrix() since 24.3.14\n\n const visLib = viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const viewExt = visViewer.getActiveExtents();\n const centralPoint = viewExt.center();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n if (!isTemplateModel(modelPtr)) {\n let ext = modelPtr.getExtents();\n\n const unitsMatrix = modelPtr.getUnitsMatrix();\n ext.transformBy(modelPtr.getUnitsMatrix()); // ext in wcs\n\n const unitsMatrixInvert = modelPtr.getUnitsMatrix().invert();\n\n const center = ext.center();\n const scale = 1.0;\n\n const scaleMatrix = new visLib.Matrix3d();\n const translateMatrix = new visLib.Matrix3d();\n\n translateMatrix.setTranslation([\n centralPoint[0] - center[0],\n centralPoint[1] - center[1],\n centralPoint[2] - center[2],\n ]);\n scaleMatrix.setToScaling(scale, centralPoint);\n\n const resMatrixWithUnits = unitsMatrixInvert\n .postMultBy(scaleMatrix)\n .postMultBy(translateMatrix)\n .postMultBy(unitsMatrix);\n\n const resScale = resMatrixWithUnits.scale();\n const transform = {\n translate: {\n x: resMatrixWithUnits.get(0, 3) - (1 - resScale) * center[0],\n y: resMatrixWithUnits.get(1, 3) - (1 - resScale) * center[1],\n z: resMatrixWithUnits.get(2, 3) - (1 - resScale) * center[2],\n },\n rotation: { x: 0, y: 0, z: 1, angle: 0.0 },\n scale: resScale,\n };\n\n const matrix = composeMatrixFromTransform(transform, center, visLib);\n modelPtr.setModelingMatrix(matrix, true);\n\n centralPoint[0] += Math.abs(ext.max()[0] - ext.min()[0]) * resScale;\n\n await model.setModelTransformMatrix(modelPtr.getDatabaseHandle(), transform);\n }\n\n modelPtr.delete();\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"autoTransformAllModelsToCentralPoint\", autoTransformAllModelsToCentralPoint);\n","import Konva from \"konva\";\n\nclass MarkupColor {\n constructor(r, g, b) {\n this.setColor(r, g, b);\n }\n asHex() {\n return \"#\" + this.HEX;\n }\n asRGB() {\n return {\n r: this.R,\n g: this.G,\n b: this.B\n };\n }\n setColor(r, g, b) {\n this.R = r;\n this.G = g;\n this.B = b;\n this.HEX = this.rgbToHex(r, g, b);\n }\n rgbToHex(r, g, b) {\n const valueToHex = c => {\n const hex = c.toString(16);\n return hex === \"0\" ? \"00\" : hex;\n };\n return valueToHex(r) + valueToHex(g) + valueToHex(b);\n }\n}\n\nclass WorldTransform {\n screenToWorld(position) {\n return {\n x: position.x,\n y: position.y,\n z: 0\n };\n }\n worldToScreen(position) {\n return {\n x: position.x,\n y: position.y\n };\n }\n getScale() {\n return {\n x: 1,\n y: 1,\n z: 1\n };\n }\n}\n\nconst LineTypeSpecs = new Map([ [ \"solid\", [] ], [ \"dot\", [ 30, 30, .001, 30 ] ], [ \"dash\", [ 30, 30 ] ] ]);\n\nclass KonvaLine {\n constructor(params, ref = null) {\n var _a, _b;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.points) params.points = [ {\n x: 50,\n y: 50\n }, {\n x: 100,\n y: 100\n } ];\n const konvaPoints = [];\n params.points.forEach((point => konvaPoints.push(point.x, point.y)));\n this._ref = new Konva.Line({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n strokeWidth: (_b = params.width) !== null && _b !== void 0 ? _b : 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n points: konvaPoints,\n draggable: true,\n strokeScaleEnabled: false,\n dash: LineTypeSpecs.get(params.type) || []\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n }));\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Line\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPoints() {\n return this._ref.points();\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n getLineType() {\n const typeSpecs = this._ref.dash() || [];\n let type;\n switch (typeSpecs) {\n case LineTypeSpecs.get(\"dot\"):\n type = \"dot\";\n break;\n\n case LineTypeSpecs.get(\"dash\"):\n type = \"dash\";\n break;\n\n default:\n type = \"solid\";\n break;\n }\n return type;\n }\n setLineType(type) {\n const specs = LineTypeSpecs.get(type);\n if (specs) this._ref.dash(specs);\n }\n addPoints(points) {\n let newPoints = this._ref.points();\n points.forEach((point => {\n newPoints = newPoints.concat([ point.x, point.y ]);\n }));\n this._ref.points(newPoints);\n }\n}\n\nclass KonvaText {\n constructor(params, ref = null) {\n var _a, _b, _c;\n this.TEXT_FONT_FAMILY = \"Calibri\";\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n if (!params.text) params.text = \"default\";\n this._ref = new Konva.Text({\n x: params.position.x,\n y: params.position.y,\n text: params.text,\n fontSize: (_a = params.fontSize) !== null && _a !== void 0 ? _a : 34,\n fontFamily: this.TEXT_FONT_FAMILY,\n fill: (_b = params.color) !== null && _b !== void 0 ? _b : \"#ff0000\",\n align: \"left\",\n draggable: true,\n rotation: (_c = params.rotation) !== null && _c !== void 0 ? _c : 0\n });\n this._ref.width(this._ref.getTextWidth());\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n const minWidth = 50;\n if (newWidth < minWidth) newWidth = minWidth;\n if (newHeight < Math.round(this.getFontSize())) newHeight = Math.round(this.getFontSize());\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Text\";\n }\n getColor() {\n return this._ref.fill();\n }\n setColor(hex) {\n this._ref.fill(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getText() {\n return this._ref.text();\n }\n setText(text) {\n this._ref.text(text);\n }\n getPosition() {\n return this._ref.getPosition();\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n getFontSize() {\n return this._ref.fontSize();\n }\n setFontSize(size) {\n this._ref.fontSize(size);\n }\n}\n\nclass KonvaRectangle {\n constructor(params, ref = null) {\n var _a, _b, _c, _d;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n this._ref = new Konva.Rect({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n strokeWidth: (_b = params.lineWidth) !== null && _b !== void 0 ? _b : 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n x: params.position.x,\n y: params.position.y,\n width: (_c = params.width) !== null && _c !== void 0 ? _c : 200,\n height: (_d = params.height) !== null && _d !== void 0 ? _d : 200,\n draggable: true,\n strokeScaleEnabled: false\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n const minWidth = 50;\n const minHeight = 50;\n if (newWidth < minWidth) newWidth = minWidth;\n if (newHeight < minHeight) newHeight = minHeight;\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n getPosition() {\n return this._ref.position();\n }\n getWidth() {\n return this._ref.width();\n }\n getHeigth() {\n return this._ref.height();\n }\n setWidth(w) {\n this._ref.width(w);\n }\n setHeight(h) {\n this._ref.height(h);\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Rectangle\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n}\n\nclass KonvaEllipse {\n constructor(params, ref = null) {\n var _a, _b;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n if (!params.radius) params.radius = {\n x: 25,\n y: 25\n };\n this._ref = new Konva.Ellipse({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n strokeWidth: (_b = params.lineWidth) !== null && _b !== void 0 ? _b : 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n x: params.position.x,\n y: params.position.y,\n radiusX: params.radius.x,\n radiusY: params.radius.y,\n draggable: true,\n strokeScaleEnabled: false\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newRadiusX = this._ref.radiusX();\n if (scaleByX) newRadiusX *= attrs.scaleX;\n let newRadiusY = this._ref.radiusY();\n if (scaleByY) newRadiusY *= attrs.scaleY;\n const minRadiusX = 25;\n const minRadiusY = 25;\n if (newRadiusX < minRadiusX) newRadiusX = minRadiusX;\n if (newRadiusY < minRadiusY) newRadiusY = minRadiusY;\n if (e.evt.ctrlKey || e.evt.shiftKey) {\n if (scaleByX) {\n this._ref.radius({\n x: newRadiusX,\n y: newRadiusX\n });\n } else {\n this._ref.radius({\n x: newRadiusY,\n y: newRadiusY\n });\n }\n } else {\n this._ref.radius({\n x: newRadiusX,\n y: newRadiusY\n });\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n getPosition() {\n return this._ref.position();\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n getRadiusX() {\n return this._ref.radiusX();\n }\n setRadiusX(r) {\n this._ref.radiusX(r);\n }\n getRadiusY() {\n return this._ref.radiusY();\n }\n setRadiusY(r) {\n this._ref.radiusY(r);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Ellipse\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n}\n\nclass KonvaArrow {\n constructor(params, ref = null) {\n var _a, _b;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.start) params.start = {\n x: 50,\n y: 50\n };\n if (!params.end) params.end = {\n x: 100,\n y: 100\n };\n this._ref = new Konva.Arrow({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n fill: (_b = params.color) !== null && _b !== void 0 ? _b : \"#ff0000\",\n strokeWidth: 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n points: [ params.start.x, params.start.y, params.end.x, params.end.y ],\n draggable: true,\n strokeScaleEnabled: false\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n }));\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Arrow\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n this._ref.fill(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPoints() {\n const points = this._ref.points();\n return [ {\n x: points[0],\n y: points[1]\n }, {\n x: points[2],\n y: points[3]\n } ];\n }\n setPoints(points) {\n if (points.length === 2) {\n this._ref.points([ points[0].x, points[0].y, points[1].x, points[1].y ]);\n }\n }\n getStartPoint() {\n const points = this._ref.points();\n return {\n x: points[0],\n y: points[1]\n };\n }\n setStartPoint(x, y) {\n const points = this._ref.points();\n this._ref.points([ x, y, points[2], points[3] ]);\n }\n getEndPoint() {\n const points = this._ref.points();\n return {\n x: points[2],\n y: points[3]\n };\n }\n setEndPoint(x, y) {\n const points = this._ref.points();\n this._ref.points([ points[0], points[1], x, y ]);\n }\n}\n\nclass KonvaImage {\n constructor(params, ref = null) {\n var _a, _b;\n this._ratio = 1;\n this.EPSILON = 1e-5;\n this.BASE64_NOT_FOUND = \"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAADsAAAA7AF5KHG9AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAmhJREFUWIXtlr9rVEEQxz+H8RQUJIdeIopYm0vkCg0GBBtbG1NF7Kxt7dR/IGIw/uhTaBNLERURg2kCEUyCYCPi70b0InjGS57FzOZN3r19d+9HJIVfWO52dma/s7Mz8xa2KAaBCWAR+AkECWOmSOIdwC1gtQOpHc+NfQ8wClQ8+1d0vcdH/lQ3bSIRGAZ2pTjAqNovANXIWlXlAXA2zvi2Ln4AjqYgtagYEutENSLvjRoOImFv5iB32Ae8UrLXwFBk3h9ndF0VJnKSO9gTu3yKu5Z1LKnS8YIcABgw5Ks692JZFXcXRJ46Aq6kikCnHNi/mQ50WwVtfaIoBzL3gRk2drSscJ2wrc4VvUoe2wn/41/iBfoVLRnBGnDSY3AAKacy8AmYR+o7K1zCl6wgrgpOAc/MuhvfgMuk+1JGHQgSBcAloKXy78AjYBppJk5/noTulseBMZ23iD/piHFkEdgTQzKk+5wHjmHC3cmBg0BD5xcSTrFXyQPgIWFtDwMvab+2N8DpbhyY1v/3E8gdDgNfVX9SCVZ0/gW4B0wB71S2BpxLcuCM/jaQSHSDEeAX4VMuAG4gTzyHbcAVXXO6GxxwIX+vvxe7JHcYQ07nHqklj96UIW/YhSWzMKcep8VVtf8B1Dw6h4DfhB+sdbgn2R+gnoEc5NR3dZ+3QJ9H74HqXLPCGlJyTfI9y3YCs0owq3OLOpKkLeBI1HhSDT/mdKIPiUCARMTlQx34TMLjtww8IczmO8AJ/N/2JNSQXAiQ671JePePge0+wzJSQq4FFzlaenIvucUAkiQLhC/mLGNZ9xgn5s63BP4CCk0QDtm4BhoAAAAASUVORK5CYII=\";\n this.BASE64_HEADER_START = \"data:image/\";\n if (ref) {\n if (!ref.src || !ref.src.startsWith(this.BASE64_HEADER_START)) ref.src = this.BASE64_NOT_FOUND;\n if (ref.height() <= this.EPSILON) ref.height(32);\n if (ref.width() <= this.EPSILON) ref.width(32);\n this._ref = ref;\n this._canvasImage = ref.image();\n this._ratio = this._ref.height() <= this.EPSILON || this._ref.width() <= this.EPSILON ? 1 : this._ref.height() / this._ref.width();\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 50,\n y: 50\n };\n if (!params.src || !params.src.startsWith(this.BASE64_HEADER_START)) params.src = this.BASE64_NOT_FOUND;\n this._canvasImage = new Image;\n this._canvasImage.onload = () => {\n this._ref.image(this._canvasImage);\n if (this._ref.height() <= this.EPSILON) this._ref.height(this._canvasImage.height);\n if (this._ref.width() <= this.EPSILON) this._ref.width(this._canvasImage.width);\n this._ratio = this._ref.height() <= this.EPSILON || this._ref.width() <= this.EPSILON ? 1 : this._ref.height() / this._ref.width();\n if ((params.width <= this.EPSILON || params.height <= this.EPSILON) && (params.maxWidth >= this.EPSILON || params.maxWidth >= this.EPSILON)) {\n const heightOutOfCanvas = params.maxHeight - this._canvasImage.height;\n const widthOutOfCanvas = params.maxWidth - this._canvasImage.width;\n if (heightOutOfCanvas <= this.EPSILON || widthOutOfCanvas <= this.EPSILON) {\n if (widthOutOfCanvas <= this.EPSILON && widthOutOfCanvas < heightOutOfCanvas / this._ratio) {\n this._ref.height(params.maxWidth * this._ratio);\n this._ref.width(params.maxWidth);\n } else {\n this._ref.width(params.maxHeight / this._ratio);\n this._ref.height(params.maxHeight);\n }\n }\n }\n };\n this._canvasImage.onerror = () => {\n this._canvasImage.onerror = function() {};\n this._canvasImage.src = this.BASE64_NOT_FOUND;\n };\n this._canvasImage.src = params.src;\n this._ref = new Konva.Image({\n x: params.position.x,\n y: params.position.y,\n image: this._canvasImage,\n width: (_a = params.width) !== null && _a !== void 0 ? _a : 0,\n height: (_b = params.height) !== null && _b !== void 0 ? _b : 0,\n draggable: true\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n if (e.evt.ctrlKey || e.evt.shiftKey) {\n if (scaleByX) {\n this._ref.width(newWidth);\n this._ref.height(newWidth * this._ratio);\n } else {\n this._ref.width(newHeight / this._ratio);\n this._ref.height(newHeight);\n }\n } else {\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n getSrc() {\n return this._canvasImage.src;\n }\n setSrc(src) {\n this._canvasImage.src = src;\n }\n getWidth() {\n return this._ref.width();\n }\n setWidth(w) {\n this._ref.width(w);\n this._ref.height(w * this._ratio);\n }\n getHeight() {\n return this._ref.height();\n }\n setHeight(h) {\n this._ref.height(h);\n this._ref.width(h / this._ratio);\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Image\";\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPosition() {\n return this._ref.getPosition();\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n}\n\nclass KonvaCloud {\n constructor(params, ref = null) {\n var _a, _b, _c, _d;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n const arcRadius = 16;\n this._ref = new Konva.Shape({\n x: params.position.x,\n y: params.position.y,\n width: (_a = params.width) !== null && _a !== void 0 ? _a : 200,\n height: (_b = params.height) !== null && _b !== void 0 ? _b : 200,\n stroke: (_c = params.color) !== null && _c !== void 0 ? _c : \"#ff0000\",\n strokeWidth: (_d = params.lineWidth) !== null && _d !== void 0 ? _d : 4,\n draggable: true,\n strokeScaleEnabled: false,\n globalCompositeOperation: \"source-over\",\n sceneFunc: (context, shape) => {\n function calculateMidpoint(position, width, height) {\n const midX = position.x + width / 2;\n const midY = position.y + height / 2;\n return {\n x: midX,\n y: midY\n };\n }\n const points = [ {\n x: 0,\n y: 0\n }, {\n x: 0 + this._ref.width(),\n y: 0\n }, {\n x: 0 + this._ref.width(),\n y: 0 + this._ref.height()\n }, {\n x: 0,\n y: 0 + this._ref.height()\n }, {\n x: 0,\n y: 0\n } ];\n const midPoint = calculateMidpoint({\n x: 0,\n y: 0\n }, this._ref.width(), this._ref.height());\n const baseArcLength = 30;\n context.beginPath();\n for (let iPoint = 0; iPoint < points.length - 1; iPoint++) {\n let approxArcLength = baseArcLength;\n const dx = points[iPoint + 1].x - points[iPoint].x;\n const dy = points[iPoint + 1].y - points[iPoint].y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const arcCount = Math.floor(length / approxArcLength);\n const lengthMod = length % approxArcLength;\n approxArcLength = baseArcLength + arcCount / lengthMod;\n let pX = points[iPoint].x + dx / arcCount / 2;\n let pY = points[iPoint].y + dy / arcCount / 2;\n const pEndX = points[iPoint + 1].x;\n const pEndY = points[iPoint + 1].y;\n const endAngle = Math.atan((pEndY - pY) / (pEndX - pX));\n const startAngle = endAngle + Math.PI;\n const counterClockwise = pX > midPoint.x && pY > midPoint.y;\n for (let iArc = 0; iArc < arcCount; iArc++) {\n if (counterClockwise) {\n context.arc(pX, pY, arcRadius, endAngle, startAngle);\n } else {\n context.arc(pX, pY, arcRadius, startAngle, endAngle);\n }\n pX += dx / arcCount;\n pY += dy / arcCount;\n }\n }\n context.closePath();\n context.fillStrokeShape(shape);\n }\n });\n this._ref.className = \"Cloud\";\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n const minWidth = 100;\n const minHeight = 100;\n if (newWidth < minWidth) newWidth = minWidth;\n if (newHeight < minHeight) newHeight = minHeight;\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.getSelfRect = () => ({\n x: 0 - arcRadius,\n y: 0 - arcRadius,\n width: this._ref.width() + 2 * arcRadius,\n height: this._ref.height() + 2 * arcRadius\n });\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Cloud\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPosition() {\n return this._ref.position();\n }\n setPosition(x, y) {\n this._ref.position({\n x: x,\n y: y\n });\n }\n getWidth() {\n return this._ref.width();\n }\n setWidth(w) {\n this._ref.width(w);\n }\n getHeigth() {\n return this._ref.height();\n }\n setHeight(h) {\n this._ref.height(h);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n}\n\nconst MarkupMode2Konva = {\n SelectMarkup: {\n name: \"SelectMarkup\",\n initializer: null\n },\n Line: {\n name: \"Line\",\n initializer: (ref, params = null) => new KonvaLine(params, ref)\n },\n Text: {\n name: \"Text\",\n initializer: (ref, params = null) => new KonvaText(params, ref)\n },\n Rectangle: {\n name: \"Rect\",\n initializer: (ref, params = null) => new KonvaRectangle(params, ref)\n },\n Ellipse: {\n name: \"Ellipse\",\n initializer: (ref, params = null) => new KonvaEllipse(params, ref)\n },\n Arrow: {\n name: \"Arrow\",\n initializer: (ref, params = null) => new KonvaArrow(params, ref)\n },\n Image: {\n name: \"Image\",\n initializer: (ref, params = null) => new KonvaImage(params, ref)\n },\n Cloud: {\n name: \"Cloud\",\n initializer: (ref, params = null) => new KonvaCloud(params, ref)\n }\n};\n\nclass KonvaMarkup {\n constructor() {\n this._containerEvents = [];\n this._markupIsActive = false;\n this._markupColor = new MarkupColor(255, 0, 0);\n this.lineWidth = 4;\n this.lineType = \"solid\";\n this.fontSize = 34;\n this.changeActiveDragger = event => {\n const draggerName = event.data;\n this._markupContainer.className = this._container.className.split(\" \").filter((x => !x.startsWith(\"oda-cursor-\"))).filter((x => x)).concat(`oda-cursor-${draggerName.toLowerCase()}`).join(\" \");\n this.removeTextInput();\n this.removeImageInput();\n this.enableEditMode(draggerName);\n };\n this.resizeContainer = entries => {\n const {width: width, height: height} = entries[0].contentRect;\n if (!width || !height) return;\n if (!this._konvaStage) return;\n this._konvaStage.width(width);\n this._konvaStage.height(height);\n };\n this.pan = event => {\n const dX = event.dX / window.devicePixelRatio;\n const dY = event.dY / window.devicePixelRatio;\n this.getObjects().forEach((obj => obj.ref().move({\n x: dX,\n y: dY\n })));\n };\n this.redirectToViewer = event => {\n if (this._viewer) this._viewer.emit(event);\n };\n }\n initialize(container, containerEvents, viewer, worldTransformer) {\n if (!Konva) throw new Error('Markup error: Konva is not initialized. Forgot to add <script src=\"https://unpkg.com/konva@9/konva.min.js\"><\\/script> to your page?');\n this._viewer = viewer;\n this._worldTransformer = worldTransformer !== null && worldTransformer !== void 0 ? worldTransformer : new WorldTransform;\n this._container = container;\n this._containerEvents = containerEvents !== null && containerEvents !== void 0 ? containerEvents : [];\n this._markupContainer = document.createElement(\"div\");\n this._markupContainer.id = \"markup-container\";\n this._markupContainer.style.position = \"absolute\";\n this._markupContainer.style.top = \"0px\";\n this._markupContainer.style.left = \"0px\";\n this._markupContainer.style.outline = \"0px\";\n const parentDiv = this._container.parentElement;\n parentDiv.appendChild(this._markupContainer);\n this._resizeObserver = new ResizeObserver(this.resizeContainer);\n this._resizeObserver.observe(parentDiv);\n this._markupColor.setColor(255, 0, 0);\n this.initializeKonva();\n if (this._viewer) {\n this._containerEvents.forEach((x => this._markupContainer.addEventListener(x, this.redirectToViewer)));\n this._viewer.addEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._viewer.addEventListener(\"pan\", this.pan);\n }\n }\n dispose() {\n var _a, _b;\n if (this._viewer) {\n this._viewer.removeEventListener(\"pan\", this.pan);\n this._viewer.removeEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._containerEvents.forEach((x => this._markupContainer.removeEventListener(x, this.redirectToViewer)));\n }\n this.destroyKonva();\n (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n this._resizeObserver = undefined;\n (_b = this._markupContainer) === null || _b === void 0 ? void 0 : _b.remove();\n this._markupContainer = undefined;\n this._container = undefined;\n this._viewer = undefined;\n this._worldTransformer = undefined;\n this._markupIsActive = false;\n }\n syncOverlay() {}\n clearOverlay() {\n this.removeTextInput();\n this.removeImageInput();\n this.clearSelected();\n this.getObjects().forEach((obj => obj.delete()));\n }\n getMarkupColor() {\n return this._markupColor.asRGB();\n }\n setMarkupColor(r, g, b) {\n this._markupColor.setColor(r, g, b);\n }\n colorizeAllMarkup(r, g, b) {\n const hexColor = new MarkupColor(r, g, b).asHex();\n this.getObjects().filter((obj => {\n var _a;\n return (_a = obj.setColor) === null || _a === void 0 ? void 0 : _a.call(obj, hexColor);\n }));\n }\n colorizeSelectedMarkups(r, g, b) {\n const hexColor = new MarkupColor(r, g, b).asHex();\n this.getSelectedObjects().filter((obj => {\n var _a;\n return (_a = obj.setColor) === null || _a === void 0 ? void 0 : _a.call(obj, hexColor);\n }));\n }\n setViewpoint(viewpoint) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n this.clearSelected();\n this.removeTextInput();\n this.removeImageInput();\n const markupColor = ((_a = viewpoint.custom_fields) === null || _a === void 0 ? void 0 : _a.markup_color) || {\n r: 255,\n g: 0,\n b: 0\n };\n this.setMarkupColor(markupColor.r, markupColor.g, markupColor.b);\n (_b = viewpoint.lines) === null || _b === void 0 ? void 0 : _b.forEach((line => {\n const linePoints = [];\n line.points.forEach((point => {\n const screenPoint = this._worldTransformer.worldToScreen(point);\n linePoints.push(screenPoint.x);\n linePoints.push(screenPoint.y);\n }));\n this.addLine(linePoints, line.color, line.type, line.width, line.id);\n }));\n (_c = viewpoint.texts) === null || _c === void 0 ? void 0 : _c.forEach((text => {\n const screenPoint = this._worldTransformer.worldToScreen(text.position);\n this.addText(text.text, screenPoint, text.angle, text.color, text.text_size, text.font_size, text.id);\n }));\n (_d = viewpoint.rectangles) === null || _d === void 0 ? void 0 : _d.forEach((rect => {\n const screenPoint = this._worldTransformer.worldToScreen(rect.position);\n this.addRectangle(screenPoint, rect.width, rect.height, rect.line_width, rect.color, rect.id);\n }));\n (_e = viewpoint.ellipses) === null || _e === void 0 ? void 0 : _e.forEach((ellipse => {\n const screenPoint = this._worldTransformer.worldToScreen(ellipse.position);\n this.addEllipse(screenPoint, ellipse.radius, ellipse.line_width, ellipse.color, ellipse.id);\n }));\n (_f = viewpoint.arrows) === null || _f === void 0 ? void 0 : _f.forEach((arrow => {\n const startPoint = this._worldTransformer.worldToScreen(arrow.start);\n const endPoint = this._worldTransformer.worldToScreen(arrow.end);\n this.addArrow(startPoint, endPoint, arrow.color, arrow.id);\n }));\n (_g = viewpoint.clouds) === null || _g === void 0 ? void 0 : _g.forEach((cloud => {\n const screenPoint = this._worldTransformer.worldToScreen(cloud.position);\n this.addCloud(screenPoint, cloud.width, cloud.height, cloud.line_width, cloud.color, cloud.id);\n }));\n (_h = viewpoint.images) === null || _h === void 0 ? void 0 : _h.forEach((image => {\n const screenPoint = this._worldTransformer.worldToScreen(image.position);\n this.addImage(screenPoint, image.src, image.width, image.height, image.id);\n }));\n }\n getViewpoint() {\n const viewpoint = {};\n viewpoint.lines = this.getMarkupLines();\n viewpoint.texts = this.getMarkupTexts();\n viewpoint.arrows = this.getMarkupArrows();\n viewpoint.clouds = this.getMarkupClouds();\n viewpoint.ellipses = this.getMarkupEllipses();\n viewpoint.images = this.getMarkupImages();\n viewpoint.rectangles = this.getMarkupRectangles();\n viewpoint.custom_fields = {\n markup_color: this.getMarkupColor()\n };\n viewpoint.snapshot = {\n data: this.combineMarkupWithDrawing()\n };\n viewpoint.description = (new Date).toDateString();\n return viewpoint;\n }\n enableEditMode(mode) {\n if (!mode || !MarkupMode2Konva[mode]) {\n this.clearSelected();\n this.removeTextInput();\n this.removeImageInput();\n this._markupIsActive = false;\n } else {\n this._markupMode = mode;\n this._markupIsActive = true;\n }\n return this;\n }\n createObject(type, params) {\n const konvaShape = MarkupMode2Konva[type];\n if (!konvaShape || !konvaShape.initializer) throw new Error(`Markup CreateObject - unsupported markup type ${type}`);\n const object = konvaShape.initializer(null, params);\n this.addObject(object);\n return object;\n }\n getObjects() {\n const objects = [];\n Object.keys(MarkupMode2Konva).forEach((type => {\n const konvaShape = MarkupMode2Konva[type];\n this.konvaLayerFind(type).forEach((ref => objects.push(konvaShape.initializer(ref))));\n }));\n return objects;\n }\n getSelectedObjects() {\n if (!this._konvaTransformer) return [];\n return this._konvaTransformer.nodes().map((ref => {\n const name = ref.className;\n const konvaShape = Object.values(MarkupMode2Konva).find((shape => shape.name === name));\n return konvaShape ? konvaShape.initializer(ref) : null;\n })).filter((x => x));\n }\n selectObjects(objects) {\n if (!this._konvaTransformer) return;\n const selectedObjs = this._konvaTransformer.nodes().concat(objects.map((x => x.ref())));\n this._konvaTransformer.nodes(selectedObjs);\n }\n clearSelected() {\n if (this._konvaTransformer) this._konvaTransformer.nodes([]);\n }\n addObject(object) {\n if (object.type() === \"Image\") this._groupImages.add(object.ref()); else if (object.type() === \"Text\") this._groupTexts.add(object.ref()); else this._groupGeometry.add(object.ref());\n }\n konvaLayerFind(type) {\n if (!this._konvaLayer) return [];\n const konvaShape = MarkupMode2Konva[type];\n if (!konvaShape || !konvaShape.initializer) return [];\n return this._konvaLayer.find(konvaShape.name).filter((ref => ref.parent === this._konvaLayer || ref.parent === this._groupImages || ref.parent === this._groupGeometry || ref.parent === this._groupTexts));\n }\n initializeKonva() {\n const stage = new Konva.Stage({\n container: this._markupContainer,\n width: this._container.clientWidth,\n height: this._container.clientHeight\n });\n this._konvaStage = stage;\n const layer = new Konva.Layer({\n pixelRation: window.devicePixelRatio\n });\n stage.add(layer);\n this._groupImages = new Konva.Group;\n layer.add(this._groupImages);\n this._groupGeometry = new Konva.Group;\n layer.add(this._groupGeometry);\n this._groupTexts = new Konva.Group;\n layer.add(this._groupTexts);\n this._konvaLayer = layer;\n const transformer = new Konva.Transformer({\n shouldOverdrawWholeArea: false,\n keepRatio: false,\n flipEnabled: false\n });\n layer.add(transformer);\n this._konvaTransformer = transformer;\n let isPaint = false;\n let lastLine;\n let mouseDownPos;\n let lastObj;\n stage.on(\"mousedown touchstart\", (e => {\n if (!this._markupIsActive || e.target !== stage || this._markupMode === \"Text\" || this._markupMode === \"Image\") return;\n if (e.target === stage && transformer.nodes().length > 0) {\n transformer.nodes([]);\n return;\n }\n const pos = stage.getPointerPosition();\n mouseDownPos = pos;\n isPaint = [ \"Arrow\", \"Cloud\", \"Ellipse\", \"Line\", \"Rectangle\" ].some((m => m === this._markupMode));\n if (this._markupMode === \"Line\") {\n lastLine = this.addLine([ pos.x, pos.y, pos.x, pos.y ]);\n }\n }));\n stage.on(\"mouseup touchend\", (e => {\n if (!this._markupIsActive) return;\n if (isPaint) {\n const pos = stage.getPointerPosition();\n const defParams = mouseDownPos && pos.x === mouseDownPos.x && pos.y === mouseDownPos.y;\n const startX = defParams ? mouseDownPos.x : Math.min(mouseDownPos.x, pos.x);\n const startY = defParams ? mouseDownPos.y : Math.min(mouseDownPos.y, pos.y);\n const dX = defParams ? 200 : Math.abs(mouseDownPos.x - pos.x);\n const dY = defParams ? 200 : Math.abs(mouseDownPos.y - pos.y);\n if (defParams) {\n if (this._markupMode === \"Rectangle\") {\n this.addRectangle({\n x: startX,\n y: startY\n }, dX, dY);\n } else if (this._markupMode === \"Ellipse\") {\n this.addEllipse({\n x: startX,\n y: startY\n }, {\n x: dX / 2,\n y: dY / 2\n });\n } else if (this._markupMode === \"Arrow\") {\n this.addArrow({\n x: mouseDownPos.x,\n y: mouseDownPos.y\n }, {\n x: defParams ? mouseDownPos.x + 200 : pos.x,\n y: defParams ? startY : pos.y\n });\n } else if (this._markupMode === \"Cloud\") {\n this.addCloud({\n x: startX,\n y: startY\n }, Math.max(100, dX), Math.max(100, dY));\n }\n }\n }\n lastObj = undefined;\n isPaint = false;\n }));\n stage.on(\"mousemove touchmove\", (e => {\n if (!this._markupIsActive) return;\n if (!isPaint) {\n return;\n }\n const pos = stage.getPointerPosition();\n const defParams = mouseDownPos && pos.x === mouseDownPos.x && pos.y === mouseDownPos.y;\n const startX = defParams ? mouseDownPos.x : Math.min(mouseDownPos.x, pos.x);\n const startY = defParams ? mouseDownPos.y : Math.min(mouseDownPos.y, pos.y);\n const dX = defParams ? 200 : Math.abs(mouseDownPos.x - pos.x);\n const dY = defParams ? 200 : Math.abs(mouseDownPos.y - pos.y);\n if (this._markupMode === \"Line\") {\n lastLine.addPoints([ {\n x: pos.x,\n y: pos.y\n } ]);\n } else if (this._markupMode === \"Arrow\") {\n if (lastObj) lastObj.setEndPoint(pos.x, pos.y); else lastObj = this.addArrow({\n x: mouseDownPos.x,\n y: mouseDownPos.y\n }, {\n x: pos.x,\n y: pos.y\n });\n } else if (this._markupMode === \"Rectangle\") {\n if (lastObj) {\n lastObj.setPosition(startX, startY);\n lastObj.setWidth(dX);\n lastObj.setHeight(dY);\n } else lastObj = this.addRectangle({\n x: startX,\n y: startY\n }, dX, dY);\n } else if (this._markupMode === \"Ellipse\") {\n if (lastObj) {\n lastObj.setPosition(startX, startY);\n lastObj.setRadiusX(dX);\n lastObj.setRadiusY(dY);\n } else lastObj = this.addEllipse({\n x: startX,\n y: startY\n }, {\n x: dX,\n y: dY\n });\n } else if (this._markupMode === \"Cloud\") {\n if (lastObj) {\n lastObj.setPosition(startX, startY);\n lastObj.setWidth(Math.max(100, dX));\n lastObj.setHeight(Math.max(100, dY));\n } else lastObj = this.addCloud({\n x: startX,\n y: startY\n }, dX, dY);\n }\n }));\n stage.on(\"click tap\", (e => {\n if (!this._markupIsActive) return;\n if (e.target === stage) {\n if (this._markupMode === \"Text\") {\n if (this._textInputRef && this._textInputRef.value) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle); else if (transformer.nodes().length === 0) {\n const pos = stage.getPointerPosition();\n this.createTextInput(pos, e.evt.pageX, e.evt.pageY, 0, null);\n }\n } else if (this._markupMode === \"Image\") {\n if (this._imageInputRef && this._imageInputRef.value) this.addImage({\n x: this._imageInputPos.x,\n y: this._imageInputPos.y\n }, this._imageInputRef.value, 0, 0, this._imageInputRef.value); else if (transformer.nodes().length === 0) {\n const pos = stage.getPointerPosition();\n this.createImageInput(pos);\n }\n }\n transformer.nodes([]);\n return;\n }\n if (this._markupMode === \"Text\" || this._markupMode === \"SelectMarkup\") {\n if (e.target.className === \"Text\" && transformer.nodes().length === 1 && transformer.nodes()[0] === e.target) {\n if (this._textInputRef && this._textInputRef.value) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle); else this.createTextInput({\n x: e.target.attrs.x,\n y: e.target.attrs.y\n }, e.evt.pageX, e.evt.pageY, e.target.attrs.rotation, e.target.attrs.text);\n return;\n } else {\n this.removeTextInput();\n }\n }\n if (this._markupMode === \"Image\" || this._markupMode === \"SelectMarkup\") {\n if (e.target.className === \"Image\" && transformer.nodes().length === 1 && transformer.nodes()[0] === e.target) {\n if (this._imageInputRef && this._imageInputRef.value) this.addImage(this._imageInputPos, this._imageInputRef.value, 0, 0); else this.createImageInput({\n x: e.target.attrs.x,\n y: e.target.attrs.y\n });\n return;\n } else {\n this.removeImageInput();\n }\n }\n if (transformer.nodes().filter((x => x.className === \"Cloud\" || x.className === \"Image\")).length > 0 || e.target.className === \"Cloud\" || e.target.className === \"Image\") {\n transformer.rotateEnabled(false);\n } else {\n transformer.rotateEnabled(true);\n }\n const metaPressed = e.evt.shiftKey || e.evt.ctrlKey || e.evt.metaKey;\n const isSelected = transformer.nodes().indexOf(e.target) >= 0;\n if (!metaPressed && !isSelected) {\n transformer.nodes([ e.target ]);\n } else if (metaPressed && isSelected) {\n const nodes = transformer.nodes().slice();\n nodes.splice(nodes.indexOf(e.target), 1);\n transformer.nodes(nodes);\n } else if (metaPressed && !isSelected) {\n const nodes = transformer.nodes().concat([ e.target ]);\n transformer.nodes(nodes);\n }\n }));\n const container = stage.container();\n container.tabIndex = 1;\n container.focus();\n container.addEventListener(\"keydown\", (e => {\n if (!this._markupIsActive) return;\n if (e.code === \"Delete\") {\n this.getSelectedObjects().forEach((obj => obj.delete()));\n this.clearSelected();\n return;\n }\n e.preventDefault();\n }));\n }\n destroyKonva() {\n var _a;\n this.removeTextInput();\n this.removeImageInput();\n this.clearOverlay();\n (_a = this._konvaStage) === null || _a === void 0 ? void 0 : _a.destroy();\n this._groupImages = undefined;\n this._groupGeometry = undefined;\n this._groupTexts = undefined;\n this._konvaLayer = undefined;\n this._konvaTransformer = undefined;\n this._konvaStage = undefined;\n }\n getMarkupLines() {\n const lines = [];\n this.konvaLayerFind(\"Line\").forEach((ref => {\n const linePoints = ref.points();\n if (!linePoints) return;\n const worldPoints = [];\n const absoluteTransform = ref.getAbsoluteTransform();\n for (let i = 0; i < linePoints.length; i += 2) {\n const atPoint = absoluteTransform.point({\n x: linePoints[i],\n y: linePoints[i + 1]\n });\n const worldPoint = this._worldTransformer.screenToWorld(atPoint);\n worldPoints.push(worldPoint);\n }\n const konvaLine = new KonvaLine(null, ref);\n const line = {\n id: konvaLine.id(),\n points: worldPoints,\n color: konvaLine.getColor() || \"#ff0000\",\n type: konvaLine.getLineType() || this.lineType,\n width: konvaLine.getLineWidth() || this.lineWidth\n };\n lines.push(line);\n }));\n return lines;\n }\n getMarkupTexts() {\n const texts = [];\n this.konvaLayerFind(\"Text\").forEach((ref => {\n const textSize = .02;\n const textScale = this._worldTransformer.getScale();\n const position = {\n x: ref.x(),\n y: ref.y()\n };\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaText(null, ref);\n const text = {\n id: shape.id(),\n position: worldPoint,\n text: shape.getText(),\n text_size: textSize * textScale.y,\n angle: shape.getRotation(),\n color: shape.getColor(),\n font_size: shape.getFontSize()\n };\n texts.push(text);\n }));\n return texts;\n }\n getMarkupRectangles() {\n const rectangles = [];\n this.konvaLayerFind(\"Rectangle\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaRectangle(null, ref);\n const rectangle = {\n id: shape.id(),\n position: worldPoint,\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor()\n };\n rectangles.push(rectangle);\n }));\n return rectangles;\n }\n getMarkupEllipses() {\n const ellipses = [];\n this.konvaLayerFind(\"Ellipse\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaEllipse(null, ref);\n const ellipse = {\n id: shape.id(),\n position: worldPoint,\n radius: {\n x: ref.getRadiusX(),\n y: ref.getRadiusY()\n },\n line_width: shape.getLineWidth(),\n color: shape.getColor()\n };\n ellipses.push(ellipse);\n }));\n return ellipses;\n }\n getMarkupArrows() {\n const arrows = [];\n this.konvaLayerFind(\"Arrow\").forEach((ref => {\n const absoluteTransform = ref.getAbsoluteTransform();\n const atStartPoint = absoluteTransform.point({\n x: ref.points()[0],\n y: ref.points()[1]\n });\n const worldStartPoint = this._worldTransformer.screenToWorld(atStartPoint);\n const atEndPoint = absoluteTransform.point({\n x: ref.points()[2],\n y: ref.points()[3]\n });\n const worldEndPoint = this._worldTransformer.screenToWorld(atEndPoint);\n const shape = new KonvaArrow(null, ref);\n const arrow = {\n id: shape.id(),\n start: worldStartPoint,\n end: worldEndPoint,\n color: shape.getColor()\n };\n arrows.push(arrow);\n }));\n return arrows;\n }\n getMarkupImages() {\n const images = [];\n this.konvaLayerFind(\"Image\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaImage(null, ref);\n const image = {\n id: shape.id(),\n position: worldPoint,\n src: shape.getSrc(),\n width: shape.getWidth(),\n height: shape.getHeight()\n };\n images.push(image);\n }));\n return images;\n }\n getMarkupClouds() {\n const clouds = [];\n this.konvaLayerFind(\"Cloud\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaCloud(null, ref);\n const cloud = {\n id: shape.id(),\n position: worldPoint,\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor()\n };\n clouds.push(cloud);\n }));\n return clouds;\n }\n combineMarkupWithDrawing() {\n this.clearSelected();\n const tempCanvas = document.createElement(\"canvas\");\n if (this._konvaStage) {\n tempCanvas.width = this._konvaStage.width();\n tempCanvas.height = this._konvaStage.height();\n const ctx = tempCanvas.getContext(\"2d\");\n if (this._container instanceof HTMLCanvasElement) ctx.drawImage(this._container, 0, 0);\n ctx.drawImage(this._konvaStage.toCanvas({\n pixelRatio: window.devicePixelRatio\n }), 0, 0);\n }\n return tempCanvas.toDataURL(\"image/jpeg\", .25);\n }\n addLine(linePoints, color, type, width, id) {\n if (!linePoints || linePoints.length === 0) return;\n const points = [];\n for (let i = 0; i < linePoints.length; i += 2) {\n points.push({\n x: linePoints[i],\n y: linePoints[i + 1]\n });\n }\n const konvaLine = new KonvaLine({\n points: points,\n type: type || this.lineType,\n width: width || this.lineWidth,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaLine);\n return konvaLine;\n }\n createTextInput(pos, inputX, inputY, angle, text) {\n if (!this._textInputRef) {\n this._textInputPos = pos;\n this._textInputAngle = angle;\n this._textInputRef = document.createElement(\"textarea\");\n this._textInputRef.style.zIndex = \"9999\";\n this._textInputRef.style.position = \"absolute\";\n this._textInputRef.style.display = \"block\";\n this._textInputRef.style.top = inputY + \"px\";\n this._textInputRef.style.left = inputX + \"px\";\n this._textInputRef.style.fontSize = `${this.fontSize}px`;\n this._textInputRef.style.color = `${this._markupColor.asHex()}`;\n this._textInputRef.style.fontFamily = \"Calibri\";\n this._textInputRef.onkeydown = event => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle);\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n this.removeTextInput();\n }\n };\n if (text) this._textInputRef.value = text;\n document.body.appendChild(this._textInputRef);\n setTimeout((() => {\n this._textInputRef.focus();\n }), 50);\n } else {\n this.removeTextInput();\n }\n }\n removeTextInput() {\n var _a;\n (_a = this._textInputRef) === null || _a === void 0 ? void 0 : _a.remove();\n this._textInputRef = null;\n this._textInputPos = null;\n this._textInputAngle = 0;\n }\n createImageInput(pos) {\n if (!this._imageInputRef) {\n const convertBase64 = file => new Promise(((resolve, reject) => {\n const fileReader = new FileReader;\n fileReader.readAsDataURL(file);\n fileReader.onload = () => {\n resolve(fileReader.result);\n };\n fileReader.onerror = error => {\n reject(error);\n };\n }));\n this._imageInputPos = pos;\n this._imageInputRef = document.createElement(\"input\");\n this._imageInputRef.style.display = \"none\";\n this._imageInputRef.type = \"file\";\n this._imageInputRef.accept = \"image/png, image/jpeg\";\n this._imageInputRef.onchange = async event => {\n const file = event.target.files[0];\n const base64 = await convertBase64(file);\n this.addImage({\n x: this._imageInputPos.x,\n y: this._imageInputPos.y\n }, base64.toString(), 0, 0);\n };\n this._imageInputRef.oncancel = event => {\n this.removeImageInput();\n };\n document.body.appendChild(this._imageInputRef);\n setTimeout((() => {\n this._imageInputRef.click();\n }), 50);\n } else {\n this.removeImageInput();\n }\n }\n removeImageInput() {\n var _a;\n (_a = this._imageInputRef) === null || _a === void 0 ? void 0 : _a.remove();\n this._imageInputRef = null;\n this._imageInputPos = null;\n }\n addText(text, position, angle, color, textSize, fontSize, id) {\n var _a;\n if (!text) return;\n (_a = this.getSelectedObjects().at(0)) === null || _a === void 0 ? void 0 : _a.delete();\n this.clearSelected();\n this.removeTextInput();\n const tolerance = 1e-6;\n if (textSize && textSize > tolerance && (!fontSize || fontSize < tolerance)) {\n const size = .02;\n const scale = this._worldTransformer.getScale();\n fontSize = textSize / (scale.y / size) / 34;\n }\n const konvaText = new KonvaText({\n position: {\n x: position.x,\n y: position.y\n },\n text: text,\n rotation: angle,\n fontSize: fontSize || this.fontSize,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaText);\n return konvaText;\n }\n addRectangle(position, width, height, lineWidth, color, id) {\n if (!position) return;\n const konvaRectangle = new KonvaRectangle({\n position: position,\n width: width,\n height: height,\n lineWidth: lineWidth || this.lineWidth,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaRectangle);\n return konvaRectangle;\n }\n addEllipse(position, radius, lineWidth, color, id) {\n if (!position) return;\n const konvaEllipse = new KonvaEllipse({\n position: position,\n radius: radius,\n lineWidth: lineWidth,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaEllipse);\n return konvaEllipse;\n }\n addArrow(start, end, color, id) {\n if (!start || !end) return;\n const konvaArrow = new KonvaArrow({\n start: start,\n end: end,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaArrow);\n return konvaArrow;\n }\n addCloud(position, width, height, lineWidth, color, id) {\n if (!position || !width || !height) return;\n const konvaCloud = new KonvaCloud({\n position: position,\n width: width,\n height: height,\n color: color || this._markupColor.asHex(),\n lineWidth: lineWidth || this.lineWidth,\n id: id\n });\n this.addObject(konvaCloud);\n return konvaCloud;\n }\n addImage(position, src, width, height, id) {\n var _a;\n if (!position || !src) return;\n (_a = this.getSelectedObjects().at(0)) === null || _a === void 0 ? void 0 : _a.delete();\n this.clearSelected();\n this.removeImageInput();\n const konvaImage = new KonvaImage({\n position: position,\n src: src,\n width: width,\n height: height,\n maxWidth: this._konvaStage.width() - position.x,\n maxHeight: this._konvaStage.height() - position.y,\n id: id\n });\n this.addObject(konvaImage);\n return konvaImage;\n }\n}\n\nexport { KonvaMarkup as Markup };\n//# sourceMappingURL=markup.module.js.map\n","class EventEmitter2 {\n constructor() {\n this._listeners = {};\n }\n addEventListener(type, listener) {\n if (this._listeners[type] === undefined) this._listeners[type] = [];\n this._listeners[type].push(listener);\n return this;\n }\n removeEventListener(type, listener) {\n if (this._listeners[type] === undefined) return this;\n const listeners = this._listeners[type].filter((x => x !== listener));\n if (listeners.length !== 0) this._listeners[type] = listeners; else delete this._listeners[type];\n return this;\n }\n removeAllListeners(type) {\n if (type) delete this._listeners[type]; else this._listeners = {};\n return this;\n }\n emitEvent(event) {\n if (this._listeners[event.type] === undefined) return false;\n const invoke = this._listeners[event.type].slice();\n invoke.forEach((listener => listener.call(this, event)));\n return true;\n }\n on(type, listener) {\n return this.addEventListener(type, listener);\n }\n off(type, listener) {\n return this.removeEventListener(type, listener);\n }\n emit(type, ...args) {\n if (typeof type === \"string\") return this.emitEvent({\n type: type,\n args: args\n }); else if (typeof type === \"object\") return this.emitEvent(type); else return false;\n }\n}\n\nexport { EventEmitter2 };\n//# sourceMappingURL=eventemitter2.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Matrix3d, OdTvPlane, Point3d, Vector3d } from \"./Geometry\";\n\nexport type ViewParams = {\n position: number[];\n target: number[];\n upVector: number[];\n viewFieldWidth: number;\n viewFieldHeight: number;\n perspective: boolean;\n};\n\nexport class OdaGeAction {\n protected m_module;\n\n constructor(module: any) {\n this.m_module = module;\n }\n\n protected getViewer(): any {\n return this.m_module.getViewer();\n }\n\n protected getModel(): any {\n return this.getViewer().getMarkupModel();\n }\n\n protected copyPoint(point: Point3d): Point3d {\n const p: Point3d = new this.m_module.Point3d();\n p.set(point.x, point.y, point.z);\n return p;\n }\n\n protected createVector3d(): Vector3d {\n return new this.m_module.Vector3d();\n }\n\n protected createPoint3d(): Point3d {\n return new this.m_module.Point3d();\n }\n\n protected createMatrix3d(): Matrix3d {\n return new this.m_module.Matrix3d();\n }\n\n protected createPlane(): OdTvPlane {\n return new this.m_module.OdTvPlane();\n }\n\n protected toVector(geVector): Vector3d {\n return this.m_module.Vector3d.createFromArray(geVector);\n }\n\n protected toGeVector(v: Vector3d): number[] {\n return [v.x, v.y, v.z];\n }\n\n protected toGePoint(point: Point3d): number[] {\n return [point.x, point.y, point.z];\n }\n\n protected toPoint(gePoint: number[]): Point3d {\n return this.m_module.Point3d.createFromArray(gePoint);\n }\n\n protected screenToWorld(x: number, y: number): Point3d {\n return this.toPoint(this.m_module.getViewer().screenToWorld(x, y));\n }\n\n protected toDoubleArray(points: Point3d[]): number[] {\n const p: number[] = [];\n for (let i = 0; i < points.length; i++) {\n p.push(points[i].x);\n p.push(points[i].y);\n p.push(points[i].z);\n }\n return p;\n }\n\n protected correctCameraTarget(): void {\n const params = this.getViewParams();\n const ext = this.m_module.getViewer().getActiveExtents();\n const { min, max } = ext;\n const target = this.toPoint(params.target);\n\n const contains =\n target.x >= min.x &&\n target.y >= min.y &&\n target.z >= min.z &&\n target.x <= max.x &&\n target.y <= max.y &&\n target.z <= max.z;\n if (!contains) {\n params.target = ext.center();\n this.setViewParams(params);\n }\n }\n\n protected setViewParams = (params: ViewParams) => {\n const extView = this.m_module.getViewer().getActiveTvExtendedView();\n extView.setView(\n params.position,\n params.target,\n params.upVector,\n params.viewFieldWidth,\n params.viewFieldHeight,\n params.perspective\n );\n extView.delete?.();\n };\n\n protected getViewParams = () => {\n const view = this.m_module.getViewer().activeView;\n const obj = {\n position: view.viewPosition,\n target: view.viewTarget,\n upVector: view.upVector,\n viewFieldWidth: view.viewFieldWidth,\n viewFieldHeight: view.viewFieldHeight,\n perspective: view.perspective,\n } as ViewParams;\n view.delete?.();\n return obj;\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\n\nimport { CANVAS_EVENTS } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../../Viewer\";\nimport { Point2d } from \"./Geometry\";\nimport { OdaGeAction } from \"./OdaGeAction\";\n\nconst CLICK_DELTA = 5;\n\nconst INTERACTIVITY_FPS = 24;\n\nexport class OdBaseDragger extends OdaGeAction {\n protected subject: Viewer;\n protected needInputText: boolean;\n protected mouseDownPosition: Point2d;\n protected autoSelect: boolean;\n protected onmessage: (event: any) => boolean;\n protected canvasEvents: string[];\n protected isDragging: boolean;\n protected press: boolean;\n\n public name: string;\n\n constructor(subject: Viewer) {\n super(subject.visualizeJs);\n this.subject = subject;\n this.needInputText = false;\n this.mouseDownPosition = { x: 0, y: 0 };\n this.autoSelect = false;\n\n this.onmessage = (event) => this.subject.emitEvent(event);\n this.canvasEvents = CANVAS_EVENTS;\n }\n\n public initialize(): void {\n this.canvasEvents = this.canvasEvents.filter((x) => typeof this[x] === \"function\");\n this.canvasEvents.forEach((x) => (this[x] = this[x].bind(this)));\n this.canvasEvents.forEach((x) => this.subject.on(x, this[x]));\n\n this.getViewer().setEnableAutoSelect(!!this.autoSelect);\n }\n\n public dispose(): void {\n this.canvasEvents.forEach((x) => this.subject.off(x, this[x]));\n }\n\n protected relativeCoords(event: MouseEvent): Point2d {\n return { x: event.offsetX * window.devicePixelRatio, y: event.offsetY * window.devicePixelRatio };\n }\n\n protected pointerdown(ev: PointerEvent): void {\n if (!ev.isPrimary || OdBaseDragger.isGestureActive) {\n return;\n }\n\n (ev.target as HTMLElement).setPointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.isDragging = true;\n this.mouseDownPosition = { x: relCoord.x, y: relCoord.y };\n this.start(relCoord.x, relCoord.y, ev.clientX, ev.clientY);\n this.subject.update();\n }\n\n protected pointerup(ev: PointerEvent): void {\n if (OdBaseDragger.needSkipPointerUp) {\n return;\n }\n\n if (!ev.isPrimary) {\n return;\n }\n\n (ev.target as HTMLElement).releasePointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.end(relCoord.x, relCoord.y);\n this.isDragging = false;\n this.subject.update();\n }\n\n protected pointercancel(ev: PointerEvent): void {\n if (!ev.isPrimary) {\n return;\n }\n\n this.m_module.canvas.dispatchEvent(new PointerEvent(\"pointerup\", ev));\n }\n\n protected pointermove(ev: PointerEvent): void {\n if (!ev.isPrimary || OdBaseDragger.isGestureActive) {\n return;\n }\n\n const relCoord = this.relativeCoords(ev);\n this.drag(relCoord.x, relCoord.y, ev.movementX, ev.movementY);\n if (this.isDragging) {\n this.subject.update();\n }\n }\n\n protected click(ev: MouseEvent): void {\n const viewer = this.getViewer();\n const relCoord = this.relativeCoords(ev);\n const x = relCoord.x;\n const y = relCoord.y;\n\n const isNotDragging =\n Math.abs(x - this.mouseDownPosition.x) < CLICK_DELTA && Math.abs(y - this.mouseDownPosition.y) < CLICK_DELTA;\n\n if (viewer && viewer.getEnableAutoSelect() && isNotDragging) {\n viewer.unselect();\n viewer.select(x, y, x, y);\n this.subject.update();\n\n const selectionSet = viewer.getSelected();\n const handles = this.subject.getSelected();\n this.onmessage({ type: \"select\", data: selectionSet, handles });\n }\n }\n\n protected dblclick(ev: MouseEvent): void {\n const viewer = this.getViewer();\n const relCoord = this.relativeCoords(ev);\n const x = relCoord.x;\n const y = relCoord.y;\n\n const device = viewer.getActiveDevice();\n const clickView = device.viewAt([x, y]);\n if (clickView && !clickView.active) {\n viewer.activeView = clickView;\n clickView.delete();\n this.subject.update();\n } else {\n if (viewer && viewer.getEnableAutoSelect()) {\n const pSelected = viewer.getSelected();\n\n if (!pSelected.isNull() && pSelected.numItems() !== 0) {\n const itr = pSelected.getIterator();\n const entity = itr.getEntity();\n viewer.zoomToEntity(entity);\n\n this.onmessage({ type: \"zoomtoentity\", data: entity });\n this.subject.update();\n\n this.deleteAll([itr, entity]);\n }\n }\n }\n\n device.delete();\n }\n\n protected start(x: number, y: number, absoluteX = 0, absoluteY = 0): void {}\n\n protected drag(x: number, y: number, absoluteX = 0, absoluteY = 0): void {}\n\n protected end(x: number, y: number): void {}\n\n protected beginInteractivity = () => {\n const viewer = this.getViewer();\n const view = viewer.activeView;\n if (view[\"beginInteractivity\"]) {\n view.beginInteractivity(INTERACTIVITY_FPS);\n this.subject.update();\n }\n view.delete();\n };\n\n protected endInteractivity = () => {\n const viewer = this.getViewer();\n const view = viewer.activeView;\n if (view[\"endInteractivity\"]) {\n view.endInteractivity();\n\n const device = this.getViewer().getActiveDevice();\n const canvas = this.m_module.canvas;\n device.invalidate([0, 0, canvas.width, canvas.height]);\n device.delete();\n this.subject.update();\n }\n view.delete();\n };\n\n protected getActiveMarkupEntity(entityName: string): any {\n return this.subject.addMarkupEntity(entityName);\n }\n\n private syncOverlayView(): any {\n return this.subject.syncOverlay();\n }\n\n protected deleteAll(objects): void {\n for (const obj of objects) {\n obj?.delete?.();\n }\n }\n\n public updatePreview(): void {}\n\n private static _isGestureActive = false;\n\n protected static set isGestureActive(value: boolean) {\n if (OdBaseDragger._isGestureActive === value) {\n return;\n }\n\n OdBaseDragger._isGestureActive = value;\n if (OdBaseDragger._isGestureActive) {\n OdBaseDragger.needSkipPointerUp = true;\n }\n }\n\n protected static get isGestureActive() {\n return OdBaseDragger._isGestureActive;\n }\n\n private static _needSkipPointerUp = false;\n\n private static get needSkipPointerUp() {\n if (OdBaseDragger._needSkipPointerUp) {\n OdBaseDragger.needSkipPointerUp = false;\n return true;\n }\n\n return false;\n }\n\n private static set needSkipPointerUp(value: boolean) {\n OdBaseDragger._needSkipPointerUp = value;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point2d } from \"../Common/Geometry\";\n\nexport function createHtmlElementIfNeed(\n element: HTMLElement,\n targetElement: HTMLElement,\n dataTestId: string\n): HTMLElement {\n if (!element) {\n element = document.createElement(\"div\");\n element.setAttribute(\"data-testid\", dataTestId);\n\n targetElement.appendChild(element);\n }\n return element;\n}\n\nexport function destroyHtmlElement(element: HTMLElement, targetElement: HTMLElement) {\n if (element) {\n targetElement.removeChild(element);\n }\n return null;\n}\n\nexport function worldToScreen(gePoint: number[], moduleInstance, viewer): Point2d {\n const worldPoint = moduleInstance.Point3d.createFromArray(gePoint);\n const avp = viewer.activeView;\n const mtx = avp.worldToDeviceMatrix;\n\n const devicePoint = worldPoint.transformBy(mtx);\n\n const res = { x: devicePoint.x / window.devicePixelRatio, y: devicePoint.y / window.devicePixelRatio };\n\n mtx.delete();\n worldPoint.delete();\n devicePoint.delete();\n avp.delete();\n return res;\n}\n\nexport function getDistance(gePoint1: number[], gePoint2: number[], moduleInstance: any) {\n const tvPoint1 = moduleInstance.Point3d.createFromArray(gePoint1);\n const tvPoint2 = moduleInstance.Point3d.createFromArray(gePoint2);\n\n const distance = tvPoint1.distanceTo(tvPoint2).toFixed(2);\n\n tvPoint1.delete();\n tvPoint2.delete();\n\n return distance;\n}\n\nexport function getAngle(geStart: number[], geOrigin: number[], geEnd: number[], moduleInstance: any): number {\n const tvStart = moduleInstance.Point3d.createFromArray(geStart);\n const tvOrigin = moduleInstance.Point3d.createFromArray(geOrigin);\n const tvEnd = moduleInstance.Point3d.createFromArray(geEnd);\n\n const s1 = tvStart.sub(tvOrigin);\n const s2 = tvEnd.sub(tvOrigin);\n\n const v1 = s1.asVector();\n const v2 = s2.asVector();\n\n const angle = (180 * v1.angleTo(v2)) / Math.PI;\n\n return angle;\n}\n\nexport function getDataForDrawLine(p1: Point2d, p2: Point2d) {\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n let angle = (180 * Math.atan(dy / dx)) / Math.PI;\n if (dx < 0) {\n angle -= 180;\n }\n const width = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n return { angle, width };\n}\n\nfunction normalizeFloat(value: number): number {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n}\n\nconst lineSegmentsIntersect = (p1: Point2d, p2: Point2d, p3: Point2d, p4: Point2d): false | Point2d => {\n const a_dx = p2.x - p1.x;\n const a_dy = p2.y - p1.y;\n const b_dx = p4.x - p3.x;\n const b_dy = p4.y - p3.y;\n const s = (-a_dy * (p1.x - p3.x) + a_dx * (p1.y - p3.y)) / (-b_dx * a_dy + a_dx * b_dy);\n const t = (+b_dx * (p1.y - p3.y) - b_dy * (p1.x - p3.x)) / (-b_dx * a_dy + a_dx * b_dy);\n return s >= 0 && s <= 1 && t >= 0 && t <= 1\n ? {\n x: normalizeFloat(p1.x + t * a_dx),\n y: normalizeFloat(p1.y + t * a_dy),\n }\n : false;\n};\n\nfunction checkSegmentsIntersect(p1: Point2d, p2: Point2d, p3: Point2d, p4: Point2d, res: Point2d[]): void {\n const r = lineSegmentsIntersect(p1, p2, p3, p4);\n if (r) {\n res.push(r);\n }\n}\n\nexport function isInsideRect(p: Point2d, width: number, height: number): boolean {\n return p.x <= width && p.x >= 0 && p.y <= height && p.y >= 0;\n}\n\nexport function getDataForDrawLineWithFixed(p1: Point2d, p2: Point2d, width: number, height: number) {\n const pLU = { x: 0, y: 0 };\n const pRU = { x: width, y: 0 };\n\n const pLB = { x: 0, y: height };\n const pRB = { x: width, y: height };\n\n const intersects: Point2d[] = [];\n\n checkSegmentsIntersect(p1, p2, pLU, pRU, intersects);\n checkSegmentsIntersect(p1, p2, pLU, pLB, intersects);\n checkSegmentsIntersect(p1, p2, pLB, pRB, intersects);\n checkSegmentsIntersect(p1, p2, pRB, pRU, intersects);\n\n let fixedP1: Point2d = null;\n let fixedP2: Point2d = null;\n\n if (intersects.length === 0) {\n fixedP1 = p1;\n fixedP2 = p2;\n } else if (intersects.length === 1) {\n if (isInsideRect(p1, width, height)) {\n fixedP1 = p1;\n fixedP2 = intersects[0];\n } else {\n fixedP1 = intersects[0];\n fixedP2 = p2;\n }\n } else {\n fixedP1 = intersects[0];\n fixedP2 = intersects[1];\n }\n\n const dx = fixedP2.x - fixedP1.x;\n const dy = fixedP2.y - fixedP1.y;\n let angle = (180 * Math.atan(dy / dx)) / Math.PI;\n if (dx < 0) {\n angle -= 180;\n }\n const size = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n return { angle, width: size, p1: fixedP1, p2: fixedP2 };\n}\n\nexport function onSetCallback(element: HTMLElement, cb: () => void): void {\n if (element) {\n element.onclick = cb ? () => cb() : () => {};\n }\n}\n\nexport function onSetSelectivity(element: HTMLElement, enable: boolean): void {\n element.style.pointerEvents = enable ? \"auto\" : \"none\";\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport * as utils from \"./MeasureUtils\";\n\nexport class MeasureLineItem {\n protected htmlElemStartPoint: HTMLElement;\n protected htmlElemEndPoint: HTMLElement;\n protected htmlElemLine: HTMLElement;\n protected htmlElemTitle: HTMLElement;\n protected startPoint: number[];\n protected endPoint: number[];\n protected unit: string;\n protected scale: number;\n protected size: number;\n protected style: CSSStyleDeclaration;\n protected viewer: any;\n protected moduleInstance: any;\n protected targetElement: HTMLElement;\n protected isFinishDraw: boolean;\n\n public lineThickness: number;\n\n constructor(targetElement: HTMLElement, viewer: any, moduleInstance: any) {\n this.htmlElemStartPoint = null;\n this.htmlElemEndPoint = null;\n this.htmlElemLine = null;\n this.htmlElemTitle = null;\n\n this.startPoint = null;\n this.endPoint = null;\n\n this.unit = \"\";\n this.scale = 1.0;\n this.size = 10.0;\n this.lineThickness = 2;\n\n this.style = {\n border: \"2px solid #FFFFFF\",\n background: \"#009bff\",\n color: \"white\",\n boxShadow: \"0 0 10px rgba(0,0,0,0.5)\",\n } as CSSStyleDeclaration;\n\n this.htmlElemStartPoint = utils.createHtmlElementIfNeed(this.htmlElemStartPoint, targetElement, \"ruler-start\");\n this.htmlElemEndPoint = utils.createHtmlElementIfNeed(this.htmlElemEndPoint, targetElement, \"ruler-end\");\n this.htmlElemLine = utils.createHtmlElementIfNeed(this.htmlElemLine, targetElement, \"ruler-line\");\n this.htmlElemTitle = utils.createHtmlElementIfNeed(this.htmlElemTitle, targetElement, \"ruler-value\");\n\n this.viewer = viewer;\n this.moduleInstance = moduleInstance;\n this.targetElement = targetElement;\n this.isFinishDraw = false;\n }\n\n drawMeasureLine(): void {\n const pointSize = this.size;\n const rect = this.moduleInstance.canvas.getBoundingClientRect();\n\n // draw start point\n if (this.startPoint) {\n this.htmlElemStartPoint = utils.createHtmlElementIfNeed(\n this.htmlElemStartPoint,\n this.targetElement,\n \"ruler-start\"\n );\n\n const pScreenStart = utils.worldToScreen(this.startPoint, this.moduleInstance, this.viewer);\n if (utils.isInsideRect(pScreenStart, rect.width, rect.height)) {\n this.htmlElemStartPoint.style.display = \"block\";\n this.htmlElemStartPoint.style.cursor = \"pointer\";\n this.htmlElemStartPoint.style.position = \"absolute\";\n this.htmlElemStartPoint.style.top = `${pScreenStart.y - pointSize / 2}px`;\n this.htmlElemStartPoint.style.left = `${pScreenStart.x - pointSize / 2}px`;\n this.htmlElemStartPoint.style.borderRadius = `${pointSize}px`;\n this.htmlElemStartPoint.style.border = this.style.border;\n this.htmlElemStartPoint.style.background = this.style.background;\n this.htmlElemStartPoint.style.zIndex = \"2\";\n this.htmlElemStartPoint.style.width = `${pointSize}px`;\n this.htmlElemStartPoint.style.height = `${pointSize}px`;\n this.htmlElemStartPoint.style.boxShadow = this.style.boxShadow;\n } else {\n this.htmlElemStartPoint.style.display = \"none\";\n }\n }\n\n // draw end point\n if (this.endPoint && this.isFinishDraw) {\n this.htmlElemEndPoint = utils.createHtmlElementIfNeed(this.htmlElemEndPoint, this.targetElement, \"ruler-end\");\n\n const pScreenEnd = utils.worldToScreen(this.endPoint, this.moduleInstance, this.viewer);\n\n if (utils.isInsideRect(pScreenEnd, rect.width, rect.height)) {\n this.htmlElemEndPoint.style.display = \"block\";\n this.htmlElemEndPoint.style.cursor = \"pointer\";\n this.htmlElemEndPoint.style.position = \"absolute\";\n this.htmlElemEndPoint.style.top = `${pScreenEnd.y - pointSize / 2}px`;\n this.htmlElemEndPoint.style.left = `${pScreenEnd.x - pointSize / 2}px`;\n this.htmlElemEndPoint.style.borderRadius = `${pointSize}px`;\n this.htmlElemEndPoint.style.border = this.style.border;\n this.htmlElemEndPoint.style.background = this.style.background;\n this.htmlElemEndPoint.style.zIndex = \"2\";\n this.htmlElemEndPoint.style.width = `${pointSize}px`;\n this.htmlElemEndPoint.style.height = `${pointSize}px`;\n this.htmlElemEndPoint.style.boxShadow = this.style.boxShadow;\n } else {\n this.htmlElemEndPoint.style.display = \"none\";\n }\n }\n\n if (this.endPoint && this.startPoint) {\n const point1 = utils.worldToScreen(this.startPoint, this.moduleInstance, this.viewer);\n const point2 = utils.worldToScreen(this.endPoint, this.moduleInstance, this.viewer);\n\n const { p1, p2, angle, width } = utils.getDataForDrawLineWithFixed(point1, point2, rect.width, rect.height);\n\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n\n const height = this.lineThickness;\n if (utils.isInsideRect(p1, rect.width, rect.height) && utils.isInsideRect(p2, rect.width, rect.height)) {\n this.htmlElemLine = utils.createHtmlElementIfNeed(this.htmlElemLine, this.targetElement, \"ruler-line\");\n this.htmlElemLine.style.display = \"block\";\n this.htmlElemLine.style.cursor = \"pointer\";\n this.htmlElemLine.style.position = \"absolute\";\n this.htmlElemLine.style.top = `${p1.y}px`;\n this.htmlElemLine.style.left = `${p1.x}px`;\n this.htmlElemLine.style.width = `${width}px`;\n this.htmlElemLine.style.transform = `rotate(${angle}deg)`;\n this.htmlElemLine.style.transformOrigin = `0px ${height / 2}px`;\n this.htmlElemLine.style.boxShadow = this.style.boxShadow;\n this.htmlElemLine.style.border = \"none\";\n this.htmlElemLine.style.background = this.style.background;\n this.htmlElemLine.style.zIndex = \"1\";\n this.htmlElemLine.style.height = `${height}px`;\n\n const distance = `${this.getDistance()} ${this.unit}`;\n\n const pX = p1.x + dx / 2;\n const pY = p1.y + dy / 2;\n\n const widthTitle = distance.length * 10;\n\n this.htmlElemTitle = utils.createHtmlElementIfNeed(this.htmlElemTitle, this.targetElement, \"ruler-value\");\n this.htmlElemTitle.style.display = \"block\";\n this.htmlElemTitle.style.cursor = \"pointer\";\n this.htmlElemTitle.style.font = \"10px\";\n this.htmlElemTitle.style.color = \"white\";\n this.htmlElemTitle.style.position = \"Absolute\";\n this.htmlElemTitle.style.top = `${pY}px`;\n this.htmlElemTitle.style.left = `${pX - widthTitle / 2}px`;\n this.htmlElemTitle.style.width = `${widthTitle}px`;\n this.htmlElemTitle.style.transformOrigin = \"0px 0px\";\n this.htmlElemTitle.style.borderRadius = \"5px\";\n this.htmlElemTitle.style.boxShadow = this.style.boxShadow;\n this.htmlElemTitle.style.border = \"none\";\n this.htmlElemTitle.style.background = this.style.background;\n this.htmlElemTitle.style.zIndex = \"3\";\n this.htmlElemTitle.style.padding = \"2px\";\n this.htmlElemTitle.style.textAlign = \"center\";\n this.htmlElemTitle.innerHTML = `${distance}`;\n } else {\n this.htmlElemLine.style.display = \"none\";\n this.htmlElemTitle.style.display = \"none\";\n }\n }\n }\n\n getDistance(): number {\n return utils.getDistance(this.startPoint, this.endPoint, this.moduleInstance) / this.scale;\n }\n\n setStartPoint(gePoint: number[]): void {\n this.startPoint = gePoint;\n this.drawMeasureLine();\n }\n\n setEndPoint(gePoint: number[], isFinish: boolean): void {\n this.isFinishDraw = isFinish === undefined ? true : isFinish;\n this.endPoint = gePoint;\n this.drawMeasureLine();\n }\n\n update(): void {\n this.drawMeasureLine();\n }\n\n setSize(size: number): void {\n this.size = size;\n this.drawMeasureLine();\n }\n\n clear(): void {\n this.endPoint = null;\n this.startPoint = null;\n this.htmlElemStartPoint = utils.destroyHtmlElement(this.htmlElemStartPoint, this.targetElement);\n this.htmlElemEndPoint = utils.destroyHtmlElement(this.htmlElemEndPoint, this.targetElement);\n this.htmlElemLine = utils.destroyHtmlElement(this.htmlElemLine, this.targetElement);\n this.htmlElemTitle = utils.destroyHtmlElement(this.htmlElemTitle, this.targetElement);\n }\n\n setUnit(unit: string): void {\n this.unit = unit;\n this.drawMeasureLine();\n }\n\n setConversionFactor(scale: number): void {\n this.scale = scale;\n this.drawMeasureLine();\n }\n\n setStyle(style: CSSStyleDeclaration): void {\n this.style = style;\n this.drawMeasureLine();\n }\n\n setSelectionReactor(reactor: any): void {\n utils.onSetCallback(this.htmlElemStartPoint, reactor ? reactor.onStartPoint : null);\n utils.onSetCallback(this.htmlElemEndPoint, reactor ? reactor.onEndPoint : null);\n utils.onSetCallback(this.htmlElemTitle, reactor ? reactor.onTitle : null);\n }\n\n setSelectability(enable: boolean): void {\n utils.onSetSelectivity(this.htmlElemStartPoint, enable);\n utils.onSetSelectivity(this.htmlElemEndPoint, enable);\n utils.onSetSelectivity(this.htmlElemLine, enable);\n utils.onSetSelectivity(this.htmlElemTitle, enable);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../../Viewer\";\nimport { OdBaseDragger } from \"../Common/OdBaseDragger\";\nimport { MeasureLineItem } from \"./MeasureLineItem\";\n\nfunction renameUnit(table, unit) {\n return table[unit] || unit;\n}\n\nexport class MeasureLineDragger extends OdBaseDragger {\n protected lineThickness: number;\n protected gripingRadius: number;\n protected firstPoint: number[];\n protected secondPoint: number[];\n protected renameUnitTable: any;\n protected items: MeasureLineItem[];\n protected m_overlayElement: HTMLElement;\n protected previewMeasureLine: MeasureLineItem;\n\n constructor(subject: Viewer) {\n super(subject);\n this.lineThickness = 2;\n this.press = false;\n this.gripingRadius = 5.0;\n this.firstPoint = null;\n this.secondPoint = null;\n\n this.renameUnitTable = {\n Millimeters: \"mm\",\n Centimeters: \"cm\",\n Meters: \"m\",\n Feet: \"ft\",\n Inches: \"in\",\n Yards: \"yd\",\n Kilometers: \"km\",\n Miles: \"mi\",\n Micrometers: \"µm\",\n MicroInches: \"µin\",\n Undefined: \" \",\n };\n\n this.items = [];\n\n this.canvasEvents.push(\"resize\");\n }\n\n override initialize(): void {\n super.initialize();\n\n this.m_overlayElement = document.createElement(\"div\");\n this.m_overlayElement.style.background = \"rgba(0,0,0,0)\";\n this.m_overlayElement.style.position = \"fixed\";\n this.m_overlayElement.style.zIndex = \"1\";\n this.m_overlayElement.style.pointerEvents = \"none\";\n document.body.appendChild(this.m_overlayElement);\n\n this.resize();\n }\n\n override dispose(): void {\n super.dispose();\n this.m_overlayElement.remove();\n }\n\n override updatePreview(): void {\n this.items.forEach((item) => item.update());\n }\n\n resize(): void {\n const rect = this.m_module.canvas.getBoundingClientRect();\n\n this.m_overlayElement.style.top = `${rect.top}px`;\n this.m_overlayElement.style.left = `${rect.left}px`;\n this.m_overlayElement.style.width = `${rect.width}px`;\n this.m_overlayElement.style.height = `${rect.height}px`;\n }\n\n getSnapPointRadius(): number {\n const view = this.getViewer().activeView;\n const corners = view.viewDcCorners();\n\n const pt1 = corners.lowerLeft;\n const pt2 = corners.upperRight;\n\n pt2[0] -= pt1[0];\n pt2[1] -= pt1[1];\n\n return Math.min(pt2[0], pt2[1]) / 120;\n }\n\n override start(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (point) {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n }\n\n override drag(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (this.isDragging) {\n if (point) {\n if (this.firstPoint) {\n this.secondPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.secondPoint, true);\n } else {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n } else {\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.getViewer().screenToWorld(x, y), false);\n }\n } else {\n if (point) {\n this.previewMeasureLine.setStartPoint(point);\n } else {\n this.previewMeasureLine.clear();\n }\n }\n }\n\n override end(): void {\n if (this.firstPoint && this.secondPoint) {\n const newLineMeasure = this.createMeasureLine();\n newLineMeasure.setStartPoint(this.firstPoint);\n newLineMeasure.setEndPoint(this.secondPoint, true);\n }\n this.firstPoint = null;\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n }\n\n createNewMeasureIfNeed(): void {\n if (!this.previewMeasureLine) {\n this.previewMeasureLine = this.createMeasureLine();\n }\n }\n\n createMeasureLine(): MeasureLineItem {\n const viewer = this.m_module.getViewer();\n const item = new MeasureLineItem(this.m_overlayElement, viewer, this.m_module);\n item.lineThickness = this.lineThickness || item.lineThickness;\n item.setUnit(renameUnit(this.renameUnitTable, viewer.getUnit()));\n this.items.push(item);\n return item;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { Point2d, Vector3 } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nconst FocalLengthConst = 42.0;\n\nconst calcFocalLength = (lensLength: number, fieldWidth: number, fieldHeight: number): number => {\n return (lensLength / FocalLengthConst) * Math.sqrt(fieldWidth * fieldWidth + fieldHeight * fieldHeight);\n};\n\nexport class OdaWalkDragger extends OdBaseDragger {\n protected lastCoord: Point2d;\n protected speed: number;\n protected delta: number;\n protected keyPressMap: Set<string>;\n protected oldWCSEnableValue: boolean;\n protected viewParams: any;\n protected cameraId: any;\n protected cameraWalker: any;\n protected viewer: any;\n protected multiplier: number;\n protected lastFrameTS: number;\n protected animationId: any;\n protected deltaAngle: number;\n protected enableZoomWheelPreviousValue: boolean;\n\n constructor(subject: Viewer) {\n super(subject);\n this.viewer = undefined;\n\n this.multiplier = 5;\n this.speed = 1;\n\n this.keyPressMap = new Set();\n this.keydown = this.keydown.bind(this);\n this.keyup = this.keyup.bind(this);\n\n this.lastFrameTS = 0;\n this.animationId = undefined;\n this.processMovement = this.processMovement.bind(this);\n\n this.deltaAngle = Math.PI / 3600;\n this.autoSelect = true;\n }\n\n override initialize() {\n super.initialize();\n this.viewer = this.getViewer();\n\n window.addEventListener(\"keydown\", this.keydown, false);\n window.addEventListener(\"keyup\", this.keyup, false);\n\n this.oldWCSEnableValue = this.viewer.getEnableWCS();\n this.viewer.setEnableWCS(false);\n\n const view = this.viewer.activeView;\n const maxDimension = this.getMaxDimension(view);\n this.speed = maxDimension / 30000;\n\n this.subject.emitEvent({ type: \"walkstart\" });\n\n this.viewParams = this.getViewParams();\n //this.viewParams.lensLength = view.lensLength;\n\n this.setViewParams(this.viewParams);\n //view.lensLength = (view.lensLength * 42) / 120;\n\n const model = this.viewer.getActiveModel();\n this.cameraId = model.appendCamera(\"Camera0\");\n this.setupCamera(view);\n model.delete();\n\n //pCamera.setAdjustLensLength(true);\n this.cameraWalker = new this.m_module.OdTvCameraWalker();\n this.cameraWalker.setCamera(this.cameraId);\n\n this.subject.update();\n this.enableZoomWheelPreviousValue = this.subject.options.enableZoomWheel;\n this.subject.options.enableZoomWheel = false;\n }\n\n override dispose() {\n this.oldWCSEnableValue =\n this.oldWCSEnableValue !== undefined ? this.oldWCSEnableValue : this.subject.options.showWCS;\n this.viewer.setEnableWCS(this.oldWCSEnableValue);\n\n super.dispose();\n\n this.keyPressMap.clear();\n\n window.removeEventListener(\"keydown\", this.keydown);\n window.removeEventListener(\"keyup\", this.keyup);\n\n if (this.animationId) {\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n }\n\n if (this.cameraId) {\n const model = this.viewer.getActiveModel();\n model.removeEntity(this.cameraId);\n model.delete();\n this.cameraWalker?.delete();\n }\n\n if (this.viewParams) {\n this.setViewParams(this.viewParams);\n\n const avp = this.viewer.activeView;\n //avp.lensLength = this.viewParams.lensLength;\n avp.delete();\n }\n\n this.subject.update();\n this.subject.options.enableZoomWheel = this.enableZoomWheelPreviousValue;\n }\n\n keydown(ev) {\n switch (ev.code) {\n case \"NumpadSubtract\":\n case \"Minus\":\n if (this.multiplier > 1) {\n this.multiplier = this.multiplier - 1;\n this.subject.emitEvent({ type: \"walkspeedchange\", data: this.multiplier });\n }\n break;\n case \"NumpadAdd\":\n case \"Equal\":\n if (this.multiplier < 10) {\n this.multiplier = this.multiplier + 1;\n this.subject.emitEvent({ type: \"walkspeedchange\", data: this.multiplier });\n }\n break;\n case \"KeyW\":\n case \"KeyA\":\n case \"KeyS\":\n case \"KeyD\":\n case \"KeyQ\":\n case \"KeyE\":\n this.keyPressMap.add(ev.code);\n if (!this.animationId) this.processMovement(0);\n break;\n }\n }\n\n keyup(ev) {\n this.keyPressMap.delete(ev.code);\n if (this.keyPressMap.size < 1 && this.animationId) {\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n this.lastFrameTS = 0;\n }\n }\n\n processMovement(timestamp) {\n this.animationId = requestAnimationFrame(this.processMovement);\n\n if (this.lastFrameTS !== 0) {\n const deltaTS = timestamp - this.lastFrameTS;\n const currentDelta = this.multiplier * deltaTS * this.speed;\n\n for (const keyCode of this.keyPressMap) {\n switch (keyCode) {\n case \"KeyW\":\n this.cameraWalker.moveForward(currentDelta);\n break;\n case \"KeyS\":\n this.cameraWalker.moveBackward(currentDelta);\n break;\n case \"KeyA\":\n this.cameraWalker.moveLeft(currentDelta);\n break;\n case \"KeyD\":\n this.cameraWalker.moveRight(currentDelta);\n break;\n case \"KeyQ\":\n this.cameraWalker.moveUp(currentDelta);\n break;\n case \"KeyE\":\n this.cameraWalker.moveDown(currentDelta);\n break;\n }\n }\n this.subject.update();\n }\n\n this.lastFrameTS = timestamp;\n }\n\n override drag(x, y, dltX, dltY) {\n if (this.cameraId && this.isDragging) {\n if (dltX !== 0.0) this.turnLeft(-dltX * this.deltaAngle);\n if (dltY !== 0.0) this.cameraWalker.turnDown(dltY * this.deltaAngle);\n this.subject.update();\n }\n }\n\n turnLeft(angle) {\n //TODO: migrate to VisualizeJS\n const pCamera = this.cameraWalker.camera().openObjectAsCamera();\n const dir = this.toVector(pCamera.direction());\n const up = this.toVector(pCamera.upVector());\n\n const pos = pCamera.position();\n\n const rotMatrix = this.createMatrix3d();\n const zAxisVector: Vector3 = [0, 0, 1];\n rotMatrix.setToRotation(angle, zAxisVector, pos);\n dir.transformBy(rotMatrix);\n up.transformBy(rotMatrix);\n pCamera.setupCameraByDirection(pos, dir.toArray(), up.toArray());\n pCamera.delete();\n }\n\n setupCamera(view) {\n const pCamera = this.cameraId.openObjectAsCamera();\n const target = view.viewTarget;\n\n pCamera.setDisplayGlyph(false);\n pCamera.setDisplayTarget(false);\n pCamera.setAutoAdjust(true);\n pCamera.setupCamera(view.viewPosition, target, view.upVector);\n pCamera.setNearClip(false, 1.0);\n pCamera.setFarClip(false, 0);\n pCamera.setViewParameters(view.viewFieldWidth, view.viewFieldHeight, true);\n\n const focalL = calcFocalLength(view.lensLength, view.viewFieldWidth, view.viewFieldHeight);\n\n const pTarget = this.toPoint(view.viewTarget);\n const viewDir = this.toPoint(view.viewPosition);\n const viewDirSub = viewDir.sub(pTarget);\n const viewDirVec = viewDirSub.asVector();\n const viewDirVecNormal = viewDirVec.normalize();\n\n const geViewDir = this.toGeVector(viewDirVecNormal);\n const newGeViewDir = [geViewDir[0] * focalL, geViewDir[1] * focalL, geViewDir[2] * focalL];\n\n const pTarget2 = this.toPoint(view.viewTarget);\n const newGeViewDirPt = this.toPoint(newGeViewDir);\n\n const newPos = pTarget2.add(newGeViewDirPt);\n pCamera.setupCamera(this.toGePoint(newPos), view.viewTarget, view.upVector);\n\n this.deleteAll([pTarget, viewDir, viewDirSub, viewDirVec, viewDirVecNormal, pTarget2, newGeViewDirPt, newPos]);\n\n pCamera.assignView(view);\n pCamera.delete();\n }\n\n getMaxDimension(view) {\n const [xmax, ymax, zmax] = view.sceneExtents.max();\n const [xmin, ymin, zmin] = view.sceneExtents.min();\n const volume = [xmax - xmin, ymax - ymin, zmax - zmin];\n return Math.max(...volume);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { Point2d, Point3d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdBaseCuttingPlaneDragger extends OdBaseDragger {\n protected m_size_x: number;\n protected m_size_y: number;\n protected m_size_z: number;\n protected m_center: Point3d;\n protected m_normal: number[];\n protected index: number;\n protected m_model: any;\n protected m_entity: any;\n protected planePreview: any;\n protected m_last: Point3d;\n protected m_click: Point2d;\n\n constructor(subject: Viewer) {\n super(subject);\n this.press = false;\n\n //this.getViewer().getMarkupController().clear();\n\n const ext = this.getViewer().getActiveExtents();\n const min = ext.min();\n const max = ext.max();\n\n this.m_size_x = Math.abs(max[0] - min[0]) / 2;\n this.m_size_y = Math.abs(max[1] - min[1]) / 2;\n this.m_size_z = Math.abs(max[2] - min[2]) / 2;\n\n this.m_center = this.toPoint(ext.center());\n this.m_normal = this.createNormal();\n\n const avp = this.getViewer().activeView;\n const plane = this.createPlane();\n plane.set(this.toGePoint(this.m_center), this.m_normal);\n\n avp.addCuttingPlane(plane);\n this.index = avp.numCuttingPlanes() - 1;\n\n const { red, green, blue } = this.subject.options.cuttingPlaneFillColor;\n avp.setEnableCuttingPlaneFill(true, red, green, blue);\n avp.setCuttingPlaneFillPatternEnabled(true, this.m_module.CuttingPlaneFillStyle.kHorizontalBars, 0x0, 0x0, 0x0);\n\n this.m_model = this.getModel();\n this.createPreview();\n\n this.deleteAll([ext, avp, plane]);\n }\n\n override dispose(): void {\n super.dispose();\n\n if (this.m_entity) {\n this.m_model.removeEntity(this.m_entity);\n this.deleteAll([this.m_model, this.m_entity, this.planePreview, this.m_center]);\n this.m_entity = null;\n this.planePreview = null;\n this.subject.update();\n }\n }\n\n createNormal(): number[] {\n return [0, 0, 0];\n }\n\n handleDelta(delta: Point3d): Point3d {\n return delta;\n }\n\n getPlanePreviewCoordinate(): any[] {\n return [];\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this.m_last = this.screenToWorld(x, y);\n this.m_click = { x, y };\n }\n\n override drag(x: number, y: number): void {\n if (this.press) {\n const point = this.screenToWorld(x, y);\n const delta = this.handleDelta(point.sub(this.m_last));\n\n const oldCenter = this.m_center;\n this.m_center = oldCenter.add(delta);\n\n const oldLast = this.m_last;\n this.m_last = point;\n\n const avp = this.getViewer().activeView;\n const plane = this.createPlane();\n const newPlane = plane.set(this.toGePoint(this.m_center), this.m_normal);\n const newCutting = avp.updateCuttingPlane(this.index, plane);\n\n this.drawPreview();\n\n this.deleteAll([avp, plane, oldCenter, delta, oldLast, newPlane, newCutting]);\n\n const device = this.getViewer().getActiveDevice();\n device.invalidate(device.getSize());\n }\n }\n\n override end(x: number, y: number): void {\n this.press = false;\n if (x === this.m_click.x && y === this.m_click.y) {\n this.m_normal = [this.m_normal[0] * -1, this.m_normal[1] * -1, this.m_normal[2] * -1];\n\n const avp = this.getViewer().activeView;\n const plane = this.createPlane();\n plane.set(this.toGePoint(this.m_center), this.m_normal);\n avp.updateCuttingPlane(this.index, plane);\n\n this.deleteAll([avp, plane, this.m_last]);\n\n const device = this.getViewer().getActiveDevice();\n device.invalidate(device.getSize());\n }\n }\n\n createPreview(): void {\n this.m_entity = this.m_model.appendEntity(\"&CuttingPlanePreview\");\n\n const GeometryTypes = this.m_module.GeometryTypes;\n\n const transparencyDef = new this.m_module.OdTvTransparencyDef();\n const colorDef = new this.m_module.OdTvColorDef(112, 112, 112); //0x53, 0x72, 0xAE\n\n transparencyDef.setValue(0.9);\n\n const entityPtr = this.m_entity.openObject();\n entityPtr.setColor(colorDef, GeometryTypes.kFaces.value);\n\n colorDef.setColor(112, 112, 112); //0xcd, 0xe2, 0xff\n entityPtr.setColor(colorDef, GeometryTypes.kEdges.value);\n\n entityPtr.setLineWeight(5);\n\n entityPtr.setTransparency(transparencyDef, GeometryTypes.kFaces);\n transparencyDef.setValue(1.0);\n entityPtr.setTransparency(transparencyDef, GeometryTypes.kEdges);\n\n this.planePreview = entityPtr.appendPolygon(this.getPlanePreviewCoordinate());\n const polygonPtr = this.planePreview.openAsPolygon();\n polygonPtr.setFilled(true);\n\n this.deleteAll([transparencyDef, colorDef, entityPtr, polygonPtr, GeometryTypes]);\n this.subject.syncOverlay();\n }\n\n drawPreview(): void {\n const polygonPtr = this.planePreview.openAsPolygon();\n polygonPtr.setPoints(this.getPlanePreviewCoordinate());\n this.deleteAll([polygonPtr]);\n this.subject.syncOverlay();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseCuttingPlaneDragger } from \"./OdBaseCuttingPlaneDragger\";\n\nexport class OdCuttingPlaneXAxisDragger extends OdBaseCuttingPlaneDragger {\n override createNormal(): number[] {\n return [1, 0, 0];\n }\n\n override handleDelta(delta: Point3d): Point3d {\n delta.y = 0.0;\n delta.z = 0.0;\n return delta;\n }\n\n override getPlanePreviewCoordinate(): number[] {\n return [\n this.m_center.x,\n this.m_center.y - this.m_size_y,\n this.m_center.z - this.m_size_z,\n this.m_center.x,\n this.m_center.y + this.m_size_y,\n this.m_center.z - this.m_size_z,\n this.m_center.x,\n this.m_center.y + this.m_size_y,\n this.m_center.z + this.m_size_z,\n this.m_center.x,\n this.m_center.y - this.m_size_y,\n this.m_center.z + this.m_size_z,\n ];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseCuttingPlaneDragger } from \"./OdBaseCuttingPlaneDragger\";\n\nexport class OdCuttingPlaneYAxisDragger extends OdBaseCuttingPlaneDragger {\n override createNormal(): number[] {\n return [0, 1, 0];\n }\n\n override handleDelta(delta: Point3d): Point3d {\n delta.x = 0.0;\n delta.z = 0.0;\n return delta;\n }\n\n override getPlanePreviewCoordinate(): number[] {\n return [\n this.m_center.x - this.m_size_x,\n this.m_center.y,\n this.m_center.z - this.m_size_z,\n this.m_center.x + this.m_size_x,\n this.m_center.y,\n this.m_center.z - this.m_size_z,\n this.m_center.x + this.m_size_x,\n this.m_center.y,\n this.m_center.z + this.m_size_z,\n this.m_center.x - this.m_size_x,\n this.m_center.y,\n this.m_center.z + this.m_size_z,\n ];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseCuttingPlaneDragger } from \"./OdBaseCuttingPlaneDragger\";\n\nexport class OdCuttingPlaneZAxisDragger extends OdBaseCuttingPlaneDragger {\n override createNormal(): number[] {\n return [0, 0, 1];\n }\n\n override handleDelta(delta: Point3d): Point3d {\n delta.x = 0.0;\n delta.y = 0.0;\n return delta;\n }\n\n override getPlanePreviewCoordinate(): number[] {\n return [\n this.m_center.x - this.m_size_x,\n this.m_center.y - this.m_size_y,\n this.m_center.z,\n this.m_center.x + this.m_size_x,\n this.m_center.y - this.m_size_y,\n this.m_center.z,\n this.m_center.x + this.m_size_x,\n this.m_center.y + this.m_size_y,\n this.m_center.z,\n this.m_center.x - this.m_size_x,\n this.m_center.y + this.m_size_y,\n this.m_center.z,\n ];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Point2d, Point3d, Vector3d } from \"../Common/Geometry\";\nimport { Viewer } from \"../../Viewer\";\n\nexport class OrbitAction {\n private _m_module: any;\n private _subject: Viewer;\n private _beginInteractivity: () => void;\n private _endInteractivity: () => void;\n private m_viewCenter: any;\n private m_startPoint: Point2d;\n\n constructor(m_module: any, subject: Viewer, beginInteractivity: () => void, endInteractivity: () => void) {\n this._m_module = m_module;\n this._subject = subject;\n this._beginInteractivity = beginInteractivity;\n this._endInteractivity = endInteractivity;\n }\n\n public beginAction(x: number, y: number) {\n this.m_viewCenter = this.getCenter();\n this.m_startPoint = { x, y };\n\n const view = this.getViewer().activeView;\n\n view.delete();\n this._beginInteractivity();\n }\n\n public action(x: number, y: number) {\n const view = this.getViewer().activeView;\n\n const corners = view.vportRect;\n\n const size = Math.max(Math.abs(corners[2] - corners[0]), Math.abs(corners[3] - corners[1]));\n\n const distX = ((this.m_startPoint.x - x) * Math.PI) / size;\n const distY = ((this.m_startPoint.y - y) * Math.PI) / size;\n\n this.m_startPoint.x = x;\n this.m_startPoint.y = y;\n\n const xOrbit = distY;\n const yOrbit = distX;\n\n const viewParams = {\n position: view.viewPosition,\n target: view.viewTarget,\n upVector: view.upVector,\n viewFieldWidth: view.viewFieldWidth,\n viewFieldHeight: view.viewFieldHeight,\n perspective: view.perspective,\n };\n\n view.delete();\n\n const sideVector = this.getSideVector(viewParams);\n\n if (xOrbit !== 0.0) {\n this.calculateXOrbit(viewParams, -xOrbit, sideVector);\n }\n\n if (yOrbit !== 0.0) {\n this.calculateYOrbit(viewParams, yOrbit, sideVector);\n }\n\n sideVector.delete();\n\n const extView = this.getViewer().getActiveTvExtendedView();\n\n extView.setView(\n viewParams.position,\n viewParams.target,\n viewParams.upVector,\n viewParams.viewFieldWidth,\n viewParams.viewFieldHeight,\n viewParams.perspective\n );\n extView.delete();\n\n this._subject.activeDragger()?.updatePreview();\n }\n\n public endAction() {\n this._endInteractivity();\n }\n\n private getSideVector(viewParams: any): any {\n const pUpV = this.toVector(viewParams.upVector);\n const pTarget = this.toPoint(viewParams.target);\n const pPosition = this.toPoint(viewParams.position);\n\n const direct = pTarget.sub(pPosition);\n const vDirect = direct.asVector();\n\n const vCross = pUpV.crossProduct(vDirect);\n const sideVector = vCross.normalize();\n\n this.deleteAll([direct, pUpV, pTarget, pPosition, vDirect, vCross]);\n\n return sideVector;\n }\n\n private calculateXOrbit(viewParams: any, delta: number, sideVector: Vector3d): void {\n {\n const pPoint = this.toPoint(viewParams.position);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const rotatePoint = pPoint.rotateByBasePoint(delta, sideVector, pCenter);\n viewParams.position = rotatePoint.toArray();\n\n this.deleteAll([pPoint, pCenter, rotatePoint]);\n }\n\n {\n const pTarget = this.toPoint(viewParams.target);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const rotatePoint = pTarget.rotateByBasePoint(delta, sideVector, pCenter);\n viewParams.target = rotatePoint.toArray();\n\n this.deleteAll([pTarget, pCenter, rotatePoint]);\n }\n\n {\n const pPoint = this.toPoint(viewParams.position);\n const pTarget = this.toPoint(viewParams.target);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const pUp = pTarget.sub(pPoint);\n const vUp = pUp.asVector();\n\n const crossProduct = vUp.crossProduct(sideVector);\n const crossProductNormal = crossProduct.normalize();\n\n viewParams.upVector = crossProductNormal.toArray();\n\n this.deleteAll([pPoint, pTarget, pCenter, pUp, vUp, crossProduct, crossProductNormal]);\n }\n }\n\n private calculateYOrbit(viewParams: any, delta: number, sideVector: any): void {\n {\n const pPoint = this.toPoint(viewParams.position);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const zAxis = this.toVector(this._m_module.Vector3d.kZAxis);\n\n const rotatePoint = pPoint.rotateByBasePoint(delta, zAxis, pCenter);\n viewParams.position = rotatePoint.toArray();\n\n this.deleteAll([zAxis, pPoint, pCenter, rotatePoint]);\n }\n\n {\n const pTarget = this.toPoint(viewParams.target);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const zAxis = this.toVector(this._m_module.Vector3d.kZAxis);\n\n const rotatePoint = pTarget.rotateByBasePoint(delta, zAxis, pCenter);\n viewParams.target = rotatePoint.toArray();\n\n this.deleteAll([zAxis, pTarget, pCenter, rotatePoint]);\n }\n\n {\n const zAxis = this.toVector(this._m_module.Vector3d.kZAxis);\n const pTarget = this.toPoint(viewParams.target);\n const pPoint = this.toPoint(viewParams.position);\n\n const side = sideVector.rotateBy(delta, zAxis);\n\n const pUp = pTarget.sub(pPoint);\n const vUp = pUp.asVector();\n\n const cross = vUp.crossProduct(side);\n const crossNormal = cross.normalize();\n\n viewParams.upVector = crossNormal.toArray();\n\n this.deleteAll([zAxis, pTarget, pPoint, side, pUp, vUp, cross, crossNormal]);\n }\n }\n\n private getCenter(): any {\n const viewer = this.getViewer();\n let center;\n\n const pSet = viewer.getSelected();\n if (!pSet.isNull() && pSet.numItems() !== 0) {\n const itr = pSet.getIterator();\n let ext, entId, extSelected;\n for (; !itr.done(); itr.step()) {\n entId = itr.getEntity();\n ext = entId.getWCSExtents();\n if (extSelected) extSelected.addExt(ext);\n else extSelected = ext;\n }\n center = extSelected.center();\n\n extSelected.delete();\n itr.delete();\n } else {\n center = viewer.getActiveExtents().center();\n }\n\n return center;\n }\n\n private getViewer(): any {\n return this._m_module.getViewer();\n }\n\n private toVector(geVector): Vector3d {\n return this._m_module.Vector3d.createFromArray(geVector);\n }\n\n private toPoint(gePoint: number[]): Point3d {\n return this._m_module.Point3d.createFromArray(gePoint);\n }\n\n private deleteAll(objects): void {\n for (const obj of objects) {\n obj?.delete?.();\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { OrbitAction } from \"./Actions/OrbitAction\";\nimport { Point2d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdOrbitDragger extends OdBaseDragger {\n private _orbitAction: OrbitAction;\n protected m_viewCenter: any;\n protected m_startPoint: Point2d;\n protected startCameraParams: any;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this._orbitAction = new OrbitAction(this.m_module, this.subject, this.beginInteractivity, this.endInteractivity);\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this._orbitAction.beginAction(x, y);\n }\n\n setDefaultViewParams(): void {\n const extView = this.getViewer().getActiveTvExtendedView();\n extView.setView(\n this.startCameraParams.position,\n this.startCameraParams.target,\n this.startCameraParams.upVector,\n this.startCameraParams.viewFieldWidth,\n this.startCameraParams.viewFieldHeight,\n this.startCameraParams.perspective\n );\n extView.delete();\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n this._orbitAction.action(x, y);\n }\n }\n\n override end(): void {\n this.press = false;\n this._orbitAction.endAction();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Point2d, Point3d } from \"../Common/Geometry\";\nimport { ViewParams } from \"../Common/OdaGeAction\";\nimport { Viewer } from \"../../Viewer\";\n\nexport class PanAction {\n private _m_module: any;\n private _subject: Viewer;\n private _m_start: Point3d;\n private _deltaScreenPosition: Point2d;\n private _beginInteractivity: () => void;\n private _endInteractivity: () => void;\n private _getViewParams: () => ViewParams;\n private _setViewParams: (params: ViewParams) => void;\n\n constructor(\n m_module: any,\n subject: Viewer,\n beginInteractivity: () => void,\n endInteractivity: () => void,\n getViewParams: () => ViewParams,\n setViewParams: (params: ViewParams) => void\n ) {\n this._m_module = m_module;\n this._subject = subject;\n this._beginInteractivity = beginInteractivity;\n this._endInteractivity = endInteractivity;\n this._getViewParams = getViewParams;\n this._setViewParams = setViewParams;\n }\n\n public beginAction(x: number, y: number) {\n this._m_start = this.screenToWorld(x, y);\n this._deltaScreenPosition = { x, y };\n this._beginInteractivity();\n }\n\n public action(x: number, y: number) {\n const { Vector3d } = this._m_module;\n const params = this._getViewParams();\n const pt = this.screenToWorld(x, y);\n\n const ptSub = this._m_start.sub(pt);\n const delta = ptSub.asVector();\n\n const target = Vector3d.createFromArray(params.target);\n const targetWithDelta = target.add(delta);\n params.target = targetWithDelta.toArray();\n\n const position = Vector3d.createFromArray(params.position);\n const positionWithDelta = position.add(delta);\n params.position = positionWithDelta.toArray();\n\n this._setViewParams(params);\n target.delete();\n\n targetWithDelta.delete();\n position.delete();\n positionWithDelta.delete();\n\n this._subject.activeDragger()?.updatePreview();\n this._subject.emitEvent({\n type: \"pan\",\n x,\n y,\n dX: x - this._deltaScreenPosition.x,\n dY: y - this._deltaScreenPosition.y,\n });\n\n this._deltaScreenPosition = { x, y };\n }\n\n public endAction() {\n this._endInteractivity();\n }\n\n private screenToWorld(x: number, y: number): Point3d {\n return this._m_module.Point3d.createFromArray(this._m_module.getViewer().screenToWorld(x, y));\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { PanAction } from \"./Actions/PanAction\";\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdPanDragger extends OdBaseDragger {\n private _panAction: PanAction;\n protected m_start: Point3d;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this._panAction = new PanAction(\n this.m_module,\n this.subject,\n this.beginInteractivity,\n this.endInteractivity,\n this.getViewParams,\n this.setViewParams\n );\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this._panAction.beginAction(x, y);\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n this._panAction.action(x, y);\n }\n }\n\n override end(x: number, y: number): void {\n this.press = false;\n this._panAction.endAction();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Viewer } from \"../../Viewer\";\n\nexport class ZoomAction {\n private _m_module: any;\n private _subject: Viewer;\n\n constructor(m_module: any, subject: Viewer) {\n this._m_module = m_module;\n this._subject = subject;\n }\n\n public action(x: number, y: number, zoomFactor: number) {\n const viewer = this._m_module.getViewer();\n viewer.zoomAt(zoomFactor, x, y);\n\n this._subject.deviceAutoRegeneration();\n this._subject.activeDragger()?.updatePreview();\n this._subject.emitEvent({\n type: \"zoomat\",\n data: zoomFactor,\n });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { ZoomAction } from \"./Actions/ZoomAction\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdZoomDragger extends OdBaseDragger {\n private _zoomAction: ZoomAction;\n protected pressX: number;\n protected pressY: number;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this._zoomAction = new ZoomAction(this.m_module, this.subject);\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this.pressX = x;\n this.pressY = y;\n this.beginInteractivity();\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press && Math.abs(dltY) <= 10e-6) {\n const ZOOM_SPEED = 0.025;\n const zoomFactor = dltY > 0 ? 1 + ZOOM_SPEED : 1 - ZOOM_SPEED;\n this._zoomAction.action(this.pressX, this.pressY, zoomFactor);\n }\n }\n\n override end(): void {\n this.press = false;\n this.endInteractivity();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Viewer } from \"../Viewer\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\nimport { ZoomAction } from \"./Actions/ZoomAction\";\n\nconst INTERACTIVITY_TIME_OUT = 100;\n\nexport class OdZoomWheelDragger extends OdBaseDragger {\n private _zoomAction: ZoomAction;\n\n private _endInteractivityTimeOutId;\n\n private _isEnableInteractivityMode: boolean;\n\n constructor(subject: Viewer) {\n super(subject);\n\n // ignore all events except \"wheel\" so as not to interfere with other handlers\n this.canvasEvents = [\"wheel\"];\n this._zoomAction = new ZoomAction(this.m_module, this.subject);\n this._endInteractivityTimeOutId = undefined;\n this._isEnableInteractivityMode = false;\n }\n\n wheel(event) {\n if (!this.subject.options.enableZoomWheel) {\n return;\n }\n\n event = event || window.event;\n event.preventDefault();\n\n const zoomReverse = this.subject.options.reverseZoomWheel ? -1 : 1;\n const zoomSpeed = 0.075 * zoomReverse;\n\n const viewer = this.getViewer();\n if (viewer) {\n const zoomFactor = event.deltaY > 0 ? 1 + zoomSpeed : 1 - zoomSpeed;\n\n this._zoomAction.action(\n event.offsetX * window.devicePixelRatio,\n event.offsetY * window.devicePixelRatio,\n zoomFactor\n );\n\n if (!this._isEnableInteractivityMode) {\n this._isEnableInteractivityMode = true;\n this.beginInteractivity();\n }\n\n if (this._endInteractivityTimeOutId) {\n clearTimeout(this._endInteractivityTimeOutId);\n }\n\n if (!this._isEnableInteractivityMode) {\n this._isEnableInteractivityMode = true;\n this.beginInteractivity();\n }\n\n if (this._endInteractivityTimeOutId) {\n clearTimeout(this._endInteractivityTimeOutId);\n }\n\n this.subject.update(true);\n\n this._endInteractivityTimeOutId = setTimeout(() => {\n this._endInteractivityTimeOutId = undefined;\n this.endInteractivity();\n this._isEnableInteractivityMode = false;\n }, INTERACTIVITY_TIME_OUT);\n }\n }\n\n override dispose(): void {\n if (this._endInteractivityTimeOutId) {\n clearTimeout(this._endInteractivityTimeOutId);\n this.endInteractivity();\n this._isEnableInteractivityMode = false;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"../Common/Geometry\";\n\nexport class OdSelectionFrame {\n protected m_start: number[];\n protected m_end: number[];\n protected m_model: any;\n protected m_module: any;\n protected m_entity: any;\n protected m_frame: any;\n\n constructor() {\n this.m_start = [0, 0, 0]; // 0\n this.m_end = [0, 0, 0]; // 2\n\n this.m_model = null;\n }\n\n createPoint3d(): Point3d {\n return new this.m_module.Point3d();\n }\n\n init(instance: any, model: any): void {\n this.m_module = instance;\n this.m_model = model;\n }\n\n getViewer() {\n return this.m_module.getViewer();\n }\n\n setValue(value: number[]): void {\n this.m_end = value;\n this.draw();\n }\n\n setStartPoint(point: number[]): void {\n this.m_start = point;\n this.m_end = point;\n this.draw();\n }\n\n toDoubleArray(points: Point3d[]): number[] {\n const p: number[] = [];\n for (let i = 0; i < points.length; i++) {\n p.push(points[i].x);\n p.push(points[i].y);\n p.push(points[i].z);\n }\n return p;\n }\n\n draw(): void {\n const view = this.getViewer().activeView;\n const viewM = view.viewingMatrix;\n\n const points = [];\n points.push(this.m_start);\n points.push(this.createPoint3d());\n points.push(this.m_end);\n points.push(this.createPoint3d());\n\n const p0 = this.createPoint3d();\n p0.set(this.m_start[0], this.m_start[1], this.m_start[2]);\n\n const p2 = this.createPoint3d();\n p2.set(this.m_end[0], this.m_end[1], this.m_end[2]);\n\n p0.transformBy(viewM);\n p2.transformBy(viewM);\n\n points[1].x = p0.x;\n points[3].x = p2.x;\n points[1].y = p2.y;\n points[3].y = p0.y;\n points[1].z = points[3].z = p2.z;\n\n const eyeM = view.eyeToWorldMatrix;\n points[1].transformBy(eyeM);\n points[3].transformBy(eyeM);\n\n if (!this.m_entity) {\n this.m_entity = this.m_model.appendEntity(\"\");\n const entityPtr = this.m_entity.openObject();\n\n entityPtr.setColor(112, 112, 112);\n entityPtr.setLineWeight(2);\n\n this.m_frame = entityPtr.appendPolygon(this.toDoubleArray(points));\n entityPtr.delete();\n } else {\n this.m_frame.openAsPolygon().setPoints(this.toDoubleArray(points));\n }\n }\n\n clear(): void {\n if (this.m_entity) {\n this.m_model.removeEntity(this.m_entity);\n this.m_entity = null;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\n\nimport { Viewer } from \"../../Viewer\";\nimport { OdBaseDragger } from \"../Common/OdBaseDragger\";\nimport { OdSelectionFrame } from \"./OdSelectionFrame\";\n\nexport class OdZoomWindowDragger extends OdBaseDragger {\n protected m_frame: any;\n protected m_minX: number;\n protected m_minY: number;\n protected m_maxX: number;\n protected m_maxY: number;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this.needInputText = false;\n\n this.m_frame = new OdSelectionFrame();\n this.m_frame.init(this.m_module, this.getModel());\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this.m_minX = x;\n this.m_minY = y;\n\n const startPoint = this.screenToWorld(x, y);\n this.m_frame.setStartPoint(startPoint);\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n this.m_maxX = x;\n this.m_maxY = y;\n\n const point = this.screenToWorld(x, y);\n this.m_frame.setValue(point);\n }\n }\n\n override end(x: number, y: number): void {\n this.press = false;\n this.m_maxX = x;\n this.m_maxY = y;\n\n if (this.m_minX !== this.m_maxX && this.m_minY !== this.m_maxY) {\n this.m_frame.clear();\n this.getViewer().zoomWindow(this.m_minX, this.m_minY, this.m_maxX, this.m_maxY);\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { Point2d } from \"./Common/Geometry\";\nimport { ViewParams } from \"./Common/OdaGeAction\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OrbitAroundBuildingDragger extends OdBaseDragger {\n protected maxPolarAngle: number;\n protected minPolarAngle: number;\n protected m_viewCenter: any;\n protected m_startPoint: Point2d;\n protected startCameraParams: ViewParams;\n protected m_delta: number;\n\n constructor(viewer: Viewer) {\n super(viewer);\n this.autoSelect = true;\n this.press = false;\n this.maxPolarAngle = Math.PI / 2;\n this.minPolarAngle = 0; // radians\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n\n this.m_viewCenter = this.getCenter();\n this.m_startPoint = { x, y };\n\n const view = this.getViewer().activeView;\n\n this.startCameraParams = this.getViewParams();\n\n const corners = view.vportRect;\n\n this.m_delta = Math.max(corners[1] - corners[0], corners[2] - corners[3]);\n\n this.beginInteractivity();\n }\n\n setDefaultViewParams(): void {\n this.setViewParams(this.startCameraParams);\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n let dX = x - this.m_startPoint.x;\n let dY = y - this.m_startPoint.y;\n\n dX *= Math.PI / this.m_delta;\n dY *= Math.PI / this.m_delta;\n\n this.setDefaultViewParams();\n\n const { Vector3d, Matrix3d } = this.m_module;\n\n const target = Vector3d.createFromArray(this.startCameraParams.target);\n const offset = Vector3d.createFromArray(this.startCameraParams.position).sub(target);\n const dir = offset.normalize();\n\n const zMatrix = new Matrix3d();\n zMatrix.setToIdentity();\n const xMatrix = new Matrix3d();\n xMatrix.setToIdentity();\n\n // ---- restore start rotation ----\n\n const yAxis = Vector3d.createFromArray([dir.x, dir.y, dir.z]);\n const zAxis = Vector3d.createFromArray(this.startCameraParams.upVector);\n const xAxis = yAxis.crossProduct(zAxis);\n\n // ----------- zAxis rotation restore -----------\n let xyDir = Vector3d.createFromArray([yAxis.x, yAxis.y, 0]);\n\n if (xyDir.length() <= 0.00001) {\n xyDir.set(-xAxis.y, xAxis.x, 0);\n } else {\n xyDir = xyDir.normalize();\n }\n const xyAngle =\n Math.sign(xyDir.dotProduct(Vector3d.createFromArray([-1, 0, 0]))) *\n xyDir.angleTo(Vector3d.createFromArray([0, 1, 0]));\n dX -= xyAngle;\n // ----------- zAxis rotation restore -----------\n\n // ----------- xAxis rotation restore -----------\n let yzDir = Vector3d.createFromArray([dir.x, dir.y, 0]);\n let yzAngle = 0;\n if (yzDir.length() <= 0.00001) {\n yzAngle = (-dir.z * Math.PI) / 2;\n } else {\n yzDir = yzDir.normalize();\n yzAngle = -yzDir.angleTo(dir);\n }\n dY -= yzAngle;\n // ----------- xAxis rotation restore -----------\n\n // ---- restore start rotation ----\n\n zMatrix.setToRotation(-dX, [0, 0, 1], [0, 0, 0]);\n\n const xAngle = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, dY));\n xMatrix.setToRotation(xAngle, [1, 0, 0], [0, 0, 0]);\n\n const endMatrix = zMatrix.postMultBy(xMatrix);\n\n let pos = Vector3d.createFromArray([0, 1, 0]).transformBy(endMatrix);\n const up = Vector3d.createFromArray([0, 0, 1]).transformBy(endMatrix);\n\n pos.setLength(offset.length());\n pos = target.add(pos);\n\n const current = this.getViewParams();\n\n current.position = pos.toArray();\n current.upVector = up.toArray();\n\n this.setViewParams(current);\n }\n }\n\n override end(): void {\n this.press = false;\n this.endInteractivity();\n }\n\n getCenter(): any {\n const viewer = this.getViewer();\n\n let ext = viewer.getActiveExtents();\n\n const pSet = viewer.getSelected();\n if (!pSet.isNull() && pSet.numItems() !== 0) {\n const itr = pSet.getIterator();\n const entId = itr.getEntity();\n\n if (entId.getType() === 1) {\n const obj = entId.openObject();\n\n ext.delete();\n ext = obj.getExtents();\n\n obj.delete();\n } else if (entId.getType() === 2) {\n const obj = entId.openObjectAsInsert();\n const extTuple = obj.getExtents();\n\n ext.delete();\n ext = extTuple.ext;\n\n extTuple.delete();\n obj.delete();\n }\n\n itr.delete();\n }\n\n const center = ext.center();\n\n ext.delete();\n return center;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Viewer } from \"../../Viewer\";\nimport { OrbitAction } from \"../Actions/OrbitAction\";\nimport { PanAction } from \"../Actions/PanAction\";\nimport { ZoomAction } from \"../Actions/ZoomAction\";\nimport { Point2d } from \"./Geometry\";\nimport { OdBaseDragger } from \"./OdBaseDragger\";\n\nexport enum GestureAction {\n None,\n Orbit,\n Pan,\n Zoom,\n}\n\nexport class GestureManager extends OdBaseDragger {\n private _previousEvents = new Map<number, PointerEvent>();\n private _currentEvents = new Map<number, PointerEvent>();\n private _lastGestureAction = GestureAction.None;\n private _orbitAction: OrbitAction;\n private _panAction: PanAction;\n private _zoomAction: ZoomAction;\n\n private _initialDistance: number;\n private readonly _maxInitialDistanceDifference = 30 * window.devicePixelRatio;\n\n private _isSingleTouchEnabled = false;\n\n public get isSingleTouchEnabled(): boolean {\n return this._isSingleTouchEnabled;\n }\n\n public set isSingleTouchEnabled(value: boolean) {\n this._isSingleTouchEnabled = value;\n }\n\n public constructor(subject: Viewer) {\n super(subject);\n\n this._orbitAction = new OrbitAction(this.m_module, this.subject, this.beginInteractivity, this.endInteractivity);\n this._panAction = new PanAction(\n this.m_module,\n this.subject,\n this.beginInteractivity,\n this.endInteractivity,\n this.getViewParams,\n this.setViewParams\n );\n this._zoomAction = new ZoomAction(this.m_module, this.subject);\n }\n\n private getMiddlePoint(events: Map<number, PointerEvent>): Point2d {\n if (events.size !== 2) {\n return undefined;\n }\n\n const keys = this.getKeys(events);\n const point0 = this.relativeCoords(events.get(keys[0]));\n const point1 = this.relativeCoords(events.get(keys[1]));\n\n return {\n x: Math.floor((point0.x + point1.x) / 2),\n y: Math.floor((point0.y + point1.y) / 2),\n };\n }\n\n private getFirstPoint(events: Map<number, PointerEvent>): Point2d {\n if (events.size < 1) {\n return undefined;\n }\n\n const keys = this.getKeys(events);\n return this.relativeCoords(events.get(keys[0]));\n }\n\n private getDistance(events: Map<number, PointerEvent>): number {\n if (events.size !== 2) {\n return -1;\n }\n\n const keys = this.getKeys(events);\n const point0 = this.relativeCoords(events.get(keys[0]));\n const point1 = this.relativeCoords(events.get(keys[1]));\n\n return Math.hypot(point0.x - point1.x, point0.y - point1.y);\n }\n\n private updateEvent(event: PointerEvent) {\n const eventNotInCurrentEvents = !this._currentEvents.get(event.pointerId);\n if (eventNotInCurrentEvents && this._currentEvents.size === 2) {\n return;\n }\n\n const previousEvent = this._currentEvents.get(event.pointerId);\n if (previousEvent) {\n this._previousEvents.set(previousEvent.pointerId, previousEvent);\n }\n\n this._currentEvents.set(event.pointerId, event);\n\n if (eventNotInCurrentEvents) {\n this._initialDistance = this.getDistance(this._currentEvents);\n }\n }\n\n private removeEvent(event: PointerEvent) {\n this._currentEvents.delete(event.pointerId);\n this._previousEvents.delete(event.pointerId);\n\n if (this._currentEvents.size < 2) {\n this._initialDistance = -1;\n }\n }\n\n private getKeys(map: Map<number, PointerEvent>): number[] {\n return Array.from(map.keys());\n }\n\n private analyzeGesture() {\n if (this._currentEvents.size === 2) {\n const currentDistance = this.getDistance(this._currentEvents);\n const previousDistance = this.getDistance(this._previousEvents);\n\n const currentDistanceEqualsInitialDistance =\n Math.abs(this._initialDistance - currentDistance) <= this._maxInitialDistanceDifference;\n if (currentDistanceEqualsInitialDistance) {\n this.executePanAction(this.getMiddlePoint(this._currentEvents));\n } else {\n if (previousDistance !== -1 && currentDistance !== previousDistance) {\n this.executeZoomAction(currentDistance, previousDistance);\n }\n }\n } else if (this._currentEvents.size === 1 && this.isSingleTouchEnabled) {\n this.executeOrbitAction(this.getFirstPoint(this._currentEvents));\n }\n }\n\n private executeZoomAction(currentDistance: number, previousDistance: number) {\n if (this._lastGestureAction !== GestureAction.Zoom) {\n this.executeEndAction(this._lastGestureAction);\n this._lastGestureAction = GestureAction.Zoom;\n OdBaseDragger.isGestureActive = true;\n }\n\n const zoomSpeed = (currentDistance - previousDistance) / 700;\n const zoomFactor = 1 + zoomSpeed;\n const middlePoint = this.getMiddlePoint(this._currentEvents);\n this._zoomAction.action(middlePoint.x, middlePoint.y, zoomFactor);\n this.subject.update();\n }\n\n private executePanAction(currentPoint: Point2d) {\n if (this._lastGestureAction !== GestureAction.Pan) {\n this.executeEndAction(this._lastGestureAction);\n this._lastGestureAction = GestureAction.Pan;\n OdBaseDragger.isGestureActive = true;\n\n this._panAction.beginAction(currentPoint.x, currentPoint.y);\n }\n\n this._panAction.action(currentPoint.x, currentPoint.y);\n this.subject.update();\n }\n\n private executeOrbitAction(currentPoint: Point2d) {\n if (this._lastGestureAction !== GestureAction.Orbit) {\n this.executeEndAction(this._lastGestureAction);\n this._lastGestureAction = GestureAction.Orbit;\n OdBaseDragger.isGestureActive = true;\n\n this._orbitAction.beginAction(currentPoint.x, currentPoint.y);\n }\n\n this._orbitAction.action(currentPoint.x, currentPoint.y);\n this.subject.update();\n }\n\n private executeEndAction(gestureAction: GestureAction) {\n if (gestureAction === GestureAction.Orbit) this._orbitAction.endAction();\n if (gestureAction === GestureAction.Pan) this._panAction.endAction();\n OdBaseDragger.isGestureActive = false;\n }\n\n private needIgnoreEvent(event: PointerEvent): boolean {\n return (\n !this.subject.options.enableZoomWheel || !this.subject.options.enableGestures || !this.eventIsTouchEvent(event)\n );\n }\n\n private eventIsTouchEvent(event: PointerEvent): boolean {\n return event.pointerType === \"touch\" || event.pointerType === \"\";\n }\n\n override pointerdown(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.updateEvent(event);\n }\n\n override pointermove(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.updateEvent(event);\n this.analyzeGesture();\n }\n\n override pointerup(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.removeEvent(event);\n\n if (this._currentEvents.size < 2) {\n this.executeEndAction(this._lastGestureAction);\n OdBaseDragger.isGestureActive = false;\n }\n\n this._lastGestureAction = GestureAction.None;\n }\n\n override pointercancel(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.pointerup(event);\n }\n\n pointerleave(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.pointerup(event);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport function loadScript(url: string): Promise<HTMLScriptElement> {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = url;\n script.async = true;\n script.onload = () => resolve(script);\n script.onerror = () => {\n script.remove();\n reject(new Error(`GET ${url} failed to load script`));\n };\n document.body.appendChild(script);\n });\n}\n\nfunction loadVisuazlizeJsScript(url: string): Promise<HTMLScriptElement> {\n if (window[\"getVisualizeLibInst\"]) {\n const script = window[\"getVisualizeLibInst\"].script;\n if (script) {\n if (script.src === url) return Promise.resolve(script);\n script.remove();\n }\n delete window[\"getVisualizeLibInst\"];\n }\n return loadScript(url);\n}\n\nexport const loadVisualizeJs = (url: string, onprogress): Promise<any> => {\n return loadVisuazlizeJsScript(url).then((script) => {\n return new Promise((resolve, reject) => {\n const instance = window[\"getVisualizeLibInst\"]({\n urlMemFile: url + \".wasm\",\n TOTAL_MEMORY: 134217728,\n onprogress,\n });\n instance[\"loadWasmError\"] = reject;\n instance.postRun.push(() => {\n window[\"getVisualizeLibInst\"].script = script;\n resolve(instance);\n });\n });\n });\n};\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model } from \"@inweb/client\";\nimport { IOptions } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nexport class BaseLoader {\n protected viewer: Viewer;\n protected model: Model;\n protected options: IOptions;\n\n constructor(viewer: Viewer, model: Model, options: IOptions) {\n this.viewer = viewer;\n this.model = model;\n this.options = options;\n }\n\n async load(): Promise<void> {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\n\nexport class TCSLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n\n const filesToDownload = [this.model.database, ...this.model.geometry];\n\n this.viewer._abortController = abortController;\n\n console.time(\"File load time\");\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n for (let i = 0; i < filesToDownload.length; i++) {\n const dataId = filesToDownload[i];\n\n const chunkLoadHandler = (progress: number) => {\n const data = (i + progress) / filesToDownload.length;\n this.viewer.emitEvent({ type: \"geometryprogress\", data, model: this.model });\n };\n\n const arrayBuffer = await this.model.downloadResource(dataId, chunkLoadHandler, abortController.signal);\n\n if (abortController.signal.aborted) {\n await Promise.reject(new Error(`Open model aborted ${this.model.name}`));\n }\n\n visViewer.parseStream(new Uint8Array(arrayBuffer));\n this.viewer.update();\n\n const data = new Uint8Array(arrayBuffer);\n\n if (i === 0) {\n this.viewer.update(true);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, model: this.model });\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data, model: this.model });\n }\n }\n\n console.timeEnd(\"File load time\");\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\n\nexport class VsfXLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n\n this.viewer._abortController = abortController;\n\n const chunkLoadHandler = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, model: this.model });\n };\n\n console.time(\"File load time\");\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n const arrayBuffer = await this.model.downloadResource(\n this.model.database,\n chunkLoadHandler,\n abortController.signal\n );\n\n if (abortController.signal.aborted) {\n await Promise.reject(new Error(`Open model aborted ${this.model.name}`));\n }\n\n const data = new Uint8Array(arrayBuffer);\n\n if (this.viewer.visualizeJs) {\n visViewer.parseVsfx(data);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n }\n\n console.timeEnd(\"File load time\");\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, model: this.model });\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","import { Viewer } from \"../Viewer\";\n\nconst DELAY_TIME_MULTIPLEXER = 2.0;\nconst START_UPDATE_TIME = 1000;\n\nexport enum UpdateType {\n kDelay,\n kNormal,\n kForce,\n}\n\nexport class UpdaterController {\n private lastUpdate: number;\n private viewer: Viewer;\n public delayUpdateTime: number;\n\n constructor() {\n this.lastUpdate = 0;\n this.delayUpdateTime = START_UPDATE_TIME;\n }\n\n initialize(viewer: Viewer) {\n this.viewer = viewer;\n this.lastUpdate = performance.now();\n }\n\n update(type: UpdateType) {\n const isNeedUpdate = type !== UpdateType.kDelay || performance.now() - this.lastUpdate >= this.delayUpdateTime;\n const isForce = type === UpdateType.kForce;\n\n if (isNeedUpdate) {\n this.viewer.update(isForce);\n this.lastUpdate = performance.now();\n this.delayUpdateTime *= DELAY_TIME_MULTIPLEXER;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\nimport { UpdaterController, UpdateType } from \"./UpdaterController\";\n\nexport class VsfXStreamingLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n\n const updaterController = new UpdaterController();\n updaterController.initialize(this.viewer);\n\n this.viewer._abortController = abortController;\n\n let isFireDatabaseChunk = false;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array) => {\n if (!this.viewer.visualizeJs) return;\n\n const status = visViewer.parseVsfx(chunk);\n updaterController.update(UpdateType.kDelay);\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, model: this.model });\n\n let state = false;\n if (\n status === visLib.DatabaseStreamStatus.ReadyServiceData ||\n (status === visLib.DatabaseStreamStatus.Complete && !isFireDatabaseChunk)\n ) {\n isFireDatabaseChunk = true;\n state = true;\n }\n\n if (state) {\n updaterController.update(UpdateType.kForce);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, model: this.model });\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, model: this.model });\n }\n };\n\n console.time(\"File load time\");\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal);\n console.timeEnd(\"File load time\");\n\n updaterController.update(UpdateType.kNormal);\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\nimport { UpdaterController, UpdateType } from \"./UpdaterController\";\n\nconst PENDING_REQUESTS_SIZE = 50;\nconst PENDING_REQUESTS_TIMEOUT = 250;\n\nexport class VsfXPartialLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n const abortControllerForRequestMap = new Map();\n let servicePartAborted = false;\n\n const pendingRequestsMap = new Map();\n let pendingRequestsTimerId = 0;\n const pendingRequestsAbortHandler = () => clearTimeout(pendingRequestsTimerId);\n\n const pendingRequestsAbortController = new AbortController();\n abortControllerForRequestMap.set(0, pendingRequestsAbortController);\n\n const updaterController = new UpdaterController();\n updaterController.initialize(this.viewer);\n\n this.viewer._abortController = abortController;\n this.viewer._abortControllerForRequestMap = abortControllerForRequestMap;\n\n visViewer.memoryLimit = this.options.memoryLimit;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array, requestId = 0) => {\n if (!this.viewer.visualizeJs) return;\n\n const state = visViewer.parseVsfxInPartialMode(requestId, chunk);\n updaterController.update(UpdateType.kDelay);\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, model: this.model });\n\n if (state) {\n updaterController.update(UpdateType.kForce);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, model: this.model });\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, model: this.model });\n }\n };\n\n const downloadResourceRange = async (dataId: string, requestId: number, ranges: any) => {\n const abortCtrl = new AbortController();\n abortControllerForRequestMap.set(requestId, abortCtrl);\n try {\n await this.model.downloadResourceRange(dataId, requestId, ranges, chunkLoadHandler, abortCtrl.signal);\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n } finally {\n ranges.forEach((range) => visViewer.onRequestResponseComplete(range.requestId));\n abortControllerForRequestMap.delete(requestId);\n updaterController.update(UpdateType.kNormal);\n }\n };\n\n const requestRecordsToRanges = (requestId: number, records: any): any => {\n const ranges = [];\n for (let i = 0; i < records.size(); i++) {\n const record = records.get(i);\n ranges.push({\n requestId,\n begin: Number(record.begin),\n end: Number(record.end),\n });\n record.delete();\n }\n return ranges;\n };\n\n const objectHandler = {\n onServicePartReceived: (bHasIndex: boolean) => {\n if (bHasIndex) {\n servicePartAborted = true;\n abortController.abort();\n }\n },\n\n onRequest: (requestId: number, records: any) => {\n const ranges = requestRecordsToRanges(requestId, records);\n downloadResourceRange(this.model.database, requestId, ranges);\n },\n\n onFullLoaded: () => {\n updaterController.update(UpdateType.kNormal);\n },\n\n onRequestResponseParsed: (requestId: number) => {\n abortControllerForRequestMap.delete(requestId);\n updaterController.update(UpdateType.kNormal);\n },\n\n onRequestAborted: (requestId: number) => {\n const abortCtrl = abortControllerForRequestMap.get(requestId);\n if (abortCtrl) abortCtrl.abort();\n },\n\n onRequestResourceFile: (requestId: number, _: string, records: any) => {\n const dataId = `${this.model.fileId}${this.model.file.type}`;\n const ranges = requestRecordsToRanges(requestId, records);\n\n let pendingRanges = [];\n let requestNumber = 0;\n const pendingRequest = pendingRequestsMap.get(dataId);\n if (pendingRequest) {\n pendingRanges = pendingRequest.ranges;\n requestNumber = pendingRequest.number;\n }\n\n // first several records of each file are processed without grouping (they usually require to be processed sequentially)\n if (requestNumber <= 5) {\n pendingRequestsMap.set(dataId, { ranges: [], number: requestNumber + 1 });\n downloadResourceRange(dataId, requestId, ranges);\n return;\n }\n\n pendingRanges = pendingRanges.concat(ranges);\n\n // group requests to each file to launch a combined server request\n if (pendingRanges.length >= PENDING_REQUESTS_SIZE) {\n if (pendingRequestsTimerId) {\n window.clearTimeout(pendingRequestsTimerId);\n pendingRequestsTimerId = 0;\n }\n\n pendingRequestsMap.set(dataId, { ranges: [], number: requestNumber + 1 });\n downloadResourceRange(dataId, requestId, pendingRanges);\n return;\n }\n\n pendingRequestsMap.set(dataId, { ranges: pendingRanges, number: requestNumber + 1 });\n\n // set timeout to wait for the new requests, after that process the remaining requests\n if (pendingRequestsTimerId === 0) {\n pendingRequestsTimerId = window.setTimeout(() => {\n pendingRequestsAbortController.signal.removeEventListener(\"abort\", pendingRequestsAbortHandler);\n pendingRequestsTimerId = 0;\n\n pendingRequestsMap.forEach((request, dataId) => {\n if (request.ranges.length > 0) {\n pendingRequestsMap.set(dataId, { ranges: [], number: request.number + 1 });\n downloadResourceRange(dataId, requestId, request.ranges);\n }\n });\n }, PENDING_REQUESTS_TIMEOUT);\n\n pendingRequestsAbortController.signal.addEventListener(\"abort\", pendingRequestsAbortHandler, { once: true });\n }\n },\n };\n\n visViewer.attachPartialResolver(objectHandler);\n\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal).catch((e) => {\n if (!servicePartAborted) throw e;\n });\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (e: any) {\n if (pendingRequestsTimerId) {\n window.clearTimeout(pendingRequestsTimerId);\n pendingRequestsTimerId = 0;\n }\n\n this.viewer.emitEvent({ type: \"geometryerror\", data: e, model: this.model });\n throw e;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model } from \"@inweb/client\";\nimport { IOptions } from \"@inweb/viewer-core\";\n\nimport { TCSLoader } from \"./TCSLoader\";\nimport { VsfXLoader } from \"./VsfXLoader\";\nimport { VsfXStreamingLoader } from \"./VsfXStreamingLoader\";\nimport { VsfXPartialLoader } from \"./VsfXPartialLoader\";\nimport { Viewer } from \"../Viewer\";\n\nexport class LoaderFactory {\n create(viewer: Viewer, model: Model, options: IOptions) {\n const geometryType = model.database.split(\".\").pop();\n\n if (model.geometry.length === 0 && geometryType === \"vsfx\") {\n if (!options.enableStreamingMode) return new VsfXLoader(viewer, model, options);\n else if (options.enablePartialMode) return new VsfXPartialLoader(viewer, model, options);\n else return new VsfXStreamingLoader(viewer, model, options);\n }\n\n if (geometryType === \"data\") {\n return new TCSLoader(viewer, model, options);\n }\n\n throw new Error(`Unknown geometry type: ${geometryType}`);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport const MARKUP_ENTITY_LINE = \"$MarkupTempEntity_Line\";\n\nexport class OdaLineDragger extends OdBaseDragger {\n protected entity: any;\n protected points: any[];\n protected drawPoints: any[];\n\n constructor(subject: Viewer) {\n super(subject);\n this.press = false;\n }\n\n override dispose(): void {\n super.dispose();\n this.end();\n this.points = null;\n this.drawPoints = null;\n }\n\n override start(x: number, y: number): void {\n const point = this.getViewer().screenToWorld(x, y);\n this.drawPoints = [point[0], point[1], point[2]];\n }\n\n override drag(x: number, y: number): void {\n if (this.isDragging) {\n const point = this.getViewer().screenToWorld(x, y);\n this.drawPoints.push(point[0], point[1], point[2]);\n this._updateFrame();\n }\n }\n\n override end(): void {\n if (this.entity) {\n this.entity.delete();\n this.drawPoints = null;\n this.entity = null;\n }\n }\n\n private _updateFrame(): void {\n if (this.entity) {\n const model = this.getViewer().getMarkupModel();\n model.removeEntity(this.entity);\n model.delete();\n this.entity.delete();\n }\n\n this.entity = this.getActiveMarkupEntity(MARKUP_ENTITY_LINE);\n\n const entityPtr = this.entity.openObject();\n entityPtr.appendPolyline(this.drawPoints).delete();\n entityPtr.delete();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport const MARKUP_ENTITY_TEXT = \"$MarkupTempEntity_Text\";\n\nexport class OdaTextDragger extends OdBaseDragger {\n protected textRef: HTMLTextAreaElement;\n protected m_center: Point3d;\n protected entity: any;\n protected readonly TEXT_HEIGHT_ALIGN = 24;\n\n constructor(subject: Viewer) {\n super(subject);\n this.press = false;\n }\n\n override dispose(): void {\n super.dispose();\n this.textRef?.remove();\n this.textRef = null;\n }\n\n private _finishInput(): void {\n if (this.textRef && this.textRef.value.trimLeft()) {\n this._updateFrame();\n }\n this.textRef?.remove();\n this.textRef = null;\n }\n\n override start(x: number, y: number, absoluteX: number, absoluteY: number) {\n if (!this.textRef) {\n this.textRef = document.createElement(\"textarea\");\n this.textRef.style.zIndex = \"9999\";\n this.textRef.style.position = \"absolute\";\n this.textRef.style.display = \"block\";\n this.textRef.style.top = absoluteY + \"px\";\n this.textRef.style.left = absoluteX + \"px\";\n this.textRef.onkeypress = (event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n this._finishInput();\n }\n };\n document.body.appendChild(this.textRef);\n\n this.press = true;\n this.m_center = this.screenToWorld(x, y + this.TEXT_HEIGHT_ALIGN);\n this.needInputText = true;\n } else {\n this._finishInput();\n }\n }\n\n private _updateFrame(): void {\n this.entity = this.getActiveMarkupEntity(MARKUP_ENTITY_TEXT);\n const entityPtr = this.entity.openObject();\n\n const view = this.getViewer().activeView;\n const pos = this.toPoint(view.viewPosition);\n const target = this.toPoint(view.viewTarget);\n\n const eyeToWorld = view.eyeToWorldMatrix;\n const eyeDir = pos.sub(target).asVector();\n\n const xDir = this.toVector([1.0, 0.0, 0.0]);\n const direction = xDir.transformBy(eyeToWorld);\n\n const mtrx = this.createMatrix3d();\n mtrx.setToWorldToPlane(this.toGeVector(eyeDir));\n direction.transformBy(mtrx);\n\n const angel = -Math.atan2(-direction.y, direction.x);\n\n const textSize = 0.02;\n let textScale = 1.0;\n\n const projMtrx = view.projectionMatrix;\n const mtrxNumber = projMtrx.get(1, 1);\n const tol = 1.0e-6;\n if (!(mtrxNumber < tol && mtrxNumber > -tol)) {\n textScale = 1 / mtrxNumber;\n }\n\n const geomData = entityPtr.appendText(this.toGePoint(this.m_center), this.textRef.value.trimLeft());\n const textPtr = geomData.openAsText();\n\n textPtr.setNormal(this.toGeVector(eyeDir));\n textPtr.setRotation(angel);\n textPtr.setTextSize(textSize * textScale);\n textPtr.delete();\n geomData.delete();\n entityPtr.delete();\n }\n}\n","import { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { ILine, IText, IViewpoint } from \"@inweb/viewer-core\";\nimport { IMarkup, IMarkupObject, IWorldTransform, MarkupMode } from \"@inweb/markup\";\nimport { Viewer } from \"../../Viewer\";\nimport { MARKUP_ENTITY_LINE, OdaLineDragger } from \"../../Draggers/OdaLineDragger\";\nimport { MARKUP_ENTITY_TEXT, OdaTextDragger } from \"../../Draggers/OdaTextDragger\";\n\nexport class VisualizeMarkup implements IMarkup {\n private _viewer: Viewer;\n protected _markupColor = { r: 255, g: 0, b: 0 };\n\n public lineWidth = 4;\n public lineType: \"solid\";\n public fontSize = 34;\n\n initialize(\n container: HTMLElement,\n containerEvents: string[],\n viewer?: IEventEmitter,\n worldTransformer?: IWorldTransform\n ): void {\n this._viewer = viewer as Viewer;\n this._viewer.registerDragger(\"Line\", OdaLineDragger);\n this._viewer.registerDragger(\"Text\", OdaTextDragger);\n }\n\n dispose(): void {}\n\n syncOverlay(): void {}\n\n clearOverlay(): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n model.clearEntities();\n model.delete();\n }\n\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markupColor;\n }\n\n setMarkupColor(r: number, g: number, b: number): void {\n const color = { r, g, b };\n this._markupColor = color;\n }\n\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n const itr = model.getEntitiesIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n const entityPtr = entityId.openObject();\n const entityName = entityPtr.getName();\n\n if (entityName === MARKUP_ENTITY_LINE || entityName === MARKUP_ENTITY_TEXT) {\n entityPtr.setColor(r, g, b);\n }\n\n entityPtr.delete();\n }\n itr.delete();\n\n this._viewer.update();\n }\n\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n throw new Error(\"Not implemented yet\");\n }\n\n setViewpoint(viewpoint: IViewpoint): void {\n function getLogicalPoint3dAsArray(point3d) {\n return [point3d.x, point3d.y, point3d.z];\n }\n\n function getPoint3d(module, gePoint) {\n return module.Point3d.createFromArray(gePoint);\n }\n\n if (!this._viewer.visualizeJs) return;\n\n const visLib = this._viewer.visLib();\n const visViewer = visLib.getViewer();\n const activeView = visViewer.activeView;\n\n this._viewer.syncOverlay();\n\n const markupColor = viewpoint.custom_fields.markup_color || { r: 255, g: 0, b: 0 };\n this.setMarkupColor(markupColor.r, markupColor.g, markupColor.b);\n\n if (viewpoint.lines) {\n for (const line of viewpoint.lines) {\n const entityId = this._viewer.addMarkupEntity(MARKUP_ENTITY_LINE);\n const entityPtr = entityId.openObject();\n\n const entityData = [];\n for (const point of line.points) {\n entityData.push(point.x, point.y, point.z);\n }\n const geomData = entityPtr.appendPolyline(entityData);\n\n geomData.delete();\n entityPtr.delete();\n }\n }\n\n if (viewpoint.texts) {\n const pos = getPoint3d(visLib, activeView.viewPosition);\n const target = getPoint3d(visLib, activeView.viewTarget);\n const normal = pos.sub(target).asVector();\n\n for (const text of viewpoint.texts) {\n const entityId = this._viewer.addMarkupEntity(MARKUP_ENTITY_TEXT);\n const entityPtr = entityId.openObject();\n\n const geomData = entityPtr.appendText(getLogicalPoint3dAsArray(text.position), text.text);\n\n const textPtr = geomData.openAsText();\n textPtr.setNormal(getLogicalPoint3dAsArray(normal));\n textPtr.setRotation(text.angle);\n textPtr.setTextSize(text.text_size);\n\n textPtr.delete();\n geomData.delete();\n entityPtr.delete();\n }\n }\n\n this._viewer.update();\n }\n\n getViewpoint(): IViewpoint {\n function getLogicalPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n if (!this._viewer.visualizeJs) return {};\n\n const visLib = this._viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const viewpoint: IViewpoint = {\n lines: [],\n texts: [],\n };\n\n const model = visViewer.getMarkupModel();\n const itr = model.getEntitiesIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n const entityPtr = entityId.openObject();\n const entityName = entityPtr.getName();\n\n const geomItr = entityPtr.getGeometryDataIterator();\n if (geomItr.done()) {\n entityPtr.delete();\n continue;\n }\n\n const geometryId = geomItr.getGeometryData();\n\n if (entityName === MARKUP_ENTITY_LINE) {\n const polylinePtr = geometryId.openAsPolyline();\n const points = polylinePtr.getPoints();\n\n const line: ILine = {\n points: [],\n };\n for (const point of points) {\n line.points.push(getLogicalPoint3dFromArray(point));\n }\n\n viewpoint.lines.push(line);\n polylinePtr.delete();\n } else if (entityName === MARKUP_ENTITY_TEXT) {\n const textPtr = geometryId.openAsText();\n const position = textPtr.getPosition();\n\n const text: IText = {\n position: getLogicalPoint3dFromArray(position),\n text: textPtr.getString(),\n angle: textPtr.getRotation(),\n text_size: textPtr.getTextSize(),\n };\n\n viewpoint.texts.push(text);\n textPtr.delete();\n }\n\n entityPtr.delete();\n }\n itr.delete();\n\n viewpoint.snapshot = {\n data: visLib.canvas.toDataURL(\"image/jpeg\", 0.25),\n };\n\n viewpoint.custom_fields = {\n markup_color: this.getMarkupColor(),\n };\n\n viewpoint.description = new Date().toDateString();\n return viewpoint;\n }\n\n enableEditMode(mode: MarkupMode | false): this {\n return this;\n }\n\n createObject(type: string, params: any): IMarkupObject {\n return undefined;\n }\n\n getObjects(): IMarkupObject[] {\n return [];\n }\n\n getSelectedObjects(): IMarkupObject[] {\n return [];\n }\n\n selectObjects(objects: IMarkupObject[]): void {}\n\n clearSelected(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IMarkup, Markup as KonvaMarkup } from \"@inweb/markup\";\nimport { VisualizeMarkup } from \"./Visualize/VisualizeMarkup\";\n\n/**\n * Defines the type of the markup core.\n */\nexport type MarkupType = \"Konva\" | \"Visualize\";\n\nexport class MarkupFactory {\n public static createMarkup(markupType: MarkupType = \"Konva\"): IMarkup {\n let markup: IMarkup;\n\n switch (markupType) {\n case \"Konva\":\n markup = new KonvaMarkup();\n break;\n\n case \"Visualize\":\n markup = new VisualizeMarkup();\n break;\n\n default:\n throw new Error(\"Error during Markup initialization. Unknown Markup type.\");\n break;\n }\n\n return markup;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { Assembly, Client, File, Model } from \"@inweb/client\";\nimport {\n CANVAS_EVENTS,\n CanvasEventMap,\n commands,\n Dragger,\n IClippingPlane,\n IDragger,\n IOrthogonalCamera,\n IOptions,\n IViewer,\n IViewpoint,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\nimport { IMarkup, IWorldTransform } from \"@inweb/markup\";\n\nimport { MeasureLineDragger } from \"./Draggers/MeasureLineDragger/index\";\nimport { OdaWalkDragger } from \"./Draggers/OdaWalkDragger\";\nimport { OdCuttingPlaneXAxisDragger } from \"./Draggers/OdCuttingPlaneXAxisDragger\";\nimport { OdCuttingPlaneYAxisDragger } from \"./Draggers/OdCuttingPlaneYAxisDragger\";\nimport { OdCuttingPlaneZAxisDragger } from \"./Draggers/OdCuttingPlaneZAxisDragger\";\nimport { OdOrbitDragger } from \"./Draggers/OdOrbitDragger\";\nimport { OdPanDragger } from \"./Draggers/OdPanDragger\";\nimport { OdZoomDragger } from \"./Draggers/OdZoomDragger\";\nimport { OdZoomWheelDragger } from \"./Draggers/OdZoomWheelDragger\";\nimport { OdZoomWindowDragger } from \"./Draggers/OdZoomWindowDragger/index\";\nimport { OrbitAroundBuildingDragger } from \"./Draggers/OrbitAroundBuildingDragger\";\nimport { GestureManager } from \"./Draggers/Common/GestureManager\";\n\nimport { loadVisualizeJs } from \"./utils\";\nimport { LoaderFactory } from \"./Loaders/LoaderFactory\";\nimport { MarkupFactory, MarkupType } from \"./Markup/MarkupFactory\";\n\nconst OVERLAY_VIEW_NAME = \"$OVERLAY_VIEW_NAME\";\n\nconst isExist = (value) => value !== undefined && value !== null;\n\n/**\n * 3D viewer powered by\n * {@link https://cloud.opendesign.com/docs/index.html#/visualizejs | VisualizeJS} library.\n */\n\nexport class Viewer\n extends EventEmitter2<ViewerEventMap & CanvasEventMap & OptionsEventMap>\n implements IViewer, IWorldTransform\n{\n private _activeDragger: IDragger | null;\n private _zoomWheelDragger: OdZoomWheelDragger | null;\n private _gestureManager: GestureManager | null;\n private _enableAutoUpdate: boolean;\n private _isNeedRender: boolean;\n private _isRunAsyncUpdate: boolean;\n private _renderTime: DOMHighResTimeStamp;\n\n protected _options: Options;\n protected _visualizeJsUrl = \"\";\n protected _visualizeJs: any;\n protected _visualizeTimestamp: number;\n\n private canvaseventlistener: (event: Event) => void;\n\n public draggerFactory: Map<string, typeof Dragger>;\n public canvasEvents: string[];\n private frameId = 0;\n private _resizeObserver: ResizeObserver | undefined;\n private _markup: IMarkup;\n public canvas: HTMLCanvasElement | undefined;\n\n public _abortController: AbortController | undefined;\n public _abortControllerForRequestMap: Map<string, AbortController> | undefined;\n public _abortControllerForReferences: AbortController | undefined;\n public client: Client | undefined;\n\n /**\n * @param client - The `Client` instance that is used to load model reference files from the\n * Open Cloud Server. Do not specify `Client` if you need a standalone viewer instance to\n * view `VSFX` files from the web or from local computer.\n * @param params - An object containing viewer configuration parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own\n * library instance, or specify `undefined` or blank to use the default URL defined by\n * `Viewer.visualize` library you are using.\n * @param params.enableAutoUpdate - Enable auto-update of the viewer after any changes. If\n * the auto-update is disabled, you need to register an `update` event handler and update\n * the `VisualizeJS` viewer and active dragger manually. Default is `true`.\n * @param params.markupType - The type of the markup core: `Visualize` (deprecated) or\n * `Konva`. Default is `Konva`.\n */\n constructor(\n client?: Client,\n params: { visualizeJsUrl?: string; enableAutoUpdate?: boolean; markupType?: MarkupType } = {}\n ) {\n super();\n this.configure(params);\n\n this._options = new Options(this);\n\n this.client = client;\n\n this._activeDragger = null;\n this._zoomWheelDragger = null;\n this._gestureManager = null;\n this._renderTime = 0;\n\n this.draggerFactory = new Map<string, typeof Dragger>();\n this.registerDragger(\"Pan\", OdPanDragger);\n this.registerDragger(\"Orbit\", OdOrbitDragger);\n this.registerDragger(\"Zoom\", OdZoomDragger);\n this.registerDragger(\"ZoomWindow\", OdZoomWindowDragger);\n this.registerDragger(\"OrbitAroundBuilding\", OrbitAroundBuildingDragger);\n this.registerDragger(\"MeasureLine\", MeasureLineDragger);\n this.registerDragger(\"CuttingPlaneXAxis\", OdCuttingPlaneXAxisDragger);\n this.registerDragger(\"CuttingPlaneYAxis\", OdCuttingPlaneYAxisDragger);\n this.registerDragger(\"CuttingPlaneZAxis\", OdCuttingPlaneZAxisDragger);\n this.registerDragger(\"Walk\", OdaWalkDragger);\n\n this.canvasEvents = CANVAS_EVENTS.slice();\n this.canvaseventlistener = (event: Event) => this.emit(event);\n\n this._enableAutoUpdate = params.enableAutoUpdate ?? true;\n this._isNeedRender = false;\n this._isRunAsyncUpdate = false;\n\n this.render = this.render.bind(this);\n this.resize = this.resize.bind(this);\n\n this._markup = MarkupFactory.createMarkup(params.markupType);\n }\n\n /**\n * Viewer options.\n */\n get options(): IOptions {\n return this._options;\n }\n\n /**\n * `VisualizeJS` library URL. Use {@link configure | configure()} to change library URL.\n *\n * @readonly\n */\n get visualizeJsUrl(): string {\n return this._visualizeJsUrl;\n }\n\n /**\n * 2D markup core instance used to create markups.\n *\n * @readonly\n */\n get markup(): IMarkup {\n return this._markup;\n }\n\n /**\n * Changes the viewer parameters.\n *\n * @param params - An object containing new parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own\n * library instance or specify `undefined` or blank to use the default URL defined by\n * `Viewer.visualize` library you are using.\n */\n configure(params: { visualizeJsUrl?: string }): this {\n this._visualizeJsUrl = params.visualizeJsUrl || \"VISUALIZE_JS_URL\";\n return this;\n }\n\n /**\n * Loads the `VisualizeJS` module and initialize it with the specified canvas. Call\n * {@link dispose | dispose()} to release allocated resources.\n *\n * Fires:\n *\n * - {@link InitializeProgressEvent | initializeprogress}\n *\n * @param canvas -\n * {@link https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement | HTMLCanvasElement}\n * for `VisualizeJS`.\n * @param onProgress - A callback function that handles events measuring progress of loading\n * of the `VisualizeJS` library.\n */\n async initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent) => void): Promise<this> {\n this.addEventListener(\"optionschange\", (event) => this.syncOptions(event.data));\n\n if (canvas.style.width === \"\" && canvas.style.height === \"\") {\n canvas.style.width = \"100%\";\n canvas.style.height = \"100%\";\n }\n canvas.parentElement.style.touchAction = \"none\";\n canvas.style.touchAction = \"none\";\n\n canvas.width = canvas.clientWidth * window.devicePixelRatio;\n canvas.height = canvas.clientHeight * window.devicePixelRatio;\n\n this._visualizeTimestamp = Date.now();\n const visualizeTimestamp = this._visualizeTimestamp;\n\n const visualizeJs: any = await loadVisualizeJs(this.visualizeJsUrl, (event) => {\n const { loaded, total } = event;\n if (onProgress) onProgress(new ProgressEvent(\"progress\", { lengthComputable: true, loaded, total }));\n this.emitEvent({ type: \"initializeprogress\", data: loaded / total, loaded, total });\n });\n\n if (visualizeTimestamp !== this._visualizeTimestamp)\n throw new Error(\n \"Viewer error: dispose() was called before initialize() completed. Are you using React strict mode?\"\n );\n\n this._visualizeJs = visualizeJs;\n this.visualizeJs.canvas = canvas;\n this.visualizeJs.Viewer.create();\n\n this.canvas = canvas;\n this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));\n\n this._markup.initialize(this.canvas, this.canvasEvents, this, this);\n\n this._resizeObserver = new ResizeObserver(this.resize);\n this._resizeObserver.observe(canvas.parentElement);\n this.resize();\n\n this._zoomWheelDragger = new OdZoomWheelDragger(this);\n this._zoomWheelDragger.name = \"ZoomWheel\";\n this._zoomWheelDragger.initialize();\n\n this._gestureManager = new GestureManager(this);\n this._gestureManager.initialize();\n\n this.syncOpenCloudVisualStyle(true);\n this.syncOptions();\n\n this._renderTime = performance.now();\n this.render(this._renderTime);\n\n this.emitEvent({ type: \"initialize\" });\n\n return this;\n }\n\n /**\n * Releases all resources allocated by this viewer instance. Call this method before release\n * the `Viewer` instance.\n */\n dispose(): this {\n this.cancel();\n this.emitEvent({ type: \"dispose\" });\n\n if (this.frameId) cancelAnimationFrame(this.frameId);\n this.frameId = 0;\n\n this.setActiveDragger(\"\");\n this.removeAllListeners();\n\n if (this._gestureManager) this._gestureManager.dispose();\n this._gestureManager = undefined;\n\n if (this._zoomWheelDragger) this._zoomWheelDragger.dispose();\n this._zoomWheelDragger = undefined;\n\n if (this._resizeObserver) this._resizeObserver.disconnect();\n this._resizeObserver = undefined;\n\n this._markup.dispose();\n\n if (this.canvas) {\n this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n }\n\n if (this._visualizeJs) this._visualizeJs.getViewer().clear();\n this._visualizeJs = undefined;\n this._visualizeTimestamp = undefined;\n\n return this;\n }\n\n /**\n * Returns `true` if `VisualizeJS` module has been loaded and initialized.\n */\n isInitialized(): boolean {\n return !!this.visualizeJs;\n }\n\n // internal render/resize routines\n\n private render(time: DOMHighResTimeStamp) {\n this.frameId = requestAnimationFrame(this.render);\n\n if (!this.visualizeJs) return;\n\n if (this._isRunAsyncUpdate) return;\n\n const visViewer = this.visualizeJs.getViewer();\n if (visViewer.isRunningAnimation() || this._isNeedRender) {\n visViewer.update();\n this._activeDragger?.updatePreview();\n this._isNeedRender = !visViewer.getActiveDevice().isValid();\n\n const deltaTime = (time - this._renderTime) / 1000;\n this._renderTime = time;\n this.emitEvent({ type: \"render\", time, deltaTime });\n }\n }\n\n public resize(): this {\n if (!this.visualizeJs) return this;\n\n const { clientWidth, clientHeight } = this.canvas;\n this.canvas.width = clientWidth * window.devicePixelRatio;\n this.canvas.height = clientHeight * window.devicePixelRatio;\n\n const visViewer = this.visualizeJs.getViewer();\n visViewer.resize(0, this.canvas.width, this.canvas.height, 0);\n\n this.update(true);\n this.emitEvent({ type: \"resize\", width: clientWidth, height: clientHeight });\n\n return this;\n }\n\n /**\n * Updates the viewer.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register\n * an `update` event handler and update the `Visualize` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param force - If `true` updates the viewer immidietly. Otherwise updates on next\n * animation frame. Default is `false`.\n */\n update(force = false) {\n if (this._enableAutoUpdate) {\n if (force) {\n this.visViewer()?.update();\n this.activeDragger()?.updatePreview();\n } else {\n this._isNeedRender = true;\n }\n }\n this.emitEvent({ type: \"update\", data: force });\n }\n\n private scheduleUpdateAsync(maxScheduleUpdateTimeInMs = 50): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => {\n try {\n if (this._enableAutoUpdate) {\n this.visViewer()?.update(maxScheduleUpdateTimeInMs);\n this.activeDragger()?.updatePreview();\n }\n this.emitEvent({ type: \"update\", data: false });\n resolve();\n } catch (e) {\n console.error(e);\n reject();\n }\n }, 0);\n });\n }\n\n /**\n * Updates the viewer asynchronously without locking the user interface. Used to update the\n * viewer after changes that require a long rendering time.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register\n * an `update` event handler and update the `VisualizeJS` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param maxScheduleUpdateTimeInMs - Maximum time for one update, default 30 ms.\n * @param maxScheduleUpdateCount - Maximum count of scheduled updates.\n */\n async updateAsync(maxScheduleUpdateTimeInMs = 50, maxScheduleUpdateCount = 50): Promise<void> {\n this._isRunAsyncUpdate = true;\n const device = this.visViewer().getActiveDevice();\n try {\n for (let iterationCount = 0; !device.isValid() && iterationCount < maxScheduleUpdateCount; iterationCount++) {\n await this.scheduleUpdateAsync(maxScheduleUpdateTimeInMs);\n }\n await this.scheduleUpdateAsync(maxScheduleUpdateTimeInMs);\n } catch (e) {\n console.error(e);\n } finally {\n this._isRunAsyncUpdate = false;\n }\n }\n\n /**\n * Returns `VisualizeJS`\n * {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module} instance.\n */\n get visualizeJs(): any {\n return this._visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS`\n * {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module} instance.\n */\n visLib(): any {\n return this.visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS`\n * {@link https://cloud.opendesign.com/docs/index.html#/vis/Viewer | Viewer} instance.\n */\n visViewer(): any {\n return this.visualizeJs?.getViewer();\n }\n\n // update the VisualizeJS options\n\n syncOpenCloudVisualStyle(isInitializing: boolean): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const device = visViewer.getActiveDevice();\n if (device.isNull()) return this;\n\n const view = device.getActiveView();\n\n // setup light\n view.enableDefaultLighting(true, visLib.DefaultLightingType.kTwoLights);\n view.setDefaultLightingIntensity(1.25);\n\n let visualStyleId;\n try {\n visualStyleId = visViewer.findVisualStyle(\"OpenCloud\");\n } catch (e) {\n // if (!isInitializing) {\n // console.log(\"OpenCloud visual style not found, creating it on client side\");\n // }\n visualStyleId = visViewer.createVisualStyle(\"OpenCloud\");\n\n const colorDef = new visLib.OdTvColorDef(66, 66, 66);\n const shadedVsId = visViewer.findVisualStyle(\"Realistic\");\n\n const visualStylePtr = visualStyleId.openObject();\n visualStylePtr.copyFrom(shadedVsId);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kFaceModifiers, 0, visLib.VisualStyleOperations.kSet);\n //visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeModel, 1, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeModel, 2, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionDouble(visLib.VisualStyleOptions.kEdgeCreaseAngle, 60, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeStyles, 0, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeModifiers, 8, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionColor(\n visLib.VisualStyleOptions.kEdgeColorValue,\n colorDef,\n visLib.VisualStyleOperations.kSet\n );\n visualStylePtr.delete();\n }\n\n view.visualStyle = visualStyleId;\n\n view.delete();\n device.delete();\n\n return this;\n }\n\n syncOptions(options: IOptions = this.options): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const device = visViewer.getActiveDevice();\n if (device.isNull()) return this;\n\n if (options.showWCS !== visViewer.getEnableWCS()) {\n visViewer.setEnableWCS(options.showWCS);\n }\n if (options.cameraAnimation !== visViewer.getEnableAnimation()) {\n visViewer.setEnableAnimation(options.cameraAnimation);\n }\n if (options.antialiasing !== visViewer.fxaaAntiAliasing3d) {\n visViewer.fxaaAntiAliasing3d = options.antialiasing;\n visViewer.fxaaQuality = 5;\n }\n\n if (options.shadows !== visViewer.shadows) {\n visViewer.shadows = options.shadows;\n\n const canvas = visLib.canvas;\n device.invalidate([0, canvas.clientWidth, canvas.clientHeight, 0]);\n }\n\n if (options.groundShadow !== visViewer.groundShadow) {\n visViewer.groundShadow = options.groundShadow;\n }\n\n if (options.ambientOcclusion !== device.getOptionBool(visLib.DeviceOptions.kSSAOEnable)) {\n device.setOptionBool(visLib.DeviceOptions.kSSAOEnable, options.ambientOcclusion);\n device.setOptionBool(visLib.DeviceOptions.kSSAODynamicRadius, true);\n device.setOptionDouble(visLib.DeviceOptions.kSSAORadius, 1);\n device.setOptionInt32(visLib.DeviceOptions.kSSAOLoops, 32);\n device.setOptionDouble(visLib.DeviceOptions.kSSAOPower, 2);\n device.setOptionInt32(visLib.DeviceOptions.kSSAOBlurRadius, 2);\n\n const activeView = visViewer.activeView;\n activeView.setSSAOEnabled(options.ambientOcclusion);\n activeView.delete();\n }\n\n if (isExist(options.edgeModel)) {\n const activeView = device.getActiveView();\n\n const visualStyleId = visViewer.findVisualStyle(\"OpenCloud\");\n const visualStylePtr = visualStyleId.openObject();\n\n visualStylePtr.setOptionInt32(\n visLib.VisualStyleOptions.kEdgeModel,\n options.edgeModel ? 2 : 0,\n visLib.VisualStyleOperations.kSet\n );\n\n activeView.visualStyle = visualStyleId;\n\n visualStylePtr.delete();\n visualStyleId.delete();\n activeView.delete();\n }\n\n device.delete();\n\n this.syncHighlightingOptions(options);\n this.update();\n\n return this;\n }\n\n syncHighlightingOptions(options: IOptions = this.options): this {\n if (!this.visualizeJs) return this;\n\n const params = options.enableCustomHighlight ? options : Options.defaults();\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n const { Entry, OdTvRGBColorDef } = visLib;\n\n const highlightStyleId = visViewer.findHighlightStyle(\"Web_Default\");\n const highlightStylePtr = highlightStyleId.openObject();\n\n if (isExist(params.facesColor)) {\n const color = new OdTvRGBColorDef(params.facesColor.r, params.facesColor.g, params.facesColor.b);\n highlightStylePtr.setFacesColor(Entry.k3D.value | Entry.k3DTop.value, color);\n color.delete();\n }\n\n if (isExist(params.facesOverlap)) {\n highlightStylePtr.setFacesVisibility(Entry.k3DTop.value, params.facesOverlap);\n }\n if (isExist(params.facesTransparancy)) {\n highlightStylePtr.setFacesTransparency(Entry.k3D.value | Entry.k3DTop.value, params.facesTransparancy);\n }\n\n if (isExist(params.edgesColor)) {\n const color = new OdTvRGBColorDef(params.edgesColor.r, params.edgesColor.g, params.edgesColor.b);\n highlightStylePtr.setEdgesColor(\n Entry.k3DTop.value | Entry.k3D.value | Entry.k2D.value | Entry.k2DTop.value,\n color\n );\n color.delete();\n }\n\n if (isExist(params.edgesVisibility)) {\n highlightStylePtr.setEdgesVisibility(\n Entry.k2D.value | Entry.k2DTop.value | Entry.k3DTop.value | Entry.k3D.value,\n params.edgesVisibility\n );\n }\n if (isExist(params.edgesOverlap)) {\n const visibility = !isExist(params.edgesVisibility) ? true : params.edgesVisibility;\n highlightStylePtr.setEdgesVisibility(Entry.k2DTop.value | Entry.k3DTop.value, params.edgesOverlap && visibility);\n }\n\n const device = visViewer.getActiveDevice();\n if (!device.isNull()) {\n const canvas = visLib.canvas;\n\n device.invalidate([0, canvas.clientWidth, canvas.clientHeight, 0]);\n device.delete();\n }\n\n return this;\n }\n\n /**\n * List of names of registered draggers. By default, the following draggers are registered:\n *\n * - `Line`\n * - `Text`\n * - `Pan`\n * - `Orbit`\n * - `Zoom`\n * - `ZoomWindow`\n * - `OrbitAroundBuilding`\n * - `MeasureLine`\n * - `CuttingPlaneXAxis`\n * - `CuttingPlaneYAxis`\n * - `CuttingPlaneZAxis`\n * - `Walk`\n *\n * @readonly\n */\n get draggers(): string[] {\n return [...this.draggerFactory.keys()];\n }\n\n /**\n * Registers a dragger for the viewer. Dragger is an object that received mouse/keyboard\n * events and does something to the viewer.\n *\n * @param name - Dragger name.\n * @param dragger - Dragger class.\n */\n public registerDragger(name: string, dragger: typeof Dragger): void {\n this.draggerFactory.set(name, dragger);\n }\n\n /**\n * Returns active dragger instance or `null` if there is no active dragger.\n */\n activeDragger(): IDragger | null {\n return this._activeDragger;\n }\n\n /**\n * Changes the active dragger. Viewer must be initialized before enable dragger or exception is thrown.\n *\n * Fires:\n *\n * - {@link ChangeActiveDraggerEvent | changeactivedragger}\n *\n * @param name - Dragger name. Can be one of the {@link draggers} list.\n * @returns Returns active dragger instance or `null` if there is no dragger with the given name.\n */\n setActiveDragger(name: string): IDragger | null {\n if (this._activeDragger?.name !== name) {\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\n if (this.visualizeJs) {\n const Constructor = this.draggerFactory.get(name);\n if (Constructor) {\n this._activeDragger = new Constructor(this);\n this._activeDragger.name = name;\n this._activeDragger.initialize();\n }\n }\n const canvas = this.canvas;\n if (canvas) {\n canvas.className = canvas.className\n .split(\" \")\n .filter((x) => !x.startsWith(\"oda-cursor-\"))\n .filter((x) => x)\n .concat(`oda-cursor-${name.toLowerCase()}`)\n .join(\" \");\n }\n this.emitEvent({ type: \"changeactivedragger\", data: name });\n }\n return this._activeDragger;\n }\n\n /**\n * Resets the state of the active dragger.\n */\n resetActiveDragger(): void {\n const dragger = this._activeDragger;\n if (dragger) {\n this.setActiveDragger(\"\");\n this.setActiveDragger(dragger.name);\n }\n }\n\n /**\n * Removes all cutting planes.\n */\n clearSlices(): void {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n activeView.removeCuttingPlanes();\n activeView.delete();\n\n this.update();\n }\n\n /**\n * Clears the overlay view.\n */\n clearOverlay(): void {\n if (!this.visualizeJs) return;\n\n this._markup.clearOverlay();\n this.update();\n }\n\n /**\n * Creates an overlay view. Overlay view is used to draw cutting planes and `Visualize` markups.\n */\n syncOverlay(): any {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n let overlayView = visViewer.getViewByName(OVERLAY_VIEW_NAME);\n if (!overlayView) {\n const markupModel = visViewer.getMarkupModel();\n const pDevice = visViewer.getActiveDevice();\n\n overlayView = pDevice.createView(OVERLAY_VIEW_NAME, false);\n overlayView.addModel(markupModel);\n\n activeView.addSibling(overlayView);\n pDevice.addView(overlayView);\n }\n\n overlayView.viewPosition = activeView.viewPosition;\n overlayView.viewTarget = activeView.viewTarget;\n overlayView.upVector = activeView.upVector;\n overlayView.viewFieldWidth = activeView.viewFieldWidth;\n overlayView.viewFieldHeight = activeView.viewFieldHeight;\n\n const viewPort = overlayView.getViewport();\n overlayView.setViewport(viewPort.lowerLeft, viewPort.upperRight);\n overlayView.vportRect = activeView.vportRect;\n\n this._markup.syncOverlay();\n this.update();\n }\n\n /**\n * Returns `true` if current model is 3D model.\n */\n is3D(): boolean {\n if (!this.visualizeJs) return false;\n\n const visViewer = this.visViewer();\n const ext = visViewer.getActiveExtents();\n const min = ext.min();\n const max = ext.max();\n const extHeight = max[2] - min[2];\n return extHeight !== 0;\n\n //return visViewer.activeView.upVector[1] >= 0.95;\n }\n\n screenToWorld(position: { x: number; y: number }): { x: number; y: number; z: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y, z: 0 };\n\n const activeView = this.visViewer().activeView;\n const worldPoint = activeView.transformScreenToWorld(\n position.x * window.devicePixelRatio,\n position.y * window.devicePixelRatio\n );\n\n const result = { x: worldPoint[0], y: worldPoint[1], z: worldPoint[2] };\n\n activeView.delete();\n\n return result;\n }\n\n worldToScreen(position: { x: number; y: number; z: number }): { x: number; y: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y };\n\n const activeView = this.visViewer().activeView;\n const devicePoint = activeView.transformWorldToScreen(position.x, position.y, position.z);\n\n const result = { x: devicePoint[0] / window.devicePixelRatio, y: devicePoint[1] / window.devicePixelRatio };\n\n activeView.delete();\n\n return result;\n }\n\n getScale(): { x: number; y: number; z: number } {\n const result = { x: 1.0, y: 1.0, z: 1.0 };\n\n const projMatrix = this.visViewer().activeView.projectionMatrix;\n const tolerance = 1.0e-6;\n\n const x = projMatrix.get(0, 0);\n if (x > tolerance || x < -tolerance) result.x = 1 / x;\n\n const y = projMatrix.get(1, 1);\n if (y > tolerance || y < -tolerance) result.y = 1 / y;\n\n const z = projMatrix.get(2, 2);\n if (z > tolerance || z < -tolerance) result.z = 1 / z;\n\n return result;\n }\n\n /**\n * Returns a list of original handles for the selected objects.\n */\n getSelected(): string[] {\n return this.executeCommand(\"getSelected\");\n }\n\n /**\n * Selects the model objects by original handles that are obtained using `File.searchProperties()`.\n *\n * Fires:\n *\n * - {@link SelectEvent | select}\n *\n * @param handles - The list of original handles.\n */\n setSelected(handles?: string[]): void {\n this.executeCommand(\"setSelected\", handles);\n }\n\n // Internal loading routines\n\n async loadReferences(model: Model | File | Assembly): Promise<this> {\n if (!this.visualizeJs) return this;\n if (!this.client) return this;\n\n const abortController = new AbortController();\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = abortController;\n\n let references: any[] = [];\n await model\n .getReferences(abortController.signal)\n .then((data) => (references = data.references))\n .catch((e) => console.error(\"Cannot load model references.\", e));\n\n for (const file of references) {\n await this.client\n .downloadFile(file.id, undefined, abortController.signal)\n .then((arrayBuffer) => this.visualizeJs?.getViewer().addEmbeddedFile(file.name, new Uint8Array(arrayBuffer)))\n .catch((e) => console.error(`Cannot load reference file ${file.name}.`, e));\n }\n\n return this;\n }\n\n applyModelTransformMatrix(model: Model | Assembly) {\n this.executeCommand(\"applyModelTransform\", model);\n }\n\n applySceneGraphSettings(options = this.options) {\n if (!this.visualizeJs) return;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const device = visViewer.getActiveDevice();\n if (isExist(options.sceneGraph)) {\n device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, !options.sceneGraph);\n }\n // if (options.enablePartialMode && visLib.HpTrc.Usd >= visViewer.memoryLimit) {\n // device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, true);\n // }\n device.delete();\n\n this.update();\n }\n\n /**\n * Loads a file from Open Cloud Server into the viewer.\n *\n * The file geometry data on the server must be converted to `VSFX` format.\n *\n * This method requires a `Client` instance to be specified when creating the viewer to load\n * model reference files from the Open Cloud Server. For a standalone viewer instance use\n * {@link openVsfFile | openVsfFile()} or {@link openVsfxFile | openVsfxFile()}.\n *\n * Fires:\n *\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryChunkEvent | geometrychunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param file - File, assembly or specific model to load. If a `File` instance with multiple\n * models is specified, the default model will be loaded. If there is no default model,\n * first availiable model will be loaded.\n */\n async open(file: File | Assembly | Model): Promise<this> {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", file, model: file });\n\n let model: Model | undefined = undefined;\n if (file) {\n const models = (await file.getModels()) || [];\n model = models.find((model: Model) => model.default) || models[0];\n }\n if (!model) throw new Error(\"No default model found\");\n\n const overrideOptions = new Options();\n overrideOptions.data = this._options.data;\n if (file.type === \".rcs\" && !overrideOptions.enablePartialMode) {\n console.log(\"Partial load mode is forced for RCS file\");\n overrideOptions.enablePartialMode = true;\n }\n\n const loaderFactory = new LoaderFactory();\n const loader = loaderFactory.create(this, model, overrideOptions);\n\n await this.loadReferences(model);\n await loader.load();\n\n if (this.visualizeJs) {\n this.applyModelTransformMatrix(model);\n this.applySceneGraphSettings();\n }\n\n return this;\n }\n\n /**\n * Loads a `VSF` file into the viewer.\n *\n * Fires:\n *\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param buffer - Binary data buffer to load.\n */\n openVsfFile(buffer: Uint8Array | ArrayBuffer): this {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", buffer });\n\n try {\n this.emitEvent({ type: \"geometrystart\", buffer });\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseFile(data);\n\n this.syncOpenCloudVisualStyle(false);\n this.syncOptions();\n this.resize();\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, buffer });\n this.emitEvent({ type: \"databasechunk\", data, buffer });\n this.emitEvent({ type: \"geometryend\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, buffer });\n throw error;\n }\n\n return this;\n }\n\n /**\n * Loads a `VSFX` file into the viewer.\n *\n * Fires:\n *\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param buffer - Binary data buffer to load.\n */\n openVsfxFile(buffer: Uint8Array | ArrayBuffer): this {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", buffer });\n\n try {\n this.emitEvent({ type: \"geometrystart\", buffer });\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseVsfx(data);\n\n this.syncOpenCloudVisualStyle(false);\n this.syncOptions();\n this.resize();\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, buffer });\n this.emitEvent({ type: \"databasechunk\", data, buffer });\n this.emitEvent({ type: \"geometryend\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, buffer });\n throw error;\n }\n\n return this;\n }\n\n /**\n * Cancels asynchronous model loading started by {@link open | open()}.\n */\n cancel(): this {\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = undefined;\n\n this._abortController?.abort();\n this._abortController = undefined;\n\n this._abortControllerForRequestMap?.forEach((controller) => controller.abort());\n this._abortControllerForRequestMap = undefined;\n\n this.emitEvent({ type: \"cancel\" });\n\n return this;\n }\n\n /**\n * Unloads the model and clears the viewer and markups.\n */\n clear(): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n this.clearOverlay();\n\n visViewer.clear();\n visViewer.createLocalDatabase();\n\n this.syncOpenCloudVisualStyle(true);\n this.syncOptions();\n this.resize();\n\n this.emitEvent({ type: \"clear\" });\n\n return this;\n }\n\n /**\n * Returns the color of new markup objects.\n */\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markup.getMarkupColor();\n }\n\n /**\n * Sets the color of new markup objects.\n *\n * Fires:\n *\n * - {@link ChangeMarkupColorEvent | changemarkupcolor}\n *\n * @param r - The `red` component of the color, as a number between 0 and 255.\n * @param g - The `green` component of the color, as a number between 0 and 255.\n * @param b - The `blue` component of the color, as a number between 0 and 255.\n */\n setMarkupColor(r = 255, g = 0, b = 0): void {\n this._markup.setMarkupColor(r, g, b);\n const color = { r, g, b };\n this.emitEvent({ type: \"changemarkupcolor\", data: color });\n }\n\n /**\n * Colors all markup objects with the specified color.\n *\n * @param r - The `red` component of the color, as a number between 0 and 255.\n * @param g - The `green` component of the color, as a number between 0 and 255.\n * @param b - The `blue` component of the color, as a number between 0 and 255.\n */\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n this._markup.colorizeAllMarkup(r, g, b);\n }\n\n /**\n * Colors the selected markup objects with the specified color.\n *\n * @param r - `Red` part of color.\n * @param g - `Green` part of color.\n * @param b - `Blue` part of color.\n */\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n this._markup.colorizeSelectedMarkups(r, g, b);\n }\n\n /**\n * Adds an empty `Visualize` markup entity to the overlay.\n */\n addMarkupEntity(entityName: string) {\n if (!this.visualizeJs) return null;\n\n this.syncOverlay();\n\n const visViewer = this.visViewer();\n const model = visViewer.getMarkupModel();\n const entityId = model.appendEntity(entityName);\n const entityPtr = entityId.openObject();\n\n const color = this.getMarkupColor();\n entityPtr.setColor(color.r, color.g, color.b);\n entityPtr.setLineWeight(2);\n entityPtr.delete();\n\n this.update();\n\n return entityId;\n }\n\n /**\n * Sets the viewer state to the specified viewpoint.\n *\n * To get a list of available viewpoints from the server for a specific file, use the\n * `File.getViewpoints()`.\n *\n * @param viewpoint - Viewpoint data.\n */\n drawViewpoint(viewpoint: IViewpoint): void {\n this.setOrthogonalCameraSettings(viewpoint.orthogonal_camera);\n this.setClippingPlanes(viewpoint.clipping_planes);\n this._markup.setViewpoint(viewpoint);\n }\n\n /**\n * Saves the viewer state at the viewpoint.\n *\n * To save a viewpoint to the server for a specific file, use the `File.saveViewpoint()`.\n */\n createViewpoint(): IViewpoint {\n const vp = this._markup.getViewpoint();\n vp.orthogonal_camera = this.getOrthogonalCameraSettings();\n vp.clipping_planes = this.getClippingPlanes();\n\n return vp;\n }\n\n private getPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n private getLogicalPoint3dAsArray(point3d) {\n return [point3d.x, point3d.y, point3d.z];\n }\n\n private getOrthogonalCameraSettings(): IOrthogonalCamera {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n return {\n view_point: this.getPoint3dFromArray(activeView.viewPosition),\n direction: this.getPoint3dFromArray(activeView.viewTarget),\n up_vector: this.getPoint3dFromArray(activeView.upVector),\n field_width: activeView.viewFieldWidth,\n field_height: activeView.viewFieldHeight,\n };\n }\n\n private setOrthogonalCameraSettings(settings: IOrthogonalCamera) {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n this.resetActiveDragger();\n this.clearSlices();\n this.clearOverlay();\n\n if (settings) {\n activeView.setView(\n this.getLogicalPoint3dAsArray(settings.view_point),\n this.getLogicalPoint3dAsArray(settings.direction),\n this.getLogicalPoint3dAsArray(settings.up_vector),\n settings.field_width,\n settings.field_height,\n true\n );\n }\n\n this.syncOverlay();\n }\n\n private getClippingPlanes(): IClippingPlane[] {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n const clipping_planes = [];\n for (let i = 0; i < activeView.numCuttingPlanes(); i++) {\n const cuttingPlane = activeView.getCuttingPlane(i);\n\n const plane = {\n location: this.getPoint3dFromArray(cuttingPlane.getOrigin()),\n direction: this.getPoint3dFromArray(cuttingPlane.normal()),\n };\n\n clipping_planes.push(plane);\n }\n\n return clipping_planes;\n }\n\n private setClippingPlanes(clippingPlanes: IClippingPlane[]) {\n if (clippingPlanes) {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n for (const plane of clippingPlanes) {\n const cuttingPlane = new (this.visLib().OdTvPlane)();\n cuttingPlane.set(this.getLogicalPoint3dAsArray(plane.location), this.getLogicalPoint3dAsArray(plane.direction));\n\n activeView.addCuttingPlane(cuttingPlane);\n activeView.setEnableCuttingPlaneFill(true, 0x66, 0x66, 0x66);\n }\n }\n }\n\n /**\n * Executes the command denoted by the given command identifier.\n *\n * @param id - Identifier of the command to execute.\n * @param args - Parameters passed to the command function.\n * @returns A returned value of the given command. Returns `undefined` when the command doesn't exists.\n */\n executeCommand(id: string, ...args: any[]): any {\n return commands(\"VisualizeJS\").executeCommand(id, this, ...args);\n }\n\n public deviceAutoRegeneration() {\n const visViewer = this.visViewer();\n const device = visViewer.getActiveDevice();\n\n const coef = device.getOptionDouble(this.visLib().DeviceOptions.kRegenCoef);\n if (coef > 1.0) {\n visViewer.regenAll();\n this.update();\n }\n }\n}\n"],"names":["Commands","constructor","this","_commands","Map","registerCommand","id","handler","description","thisArg","set","registerCommandAlias","alias","viewer","args","executeCommand","getCommand","get","getCommands","map","forEach","value","key","command","isDraggerCommand","draggers","includes","setActiveDragger","console","warn","undefined","result","apply","emit","type","data","commands","viewerType","defaultOptions","showWCS","cameraAnimation","antialiasing","groundShadow","shadows","cameraAxisXSpeed","cameraAxisYSpeed","ambientOcclusion","enableStreamingMode","enablePartialMode","memoryLimit","cuttingPlaneFillColor","red","green","blue","edgesColor","r","g","b","facesColor","edgesVisibility","edgesOverlap","facesOverlap","facesTransparancy","enableCustomHighlight","sceneGraph","edgeModel","reverseZoomWheel","enableZoomWheel","enableGestures","geometryType","Options","emitter","_emitter","_data","loadFromStorage","defaults","notifierChangeEvent","change","saveToStorage","window","localStorage","setItem","JSON","stringify","error","item","getItem","parse","resetToDefaults","fields","resetData","reduce","acc","field","Boolean","CanvasEvents","CANVAS_EVENTS","Dragger","name","initialize","dispose","updatePreview","composeMatrixFromTransform","transform","modelCenter","visLib","translate","scale","rotation","translateMatrix","Matrix3d","setTranslation","x","y","z","rotateMatrix","setToRotation","angle","scaleMatrix","setToScaling","postMultBy","applyModelTransform","model","visualizeJs","getModelTransformMatrix","visViewer","getViewer","modelItr","getModelIterator","done","step","modelPtr","getModel","getDatabaseHandle","extents","getExtents","transformBy","getUnitsMatrix","matrix","center","setModelingMatrix","delete","_a","clearViewExtentsCache","call","update","clearOverlay","clearSlices","createPreview","encoderOptions","canvas","toDataURL","explode","index","getDefaultViewPositions","defViewPos","DefaultViewPosition","Object","keys","filter","getModels","handles","getName","push","getSelected","selectionSet","isNull","numItems","itr","getIterator","entityId","getEntity","entityPtr","getType","openObject","openObjectAsInsert","handle","getNativeDatabaseHandle","hideSelected","hideSelectedObjects","isolateSelected","isolateSelectedObjects","regenerateAll","regenAll","resetView","selectModel","activeView","selectCrossing","setSelected","emitEvent","dragger","setDefaultViewPosition","position","setDefaultViewPositionWithAnimation","setMarkupColor","OdTvSelectionSet","getEntityByOriginalHandle","appendEntity","showAll","unisolateSelectedObjects","unselect","zoomToExtents","force","animate","options","saveEnableAmination","getEnableAnimation","setEnableAnimation","zoomExtents","deviceAutoRegeneration","zoomToObjects","zoomToSelected","isTemplateModel","async","autoTransformAllModelsToCentralPoint","viewExt","getActiveExtents","centralPoint","ext","unitsMatrix","unitsMatrixInvert","invert","resMatrixWithUnits","resScale","Math","abs","max","min","setModelTransformMatrix","MarkupColor","setColor","asHex","HEX","asRGB","R","G","B","rgbToHex","valueToHex","c","hex","toString","WorldTransform","screenToWorld","worldToScreen","getScale","LineTypeSpecs","KonvaLine","params","ref","_b","_ref","points","konvaPoints","point","Konva","Line","stroke","color","strokeWidth","width","globalCompositeOperation","lineCap","lineJoin","draggable","strokeScaleEnabled","dash","on","e","attrs","target","_id","enableMouseEditing","getColor","getRotation","setRotation","degrees","getZIndex","zIndex","setZIndex","destroy","getPoints","setLineWidth","size","getLineWidth","getLineType","typeSpecs","setLineType","specs","addPoints","newPoints","concat","KonvaText","_c","TEXT_FONT_FAMILY","text","Text","fontSize","fontFamily","fill","align","getTextWidth","scaleByX","scaleX","scaleByY","scaleY","newWidth","newHeight","height","minWidth","round","getFontSize","getText","setText","getPosition","setPosition","setFontSize","KonvaRectangle","_d","Rect","lineWidth","minHeight","getWidth","getHeigth","setWidth","w","setHeight","h","KonvaEllipse","radius","Ellipse","radiusX","radiusY","newRadiusX","newRadiusY","minRadiusX","minRadiusY","evt","ctrlKey","shiftKey","getRadiusX","setRadiusX","getRadiusY","setRadiusY","KonvaArrow","start","end","Arrow","setPoints","length","getStartPoint","setStartPoint","getEndPoint","setEndPoint","KonvaImage","_ratio","EPSILON","BASE64_NOT_FOUND","BASE64_HEADER_START","src","startsWith","_canvasImage","image","Image","onload","maxWidth","heightOutOfCanvas","maxHeight","widthOutOfCanvas","onerror","getSrc","setSrc","getHeight","KonvaCloud","arcRadius","Shape","sceneFunc","context","shape","calculateMidpoint","midX","midY","midPoint","baseArcLength","beginPath","iPoint","approxArcLength","dx","dy","sqrt","arcCount","floor","lengthMod","pX","pY","pEndX","pEndY","endAngle","atan","startAngle","PI","counterClockwise","iArc","arc","closePath","fillStrokeShape","className","getSelfRect","MarkupMode2Konva","SelectMarkup","initializer","Rectangle","Cloud","KonvaMarkup","_containerEvents","_markupIsActive","_markupColor","lineType","changeActiveDragger","event","draggerName","_markupContainer","_container","split","toLowerCase","join","removeTextInput","removeImageInput","enableEditMode","resizeContainer","entries","contentRect","_konvaStage","pan","dX","devicePixelRatio","dY","getObjects","obj","move","redirectToViewer","_viewer","container","containerEvents","worldTransformer","Error","_worldTransformer","document","createElement","style","top","left","outline","parentDiv","parentElement","appendChild","_resizeObserver","ResizeObserver","observe","initializeKonva","addEventListener","removeEventListener","destroyKonva","disconnect","remove","syncOverlay","clearSelected","getMarkupColor","colorizeAllMarkup","hexColor","colorizeSelectedMarkups","getSelectedObjects","setViewpoint","viewpoint","_e","_f","_g","_h","markupColor","custom_fields","markup_color","lines","line","linePoints","screenPoint","addLine","texts","addText","text_size","font_size","rectangles","rect","addRectangle","line_width","ellipses","ellipse","addEllipse","arrows","arrow","startPoint","endPoint","addArrow","clouds","cloud","addCloud","images","addImage","getViewpoint","getMarkupLines","getMarkupTexts","getMarkupArrows","getMarkupClouds","getMarkupEllipses","getMarkupImages","getMarkupRectangles","snapshot","combineMarkupWithDrawing","Date","toDateString","mode","_markupMode","createObject","konvaShape","object","addObject","objects","konvaLayerFind","_konvaTransformer","nodes","values","find","selectObjects","selectedObjs","_groupImages","add","_groupTexts","_groupGeometry","_konvaLayer","parent","stage","Stage","clientWidth","clientHeight","layer","Layer","pixelRation","Group","transformer","Transformer","shouldOverdrawWholeArea","keepRatio","flipEnabled","isPaint","lastLine","mouseDownPos","lastObj","pos","getPointerPosition","some","m","defParams","startX","startY","_textInputRef","_textInputPos","_textInputAngle","createTextInput","pageX","pageY","_imageInputRef","_imageInputPos","createImageInput","rotateEnabled","metaPressed","metaKey","isSelected","indexOf","slice","splice","tabIndex","focus","code","preventDefault","worldPoints","absoluteTransform","getAbsoluteTransform","i","atPoint","worldPoint","konvaLine","textSize","textScale","rectangle","atStartPoint","worldStartPoint","atEndPoint","worldEndPoint","tempCanvas","ctx","getContext","HTMLCanvasElement","drawImage","toCanvas","pixelRatio","inputX","inputY","display","onkeydown","body","setTimeout","convertBase64","file","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","accept","onchange","files","base64","oncancel","click","at","tolerance","konvaText","konvaRectangle","konvaEllipse","konvaArrow","konvaCloud","konvaImage","EventEmitter2","_listeners","listener","listeners","removeAllListeners","invoke","off","OdaGeAction","module","setViewParams","extView","m_module","getActiveTvExtendedView","setView","upVector","viewFieldWidth","viewFieldHeight","perspective","getViewParams","view","viewPosition","viewTarget","getMarkupModel","copyPoint","p","Point3d","createVector3d","Vector3d","createPoint3d","createMatrix3d","createPlane","OdTvPlane","toVector","geVector","createFromArray","toGeVector","v","toGePoint","toPoint","gePoint","toDoubleArray","correctCameraTarget","contains","CLICK_DELTA","INTERACTIVITY_FPS","OdBaseDragger","subject","super","beginInteractivity","endInteractivity","device","getActiveDevice","invalidate","needInputText","mouseDownPosition","autoSelect","onmessage","canvasEvents","bind","setEnableAutoSelect","relativeCoords","offsetX","offsetY","pointerdown","ev","isPrimary","isGestureActive","setPointerCapture","pointerId","relCoord","isDragging","clientX","clientY","pointerup","needSkipPointerUp","releasePointerCapture","pointercancel","dispatchEvent","PointerEvent","pointermove","drag","movementX","movementY","isNotDragging","getEnableAutoSelect","select","dblclick","clickView","viewAt","active","pSelected","entity","zoomToEntity","deleteAll","absoluteX","absoluteY","getActiveMarkupEntity","entityName","addMarkupEntity","syncOverlayView","_isGestureActive","_needSkipPointerUp","createHtmlElementIfNeed","element","targetElement","dataTestId","setAttribute","destroyHtmlElement","removeChild","moduleInstance","avp","mtx","worldToDeviceMatrix","devicePoint","res","getDistance","gePoint1","gePoint2","tvPoint1","tvPoint2","distance","distanceTo","toFixed","normalizeFloat","ceil","lineSegmentsIntersect","p1","p2","p3","p4","a_dx","a_dy","b_dx","b_dy","s","t","checkSegmentsIntersect","isInsideRect","getDataForDrawLineWithFixed","pLU","pRU","pLB","pRB","intersects","fixedP1","fixedP2","pow","onSetCallback","cb","onclick","onSetSelectivity","enable","pointerEvents","MeasureLineItem","htmlElemStartPoint","htmlElemEndPoint","htmlElemLine","htmlElemTitle","unit","lineThickness","border","background","boxShadow","utils.createHtmlElementIfNeed","isFinishDraw","drawMeasureLine","pointSize","getBoundingClientRect","pScreenStart","utils.worldToScreen","utils.isInsideRect","cursor","borderRadius","pScreenEnd","point1","point2","utils.getDataForDrawLineWithFixed","transformOrigin","widthTitle","font","padding","textAlign","innerHTML","utils.getDistance","isFinish","setSize","clear","utils.destroyHtmlElement","setUnit","setConversionFactor","setStyle","setSelectionReactor","reactor","utils.onSetCallback","onStartPoint","onEndPoint","onTitle","setSelectability","utils.onSetSelectivity","renameUnit","table","MeasureLineDragger","press","gripingRadius","firstPoint","secondPoint","renameUnitTable","Millimeters","Centimeters","Meters","Feet","Inches","Yards","Kilometers","Miles","Micrometers","MicroInches","Undefined","items","m_overlayElement","resize","getSnapPointRadius","corners","viewDcCorners","pt1","lowerLeft","pt2","upperRight","createNewMeasureIfNeed","getSnapPoint","previewMeasureLine","newLineMeasure","createMeasureLine","getUnit","FocalLengthConst","calcFocalLength","lensLength","fieldWidth","fieldHeight","OdaWalkDragger","multiplier","speed","keyPressMap","Set","keydown","keyup","lastFrameTS","animationId","processMovement","deltaAngle","oldWCSEnableValue","getEnableWCS","setEnableWCS","maxDimension","getMaxDimension","viewParams","getActiveModel","cameraId","appendCamera","setupCamera","cameraWalker","OdTvCameraWalker","setCamera","enableZoomWheelPreviousValue","cancelAnimationFrame","removeEntity","timestamp","requestAnimationFrame","deltaTS","currentDelta","keyCode","moveForward","moveBackward","moveLeft","moveRight","moveUp","moveDown","dltX","dltY","turnLeft","turnDown","pCamera","camera","openObjectAsCamera","dir","direction","up","rotMatrix","zAxisVector","setupCameraByDirection","toArray","setDisplayGlyph","setDisplayTarget","setAutoAdjust","setNearClip","setFarClip","setViewParameters","focalL","pTarget","viewDir","viewDirSub","sub","viewDirVec","asVector","viewDirVecNormal","normalize","geViewDir","newGeViewDir","pTarget2","newGeViewDirPt","newPos","assignView","xmax","ymax","zmax","sceneExtents","xmin","ymin","zmin","volume","OdBaseCuttingPlaneDragger","m_size_x","m_size_y","m_size_z","m_center","m_normal","createNormal","plane","addCuttingPlane","numCuttingPlanes","setEnableCuttingPlaneFill","setCuttingPlaneFillPatternEnabled","CuttingPlaneFillStyle","kHorizontalBars","m_model","m_entity","planePreview","handleDelta","delta","getPlanePreviewCoordinate","m_last","m_click","oldCenter","oldLast","newPlane","newCutting","updateCuttingPlane","drawPreview","getSize","GeometryTypes","transparencyDef","OdTvTransparencyDef","colorDef","OdTvColorDef","setValue","kFaces","kEdges","setLineWeight","setTransparency","appendPolygon","polygonPtr","openAsPolygon","setFilled","OdCuttingPlaneXAxisDragger","OdCuttingPlaneYAxisDragger","OdCuttingPlaneZAxisDragger","OrbitAction","_m_module","_subject","_beginInteractivity","_endInteractivity","beginAction","m_viewCenter","getCenter","m_startPoint","action","vportRect","distX","distY","xOrbit","yOrbit","sideVector","getSideVector","calculateXOrbit","calculateYOrbit","activeDragger","endAction","pUpV","pPosition","direct","vDirect","vCross","crossProduct","pPoint","pCenter","rotatePoint","rotateByBasePoint","pUp","vUp","crossProductNormal","zAxis","kZAxis","side","rotateBy","cross","crossNormal","pSet","entId","extSelected","getWCSExtents","addExt","OdOrbitDragger","_orbitAction","setDefaultViewParams","startCameraParams","PanAction","_getViewParams","_setViewParams","_m_start","_deltaScreenPosition","pt","ptSub","targetWithDelta","positionWithDelta","OdPanDragger","_panAction","ZoomAction","zoomFactor","zoomAt","OdZoomDragger","_zoomAction","pressX","pressY","ZOOM_SPEED","INTERACTIVITY_TIME_OUT","OdZoomWheelDragger","_endInteractivityTimeOutId","_isEnableInteractivityMode","wheel","zoomReverse","zoomSpeed","deltaY","clearTimeout","OdSelectionFrame","m_start","m_end","init","instance","draw","viewM","viewingMatrix","p0","eyeM","eyeToWorldMatrix","m_frame","OdZoomWindowDragger","m_minX","m_minY","m_maxX","m_maxY","zoomWindow","OrbitAroundBuildingDragger","maxPolarAngle","minPolarAngle","m_delta","offset","zMatrix","setToIdentity","xMatrix","yAxis","xAxis","xyDir","xyAngle","sign","dotProduct","angleTo","yzDir","yzAngle","xAngle","endMatrix","setLength","current","extTuple","GestureAction","GestureManager","isSingleTouchEnabled","_isSingleTouchEnabled","_previousEvents","_currentEvents","_lastGestureAction","None","_maxInitialDistanceDifference","getMiddlePoint","events","getKeys","point0","getFirstPoint","hypot","updateEvent","eventNotInCurrentEvents","previousEvent","_initialDistance","removeEvent","Array","from","analyzeGesture","currentDistance","previousDistance","currentDistanceEqualsInitialDistance","executePanAction","executeZoomAction","executeOrbitAction","Zoom","executeEndAction","middlePoint","currentPoint","Pan","Orbit","gestureAction","needIgnoreEvent","eventIsTouchEvent","pointerType","pointerleave","loadScript","url","script","loadVisuazlizeJsScript","loadVisualizeJs","onprogress","then","urlMemFile","TOTAL_MEMORY","postRun","BaseLoader","load","TCSLoader","abortController","AbortController","filesToDownload","database","geometry","_abortController","time","dataId","chunkLoadHandler","progress","arrayBuffer","downloadResource","signal","aborted","parseStream","Uint8Array","syncOpenCloudVisualStyle","syncOptions","timeEnd","VsfXLoader","parseVsfx","DELAY_TIME_MULTIPLEXER","START_UPDATE_TIME","UpdateType","UpdaterController","lastUpdate","delayUpdateTime","performance","now","isNeedUpdate","kDelay","isForce","kForce","VsfXStreamingLoader","updaterController","isFireDatabaseChunk","chunk","status","state","DatabaseStreamStatus","ReadyServiceData","Complete","kNormal","PENDING_REQUESTS_SIZE","PENDING_REQUESTS_TIMEOUT","VsfXPartialLoader","abortControllerForRequestMap","servicePartAborted","pendingRequestsMap","pendingRequestsTimerId","pendingRequestsAbortHandler","pendingRequestsAbortController","_abortControllerForRequestMap","requestId","parseVsfxInPartialMode","downloadResourceRange","ranges","abortCtrl","range","onRequestResponseComplete","requestRecordsToRanges","records","record","begin","Number","objectHandler","onServicePartReceived","bHasIndex","abort","onRequest","onFullLoaded","onRequestResponseParsed","onRequestAborted","onRequestResourceFile","_","fileId","pendingRanges","requestNumber","pendingRequest","number","request","once","attachPartialResolver","catch","LoaderFactory","create","pop","MARKUP_ENTITY_LINE","OdaLineDragger","drawPoints","_updateFrame","appendPolyline","MARKUP_ENTITY_TEXT","OdaTextDragger","TEXT_HEIGHT_ALIGN","textRef","_finishInput","trimLeft","onkeypress","eyeToWorld","eyeDir","xDir","mtrx","setToWorldToPlane","angel","atan2","projMtrx","projectionMatrix","mtrxNumber","tol","geomData","appendText","textPtr","openAsText","setNormal","setTextSize","VisualizeMarkup","registerDragger","clearEntities","getEntitiesIterator","getLogicalPoint3dAsArray","point3d","getPoint3d","entityData","normal","getLogicalPoint3dFromArray","array","geomItr","getGeometryDataIterator","geometryId","getGeometryData","polylinePtr","openAsPolyline","getString","getTextSize","MarkupFactory","createMarkup","markupType","markup","OVERLAY_VIEW_NAME","isExist","Viewer","client","_visualizeJsUrl","frameId","configure","_options","_activeDragger","_zoomWheelDragger","_gestureManager","_renderTime","draggerFactory","canvaseventlistener","_enableAutoUpdate","enableAutoUpdate","_isNeedRender","_isRunAsyncUpdate","render","_markup","visualizeJsUrl","onProgress","touchAction","_visualizeTimestamp","visualizeTimestamp","loaded","total","ProgressEvent","lengthComputable","_visualizeJs","cancel","isInitialized","isRunningAnimation","isValid","deltaTime","scheduleUpdateAsync","maxScheduleUpdateTimeInMs","updateAsync","maxScheduleUpdateCount","iterationCount","isInitializing","getActiveView","enableDefaultLighting","DefaultLightingType","kTwoLights","setDefaultLightingIntensity","visualStyleId","findVisualStyle","createVisualStyle","shadedVsId","visualStylePtr","copyFrom","setOptionInt32","VisualStyleOptions","kFaceModifiers","VisualStyleOperations","kSet","kEdgeModel","setOptionDouble","kEdgeCreaseAngle","kEdgeStyles","kEdgeModifiers","setOptionColor","kEdgeColorValue","visualStyle","fxaaAntiAliasing3d","fxaaQuality","getOptionBool","DeviceOptions","kSSAOEnable","setOptionBool","kSSAODynamicRadius","kSSAORadius","kSSAOLoops","kSSAOPower","kSSAOBlurRadius","setSSAOEnabled","syncHighlightingOptions","Entry","OdTvRGBColorDef","highlightStyleId","findHighlightStyle","highlightStylePtr","setFacesColor","k3D","k3DTop","setFacesVisibility","setFacesTransparency","setEdgesColor","k2D","k2DTop","setEdgesVisibility","visibility","Constructor","resetActiveDragger","removeCuttingPlanes","overlayView","getViewByName","markupModel","pDevice","createView","addModel","addSibling","addView","viewPort","getViewport","setViewport","is3D","extHeight","transformScreenToWorld","transformWorldToScreen","projMatrix","loadReferences","_abortControllerForReferences","references","getReferences","downloadFile","addEmbeddedFile","applyModelTransformMatrix","applySceneGraphSettings","kDelaySceneGraphProc","open","models","default","overrideOptions","log","loaderFactory","loader","openVsfFile","buffer","parseFile","openVsfxFile","controller","createLocalDatabase","drawViewpoint","setOrthogonalCameraSettings","orthogonal_camera","setClippingPlanes","clipping_planes","createViewpoint","vp","getOrthogonalCameraSettings","getClippingPlanes","getPoint3dFromArray","view_point","up_vector","field_width","field_height","settings","cuttingPlane","getCuttingPlane","location","getOrigin","clippingPlanes","coef","getOptionDouble","kRegenCoef"],"mappings":"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"}
1
+ {"version":3,"file":"viewer-visualize.module.js","sources":["../../viewer-core/dist/viewer-core.module.js","../src/Viewer/Commands/ApplyModelTransform.ts","../src/Viewer/Commands/ClearMarkup.ts","../src/Viewer/Commands/ClearSlices.ts","../src/Viewer/Commands/CreatePreview.ts","../src/Viewer/Commands/Explode.ts","../src/Viewer/Commands/GetDefaultViewPositions.ts","../src/Viewer/Commands/GetModels.ts","../src/Viewer/Commands/GetSelected.ts","../src/Viewer/Commands/HideSelected.ts","../src/Viewer/Commands/IsolateSelected.ts","../src/Viewer/Commands/RegenerateAll.ts","../src/Viewer/Commands/ResetView.ts","../src/Viewer/Commands/SelectModel.ts","../src/Viewer/Commands/SetActiveDragger.ts","../src/Viewer/Commands/SetDefaultViewPosition.ts","../src/Viewer/Commands/SetMarkupColor.ts","../src/Viewer/Commands/SetSelected.ts","../src/Viewer/Commands/ShowAll.ts","../src/Viewer/Commands/Unselect.ts","../src/Viewer/Commands/ZoomToExtents.ts","../src/Viewer/Commands/ZoomToObjects.ts","../src/Viewer/Commands/ZoomToSelected.ts","../src/Viewer/Commands/AutoTransformAllModelsToCentralPoint.ts","../../markup/dist/markup.module.js","../../eventemitter2/dist/eventemitter2.module.js","../src/Viewer/Draggers/Common/OdaGeAction.ts","../src/Viewer/Draggers/Common/OdBaseDragger.ts","../src/Viewer/Draggers/MeasureLineDragger/MeasureUtils.ts","../src/Viewer/Draggers/MeasureLineDragger/MeasureLineItem.ts","../src/Viewer/Draggers/MeasureLineDragger/index.ts","../src/Viewer/Draggers/OdaWalkDragger.ts","../src/Viewer/Draggers/OdBaseCuttingPlaneDragger.ts","../src/Viewer/Draggers/OdCuttingPlaneXAxisDragger.ts","../src/Viewer/Draggers/OdCuttingPlaneYAxisDragger.ts","../src/Viewer/Draggers/OdCuttingPlaneZAxisDragger.ts","../src/Viewer/Draggers/Actions/OrbitAction.ts","../src/Viewer/Draggers/OdOrbitDragger.ts","../src/Viewer/Draggers/Actions/PanAction.ts","../src/Viewer/Draggers/OdPanDragger.ts","../src/Viewer/Draggers/Actions/ZoomAction.ts","../src/Viewer/Draggers/OdZoomDragger.ts","../src/Viewer/Draggers/OdZoomWheelDragger.ts","../src/Viewer/Draggers/OdZoomWindowDragger/OdSelectionFrame.ts","../src/Viewer/Draggers/OdZoomWindowDragger/index.ts","../src/Viewer/Draggers/OrbitAroundBuildingDragger.ts","../src/Viewer/Draggers/Common/GestureManager.ts","../src/Viewer/utils.ts","../src/Viewer/Loaders/BaseLoader.ts","../src/Viewer/Loaders/TCSLoader.ts","../src/Viewer/Loaders/VsfXLoader.ts","../src/Viewer/Loaders/UpdaterController.ts","../src/Viewer/Loaders/VsfXStreamingLoader.ts","../src/Viewer/Loaders/VsfXPartialLoader.ts","../src/Viewer/Loaders/LoaderFactory.ts","../src/Viewer/Draggers/OdaLineDragger.ts","../src/Viewer/Draggers/OdaTextDragger.ts","../src/Viewer/Markup/Visualize/VisualizeMarkup.ts","../src/Viewer/Markup/MarkupFactory.ts","../src/Viewer/Viewer.ts"],"sourcesContent":["class Commands {\n constructor() {\n this._commands = new Map;\n }\n registerCommand(id, handler, description, thisArg) {\n this._commands.set(id, {\n id: id,\n handler: handler,\n thisArg: thisArg,\n description: description\n });\n }\n registerCommandAlias(id, alias) {\n this.registerCommand(alias, ((viewer, ...args) => this.executeCommand(id, viewer, ...args)));\n }\n getCommand(id) {\n return this._commands.get(id);\n }\n getCommands() {\n const map = new Map;\n this._commands.forEach(((value, key) => map.set(key, value)));\n return map;\n }\n executeCommand(id, viewer, ...args) {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n const {handler: handler, thisArg: thisArg} = command;\n const result = handler.apply(thisArg, [ viewer, ...args ]);\n viewer === null || viewer === void 0 ? void 0 : viewer.emit({\n type: \"command\",\n data: id,\n args: args\n });\n return result;\n }\n}\n\nconst _commands = new Map;\n\nfunction commands(viewerType = \"\") {\n let result = _commands.get(viewerType);\n if (!result) {\n result = new Commands;\n _commands.set(viewerType, result);\n }\n return result;\n}\n\ncommands(\"\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"VisualizeJS\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"ThreeJS\").registerCommand(\"noop\", (() => {}));\n\nfunction defaultOptions() {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: {\n red: 255,\n green: 152,\n blue: 0\n },\n edgesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n facesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\"\n };\n}\n\nclass Options {\n constructor(emitter) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n static defaults() {\n return defaultOptions();\n }\n notifierChangeEvent() {\n console.warn(\"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\");\n this.change();\n }\n change() {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({\n type: \"optionschange\",\n data: this\n });\n }\n }\n saveToStorage() {\n if (typeof window !== \"undefined\") try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n loadFromStorage() {\n if (typeof window !== \"undefined\") try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = {\n ...data\n };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n resetToDefaults(fields) {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce(((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }), {});\n this.data = {\n ...this.data,\n ...resetData\n };\n } else {\n this.data = {\n ...this.data,\n ...Options.defaults()\n };\n }\n }\n get data() {\n return this._data;\n }\n set data(value) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = {\n ...Options.defaults(),\n ...this._data,\n ...value,\n enablePartialMode: enablePartialMode,\n sceneGraph: sceneGraph\n };\n this.change();\n }\n get showWCS() {\n return this._data.showWCS;\n }\n set showWCS(value) {\n this._data.showWCS = value;\n this.change();\n }\n get cameraAnimation() {\n return this._data.cameraAnimation;\n }\n set cameraAnimation(value) {\n this._data.cameraAnimation = value;\n this.change();\n }\n get antialiasing() {\n return this._data.antialiasing;\n }\n set antialiasing(value) {\n this._data.antialiasing = value;\n this.change();\n }\n get groundShadow() {\n return this._data.groundShadow;\n }\n set groundShadow(value) {\n this._data.groundShadow = value;\n this.change();\n }\n get shadows() {\n return this._data.shadows;\n }\n set shadows(value) {\n this._data.shadows = value;\n this.change();\n }\n get cameraAxisXSpeed() {\n return this._data.cameraAxisXSpeed;\n }\n set cameraAxisXSpeed(value) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n get cameraAxisYSpeed() {\n return this._data.cameraAxisYSpeed;\n }\n set cameraAxisYSpeed(value) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n get ambientOcclusion() {\n return this._data.ambientOcclusion;\n }\n set ambientOcclusion(value) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n get enableStreamingMode() {\n return this._data.enableStreamingMode;\n }\n set enableStreamingMode(value) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n get enablePartialMode() {\n return this._data.enablePartialMode;\n }\n set enablePartialMode(value) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n get memoryLimit() {\n return this._data.memoryLimit;\n }\n set memoryLimit(value) {\n this._data.memoryLimit = value;\n this.change();\n }\n get cuttingPlaneFillColor() {\n return this._data.cuttingPlaneFillColor;\n }\n set cuttingPlaneFillColor(value) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n get edgesColor() {\n return this._data.edgesColor;\n }\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n get facesColor() {\n return this._data.facesColor;\n }\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n set reverseZoomWheel(value) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n set enableZoomWheel(value) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n get enableGestures() {\n return this._data.enableGestures;\n }\n set enableGestures(value) {\n this._data.enableGestures = !!value;\n this.change();\n }\n get geometryType() {\n return this._data.geometryType;\n }\n set geometryType(value) {\n this._data.geometryType = value;\n this.change();\n }\n}\n\nconst CanvasEvents = [ \"click\", \"contextmenu\", \"dblclick\", \"mousedown\", \"mouseleave\", \"mousemove\", \"mouseup\", \"pointercancel\", \"pointerdown\", \"pointerleave\", \"pointermove\", \"pointerup\", \"touchcancel\", \"touchend\", \"touchmove\", \"touchstart\", \"wheel\" ];\n\nconst CANVAS_EVENTS = CanvasEvents;\n\nclass Dragger {\n constructor(viewer) {\n this.name = \"\";\n }\n initialize() {}\n dispose() {}\n updatePreview() {}\n}\n\nexport { CANVAS_EVENTS, CanvasEvents, Dragger, Options, commands, defaultOptions };\n//# sourceMappingURL=viewer-core.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model, File, Assembly } from \"@inweb/client\";\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nexport const composeMatrixFromTransform = (transform, modelCenter, visLib) => {\n const { translate, scale, rotation } = transform;\n\n const translateMatrix = new visLib.Matrix3d();\n translateMatrix.setTranslation([translate.x, translate.y, translate.z]);\n\n const rotateMatrix = new visLib.Matrix3d();\n rotateMatrix.setToRotation(rotation.angle, [rotation.x, rotation.y, rotation.z], modelCenter);\n\n const scaleMatrix = new visLib.Matrix3d();\n scaleMatrix.setToScaling(scale, modelCenter);\n\n return rotateMatrix.postMultBy(translateMatrix).postMultBy(scaleMatrix);\n};\n\nfunction applyModelTransform(viewer: Viewer, model: Model | File | Assembly) {\n if (!viewer.visualizeJs) return;\n if (!model.getModelTransformMatrix) return; // Model.getModelTransformMatrix() since 24.3.14\n\n const visLib = viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n const transform = model.getModelTransformMatrix(modelPtr.getDatabaseHandle());\n if (transform) {\n const extents = modelPtr.getExtents();\n extents.transformBy(modelPtr.getUnitsMatrix());\n\n const matrix = composeMatrixFromTransform(transform, extents.center(), visLib);\n\n modelPtr.setModelingMatrix(matrix, true);\n }\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"applyModelTransform\", applyModelTransform);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"clearMarkup\", (viewer: Viewer) => viewer.clearOverlay());\ncommands(\"VisualizeJS\").registerCommandAlias(\"clearMarkup\", \"clearOverlay\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"clearSlices\", (viewer: Viewer) => viewer.clearSlices());\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction createPreview(viewer: Viewer, type = \"image/jpeg\", encoderOptions = 0.25): string {\n if (!viewer.visualizeJs) return \"\";\n\n return viewer.canvas?.toDataURL(type, encoderOptions) || \"\";\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"createPreview\", createPreview);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction explode(viewer: Viewer, index = 0): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.explode(index);\n\n viewer.update();\n viewer.emit({ type: \"explode\", data: index });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"explode\", explode);\ncommands(\"VisualizeJS\").registerCommand(\"collect\", (viewer: any) => explode(viewer, 0));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction getDefaultViewPositions(viewer: Viewer): string[] {\n if (!viewer.visualizeJs) return [];\n\n const visLib = viewer.visLib();\n\n const defViewPos = visLib.DefaultViewPosition;\n return Object.keys(defViewPos).filter((x) => x !== \"values\");\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"getDefaultViewPositions\", getDefaultViewPositions);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction getModels(viewer: Viewer): string[] {\n if (!viewer.visualizeJs) return [];\n\n const visViewer = viewer.visViewer();\n\n const handles: string[] = [];\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n if (modelPtr.getName()[0] !== \"$\") handles.push(modelPtr.getDatabaseHandle());\n }\n modelItr.delete();\n\n return handles;\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"getModels\", getModels);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction getSelected(viewer: Viewer): string[] {\n if (!viewer.visualizeJs) return [];\n\n const visViewer = viewer.visViewer();\n\n const handles: string[] = [];\n const selectionSet = visViewer.getSelected();\n if (!selectionSet.isNull() && selectionSet.numItems() !== 0) {\n const itr = selectionSet.getIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n\n const entityPtr =\n entityId.getType() === 1\n ? entityId.openObject()\n : entityId.getType() === 2\n ? entityId.openObjectAsInsert()\n : null;\n\n if (entityPtr) {\n const handle = entityPtr.getNativeDatabaseHandle();\n if (handle !== \"-1\") handles.push(handle);\n entityPtr.delete();\n }\n }\n itr.delete();\n }\n\n return handles;\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"getSelected\", getSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction hideSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.hideSelectedObjects(false);\n\n viewer.update();\n viewer.emit({ type: \"hide\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"hideSelected\", hideSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction isolateSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.isolateSelectedObjects(false);\n\n viewer.update();\n viewer.emit({ type: \"isolate\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"isolateSelected\", isolateSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction regenerateAll(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.regenAll();\n\n viewer.update();\n viewer.emit({ type: \"regenerateall\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"regenerateAll\", regenerateAll);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction resetView(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n viewer.executeCommand(\"setActiveDragger\", \"\");\n viewer.executeCommand(\"clearSlices\");\n viewer.executeCommand(\"clearOverlay\");\n viewer.executeCommand(\"setMarkupColor\");\n viewer.executeCommand(\"unselect\");\n viewer.executeCommand(\"showAll\");\n viewer.executeCommand(\"explode\", 0);\n viewer.executeCommand(\"zoomToExtents\", true);\n viewer.executeCommand(\"k3DViewSW\");\n\n viewer.emit({ type: \"resetview\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"resetView\", resetView);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction selectModel(viewer: Viewer, handle: string): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n const activeView = visViewer.activeView;\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n if (modelPtr.getDatabaseHandle() === handle) {\n const selectionSet = activeView.selectCrossing([0, 9999, 9999, 0], modelPtr);\n\n visViewer.setSelected(selectionSet);\n const handles = viewer.getSelected();\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: selectionSet, handles });\n\n selectionSet.delete();\n break;\n }\n }\n modelItr.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"selectModel\", selectModel);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"setActiveDragger\", (viewer: Viewer, dragger = \"\") => {\n viewer.setActiveDragger(dragger);\n});\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction setDefaultViewPosition(viewer: Viewer, position = \"\"): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const defViewPos = visLib.DefaultViewPosition;\n visViewer.setDefaultViewPositionWithAnimation(defViewPos[position]);\n\n viewer.update();\n viewer.emit({ type: \"viewposition\", data: position });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"setDefaultViewPosition\", setDefaultViewPosition);\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewTop\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewTop\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewBottom\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBottom\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewLeft\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewLeft\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewRight\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewRight\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewFront\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewFront\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewBack\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBack\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewSE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSE\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewSW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSW\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewNE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNE\"));\ncommands(\"VisualizeJS\").registerCommand(\"k3DViewNW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNW\"));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\ncommands(\"VisualizeJS\").registerCommand(\"setMarkupColor\", (viewer: Viewer, r = 255, g = 0, b = 0) => {\n viewer.setMarkupColor(r, g, b);\n});\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction setSelected(viewer: Viewer, handles: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const selectionSet = new visLib.OdTvSelectionSet();\n handles?.forEach((handle) => {\n const entityId = visViewer.getEntityByOriginalHandle(handle + \"\");\n if (!entityId.isNull()) selectionSet.appendEntity(entityId);\n });\n\n visViewer.setSelected(selectionSet);\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: selectionSet, handles });\n\n selectionSet.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"setSelected\", setSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction showAll(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.unisolateSelectedObjects(false);\n\n viewer.update();\n viewer.emit({ type: \"showall\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"showAll\", showAll);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction unselect(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.unselect();\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: visViewer.getSelected(), handles: [] });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"unselect\", unselect);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction zoomToExtents(viewer: Viewer, force = false, animate = viewer.options.cameraAnimation): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n const saveEnableAmination = visViewer.getEnableAnimation();\n\n visViewer.setEnableAnimation(animate);\n visViewer.zoomExtents(force);\n visViewer.update();\n visViewer.setEnableAnimation(saveEnableAmination);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToExtents\", zoomToExtents);\ncommands(\"VisualizeJS\").registerCommandAlias(\"zoomToExtents\", \"zoomExtents\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction zoomToObjects(viewer: Viewer, handles: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const selectionSet = new visLib.OdTvSelectionSet();\n handles.forEach((handle) => {\n const entityId = visViewer.getEntityByOriginalHandle(handle + \"\");\n if (!entityId.isNull()) selectionSet.appendEntity(entityId);\n });\n\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n\n selectionSet.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToObjects\", zoomToObjects);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nfunction zoomToSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n\n const selectionSet = visViewer.getSelected();\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToSelected\", zoomToSelected);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model, File, Assembly } from \"@inweb/client\";\nimport { commands } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nimport { composeMatrixFromTransform } from \"./ApplyModelTransform\";\n\nfunction isTemplateModel(modelPtr) {\n return modelPtr.getName()[0] === \"$\";\n}\n\nasync function autoTransformAllModelsToCentralPoint(viewer: Viewer, model: Model | File | Assembly): Promise<void> {\n if (!viewer.visualizeJs) return;\n if (!model.getModelTransformMatrix) return; // Model.getModelTransformMatrix() since 24.3.14\n\n const visLib = viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const viewExt = visViewer.getActiveExtents();\n const centralPoint = viewExt.center();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n if (!isTemplateModel(modelPtr)) {\n const ext = modelPtr.getExtents();\n\n const unitsMatrix = modelPtr.getUnitsMatrix();\n ext.transformBy(modelPtr.getUnitsMatrix()); // ext in wcs\n\n const unitsMatrixInvert = modelPtr.getUnitsMatrix().invert();\n\n const center = ext.center();\n const scale = 1.0;\n\n const scaleMatrix = new visLib.Matrix3d();\n const translateMatrix = new visLib.Matrix3d();\n\n translateMatrix.setTranslation([\n centralPoint[0] - center[0],\n centralPoint[1] - center[1],\n centralPoint[2] - center[2],\n ]);\n scaleMatrix.setToScaling(scale, centralPoint);\n\n const resMatrixWithUnits = unitsMatrixInvert\n .postMultBy(scaleMatrix)\n .postMultBy(translateMatrix)\n .postMultBy(unitsMatrix);\n\n const resScale = resMatrixWithUnits.scale();\n const transform = {\n translate: {\n x: resMatrixWithUnits.get(0, 3) - (1 - resScale) * center[0],\n y: resMatrixWithUnits.get(1, 3) - (1 - resScale) * center[1],\n z: resMatrixWithUnits.get(2, 3) - (1 - resScale) * center[2],\n },\n rotation: { x: 0, y: 0, z: 1, angle: 0.0 },\n scale: resScale,\n };\n\n const matrix = composeMatrixFromTransform(transform, center, visLib);\n modelPtr.setModelingMatrix(matrix, true);\n\n centralPoint[0] += Math.abs(ext.max()[0] - ext.min()[0]) * resScale;\n\n await model.setModelTransformMatrix(modelPtr.getDatabaseHandle(), transform);\n }\n\n modelPtr.delete();\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"autoTransformAllModelsToCentralPoint\", autoTransformAllModelsToCentralPoint);\n","import Konva from \"konva\";\n\nclass MarkupColor {\n constructor(r, g, b) {\n this.setColor(r, g, b);\n }\n asHex() {\n return \"#\" + this.HEX;\n }\n asRGB() {\n return {\n r: this.R,\n g: this.G,\n b: this.B\n };\n }\n setColor(r, g, b) {\n this.R = r;\n this.G = g;\n this.B = b;\n this.HEX = this.rgbToHex(r, g, b);\n }\n rgbToHex(r, g, b) {\n const valueToHex = c => {\n const hex = c.toString(16);\n return hex === \"0\" ? \"00\" : hex;\n };\n return valueToHex(r) + valueToHex(g) + valueToHex(b);\n }\n}\n\nclass WorldTransform {\n screenToWorld(position) {\n return {\n x: position.x,\n y: position.y,\n z: 0\n };\n }\n worldToScreen(position) {\n return {\n x: position.x,\n y: position.y\n };\n }\n getScale() {\n return {\n x: 1,\n y: 1,\n z: 1\n };\n }\n}\n\nconst LineTypeSpecs = new Map([ [ \"solid\", [] ], [ \"dot\", [ 30, 30, .001, 30 ] ], [ \"dash\", [ 30, 30 ] ] ]);\n\nclass KonvaLine {\n constructor(params, ref = null) {\n var _a, _b;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.points) params.points = [ {\n x: 50,\n y: 50\n }, {\n x: 100,\n y: 100\n } ];\n const konvaPoints = [];\n params.points.forEach((point => konvaPoints.push(point.x, point.y)));\n this._ref = new Konva.Line({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n strokeWidth: (_b = params.width) !== null && _b !== void 0 ? _b : 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n points: konvaPoints,\n draggable: true,\n strokeScaleEnabled: false,\n dash: LineTypeSpecs.get(params.type) || []\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n }));\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Line\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPoints() {\n return this._ref.points();\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n getLineType() {\n const typeSpecs = this._ref.dash() || [];\n let type;\n switch (typeSpecs) {\n case LineTypeSpecs.get(\"dot\"):\n type = \"dot\";\n break;\n\n case LineTypeSpecs.get(\"dash\"):\n type = \"dash\";\n break;\n\n default:\n type = \"solid\";\n break;\n }\n return type;\n }\n setLineType(type) {\n const specs = LineTypeSpecs.get(type);\n if (specs) this._ref.dash(specs);\n }\n addPoints(points) {\n let newPoints = this._ref.points();\n points.forEach((point => {\n newPoints = newPoints.concat([ point.x, point.y ]);\n }));\n this._ref.points(newPoints);\n }\n}\n\nclass KonvaText {\n constructor(params, ref = null) {\n var _a, _b, _c;\n this.TEXT_FONT_FAMILY = \"Calibri\";\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n if (!params.text) params.text = \"default\";\n this._ref = new Konva.Text({\n x: params.position.x,\n y: params.position.y,\n text: params.text,\n fontSize: (_a = params.fontSize) !== null && _a !== void 0 ? _a : 34,\n fontFamily: this.TEXT_FONT_FAMILY,\n fill: (_b = params.color) !== null && _b !== void 0 ? _b : \"#ff0000\",\n align: \"left\",\n draggable: true,\n rotation: (_c = params.rotation) !== null && _c !== void 0 ? _c : 0\n });\n this._ref.width(this._ref.getTextWidth());\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n const minWidth = 50;\n if (newWidth < minWidth) newWidth = minWidth;\n if (newHeight < Math.round(this.getFontSize())) newHeight = Math.round(this.getFontSize());\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Text\";\n }\n getColor() {\n return this._ref.fill();\n }\n setColor(hex) {\n this._ref.fill(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getText() {\n return this._ref.text();\n }\n setText(text) {\n this._ref.text(text);\n }\n getPosition() {\n return this._ref.getPosition();\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n getFontSize() {\n return this._ref.fontSize();\n }\n setFontSize(size) {\n this._ref.fontSize(size);\n }\n}\n\nclass KonvaRectangle {\n constructor(params, ref = null) {\n var _a, _b, _c, _d;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n this._ref = new Konva.Rect({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n strokeWidth: (_b = params.lineWidth) !== null && _b !== void 0 ? _b : 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n x: params.position.x,\n y: params.position.y,\n width: (_c = params.width) !== null && _c !== void 0 ? _c : 200,\n height: (_d = params.height) !== null && _d !== void 0 ? _d : 200,\n draggable: true,\n strokeScaleEnabled: false\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n const minWidth = 50;\n const minHeight = 50;\n if (newWidth < minWidth) newWidth = minWidth;\n if (newHeight < minHeight) newHeight = minHeight;\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n getPosition() {\n return this._ref.position();\n }\n getWidth() {\n return this._ref.width();\n }\n getHeigth() {\n return this._ref.height();\n }\n setWidth(w) {\n this._ref.width(w);\n }\n setHeight(h) {\n this._ref.height(h);\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Rectangle\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n}\n\nclass KonvaEllipse {\n constructor(params, ref = null) {\n var _a, _b;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n if (!params.radius) params.radius = {\n x: 25,\n y: 25\n };\n this._ref = new Konva.Ellipse({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n strokeWidth: (_b = params.lineWidth) !== null && _b !== void 0 ? _b : 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n x: params.position.x,\n y: params.position.y,\n radiusX: params.radius.x,\n radiusY: params.radius.y,\n draggable: true,\n strokeScaleEnabled: false\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newRadiusX = this._ref.radiusX();\n if (scaleByX) newRadiusX *= attrs.scaleX;\n let newRadiusY = this._ref.radiusY();\n if (scaleByY) newRadiusY *= attrs.scaleY;\n const minRadiusX = 25;\n const minRadiusY = 25;\n if (newRadiusX < minRadiusX) newRadiusX = minRadiusX;\n if (newRadiusY < minRadiusY) newRadiusY = minRadiusY;\n if (e.evt.ctrlKey || e.evt.shiftKey) {\n if (scaleByX) {\n this._ref.radius({\n x: newRadiusX,\n y: newRadiusX\n });\n } else {\n this._ref.radius({\n x: newRadiusY,\n y: newRadiusY\n });\n }\n } else {\n this._ref.radius({\n x: newRadiusX,\n y: newRadiusY\n });\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n getPosition() {\n return this._ref.position();\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n getRadiusX() {\n return this._ref.radiusX();\n }\n setRadiusX(r) {\n this._ref.radiusX(r);\n }\n getRadiusY() {\n return this._ref.radiusY();\n }\n setRadiusY(r) {\n this._ref.radiusY(r);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Ellipse\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n}\n\nclass KonvaArrow {\n constructor(params, ref = null) {\n var _a, _b;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.start) params.start = {\n x: 50,\n y: 50\n };\n if (!params.end) params.end = {\n x: 100,\n y: 100\n };\n this._ref = new Konva.Arrow({\n stroke: (_a = params.color) !== null && _a !== void 0 ? _a : \"#ff0000\",\n fill: (_b = params.color) !== null && _b !== void 0 ? _b : \"#ff0000\",\n strokeWidth: 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n points: [ params.start.x, params.start.y, params.end.x, params.end.y ],\n draggable: true,\n strokeScaleEnabled: false\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n }));\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Arrow\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n this._ref.fill(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPoints() {\n const points = this._ref.points();\n return [ {\n x: points[0],\n y: points[1]\n }, {\n x: points[2],\n y: points[3]\n } ];\n }\n setPoints(points) {\n if (points.length === 2) {\n this._ref.points([ points[0].x, points[0].y, points[1].x, points[1].y ]);\n }\n }\n getStartPoint() {\n const points = this._ref.points();\n return {\n x: points[0],\n y: points[1]\n };\n }\n setStartPoint(x, y) {\n const points = this._ref.points();\n this._ref.points([ x, y, points[2], points[3] ]);\n }\n getEndPoint() {\n const points = this._ref.points();\n return {\n x: points[2],\n y: points[3]\n };\n }\n setEndPoint(x, y) {\n const points = this._ref.points();\n this._ref.points([ points[0], points[1], x, y ]);\n }\n}\n\nclass KonvaImage {\n constructor(params, ref = null) {\n var _a, _b;\n this._ratio = 1;\n this.EPSILON = 1e-5;\n this.BASE64_HEADER_START = \"data:image/\";\n this.BASE64_NOT_FOUND = \"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAADsAAAA7AF5KHG9AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAmhJREFUWIXtlr9rVEEQxz+H8RQUJIdeIopYm0vkCg0GBBtbG1NF7Kxt7dR/IGIw/uhTaBNLERURg2kCEUyCYCPi70b0InjGS57FzOZN3r19d+9HJIVfWO52dma/s7Mz8xa2KAaBCWAR+AkECWOmSOIdwC1gtQOpHc+NfQ8wClQ8+1d0vcdH/lQ3bSIRGAZ2pTjAqNovANXIWlXlAXA2zvi2Ln4AjqYgtagYEutENSLvjRoOImFv5iB32Ae8UrLXwFBk3h9ndF0VJnKSO9gTu3yKu5Z1LKnS8YIcABgw5Ks692JZFXcXRJ46Aq6kikCnHNi/mQ50WwVtfaIoBzL3gRk2drSscJ2wrc4VvUoe2wn/41/iBfoVLRnBGnDSY3AAKacy8AmYR+o7K1zCl6wgrgpOAc/MuhvfgMuk+1JGHQgSBcAloKXy78AjYBppJk5/noTulseBMZ23iD/piHFkEdgTQzKk+5wHjmHC3cmBg0BD5xcSTrFXyQPgIWFtDwMvab+2N8DpbhyY1v/3E8gdDgNfVX9SCVZ0/gW4B0wB71S2BpxLcuCM/jaQSHSDEeAX4VMuAG4gTzyHbcAVXXO6GxxwIX+vvxe7JHcYQ07nHqklj96UIW/YhSWzMKcep8VVtf8B1Dw6h4DfhB+sdbgn2R+gnoEc5NR3dZ+3QJ9H74HqXLPCGlJyTfI9y3YCs0owq3OLOpKkLeBI1HhSDT/mdKIPiUCARMTlQx34TMLjtww8IczmO8AJ/N/2JNSQXAiQ671JePePge0+wzJSQq4FFzlaenIvucUAkiQLhC/mLGNZ9xgn5s63BP4CCk0QDtm4BhoAAAAASUVORK5CYII=\";\n if (ref) {\n if (!ref.src || !ref.src.startsWith(this.BASE64_HEADER_START)) ref.src = this.BASE64_NOT_FOUND;\n if (ref.height() <= this.EPSILON) ref.height(32);\n if (ref.width() <= this.EPSILON) ref.width(32);\n this._ref = ref;\n this._canvasImage = ref.image();\n this._ratio = this._ref.height() <= this.EPSILON || this._ref.width() <= this.EPSILON ? 1 : this._ref.height() / this._ref.width();\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 50,\n y: 50\n };\n if (!params.src || !params.src.startsWith(this.BASE64_HEADER_START)) params.src = this.BASE64_NOT_FOUND;\n this._canvasImage = new Image;\n this._canvasImage.onload = () => {\n this._ref.image(this._canvasImage);\n if (this._ref.height() <= this.EPSILON) this._ref.height(this._canvasImage.height);\n if (this._ref.width() <= this.EPSILON) this._ref.width(this._canvasImage.width);\n this._ratio = this._ref.height() <= this.EPSILON || this._ref.width() <= this.EPSILON ? 1 : this._ref.height() / this._ref.width();\n if ((params.width <= this.EPSILON || params.height <= this.EPSILON) && (params.maxWidth >= this.EPSILON || params.maxWidth >= this.EPSILON)) {\n const heightOutOfCanvas = params.maxHeight - this._canvasImage.height;\n const widthOutOfCanvas = params.maxWidth - this._canvasImage.width;\n if (heightOutOfCanvas <= this.EPSILON || widthOutOfCanvas <= this.EPSILON) {\n if (widthOutOfCanvas <= this.EPSILON && widthOutOfCanvas < heightOutOfCanvas / this._ratio) {\n this._ref.height(params.maxWidth * this._ratio);\n this._ref.width(params.maxWidth);\n } else {\n this._ref.width(params.maxHeight / this._ratio);\n this._ref.height(params.maxHeight);\n }\n }\n }\n };\n this._canvasImage.onerror = () => {\n this._canvasImage.onerror = function() {};\n this._canvasImage.src = this.BASE64_NOT_FOUND;\n };\n this._canvasImage.src = params.src;\n this._ref = new Konva.Image({\n x: params.position.x,\n y: params.position.y,\n image: this._canvasImage,\n width: (_a = params.width) !== null && _a !== void 0 ? _a : 0,\n height: (_b = params.height) !== null && _b !== void 0 ? _b : 0,\n draggable: true\n });\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n if (e.evt.ctrlKey || e.evt.shiftKey) {\n if (scaleByX) {\n this._ref.width(newWidth);\n this._ref.height(newWidth * this._ratio);\n } else {\n this._ref.width(newHeight / this._ratio);\n this._ref.height(newHeight);\n }\n } else {\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.id(this._ref._id.toString());\n }\n getSrc() {\n return this._canvasImage.src;\n }\n setSrc(src) {\n this._canvasImage.src = src;\n }\n getWidth() {\n return this._ref.width();\n }\n setWidth(w) {\n this._ref.width(w);\n this._ref.height(w * this._ratio);\n }\n getHeight() {\n return this._ref.height();\n }\n setHeight(h) {\n this._ref.height(h);\n this._ref.width(h / this._ratio);\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Image\";\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPosition() {\n return this._ref.getPosition();\n }\n setPosition(x, y) {\n this._ref.setPosition({\n x: x,\n y: y\n });\n }\n}\n\nclass KonvaCloud {\n constructor(params, ref = null) {\n var _a, _b, _c, _d;\n if (ref) {\n this._ref = ref;\n return;\n }\n if (!params) params = {};\n if (!params.position) params.position = {\n x: 100,\n y: 100\n };\n const arcRadius = 16;\n this._ref = new Konva.Shape({\n x: params.position.x,\n y: params.position.y,\n width: (_a = params.width) !== null && _a !== void 0 ? _a : 200,\n height: (_b = params.height) !== null && _b !== void 0 ? _b : 200,\n stroke: (_c = params.color) !== null && _c !== void 0 ? _c : \"#ff0000\",\n strokeWidth: (_d = params.lineWidth) !== null && _d !== void 0 ? _d : 4,\n draggable: true,\n strokeScaleEnabled: false,\n globalCompositeOperation: \"source-over\",\n sceneFunc: (context, shape) => {\n function calculateMidpoint(position, width, height) {\n const midX = position.x + width / 2;\n const midY = position.y + height / 2;\n return {\n x: midX,\n y: midY\n };\n }\n const points = [ {\n x: 0,\n y: 0\n }, {\n x: 0 + this._ref.width(),\n y: 0\n }, {\n x: 0 + this._ref.width(),\n y: 0 + this._ref.height()\n }, {\n x: 0,\n y: 0 + this._ref.height()\n }, {\n x: 0,\n y: 0\n } ];\n const midPoint = calculateMidpoint({\n x: 0,\n y: 0\n }, this._ref.width(), this._ref.height());\n const baseArcLength = 30;\n context.beginPath();\n for (let iPoint = 0; iPoint < points.length - 1; iPoint++) {\n let approxArcLength = baseArcLength;\n const dx = points[iPoint + 1].x - points[iPoint].x;\n const dy = points[iPoint + 1].y - points[iPoint].y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const arcCount = Math.floor(length / approxArcLength);\n const lengthMod = length % approxArcLength;\n approxArcLength = baseArcLength + arcCount / lengthMod;\n let pX = points[iPoint].x + dx / arcCount / 2;\n let pY = points[iPoint].y + dy / arcCount / 2;\n const pEndX = points[iPoint + 1].x;\n const pEndY = points[iPoint + 1].y;\n const endAngle = Math.atan((pEndY - pY) / (pEndX - pX));\n const startAngle = endAngle + Math.PI;\n const counterClockwise = pX > midPoint.x && pY > midPoint.y;\n for (let iArc = 0; iArc < arcCount; iArc++) {\n if (counterClockwise) {\n context.arc(pX, pY, arcRadius, endAngle, startAngle);\n } else {\n context.arc(pX, pY, arcRadius, startAngle, endAngle);\n }\n pX += dx / arcCount;\n pY += dy / arcCount;\n }\n }\n context.closePath();\n context.fillStrokeShape(shape);\n }\n });\n this._ref.className = \"Cloud\";\n this._ref.on(\"transform\", (e => {\n const attrs = e.target.attrs;\n if (attrs.rotation !== this._ref.rotation()) this._ref.rotation(attrs.rotation);\n const scaleByX = Math.abs(attrs.scaleX - 1) > 1e-5;\n const scaleByY = Math.abs(attrs.scaleY - 1) > 1e-5;\n let newWidth = this._ref.width();\n if (scaleByX) newWidth *= attrs.scaleX;\n let newHeight = this._ref.height();\n if (scaleByY) newHeight *= attrs.scaleY;\n const minWidth = 100;\n const minHeight = 100;\n if (newWidth < minWidth) newWidth = minWidth;\n if (newHeight < minHeight) newHeight = minHeight;\n if (scaleByX) {\n this._ref.width(newWidth);\n }\n if (scaleByY) {\n this._ref.height(newHeight);\n }\n this._ref.scale({\n x: 1,\n y: 1\n });\n }));\n this._ref.getSelfRect = () => ({\n x: 0 - arcRadius,\n y: 0 - arcRadius,\n width: this._ref.width() + 2 * arcRadius,\n height: this._ref.height() + 2 * arcRadius\n });\n this._ref.id(this._ref._id.toString());\n }\n ref() {\n return this._ref;\n }\n id() {\n return this._ref.id();\n }\n enableMouseEditing(value) {\n this._ref.draggable(value);\n }\n type() {\n return \"Cloud\";\n }\n getColor() {\n return this._ref.stroke();\n }\n setColor(hex) {\n this._ref.stroke(hex);\n }\n getRotation() {\n return this._ref.rotation();\n }\n setRotation(degrees) {\n this._ref.rotation(degrees);\n }\n getZIndex() {\n return this._ref.zIndex();\n }\n setZIndex(zIndex) {\n this._ref.zIndex(zIndex);\n }\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n getPosition() {\n return this._ref.position();\n }\n setPosition(x, y) {\n this._ref.position({\n x: x,\n y: y\n });\n }\n getWidth() {\n return this._ref.width();\n }\n setWidth(w) {\n this._ref.width(w);\n }\n getHeigth() {\n return this._ref.height();\n }\n setHeight(h) {\n this._ref.height(h);\n }\n getLineWidth() {\n return this._ref.strokeWidth();\n }\n setLineWidth(size) {\n this._ref.strokeWidth(size);\n }\n}\n\nconst MarkupMode2Konva = {\n SelectMarkup: {\n name: \"SelectMarkup\",\n initializer: null\n },\n Line: {\n name: \"Line\",\n initializer: (ref, params = null) => new KonvaLine(params, ref)\n },\n Text: {\n name: \"Text\",\n initializer: (ref, params = null) => new KonvaText(params, ref)\n },\n Rectangle: {\n name: \"Rect\",\n initializer: (ref, params = null) => new KonvaRectangle(params, ref)\n },\n Ellipse: {\n name: \"Ellipse\",\n initializer: (ref, params = null) => new KonvaEllipse(params, ref)\n },\n Arrow: {\n name: \"Arrow\",\n initializer: (ref, params = null) => new KonvaArrow(params, ref)\n },\n Image: {\n name: \"Image\",\n initializer: (ref, params = null) => new KonvaImage(params, ref)\n },\n Cloud: {\n name: \"Cloud\",\n initializer: (ref, params = null) => new KonvaCloud(params, ref)\n }\n};\n\nclass KonvaMarkup {\n constructor() {\n this._containerEvents = [];\n this._markupIsActive = false;\n this._markupColor = new MarkupColor(255, 0, 0);\n this.lineWidth = 4;\n this.lineType = \"solid\";\n this.fontSize = 34;\n this.changeActiveDragger = event => {\n const draggerName = event.data;\n this._markupContainer.className = this._container.className.split(\" \").filter((x => !x.startsWith(\"oda-cursor-\"))).filter((x => x)).concat(`oda-cursor-${draggerName.toLowerCase()}`).join(\" \");\n this.removeTextInput();\n this.removeImageInput();\n this.enableEditMode(draggerName);\n };\n this.resizeContainer = entries => {\n const {width: width, height: height} = entries[0].contentRect;\n if (!width || !height) return;\n if (!this._konvaStage) return;\n this._konvaStage.width(width);\n this._konvaStage.height(height);\n };\n this.pan = event => {\n const dX = event.dX / window.devicePixelRatio;\n const dY = event.dY / window.devicePixelRatio;\n this.getObjects().forEach((obj => obj.ref().move({\n x: dX,\n y: dY\n })));\n };\n this.redirectToViewer = event => {\n if (this._viewer) this._viewer.emit(event);\n };\n }\n initialize(container, containerEvents, viewer, worldTransformer) {\n if (!Konva) throw new Error('Markup error: Konva is not initialized. Forgot to add <script src=\"https://unpkg.com/konva@9/konva.min.js\"><\\/script> to your page?');\n this._viewer = viewer;\n this._worldTransformer = worldTransformer !== null && worldTransformer !== void 0 ? worldTransformer : new WorldTransform;\n this._container = container;\n this._containerEvents = containerEvents !== null && containerEvents !== void 0 ? containerEvents : [];\n this._markupContainer = document.createElement(\"div\");\n this._markupContainer.id = \"markup-container\";\n this._markupContainer.style.position = \"absolute\";\n this._markupContainer.style.top = \"0px\";\n this._markupContainer.style.left = \"0px\";\n this._markupContainer.style.outline = \"0px\";\n const parentDiv = this._container.parentElement;\n parentDiv.appendChild(this._markupContainer);\n this._resizeObserver = new ResizeObserver(this.resizeContainer);\n this._resizeObserver.observe(parentDiv);\n this._markupColor.setColor(255, 0, 0);\n this.initializeKonva();\n if (this._viewer) {\n this._containerEvents.forEach((x => this._markupContainer.addEventListener(x, this.redirectToViewer)));\n this._viewer.addEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._viewer.addEventListener(\"pan\", this.pan);\n }\n }\n dispose() {\n var _a, _b;\n if (this._viewer) {\n this._viewer.removeEventListener(\"pan\", this.pan);\n this._viewer.removeEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._containerEvents.forEach((x => this._markupContainer.removeEventListener(x, this.redirectToViewer)));\n }\n this.destroyKonva();\n (_a = this._resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n this._resizeObserver = undefined;\n (_b = this._markupContainer) === null || _b === void 0 ? void 0 : _b.remove();\n this._markupContainer = undefined;\n this._container = undefined;\n this._viewer = undefined;\n this._worldTransformer = undefined;\n this._markupIsActive = false;\n }\n syncOverlay() {}\n clearOverlay() {\n this.removeTextInput();\n this.removeImageInput();\n this.clearSelected();\n this.getObjects().forEach((obj => obj.delete()));\n }\n getMarkupColor() {\n return this._markupColor.asRGB();\n }\n setMarkupColor(r, g, b) {\n this._markupColor.setColor(r, g, b);\n }\n colorizeAllMarkup(r, g, b) {\n const hexColor = new MarkupColor(r, g, b).asHex();\n this.getObjects().filter((obj => {\n var _a;\n return (_a = obj.setColor) === null || _a === void 0 ? void 0 : _a.call(obj, hexColor);\n }));\n }\n colorizeSelectedMarkups(r, g, b) {\n const hexColor = new MarkupColor(r, g, b).asHex();\n this.getSelectedObjects().filter((obj => {\n var _a;\n return (_a = obj.setColor) === null || _a === void 0 ? void 0 : _a.call(obj, hexColor);\n }));\n }\n setViewpoint(viewpoint) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n this.clearSelected();\n this.removeTextInput();\n this.removeImageInput();\n const markupColor = ((_a = viewpoint.custom_fields) === null || _a === void 0 ? void 0 : _a.markup_color) || {\n r: 255,\n g: 0,\n b: 0\n };\n this.setMarkupColor(markupColor.r, markupColor.g, markupColor.b);\n (_b = viewpoint.lines) === null || _b === void 0 ? void 0 : _b.forEach((line => {\n const linePoints = [];\n line.points.forEach((point => {\n const screenPoint = this._worldTransformer.worldToScreen(point);\n linePoints.push(screenPoint.x);\n linePoints.push(screenPoint.y);\n }));\n this.addLine(linePoints, line.color, line.type, line.width, line.id);\n }));\n (_c = viewpoint.texts) === null || _c === void 0 ? void 0 : _c.forEach((text => {\n const screenPoint = this._worldTransformer.worldToScreen(text.position);\n this.addText(text.text, screenPoint, text.angle, text.color, text.text_size, text.font_size, text.id);\n }));\n (_d = viewpoint.rectangles) === null || _d === void 0 ? void 0 : _d.forEach((rect => {\n const screenPoint = this._worldTransformer.worldToScreen(rect.position);\n this.addRectangle(screenPoint, rect.width, rect.height, rect.line_width, rect.color, rect.id);\n }));\n (_e = viewpoint.ellipses) === null || _e === void 0 ? void 0 : _e.forEach((ellipse => {\n const screenPoint = this._worldTransformer.worldToScreen(ellipse.position);\n this.addEllipse(screenPoint, ellipse.radius, ellipse.line_width, ellipse.color, ellipse.id);\n }));\n (_f = viewpoint.arrows) === null || _f === void 0 ? void 0 : _f.forEach((arrow => {\n const startPoint = this._worldTransformer.worldToScreen(arrow.start);\n const endPoint = this._worldTransformer.worldToScreen(arrow.end);\n this.addArrow(startPoint, endPoint, arrow.color, arrow.id);\n }));\n (_g = viewpoint.clouds) === null || _g === void 0 ? void 0 : _g.forEach((cloud => {\n const screenPoint = this._worldTransformer.worldToScreen(cloud.position);\n this.addCloud(screenPoint, cloud.width, cloud.height, cloud.line_width, cloud.color, cloud.id);\n }));\n (_h = viewpoint.images) === null || _h === void 0 ? void 0 : _h.forEach((image => {\n const screenPoint = this._worldTransformer.worldToScreen(image.position);\n this.addImage(screenPoint, image.src, image.width, image.height, image.id);\n }));\n }\n getViewpoint() {\n const viewpoint = {};\n viewpoint.lines = this.getMarkupLines();\n viewpoint.texts = this.getMarkupTexts();\n viewpoint.arrows = this.getMarkupArrows();\n viewpoint.clouds = this.getMarkupClouds();\n viewpoint.ellipses = this.getMarkupEllipses();\n viewpoint.images = this.getMarkupImages();\n viewpoint.rectangles = this.getMarkupRectangles();\n viewpoint.custom_fields = {\n markup_color: this.getMarkupColor()\n };\n viewpoint.snapshot = {\n data: this.combineMarkupWithDrawing()\n };\n viewpoint.description = (new Date).toDateString();\n return viewpoint;\n }\n enableEditMode(mode) {\n if (!mode || !MarkupMode2Konva[mode]) {\n this.clearSelected();\n this.removeTextInput();\n this.removeImageInput();\n this._markupIsActive = false;\n } else {\n this._markupMode = mode;\n this._markupIsActive = true;\n }\n return this;\n }\n createObject(type, params) {\n const konvaShape = MarkupMode2Konva[type];\n if (!konvaShape || !konvaShape.initializer) throw new Error(`Markup CreateObject - unsupported markup type ${type}`);\n const object = konvaShape.initializer(null, params);\n this.addObject(object);\n return object;\n }\n getObjects() {\n const objects = [];\n Object.keys(MarkupMode2Konva).forEach((type => {\n const konvaShape = MarkupMode2Konva[type];\n this.konvaLayerFind(type).forEach((ref => objects.push(konvaShape.initializer(ref))));\n }));\n return objects;\n }\n getSelectedObjects() {\n if (!this._konvaTransformer) return [];\n return this._konvaTransformer.nodes().map((ref => {\n const name = ref.className;\n const konvaShape = Object.values(MarkupMode2Konva).find((shape => shape.name === name));\n return konvaShape ? konvaShape.initializer(ref) : null;\n })).filter((x => x));\n }\n selectObjects(objects) {\n if (!this._konvaTransformer) return;\n const selectedObjs = this._konvaTransformer.nodes().concat(objects.map((x => x.ref())));\n this._konvaTransformer.nodes(selectedObjs);\n }\n clearSelected() {\n if (this._konvaTransformer) this._konvaTransformer.nodes([]);\n }\n addObject(object) {\n if (object.type() === \"Image\") this._groupImages.add(object.ref()); else if (object.type() === \"Text\") this._groupTexts.add(object.ref()); else this._groupGeometry.add(object.ref());\n }\n konvaLayerFind(type) {\n if (!this._konvaLayer) return [];\n const konvaShape = MarkupMode2Konva[type];\n if (!konvaShape || !konvaShape.initializer) return [];\n return this._konvaLayer.find(konvaShape.name).filter((ref => ref.parent === this._konvaLayer || ref.parent === this._groupImages || ref.parent === this._groupGeometry || ref.parent === this._groupTexts));\n }\n initializeKonva() {\n const stage = new Konva.Stage({\n container: this._markupContainer,\n width: this._container.clientWidth,\n height: this._container.clientHeight\n });\n this._konvaStage = stage;\n const layer = new Konva.Layer({\n pixelRation: window.devicePixelRatio\n });\n stage.add(layer);\n this._groupImages = new Konva.Group;\n layer.add(this._groupImages);\n this._groupGeometry = new Konva.Group;\n layer.add(this._groupGeometry);\n this._groupTexts = new Konva.Group;\n layer.add(this._groupTexts);\n this._konvaLayer = layer;\n const transformer = new Konva.Transformer({\n shouldOverdrawWholeArea: false,\n keepRatio: false,\n flipEnabled: false\n });\n layer.add(transformer);\n this._konvaTransformer = transformer;\n let isPaint = false;\n let lastLine;\n let mouseDownPos;\n let lastObj;\n stage.on(\"mousedown touchstart\", (e => {\n if (!this._markupIsActive || e.target !== stage || this._markupMode === \"Text\" || this._markupMode === \"Image\") return;\n if (e.target === stage && transformer.nodes().length > 0) {\n transformer.nodes([]);\n return;\n }\n const pos = stage.getPointerPosition();\n mouseDownPos = pos;\n isPaint = [ \"Arrow\", \"Cloud\", \"Ellipse\", \"Line\", \"Rectangle\" ].some((m => m === this._markupMode));\n if (this._markupMode === \"Line\") {\n lastLine = this.addLine([ pos.x, pos.y, pos.x, pos.y ]);\n }\n }));\n stage.on(\"mouseup touchend\", (e => {\n if (!this._markupIsActive) return;\n if (isPaint) {\n const pos = stage.getPointerPosition();\n const defParams = mouseDownPos && pos.x === mouseDownPos.x && pos.y === mouseDownPos.y;\n const startX = defParams ? mouseDownPos.x : Math.min(mouseDownPos.x, pos.x);\n const startY = defParams ? mouseDownPos.y : Math.min(mouseDownPos.y, pos.y);\n const dX = defParams ? 200 : Math.abs(mouseDownPos.x - pos.x);\n const dY = defParams ? 200 : Math.abs(mouseDownPos.y - pos.y);\n if (defParams) {\n if (this._markupMode === \"Rectangle\") {\n this.addRectangle({\n x: startX,\n y: startY\n }, dX, dY);\n } else if (this._markupMode === \"Ellipse\") {\n this.addEllipse({\n x: startX,\n y: startY\n }, {\n x: dX / 2,\n y: dY / 2\n });\n } else if (this._markupMode === \"Arrow\") {\n this.addArrow({\n x: mouseDownPos.x,\n y: mouseDownPos.y\n }, {\n x: defParams ? mouseDownPos.x + 200 : pos.x,\n y: defParams ? startY : pos.y\n });\n } else if (this._markupMode === \"Cloud\") {\n this.addCloud({\n x: startX,\n y: startY\n }, Math.max(100, dX), Math.max(100, dY));\n }\n }\n }\n lastObj = undefined;\n isPaint = false;\n }));\n stage.on(\"mousemove touchmove\", (e => {\n if (!this._markupIsActive) return;\n if (!isPaint) {\n return;\n }\n const pos = stage.getPointerPosition();\n const defParams = mouseDownPos && pos.x === mouseDownPos.x && pos.y === mouseDownPos.y;\n const startX = defParams ? mouseDownPos.x : Math.min(mouseDownPos.x, pos.x);\n const startY = defParams ? mouseDownPos.y : Math.min(mouseDownPos.y, pos.y);\n const dX = defParams ? 200 : Math.abs(mouseDownPos.x - pos.x);\n const dY = defParams ? 200 : Math.abs(mouseDownPos.y - pos.y);\n if (this._markupMode === \"Line\") {\n lastLine.addPoints([ {\n x: pos.x,\n y: pos.y\n } ]);\n } else if (this._markupMode === \"Arrow\") {\n if (lastObj) lastObj.setEndPoint(pos.x, pos.y); else lastObj = this.addArrow({\n x: mouseDownPos.x,\n y: mouseDownPos.y\n }, {\n x: pos.x,\n y: pos.y\n });\n } else if (this._markupMode === \"Rectangle\") {\n if (lastObj) {\n lastObj.setPosition(startX, startY);\n lastObj.setWidth(dX);\n lastObj.setHeight(dY);\n } else lastObj = this.addRectangle({\n x: startX,\n y: startY\n }, dX, dY);\n } else if (this._markupMode === \"Ellipse\") {\n if (lastObj) {\n lastObj.setPosition(startX, startY);\n lastObj.setRadiusX(dX);\n lastObj.setRadiusY(dY);\n } else lastObj = this.addEllipse({\n x: startX,\n y: startY\n }, {\n x: dX,\n y: dY\n });\n } else if (this._markupMode === \"Cloud\") {\n if (lastObj) {\n lastObj.setPosition(startX, startY);\n lastObj.setWidth(Math.max(100, dX));\n lastObj.setHeight(Math.max(100, dY));\n } else lastObj = this.addCloud({\n x: startX,\n y: startY\n }, dX, dY);\n }\n }));\n stage.on(\"click tap\", (e => {\n if (!this._markupIsActive) return;\n if (e.target === stage) {\n if (this._markupMode === \"Text\") {\n if (this._textInputRef && this._textInputRef.value) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle); else if (transformer.nodes().length === 0) {\n const pos = stage.getPointerPosition();\n this.createTextInput(pos, e.evt.pageX, e.evt.pageY, 0, null);\n }\n } else if (this._markupMode === \"Image\") {\n if (this._imageInputRef && this._imageInputRef.value) this.addImage({\n x: this._imageInputPos.x,\n y: this._imageInputPos.y\n }, this._imageInputRef.value, 0, 0, this._imageInputRef.value); else if (transformer.nodes().length === 0) {\n const pos = stage.getPointerPosition();\n this.createImageInput(pos);\n }\n }\n transformer.nodes([]);\n return;\n }\n if (this._markupMode === \"Text\" || this._markupMode === \"SelectMarkup\") {\n if (e.target.className === \"Text\" && transformer.nodes().length === 1 && transformer.nodes()[0] === e.target) {\n if (this._textInputRef && this._textInputRef.value) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle); else this.createTextInput({\n x: e.target.attrs.x,\n y: e.target.attrs.y\n }, e.evt.pageX, e.evt.pageY, e.target.attrs.rotation, e.target.attrs.text);\n return;\n } else {\n this.removeTextInput();\n }\n }\n if (this._markupMode === \"Image\" || this._markupMode === \"SelectMarkup\") {\n if (e.target.className === \"Image\" && transformer.nodes().length === 1 && transformer.nodes()[0] === e.target) {\n if (this._imageInputRef && this._imageInputRef.value) this.addImage(this._imageInputPos, this._imageInputRef.value, 0, 0); else this.createImageInput({\n x: e.target.attrs.x,\n y: e.target.attrs.y\n });\n return;\n } else {\n this.removeImageInput();\n }\n }\n if (transformer.nodes().filter((x => x.className === \"Cloud\" || x.className === \"Image\")).length > 0 || e.target.className === \"Cloud\" || e.target.className === \"Image\") {\n transformer.rotateEnabled(false);\n } else {\n transformer.rotateEnabled(true);\n }\n const metaPressed = e.evt.shiftKey || e.evt.ctrlKey || e.evt.metaKey;\n const isSelected = transformer.nodes().indexOf(e.target) >= 0;\n if (!metaPressed && !isSelected) {\n transformer.nodes([ e.target ]);\n } else if (metaPressed && isSelected) {\n const nodes = transformer.nodes().slice();\n nodes.splice(nodes.indexOf(e.target), 1);\n transformer.nodes(nodes);\n } else if (metaPressed && !isSelected) {\n const nodes = transformer.nodes().concat([ e.target ]);\n transformer.nodes(nodes);\n }\n }));\n const container = stage.container();\n container.tabIndex = 1;\n container.focus();\n container.addEventListener(\"keydown\", (e => {\n if (!this._markupIsActive) return;\n if (e.code === \"Delete\") {\n this.getSelectedObjects().forEach((obj => obj.delete()));\n this.clearSelected();\n return;\n }\n e.preventDefault();\n }));\n }\n destroyKonva() {\n var _a;\n this.removeTextInput();\n this.removeImageInput();\n this.clearOverlay();\n (_a = this._konvaStage) === null || _a === void 0 ? void 0 : _a.destroy();\n this._groupImages = undefined;\n this._groupGeometry = undefined;\n this._groupTexts = undefined;\n this._konvaLayer = undefined;\n this._konvaTransformer = undefined;\n this._konvaStage = undefined;\n }\n getMarkupLines() {\n const lines = [];\n this.konvaLayerFind(\"Line\").forEach((ref => {\n const linePoints = ref.points();\n if (!linePoints) return;\n const worldPoints = [];\n const absoluteTransform = ref.getAbsoluteTransform();\n for (let i = 0; i < linePoints.length; i += 2) {\n const atPoint = absoluteTransform.point({\n x: linePoints[i],\n y: linePoints[i + 1]\n });\n const worldPoint = this._worldTransformer.screenToWorld(atPoint);\n worldPoints.push(worldPoint);\n }\n const konvaLine = new KonvaLine(null, ref);\n const line = {\n id: konvaLine.id(),\n points: worldPoints,\n color: konvaLine.getColor() || \"#ff0000\",\n type: konvaLine.getLineType() || this.lineType,\n width: konvaLine.getLineWidth() || this.lineWidth\n };\n lines.push(line);\n }));\n return lines;\n }\n getMarkupTexts() {\n const texts = [];\n this.konvaLayerFind(\"Text\").forEach((ref => {\n const textSize = .02;\n const textScale = this._worldTransformer.getScale();\n const position = {\n x: ref.x(),\n y: ref.y()\n };\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaText(null, ref);\n const text = {\n id: shape.id(),\n position: worldPoint,\n text: shape.getText(),\n text_size: textSize * textScale.y,\n angle: shape.getRotation(),\n color: shape.getColor(),\n font_size: shape.getFontSize()\n };\n texts.push(text);\n }));\n return texts;\n }\n getMarkupRectangles() {\n const rectangles = [];\n this.konvaLayerFind(\"Rectangle\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaRectangle(null, ref);\n const rectangle = {\n id: shape.id(),\n position: worldPoint,\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor()\n };\n rectangles.push(rectangle);\n }));\n return rectangles;\n }\n getMarkupEllipses() {\n const ellipses = [];\n this.konvaLayerFind(\"Ellipse\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaEllipse(null, ref);\n const ellipse = {\n id: shape.id(),\n position: worldPoint,\n radius: {\n x: ref.getRadiusX(),\n y: ref.getRadiusY()\n },\n line_width: shape.getLineWidth(),\n color: shape.getColor()\n };\n ellipses.push(ellipse);\n }));\n return ellipses;\n }\n getMarkupArrows() {\n const arrows = [];\n this.konvaLayerFind(\"Arrow\").forEach((ref => {\n const absoluteTransform = ref.getAbsoluteTransform();\n const atStartPoint = absoluteTransform.point({\n x: ref.points()[0],\n y: ref.points()[1]\n });\n const worldStartPoint = this._worldTransformer.screenToWorld(atStartPoint);\n const atEndPoint = absoluteTransform.point({\n x: ref.points()[2],\n y: ref.points()[3]\n });\n const worldEndPoint = this._worldTransformer.screenToWorld(atEndPoint);\n const shape = new KonvaArrow(null, ref);\n const arrow = {\n id: shape.id(),\n start: worldStartPoint,\n end: worldEndPoint,\n color: shape.getColor()\n };\n arrows.push(arrow);\n }));\n return arrows;\n }\n getMarkupImages() {\n const images = [];\n this.konvaLayerFind(\"Image\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaImage(null, ref);\n const image = {\n id: shape.id(),\n position: worldPoint,\n src: shape.getSrc(),\n width: shape.getWidth(),\n height: shape.getHeight()\n };\n images.push(image);\n }));\n return images;\n }\n getMarkupClouds() {\n const clouds = [];\n this.konvaLayerFind(\"Cloud\").forEach((ref => {\n const position = ref.position();\n const worldPoint = this._worldTransformer.screenToWorld(position);\n const shape = new KonvaCloud(null, ref);\n const cloud = {\n id: shape.id(),\n position: worldPoint,\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor()\n };\n clouds.push(cloud);\n }));\n return clouds;\n }\n combineMarkupWithDrawing() {\n this.clearSelected();\n const tempCanvas = document.createElement(\"canvas\");\n if (this._konvaStage) {\n tempCanvas.width = this._konvaStage.width();\n tempCanvas.height = this._konvaStage.height();\n const ctx = tempCanvas.getContext(\"2d\");\n if (this._container instanceof HTMLCanvasElement) ctx.drawImage(this._container, 0, 0);\n ctx.drawImage(this._konvaStage.toCanvas({\n pixelRatio: window.devicePixelRatio\n }), 0, 0);\n }\n return tempCanvas.toDataURL(\"image/jpeg\", .25);\n }\n addLine(linePoints, color, type, width, id) {\n if (!linePoints || linePoints.length === 0) return;\n const points = [];\n for (let i = 0; i < linePoints.length; i += 2) {\n points.push({\n x: linePoints[i],\n y: linePoints[i + 1]\n });\n }\n const konvaLine = new KonvaLine({\n points: points,\n type: type || this.lineType,\n width: width || this.lineWidth,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaLine);\n return konvaLine;\n }\n createTextInput(pos, inputX, inputY, angle, text) {\n if (!this._textInputRef) {\n this._textInputPos = pos;\n this._textInputAngle = angle;\n this._textInputRef = document.createElement(\"textarea\");\n this._textInputRef.style.zIndex = \"9999\";\n this._textInputRef.style.position = \"absolute\";\n this._textInputRef.style.display = \"block\";\n this._textInputRef.style.top = inputY + \"px\";\n this._textInputRef.style.left = inputX + \"px\";\n this._textInputRef.style.fontSize = `${this.fontSize}px`;\n this._textInputRef.style.color = `${this._markupColor.asHex()}`;\n this._textInputRef.style.fontFamily = \"Calibri\";\n this._textInputRef.onkeydown = event => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle);\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n this.removeTextInput();\n }\n };\n if (text) this._textInputRef.value = text;\n document.body.appendChild(this._textInputRef);\n setTimeout((() => {\n this._textInputRef.focus();\n }), 50);\n } else {\n this.removeTextInput();\n }\n }\n removeTextInput() {\n var _a;\n (_a = this._textInputRef) === null || _a === void 0 ? void 0 : _a.remove();\n this._textInputRef = null;\n this._textInputPos = null;\n this._textInputAngle = 0;\n }\n createImageInput(pos) {\n if (!this._imageInputRef) {\n const convertBase64 = file => new Promise(((resolve, reject) => {\n const fileReader = new FileReader;\n fileReader.readAsDataURL(file);\n fileReader.onload = () => {\n resolve(fileReader.result);\n };\n fileReader.onerror = error => {\n reject(error);\n };\n }));\n this._imageInputPos = pos;\n this._imageInputRef = document.createElement(\"input\");\n this._imageInputRef.style.display = \"none\";\n this._imageInputRef.type = \"file\";\n this._imageInputRef.accept = \"image/png, image/jpeg\";\n this._imageInputRef.onchange = async event => {\n const file = event.target.files[0];\n const base64 = await convertBase64(file);\n this.addImage({\n x: this._imageInputPos.x,\n y: this._imageInputPos.y\n }, base64.toString(), 0, 0);\n };\n this._imageInputRef.oncancel = event => {\n this.removeImageInput();\n };\n document.body.appendChild(this._imageInputRef);\n setTimeout((() => {\n this._imageInputRef.click();\n }), 50);\n } else {\n this.removeImageInput();\n }\n }\n removeImageInput() {\n var _a;\n (_a = this._imageInputRef) === null || _a === void 0 ? void 0 : _a.remove();\n this._imageInputRef = null;\n this._imageInputPos = null;\n }\n addText(text, position, angle, color, textSize, fontSize, id) {\n var _a;\n if (!text) return;\n (_a = this.getSelectedObjects().at(0)) === null || _a === void 0 ? void 0 : _a.delete();\n this.clearSelected();\n this.removeTextInput();\n const tolerance = 1e-6;\n if (textSize && textSize > tolerance && (!fontSize || fontSize < tolerance)) {\n const size = .02;\n const scale = this._worldTransformer.getScale();\n fontSize = textSize / (scale.y / size) / 34;\n }\n const konvaText = new KonvaText({\n position: {\n x: position.x,\n y: position.y\n },\n text: text,\n rotation: angle,\n fontSize: fontSize || this.fontSize,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaText);\n return konvaText;\n }\n addRectangle(position, width, height, lineWidth, color, id) {\n if (!position) return;\n const konvaRectangle = new KonvaRectangle({\n position: position,\n width: width,\n height: height,\n lineWidth: lineWidth || this.lineWidth,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaRectangle);\n return konvaRectangle;\n }\n addEllipse(position, radius, lineWidth, color, id) {\n if (!position) return;\n const konvaEllipse = new KonvaEllipse({\n position: position,\n radius: radius,\n lineWidth: lineWidth,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaEllipse);\n return konvaEllipse;\n }\n addArrow(start, end, color, id) {\n if (!start || !end) return;\n const konvaArrow = new KonvaArrow({\n start: start,\n end: end,\n color: color || this._markupColor.asHex(),\n id: id\n });\n this.addObject(konvaArrow);\n return konvaArrow;\n }\n addCloud(position, width, height, lineWidth, color, id) {\n if (!position || !width || !height) return;\n const konvaCloud = new KonvaCloud({\n position: position,\n width: width,\n height: height,\n color: color || this._markupColor.asHex(),\n lineWidth: lineWidth || this.lineWidth,\n id: id\n });\n this.addObject(konvaCloud);\n return konvaCloud;\n }\n addImage(position, src, width, height, id) {\n var _a;\n if (!position || !src) return;\n (_a = this.getSelectedObjects().at(0)) === null || _a === void 0 ? void 0 : _a.delete();\n this.clearSelected();\n this.removeImageInput();\n const konvaImage = new KonvaImage({\n position: position,\n src: src,\n width: width,\n height: height,\n maxWidth: this._konvaStage.width() - position.x,\n maxHeight: this._konvaStage.height() - position.y,\n id: id\n });\n this.addObject(konvaImage);\n return konvaImage;\n }\n}\n\nexport { KonvaMarkup as Markup };\n//# sourceMappingURL=markup.module.js.map\n","class EventEmitter2 {\n constructor() {\n this._listeners = {};\n }\n addEventListener(type, listener) {\n if (this._listeners[type] === undefined) this._listeners[type] = [];\n this._listeners[type].push(listener);\n return this;\n }\n removeEventListener(type, listener) {\n if (this._listeners[type] === undefined) return this;\n const listeners = this._listeners[type].filter((x => x !== listener));\n if (listeners.length !== 0) this._listeners[type] = listeners; else delete this._listeners[type];\n return this;\n }\n removeAllListeners(type) {\n if (type) delete this._listeners[type]; else this._listeners = {};\n return this;\n }\n emitEvent(event) {\n if (this._listeners[event.type] === undefined) return false;\n const invoke = this._listeners[event.type].slice();\n invoke.forEach((listener => listener.call(this, event)));\n return true;\n }\n on(type, listener) {\n return this.addEventListener(type, listener);\n }\n off(type, listener) {\n return this.removeEventListener(type, listener);\n }\n emit(type, ...args) {\n if (typeof type === \"string\") return this.emitEvent({\n type: type,\n args: args\n }); else if (typeof type === \"object\") return this.emitEvent(type); else return false;\n }\n}\n\nexport { EventEmitter2 };\n//# sourceMappingURL=eventemitter2.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Matrix3d, OdTvPlane, Point3d, Vector3d } from \"./Geometry\";\n\nexport type ViewParams = {\n position: number[];\n target: number[];\n upVector: number[];\n viewFieldWidth: number;\n viewFieldHeight: number;\n perspective: boolean;\n};\n\nexport class OdaGeAction {\n protected m_module;\n\n constructor(module: any) {\n this.m_module = module;\n }\n\n protected getViewer(): any {\n return this.m_module.getViewer();\n }\n\n protected getModel(): any {\n return this.getViewer().getMarkupModel();\n }\n\n protected copyPoint(point: Point3d): Point3d {\n const p: Point3d = new this.m_module.Point3d();\n p.set(point.x, point.y, point.z);\n return p;\n }\n\n protected createVector3d(): Vector3d {\n return new this.m_module.Vector3d();\n }\n\n protected createPoint3d(): Point3d {\n return new this.m_module.Point3d();\n }\n\n protected createMatrix3d(): Matrix3d {\n return new this.m_module.Matrix3d();\n }\n\n protected createPlane(): OdTvPlane {\n return new this.m_module.OdTvPlane();\n }\n\n protected toVector(geVector): Vector3d {\n return this.m_module.Vector3d.createFromArray(geVector);\n }\n\n protected toGeVector(v: Vector3d): number[] {\n return [v.x, v.y, v.z];\n }\n\n protected toGePoint(point: Point3d): number[] {\n return [point.x, point.y, point.z];\n }\n\n protected toPoint(gePoint: number[]): Point3d {\n return this.m_module.Point3d.createFromArray(gePoint);\n }\n\n protected screenToWorld(x: number, y: number): Point3d {\n return this.toPoint(this.m_module.getViewer().screenToWorld(x, y));\n }\n\n protected toDoubleArray(points: Point3d[]): number[] {\n const p: number[] = [];\n for (let i = 0; i < points.length; i++) {\n p.push(points[i].x);\n p.push(points[i].y);\n p.push(points[i].z);\n }\n return p;\n }\n\n protected correctCameraTarget(): void {\n const params = this.getViewParams();\n const ext = this.m_module.getViewer().getActiveExtents();\n const { min, max } = ext;\n const target = this.toPoint(params.target);\n\n const contains =\n target.x >= min.x &&\n target.y >= min.y &&\n target.z >= min.z &&\n target.x <= max.x &&\n target.y <= max.y &&\n target.z <= max.z;\n if (!contains) {\n params.target = ext.center();\n this.setViewParams(params);\n }\n }\n\n protected setViewParams = (params: ViewParams) => {\n const extView = this.m_module.getViewer().getActiveTvExtendedView();\n extView.setView(\n params.position,\n params.target,\n params.upVector,\n params.viewFieldWidth,\n params.viewFieldHeight,\n params.perspective\n );\n extView.delete?.();\n };\n\n protected getViewParams = () => {\n const view = this.m_module.getViewer().activeView;\n const obj = {\n position: view.viewPosition,\n target: view.viewTarget,\n upVector: view.upVector,\n viewFieldWidth: view.viewFieldWidth,\n viewFieldHeight: view.viewFieldHeight,\n perspective: view.perspective,\n } as ViewParams;\n view.delete?.();\n return obj;\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\n\nimport { CANVAS_EVENTS } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../../Viewer\";\nimport { Point2d } from \"./Geometry\";\nimport { OdaGeAction } from \"./OdaGeAction\";\n\nconst CLICK_DELTA = 5;\n\nconst INTERACTIVITY_FPS = 24;\n\nexport class OdBaseDragger extends OdaGeAction {\n protected subject: Viewer;\n protected needInputText: boolean;\n protected mouseDownPosition: Point2d;\n protected autoSelect: boolean;\n protected onmessage: (event: any) => boolean;\n protected canvasEvents: string[];\n protected isDragging: boolean;\n protected press: boolean;\n\n public name: string;\n\n constructor(subject: Viewer) {\n super(subject.visualizeJs);\n this.subject = subject;\n this.needInputText = false;\n this.mouseDownPosition = { x: 0, y: 0 };\n this.autoSelect = false;\n\n this.onmessage = (event) => this.subject.emitEvent(event);\n this.canvasEvents = CANVAS_EVENTS;\n }\n\n public initialize(): void {\n this.canvasEvents = this.canvasEvents.filter((x) => typeof this[x] === \"function\");\n this.canvasEvents.forEach((x) => (this[x] = this[x].bind(this)));\n this.canvasEvents.forEach((x) => this.subject.on(x, this[x]));\n\n this.getViewer().setEnableAutoSelect(!!this.autoSelect);\n }\n\n public dispose(): void {\n this.canvasEvents.forEach((x) => this.subject.off(x, this[x]));\n }\n\n protected relativeCoords(event: MouseEvent): Point2d {\n return { x: event.offsetX * window.devicePixelRatio, y: event.offsetY * window.devicePixelRatio };\n }\n\n protected pointerdown(ev: PointerEvent): void {\n if (!ev.isPrimary || OdBaseDragger.isGestureActive) {\n return;\n }\n\n (ev.target as HTMLElement).setPointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.isDragging = true;\n this.mouseDownPosition = { x: relCoord.x, y: relCoord.y };\n this.start(relCoord.x, relCoord.y, ev.clientX, ev.clientY);\n this.subject.update();\n }\n\n protected pointerup(ev: PointerEvent): void {\n if (OdBaseDragger.needSkipPointerUp) {\n return;\n }\n\n if (!ev.isPrimary) {\n return;\n }\n\n (ev.target as HTMLElement).releasePointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.end(relCoord.x, relCoord.y);\n this.isDragging = false;\n this.subject.update();\n }\n\n protected pointercancel(ev: PointerEvent): void {\n if (!ev.isPrimary) {\n return;\n }\n\n this.m_module.canvas.dispatchEvent(new PointerEvent(\"pointerup\", ev));\n }\n\n protected pointermove(ev: PointerEvent): void {\n if (!ev.isPrimary || OdBaseDragger.isGestureActive) {\n return;\n }\n\n const relCoord = this.relativeCoords(ev);\n this.drag(relCoord.x, relCoord.y, ev.movementX, ev.movementY);\n if (this.isDragging) {\n this.subject.update();\n }\n }\n\n protected click(ev: MouseEvent): void {\n const viewer = this.getViewer();\n const relCoord = this.relativeCoords(ev);\n const x = relCoord.x;\n const y = relCoord.y;\n\n const isNotDragging =\n Math.abs(x - this.mouseDownPosition.x) < CLICK_DELTA && Math.abs(y - this.mouseDownPosition.y) < CLICK_DELTA;\n\n if (viewer && viewer.getEnableAutoSelect() && isNotDragging) {\n viewer.unselect();\n viewer.select(x, y, x, y);\n this.subject.update();\n\n const selectionSet = viewer.getSelected();\n const handles = this.subject.getSelected();\n this.onmessage({ type: \"select\", data: selectionSet, handles });\n }\n }\n\n protected dblclick(ev: MouseEvent): void {\n const viewer = this.getViewer();\n const relCoord = this.relativeCoords(ev);\n const x = relCoord.x;\n const y = relCoord.y;\n\n const device = viewer.getActiveDevice();\n const clickView = device.viewAt([x, y]);\n if (clickView && !clickView.active) {\n viewer.activeView = clickView;\n clickView.delete();\n this.subject.update();\n } else {\n if (viewer && viewer.getEnableAutoSelect()) {\n const pSelected = viewer.getSelected();\n\n if (!pSelected.isNull() && pSelected.numItems() !== 0) {\n const itr = pSelected.getIterator();\n const entity = itr.getEntity();\n viewer.zoomToEntity(entity);\n\n this.onmessage({ type: \"zoomtoentity\", data: entity });\n this.subject.update();\n\n this.deleteAll([itr, entity]);\n }\n }\n }\n\n device.delete();\n }\n\n protected start(x: number, y: number, absoluteX = 0, absoluteY = 0): void {}\n\n protected drag(x: number, y: number, absoluteX = 0, absoluteY = 0): void {}\n\n protected end(x: number, y: number): void {}\n\n protected beginInteractivity = () => {\n const viewer = this.getViewer();\n const view = viewer.activeView;\n if (view[\"beginInteractivity\"]) {\n view.beginInteractivity(INTERACTIVITY_FPS);\n this.subject.update();\n }\n view.delete();\n };\n\n protected endInteractivity = () => {\n const viewer = this.getViewer();\n const view = viewer.activeView;\n if (view[\"endInteractivity\"]) {\n view.endInteractivity();\n\n const device = this.getViewer().getActiveDevice();\n const canvas = this.m_module.canvas;\n device.invalidate([0, 0, canvas.width, canvas.height]);\n device.delete();\n this.subject.update();\n }\n view.delete();\n };\n\n protected getActiveMarkupEntity(entityName: string): any {\n return this.subject.addMarkupEntity(entityName);\n }\n\n private syncOverlayView(): any {\n return this.subject.syncOverlay();\n }\n\n protected deleteAll(objects): void {\n for (const obj of objects) {\n obj?.delete?.();\n }\n }\n\n public updatePreview(): void {}\n\n private static _isGestureActive = false;\n\n protected static set isGestureActive(value: boolean) {\n if (OdBaseDragger._isGestureActive === value) {\n return;\n }\n\n OdBaseDragger._isGestureActive = value;\n if (OdBaseDragger._isGestureActive) {\n OdBaseDragger.needSkipPointerUp = true;\n }\n }\n\n protected static get isGestureActive() {\n return OdBaseDragger._isGestureActive;\n }\n\n private static _needSkipPointerUp = false;\n\n private static get needSkipPointerUp() {\n if (OdBaseDragger._needSkipPointerUp) {\n OdBaseDragger.needSkipPointerUp = false;\n return true;\n }\n\n return false;\n }\n\n private static set needSkipPointerUp(value: boolean) {\n OdBaseDragger._needSkipPointerUp = value;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point2d } from \"../Common/Geometry\";\n\nexport function createHtmlElementIfNeed(\n element: HTMLElement,\n targetElement: HTMLElement,\n dataTestId: string\n): HTMLElement {\n if (!element) {\n element = document.createElement(\"div\");\n element.setAttribute(\"data-testid\", dataTestId);\n\n targetElement.appendChild(element);\n }\n return element;\n}\n\nexport function destroyHtmlElement(element: HTMLElement, targetElement: HTMLElement) {\n if (element) {\n targetElement.removeChild(element);\n }\n return null;\n}\n\nexport function worldToScreen(gePoint: number[], moduleInstance, viewer): Point2d {\n const worldPoint = moduleInstance.Point3d.createFromArray(gePoint);\n const avp = viewer.activeView;\n const mtx = avp.worldToDeviceMatrix;\n\n const devicePoint = worldPoint.transformBy(mtx);\n\n const res = { x: devicePoint.x / window.devicePixelRatio, y: devicePoint.y / window.devicePixelRatio };\n\n mtx.delete();\n worldPoint.delete();\n devicePoint.delete();\n avp.delete();\n return res;\n}\n\nexport function getDistance(gePoint1: number[], gePoint2: number[], moduleInstance: any) {\n const tvPoint1 = moduleInstance.Point3d.createFromArray(gePoint1);\n const tvPoint2 = moduleInstance.Point3d.createFromArray(gePoint2);\n\n const distance = tvPoint1.distanceTo(tvPoint2).toFixed(2);\n\n tvPoint1.delete();\n tvPoint2.delete();\n\n return distance;\n}\n\nexport function getAngle(geStart: number[], geOrigin: number[], geEnd: number[], moduleInstance: any): number {\n const tvStart = moduleInstance.Point3d.createFromArray(geStart);\n const tvOrigin = moduleInstance.Point3d.createFromArray(geOrigin);\n const tvEnd = moduleInstance.Point3d.createFromArray(geEnd);\n\n const s1 = tvStart.sub(tvOrigin);\n const s2 = tvEnd.sub(tvOrigin);\n\n const v1 = s1.asVector();\n const v2 = s2.asVector();\n\n const angle = (180 * v1.angleTo(v2)) / Math.PI;\n\n return angle;\n}\n\nexport function getDataForDrawLine(p1: Point2d, p2: Point2d) {\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n let angle = (180 * Math.atan(dy / dx)) / Math.PI;\n if (dx < 0) {\n angle -= 180;\n }\n const width = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n return { angle, width };\n}\n\nfunction normalizeFloat(value: number): number {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n}\n\nconst lineSegmentsIntersect = (p1: Point2d, p2: Point2d, p3: Point2d, p4: Point2d): false | Point2d => {\n const a_dx = p2.x - p1.x;\n const a_dy = p2.y - p1.y;\n const b_dx = p4.x - p3.x;\n const b_dy = p4.y - p3.y;\n const s = (-a_dy * (p1.x - p3.x) + a_dx * (p1.y - p3.y)) / (-b_dx * a_dy + a_dx * b_dy);\n const t = (+b_dx * (p1.y - p3.y) - b_dy * (p1.x - p3.x)) / (-b_dx * a_dy + a_dx * b_dy);\n return s >= 0 && s <= 1 && t >= 0 && t <= 1\n ? {\n x: normalizeFloat(p1.x + t * a_dx),\n y: normalizeFloat(p1.y + t * a_dy),\n }\n : false;\n};\n\nfunction checkSegmentsIntersect(p1: Point2d, p2: Point2d, p3: Point2d, p4: Point2d, res: Point2d[]): void {\n const r = lineSegmentsIntersect(p1, p2, p3, p4);\n if (r) {\n res.push(r);\n }\n}\n\nexport function isInsideRect(p: Point2d, width: number, height: number): boolean {\n return p.x <= width && p.x >= 0 && p.y <= height && p.y >= 0;\n}\n\nexport function getDataForDrawLineWithFixed(p1: Point2d, p2: Point2d, width: number, height: number) {\n const pLU = { x: 0, y: 0 };\n const pRU = { x: width, y: 0 };\n\n const pLB = { x: 0, y: height };\n const pRB = { x: width, y: height };\n\n const intersects: Point2d[] = [];\n\n checkSegmentsIntersect(p1, p2, pLU, pRU, intersects);\n checkSegmentsIntersect(p1, p2, pLU, pLB, intersects);\n checkSegmentsIntersect(p1, p2, pLB, pRB, intersects);\n checkSegmentsIntersect(p1, p2, pRB, pRU, intersects);\n\n let fixedP1: Point2d = null;\n let fixedP2: Point2d = null;\n\n if (intersects.length === 0) {\n fixedP1 = p1;\n fixedP2 = p2;\n } else if (intersects.length === 1) {\n if (isInsideRect(p1, width, height)) {\n fixedP1 = p1;\n fixedP2 = intersects[0];\n } else {\n fixedP1 = intersects[0];\n fixedP2 = p2;\n }\n } else {\n fixedP1 = intersects[0];\n fixedP2 = intersects[1];\n }\n\n const dx = fixedP2.x - fixedP1.x;\n const dy = fixedP2.y - fixedP1.y;\n let angle = (180 * Math.atan(dy / dx)) / Math.PI;\n if (dx < 0) {\n angle -= 180;\n }\n const size = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n return { angle, width: size, p1: fixedP1, p2: fixedP2 };\n}\n\nexport function onSetCallback(element: HTMLElement, cb: () => void): void {\n if (element) {\n element.onclick = cb ? () => cb() : () => {};\n }\n}\n\nexport function onSetSelectivity(element: HTMLElement, enable: boolean): void {\n element.style.pointerEvents = enable ? \"auto\" : \"none\";\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport * as utils from \"./MeasureUtils\";\n\nexport class MeasureLineItem {\n protected htmlElemStartPoint: HTMLElement;\n protected htmlElemEndPoint: HTMLElement;\n protected htmlElemLine: HTMLElement;\n protected htmlElemTitle: HTMLElement;\n protected startPoint: number[];\n protected endPoint: number[];\n protected unit: string;\n protected scale: number;\n protected size: number;\n protected style: CSSStyleDeclaration;\n protected viewer: any;\n protected moduleInstance: any;\n protected targetElement: HTMLElement;\n protected isFinishDraw: boolean;\n\n public lineThickness: number;\n\n constructor(targetElement: HTMLElement, viewer: any, moduleInstance: any) {\n this.htmlElemStartPoint = null;\n this.htmlElemEndPoint = null;\n this.htmlElemLine = null;\n this.htmlElemTitle = null;\n\n this.startPoint = null;\n this.endPoint = null;\n\n this.unit = \"\";\n this.scale = 1.0;\n this.size = 10.0;\n this.lineThickness = 2;\n\n this.style = {\n border: \"2px solid #FFFFFF\",\n background: \"#009bff\",\n color: \"white\",\n boxShadow: \"0 0 10px rgba(0,0,0,0.5)\",\n } as CSSStyleDeclaration;\n\n this.htmlElemStartPoint = utils.createHtmlElementIfNeed(this.htmlElemStartPoint, targetElement, \"ruler-start\");\n this.htmlElemEndPoint = utils.createHtmlElementIfNeed(this.htmlElemEndPoint, targetElement, \"ruler-end\");\n this.htmlElemLine = utils.createHtmlElementIfNeed(this.htmlElemLine, targetElement, \"ruler-line\");\n this.htmlElemTitle = utils.createHtmlElementIfNeed(this.htmlElemTitle, targetElement, \"ruler-value\");\n\n this.viewer = viewer;\n this.moduleInstance = moduleInstance;\n this.targetElement = targetElement;\n this.isFinishDraw = false;\n }\n\n drawMeasureLine(): void {\n const pointSize = this.size;\n const rect = this.moduleInstance.canvas.getBoundingClientRect();\n\n // draw start point\n if (this.startPoint) {\n this.htmlElemStartPoint = utils.createHtmlElementIfNeed(\n this.htmlElemStartPoint,\n this.targetElement,\n \"ruler-start\"\n );\n\n const pScreenStart = utils.worldToScreen(this.startPoint, this.moduleInstance, this.viewer);\n if (utils.isInsideRect(pScreenStart, rect.width, rect.height)) {\n this.htmlElemStartPoint.style.display = \"block\";\n this.htmlElemStartPoint.style.cursor = \"pointer\";\n this.htmlElemStartPoint.style.position = \"absolute\";\n this.htmlElemStartPoint.style.top = `${pScreenStart.y - pointSize / 2}px`;\n this.htmlElemStartPoint.style.left = `${pScreenStart.x - pointSize / 2}px`;\n this.htmlElemStartPoint.style.borderRadius = `${pointSize}px`;\n this.htmlElemStartPoint.style.border = this.style.border;\n this.htmlElemStartPoint.style.background = this.style.background;\n this.htmlElemStartPoint.style.zIndex = \"2\";\n this.htmlElemStartPoint.style.width = `${pointSize}px`;\n this.htmlElemStartPoint.style.height = `${pointSize}px`;\n this.htmlElemStartPoint.style.boxShadow = this.style.boxShadow;\n } else {\n this.htmlElemStartPoint.style.display = \"none\";\n }\n }\n\n // draw end point\n if (this.endPoint && this.isFinishDraw) {\n this.htmlElemEndPoint = utils.createHtmlElementIfNeed(this.htmlElemEndPoint, this.targetElement, \"ruler-end\");\n\n const pScreenEnd = utils.worldToScreen(this.endPoint, this.moduleInstance, this.viewer);\n\n if (utils.isInsideRect(pScreenEnd, rect.width, rect.height)) {\n this.htmlElemEndPoint.style.display = \"block\";\n this.htmlElemEndPoint.style.cursor = \"pointer\";\n this.htmlElemEndPoint.style.position = \"absolute\";\n this.htmlElemEndPoint.style.top = `${pScreenEnd.y - pointSize / 2}px`;\n this.htmlElemEndPoint.style.left = `${pScreenEnd.x - pointSize / 2}px`;\n this.htmlElemEndPoint.style.borderRadius = `${pointSize}px`;\n this.htmlElemEndPoint.style.border = this.style.border;\n this.htmlElemEndPoint.style.background = this.style.background;\n this.htmlElemEndPoint.style.zIndex = \"2\";\n this.htmlElemEndPoint.style.width = `${pointSize}px`;\n this.htmlElemEndPoint.style.height = `${pointSize}px`;\n this.htmlElemEndPoint.style.boxShadow = this.style.boxShadow;\n } else {\n this.htmlElemEndPoint.style.display = \"none\";\n }\n }\n\n if (this.endPoint && this.startPoint) {\n const point1 = utils.worldToScreen(this.startPoint, this.moduleInstance, this.viewer);\n const point2 = utils.worldToScreen(this.endPoint, this.moduleInstance, this.viewer);\n\n const { p1, p2, angle, width } = utils.getDataForDrawLineWithFixed(point1, point2, rect.width, rect.height);\n\n const dx = p2.x - p1.x;\n const dy = p2.y - p1.y;\n\n const height = this.lineThickness;\n if (utils.isInsideRect(p1, rect.width, rect.height) && utils.isInsideRect(p2, rect.width, rect.height)) {\n this.htmlElemLine = utils.createHtmlElementIfNeed(this.htmlElemLine, this.targetElement, \"ruler-line\");\n this.htmlElemLine.style.display = \"block\";\n this.htmlElemLine.style.cursor = \"pointer\";\n this.htmlElemLine.style.position = \"absolute\";\n this.htmlElemLine.style.top = `${p1.y}px`;\n this.htmlElemLine.style.left = `${p1.x}px`;\n this.htmlElemLine.style.width = `${width}px`;\n this.htmlElemLine.style.transform = `rotate(${angle}deg)`;\n this.htmlElemLine.style.transformOrigin = `0px ${height / 2}px`;\n this.htmlElemLine.style.boxShadow = this.style.boxShadow;\n this.htmlElemLine.style.border = \"none\";\n this.htmlElemLine.style.background = this.style.background;\n this.htmlElemLine.style.zIndex = \"1\";\n this.htmlElemLine.style.height = `${height}px`;\n\n const distance = `${this.getDistance()} ${this.unit}`;\n\n const pX = p1.x + dx / 2;\n const pY = p1.y + dy / 2;\n\n const widthTitle = distance.length * 10;\n\n this.htmlElemTitle = utils.createHtmlElementIfNeed(this.htmlElemTitle, this.targetElement, \"ruler-value\");\n this.htmlElemTitle.style.display = \"block\";\n this.htmlElemTitle.style.cursor = \"pointer\";\n this.htmlElemTitle.style.font = \"10px\";\n this.htmlElemTitle.style.color = \"white\";\n this.htmlElemTitle.style.position = \"Absolute\";\n this.htmlElemTitle.style.top = `${pY}px`;\n this.htmlElemTitle.style.left = `${pX - widthTitle / 2}px`;\n this.htmlElemTitle.style.width = `${widthTitle}px`;\n this.htmlElemTitle.style.transformOrigin = \"0px 0px\";\n this.htmlElemTitle.style.borderRadius = \"5px\";\n this.htmlElemTitle.style.boxShadow = this.style.boxShadow;\n this.htmlElemTitle.style.border = \"none\";\n this.htmlElemTitle.style.background = this.style.background;\n this.htmlElemTitle.style.zIndex = \"3\";\n this.htmlElemTitle.style.padding = \"2px\";\n this.htmlElemTitle.style.textAlign = \"center\";\n this.htmlElemTitle.innerHTML = `${distance}`;\n } else {\n this.htmlElemLine.style.display = \"none\";\n this.htmlElemTitle.style.display = \"none\";\n }\n }\n }\n\n getDistance(): number {\n return utils.getDistance(this.startPoint, this.endPoint, this.moduleInstance) / this.scale;\n }\n\n setStartPoint(gePoint: number[]): void {\n this.startPoint = gePoint;\n this.drawMeasureLine();\n }\n\n setEndPoint(gePoint: number[], isFinish: boolean): void {\n this.isFinishDraw = isFinish === undefined ? true : isFinish;\n this.endPoint = gePoint;\n this.drawMeasureLine();\n }\n\n update(): void {\n this.drawMeasureLine();\n }\n\n setSize(size: number): void {\n this.size = size;\n this.drawMeasureLine();\n }\n\n clear(): void {\n this.endPoint = null;\n this.startPoint = null;\n this.htmlElemStartPoint = utils.destroyHtmlElement(this.htmlElemStartPoint, this.targetElement);\n this.htmlElemEndPoint = utils.destroyHtmlElement(this.htmlElemEndPoint, this.targetElement);\n this.htmlElemLine = utils.destroyHtmlElement(this.htmlElemLine, this.targetElement);\n this.htmlElemTitle = utils.destroyHtmlElement(this.htmlElemTitle, this.targetElement);\n }\n\n setUnit(unit: string): void {\n this.unit = unit;\n this.drawMeasureLine();\n }\n\n setConversionFactor(scale: number): void {\n this.scale = scale;\n this.drawMeasureLine();\n }\n\n setStyle(style: CSSStyleDeclaration): void {\n this.style = style;\n this.drawMeasureLine();\n }\n\n setSelectionReactor(reactor: any): void {\n utils.onSetCallback(this.htmlElemStartPoint, reactor ? reactor.onStartPoint : null);\n utils.onSetCallback(this.htmlElemEndPoint, reactor ? reactor.onEndPoint : null);\n utils.onSetCallback(this.htmlElemTitle, reactor ? reactor.onTitle : null);\n }\n\n setSelectability(enable: boolean): void {\n utils.onSetSelectivity(this.htmlElemStartPoint, enable);\n utils.onSetSelectivity(this.htmlElemEndPoint, enable);\n utils.onSetSelectivity(this.htmlElemLine, enable);\n utils.onSetSelectivity(this.htmlElemTitle, enable);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../../Viewer\";\nimport { OdBaseDragger } from \"../Common/OdBaseDragger\";\nimport { MeasureLineItem } from \"./MeasureLineItem\";\n\nfunction renameUnit(table, unit) {\n return table[unit] || unit;\n}\n\nexport class MeasureLineDragger extends OdBaseDragger {\n protected lineThickness: number;\n protected gripingRadius: number;\n protected firstPoint: number[];\n protected secondPoint: number[];\n protected renameUnitTable: any;\n protected items: MeasureLineItem[];\n protected m_overlayElement: HTMLElement;\n protected previewMeasureLine: MeasureLineItem;\n\n constructor(subject: Viewer) {\n super(subject);\n this.lineThickness = 2;\n this.press = false;\n this.gripingRadius = 5.0;\n this.firstPoint = null;\n this.secondPoint = null;\n\n this.renameUnitTable = {\n Millimeters: \"mm\",\n Centimeters: \"cm\",\n Meters: \"m\",\n Feet: \"ft\",\n Inches: \"in\",\n Yards: \"yd\",\n Kilometers: \"km\",\n Miles: \"mi\",\n Micrometers: \"µm\",\n MicroInches: \"µin\",\n Undefined: \" \",\n };\n\n this.items = [];\n\n this.canvasEvents.push(\"resize\");\n }\n\n override initialize(): void {\n super.initialize();\n\n this.m_overlayElement = document.createElement(\"div\");\n this.m_overlayElement.style.background = \"rgba(0,0,0,0)\";\n this.m_overlayElement.style.position = \"fixed\";\n this.m_overlayElement.style.zIndex = \"1\";\n this.m_overlayElement.style.pointerEvents = \"none\";\n document.body.appendChild(this.m_overlayElement);\n\n this.resize();\n }\n\n override dispose(): void {\n super.dispose();\n this.m_overlayElement.remove();\n }\n\n override updatePreview(): void {\n this.items.forEach((item) => item.update());\n }\n\n resize(): void {\n const rect = this.m_module.canvas.getBoundingClientRect();\n\n this.m_overlayElement.style.top = `${rect.top}px`;\n this.m_overlayElement.style.left = `${rect.left}px`;\n this.m_overlayElement.style.width = `${rect.width}px`;\n this.m_overlayElement.style.height = `${rect.height}px`;\n }\n\n getSnapPointRadius(): number {\n const view = this.getViewer().activeView;\n const corners = view.viewDcCorners();\n\n const pt1 = corners.lowerLeft;\n const pt2 = corners.upperRight;\n\n pt2[0] -= pt1[0];\n pt2[1] -= pt1[1];\n\n return Math.min(pt2[0], pt2[1]) / 120;\n }\n\n override start(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (point) {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n }\n\n override drag(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (this.isDragging) {\n if (point) {\n if (this.firstPoint) {\n this.secondPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.secondPoint, true);\n } else {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n } else {\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.getViewer().screenToWorld(x, y), false);\n }\n } else {\n if (point) {\n this.previewMeasureLine.setStartPoint(point);\n } else {\n this.previewMeasureLine.clear();\n }\n }\n }\n\n override end(): void {\n if (this.firstPoint && this.secondPoint) {\n const newLineMeasure = this.createMeasureLine();\n newLineMeasure.setStartPoint(this.firstPoint);\n newLineMeasure.setEndPoint(this.secondPoint, true);\n }\n this.firstPoint = null;\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n }\n\n createNewMeasureIfNeed(): void {\n if (!this.previewMeasureLine) {\n this.previewMeasureLine = this.createMeasureLine();\n }\n }\n\n createMeasureLine(): MeasureLineItem {\n const viewer = this.m_module.getViewer();\n const item = new MeasureLineItem(this.m_overlayElement, viewer, this.m_module);\n item.lineThickness = this.lineThickness || item.lineThickness;\n item.setUnit(renameUnit(this.renameUnitTable, viewer.getUnit()));\n this.items.push(item);\n return item;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { Point2d, Vector3 } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nconst FocalLengthConst = 42.0;\n\nconst calcFocalLength = (lensLength: number, fieldWidth: number, fieldHeight: number): number => {\n return (lensLength / FocalLengthConst) * Math.sqrt(fieldWidth * fieldWidth + fieldHeight * fieldHeight);\n};\n\nexport class OdaWalkDragger extends OdBaseDragger {\n protected lastCoord: Point2d;\n protected speed: number;\n protected delta: number;\n protected keyPressMap: Set<string>;\n protected oldWCSEnableValue: boolean;\n protected viewParams: any;\n protected cameraId: any;\n protected cameraWalker: any;\n protected viewer: any;\n protected multiplier: number;\n protected lastFrameTS: number;\n protected animationId: any;\n protected deltaAngle: number;\n protected enableZoomWheelPreviousValue: boolean;\n\n constructor(subject: Viewer) {\n super(subject);\n this.viewer = undefined;\n\n this.multiplier = 5;\n this.speed = 1;\n\n this.keyPressMap = new Set();\n this.keydown = this.keydown.bind(this);\n this.keyup = this.keyup.bind(this);\n\n this.lastFrameTS = 0;\n this.animationId = undefined;\n this.processMovement = this.processMovement.bind(this);\n\n this.deltaAngle = Math.PI / 3600;\n this.autoSelect = true;\n }\n\n override initialize() {\n super.initialize();\n this.viewer = this.getViewer();\n\n window.addEventListener(\"keydown\", this.keydown, false);\n window.addEventListener(\"keyup\", this.keyup, false);\n\n this.oldWCSEnableValue = this.viewer.getEnableWCS();\n this.viewer.setEnableWCS(false);\n\n const view = this.viewer.activeView;\n const maxDimension = this.getMaxDimension(view);\n this.speed = maxDimension / 30000;\n\n this.subject.emitEvent({ type: \"walkstart\" });\n\n this.viewParams = this.getViewParams();\n //this.viewParams.lensLength = view.lensLength;\n\n this.setViewParams(this.viewParams);\n //view.lensLength = (view.lensLength * 42) / 120;\n\n const model = this.viewer.getActiveModel();\n this.cameraId = model.appendCamera(\"Camera0\");\n this.setupCamera(view);\n model.delete();\n\n //pCamera.setAdjustLensLength(true);\n this.cameraWalker = new this.m_module.OdTvCameraWalker();\n this.cameraWalker.setCamera(this.cameraId);\n\n this.subject.update();\n this.enableZoomWheelPreviousValue = this.subject.options.enableZoomWheel;\n this.subject.options.enableZoomWheel = false;\n }\n\n override dispose() {\n this.oldWCSEnableValue =\n this.oldWCSEnableValue !== undefined ? this.oldWCSEnableValue : this.subject.options.showWCS;\n this.viewer.setEnableWCS(this.oldWCSEnableValue);\n\n super.dispose();\n\n this.keyPressMap.clear();\n\n window.removeEventListener(\"keydown\", this.keydown);\n window.removeEventListener(\"keyup\", this.keyup);\n\n if (this.animationId) {\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n }\n\n if (this.cameraId) {\n const model = this.viewer.getActiveModel();\n model.removeEntity(this.cameraId);\n model.delete();\n this.cameraWalker?.delete();\n }\n\n if (this.viewParams) {\n this.setViewParams(this.viewParams);\n\n const avp = this.viewer.activeView;\n //avp.lensLength = this.viewParams.lensLength;\n avp.delete();\n }\n\n this.subject.update();\n this.subject.options.enableZoomWheel = this.enableZoomWheelPreviousValue;\n }\n\n keydown(ev) {\n switch (ev.code) {\n case \"NumpadSubtract\":\n case \"Minus\":\n if (this.multiplier > 1) {\n this.multiplier = this.multiplier - 1;\n this.subject.emitEvent({ type: \"walkspeedchange\", data: this.multiplier });\n }\n break;\n case \"NumpadAdd\":\n case \"Equal\":\n if (this.multiplier < 10) {\n this.multiplier = this.multiplier + 1;\n this.subject.emitEvent({ type: \"walkspeedchange\", data: this.multiplier });\n }\n break;\n case \"KeyW\":\n case \"KeyA\":\n case \"KeyS\":\n case \"KeyD\":\n case \"KeyQ\":\n case \"KeyE\":\n this.keyPressMap.add(ev.code);\n if (!this.animationId) this.processMovement(0);\n break;\n }\n }\n\n keyup(ev) {\n this.keyPressMap.delete(ev.code);\n if (this.keyPressMap.size < 1 && this.animationId) {\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n this.lastFrameTS = 0;\n }\n }\n\n processMovement(timestamp) {\n this.animationId = requestAnimationFrame(this.processMovement);\n\n if (this.lastFrameTS !== 0) {\n const deltaTS = timestamp - this.lastFrameTS;\n const currentDelta = this.multiplier * deltaTS * this.speed;\n\n for (const keyCode of this.keyPressMap) {\n switch (keyCode) {\n case \"KeyW\":\n this.cameraWalker.moveForward(currentDelta);\n break;\n case \"KeyS\":\n this.cameraWalker.moveBackward(currentDelta);\n break;\n case \"KeyA\":\n this.cameraWalker.moveLeft(currentDelta);\n break;\n case \"KeyD\":\n this.cameraWalker.moveRight(currentDelta);\n break;\n case \"KeyQ\":\n this.cameraWalker.moveUp(currentDelta);\n break;\n case \"KeyE\":\n this.cameraWalker.moveDown(currentDelta);\n break;\n }\n }\n this.subject.update();\n }\n\n this.lastFrameTS = timestamp;\n }\n\n override drag(x, y, dltX, dltY) {\n if (this.cameraId && this.isDragging) {\n if (dltX !== 0.0) this.turnLeft(-dltX * this.deltaAngle);\n if (dltY !== 0.0) this.cameraWalker.turnDown(dltY * this.deltaAngle);\n this.subject.update();\n }\n }\n\n turnLeft(angle) {\n //TODO: migrate to VisualizeJS\n const pCamera = this.cameraWalker.camera().openObjectAsCamera();\n const dir = this.toVector(pCamera.direction());\n const up = this.toVector(pCamera.upVector());\n\n const pos = pCamera.position();\n\n const rotMatrix = this.createMatrix3d();\n const zAxisVector: Vector3 = [0, 0, 1];\n rotMatrix.setToRotation(angle, zAxisVector, pos);\n dir.transformBy(rotMatrix);\n up.transformBy(rotMatrix);\n pCamera.setupCameraByDirection(pos, dir.toArray(), up.toArray());\n pCamera.delete();\n }\n\n setupCamera(view) {\n const pCamera = this.cameraId.openObjectAsCamera();\n const target = view.viewTarget;\n\n pCamera.setDisplayGlyph(false);\n pCamera.setDisplayTarget(false);\n pCamera.setAutoAdjust(true);\n pCamera.setupCamera(view.viewPosition, target, view.upVector);\n pCamera.setNearClip(false, 1.0);\n pCamera.setFarClip(false, 0);\n pCamera.setViewParameters(view.viewFieldWidth, view.viewFieldHeight, true);\n\n const focalL = calcFocalLength(view.lensLength, view.viewFieldWidth, view.viewFieldHeight);\n\n const pTarget = this.toPoint(view.viewTarget);\n const viewDir = this.toPoint(view.viewPosition);\n const viewDirSub = viewDir.sub(pTarget);\n const viewDirVec = viewDirSub.asVector();\n const viewDirVecNormal = viewDirVec.normalize();\n\n const geViewDir = this.toGeVector(viewDirVecNormal);\n const newGeViewDir = [geViewDir[0] * focalL, geViewDir[1] * focalL, geViewDir[2] * focalL];\n\n const pTarget2 = this.toPoint(view.viewTarget);\n const newGeViewDirPt = this.toPoint(newGeViewDir);\n\n const newPos = pTarget2.add(newGeViewDirPt);\n pCamera.setupCamera(this.toGePoint(newPos), view.viewTarget, view.upVector);\n\n this.deleteAll([pTarget, viewDir, viewDirSub, viewDirVec, viewDirVecNormal, pTarget2, newGeViewDirPt, newPos]);\n\n pCamera.assignView(view);\n pCamera.delete();\n }\n\n getMaxDimension(view) {\n const [xmax, ymax, zmax] = view.sceneExtents.max();\n const [xmin, ymin, zmin] = view.sceneExtents.min();\n const volume = [xmax - xmin, ymax - ymin, zmax - zmin];\n return Math.max(...volume);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { Point2d, Point3d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdBaseCuttingPlaneDragger extends OdBaseDragger {\n protected m_size_x: number;\n protected m_size_y: number;\n protected m_size_z: number;\n protected m_center: Point3d;\n protected m_normal: number[];\n protected index: number;\n protected m_model: any;\n protected m_entity: any;\n protected planePreview: any;\n protected m_last: Point3d;\n protected m_click: Point2d;\n\n constructor(subject: Viewer) {\n super(subject);\n this.press = false;\n\n //this.getViewer().getMarkupController().clear();\n\n const ext = this.getViewer().getActiveExtents();\n const min = ext.min();\n const max = ext.max();\n\n this.m_size_x = Math.abs(max[0] - min[0]) / 2;\n this.m_size_y = Math.abs(max[1] - min[1]) / 2;\n this.m_size_z = Math.abs(max[2] - min[2]) / 2;\n\n this.m_center = this.toPoint(ext.center());\n this.m_normal = this.createNormal();\n\n const avp = this.getViewer().activeView;\n const plane = this.createPlane();\n plane.set(this.toGePoint(this.m_center), this.m_normal);\n\n avp.addCuttingPlane(plane);\n this.index = avp.numCuttingPlanes() - 1;\n\n const { red, green, blue } = this.subject.options.cuttingPlaneFillColor;\n avp.setEnableCuttingPlaneFill(true, red, green, blue);\n avp.setCuttingPlaneFillPatternEnabled(true, this.m_module.CuttingPlaneFillStyle.kHorizontalBars, 0x0, 0x0, 0x0);\n\n this.m_model = this.getModel();\n this.createPreview();\n\n this.deleteAll([ext, avp, plane]);\n }\n\n override dispose(): void {\n super.dispose();\n\n if (this.m_entity) {\n this.m_model.removeEntity(this.m_entity);\n this.deleteAll([this.m_model, this.m_entity, this.planePreview, this.m_center]);\n this.m_entity = null;\n this.planePreview = null;\n this.subject.update();\n }\n }\n\n createNormal(): number[] {\n return [0, 0, 0];\n }\n\n handleDelta(delta: Point3d): Point3d {\n return delta;\n }\n\n getPlanePreviewCoordinate(): any[] {\n return [];\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this.m_last = this.screenToWorld(x, y);\n this.m_click = { x, y };\n }\n\n override drag(x: number, y: number): void {\n if (this.press) {\n const point = this.screenToWorld(x, y);\n const delta = this.handleDelta(point.sub(this.m_last));\n\n const oldCenter = this.m_center;\n this.m_center = oldCenter.add(delta);\n\n const oldLast = this.m_last;\n this.m_last = point;\n\n const avp = this.getViewer().activeView;\n const plane = this.createPlane();\n const newPlane = plane.set(this.toGePoint(this.m_center), this.m_normal);\n const newCutting = avp.updateCuttingPlane(this.index, plane);\n\n this.drawPreview();\n\n this.deleteAll([avp, plane, oldCenter, delta, oldLast, newPlane, newCutting]);\n\n const device = this.getViewer().getActiveDevice();\n device.invalidate(device.getSize());\n }\n }\n\n override end(x: number, y: number): void {\n this.press = false;\n if (x === this.m_click.x && y === this.m_click.y) {\n this.m_normal = [this.m_normal[0] * -1, this.m_normal[1] * -1, this.m_normal[2] * -1];\n\n const avp = this.getViewer().activeView;\n const plane = this.createPlane();\n plane.set(this.toGePoint(this.m_center), this.m_normal);\n avp.updateCuttingPlane(this.index, plane);\n\n this.deleteAll([avp, plane, this.m_last]);\n\n const device = this.getViewer().getActiveDevice();\n device.invalidate(device.getSize());\n }\n }\n\n createPreview(): void {\n this.m_entity = this.m_model.appendEntity(\"&CuttingPlanePreview\");\n\n const GeometryTypes = this.m_module.GeometryTypes;\n\n const transparencyDef = new this.m_module.OdTvTransparencyDef();\n const colorDef = new this.m_module.OdTvColorDef(112, 112, 112); //0x53, 0x72, 0xAE\n\n transparencyDef.setValue(0.9);\n\n const entityPtr = this.m_entity.openObject();\n entityPtr.setColor(colorDef, GeometryTypes.kFaces.value);\n\n colorDef.setColor(112, 112, 112); //0xcd, 0xe2, 0xff\n entityPtr.setColor(colorDef, GeometryTypes.kEdges.value);\n\n entityPtr.setLineWeight(5);\n\n entityPtr.setTransparency(transparencyDef, GeometryTypes.kFaces);\n transparencyDef.setValue(1.0);\n entityPtr.setTransparency(transparencyDef, GeometryTypes.kEdges);\n\n this.planePreview = entityPtr.appendPolygon(this.getPlanePreviewCoordinate());\n const polygonPtr = this.planePreview.openAsPolygon();\n polygonPtr.setFilled(true);\n\n this.deleteAll([transparencyDef, colorDef, entityPtr, polygonPtr, GeometryTypes]);\n this.subject.syncOverlay();\n }\n\n drawPreview(): void {\n const polygonPtr = this.planePreview.openAsPolygon();\n polygonPtr.setPoints(this.getPlanePreviewCoordinate());\n this.deleteAll([polygonPtr]);\n this.subject.syncOverlay();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseCuttingPlaneDragger } from \"./OdBaseCuttingPlaneDragger\";\n\nexport class OdCuttingPlaneXAxisDragger extends OdBaseCuttingPlaneDragger {\n override createNormal(): number[] {\n return [1, 0, 0];\n }\n\n override handleDelta(delta: Point3d): Point3d {\n delta.y = 0.0;\n delta.z = 0.0;\n return delta;\n }\n\n override getPlanePreviewCoordinate(): number[] {\n return [\n this.m_center.x,\n this.m_center.y - this.m_size_y,\n this.m_center.z - this.m_size_z,\n this.m_center.x,\n this.m_center.y + this.m_size_y,\n this.m_center.z - this.m_size_z,\n this.m_center.x,\n this.m_center.y + this.m_size_y,\n this.m_center.z + this.m_size_z,\n this.m_center.x,\n this.m_center.y - this.m_size_y,\n this.m_center.z + this.m_size_z,\n ];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseCuttingPlaneDragger } from \"./OdBaseCuttingPlaneDragger\";\n\nexport class OdCuttingPlaneYAxisDragger extends OdBaseCuttingPlaneDragger {\n override createNormal(): number[] {\n return [0, 1, 0];\n }\n\n override handleDelta(delta: Point3d): Point3d {\n delta.x = 0.0;\n delta.z = 0.0;\n return delta;\n }\n\n override getPlanePreviewCoordinate(): number[] {\n return [\n this.m_center.x - this.m_size_x,\n this.m_center.y,\n this.m_center.z - this.m_size_z,\n this.m_center.x + this.m_size_x,\n this.m_center.y,\n this.m_center.z - this.m_size_z,\n this.m_center.x + this.m_size_x,\n this.m_center.y,\n this.m_center.z + this.m_size_z,\n this.m_center.x - this.m_size_x,\n this.m_center.y,\n this.m_center.z + this.m_size_z,\n ];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseCuttingPlaneDragger } from \"./OdBaseCuttingPlaneDragger\";\n\nexport class OdCuttingPlaneZAxisDragger extends OdBaseCuttingPlaneDragger {\n override createNormal(): number[] {\n return [0, 0, 1];\n }\n\n override handleDelta(delta: Point3d): Point3d {\n delta.x = 0.0;\n delta.y = 0.0;\n return delta;\n }\n\n override getPlanePreviewCoordinate(): number[] {\n return [\n this.m_center.x - this.m_size_x,\n this.m_center.y - this.m_size_y,\n this.m_center.z,\n this.m_center.x + this.m_size_x,\n this.m_center.y - this.m_size_y,\n this.m_center.z,\n this.m_center.x + this.m_size_x,\n this.m_center.y + this.m_size_y,\n this.m_center.z,\n this.m_center.x - this.m_size_x,\n this.m_center.y + this.m_size_y,\n this.m_center.z,\n ];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Point2d, Point3d, Vector3d } from \"../Common/Geometry\";\nimport { Viewer } from \"../../Viewer\";\n\nexport class OrbitAction {\n private _m_module: any;\n private _subject: Viewer;\n private _beginInteractivity: () => void;\n private _endInteractivity: () => void;\n private m_viewCenter: any;\n private m_startPoint: Point2d;\n\n constructor(m_module: any, subject: Viewer, beginInteractivity: () => void, endInteractivity: () => void) {\n this._m_module = m_module;\n this._subject = subject;\n this._beginInteractivity = beginInteractivity;\n this._endInteractivity = endInteractivity;\n }\n\n public beginAction(x: number, y: number) {\n this.m_viewCenter = this.getCenter();\n this.m_startPoint = { x, y };\n\n const view = this.getViewer().activeView;\n\n view.delete();\n this._beginInteractivity();\n }\n\n public action(x: number, y: number) {\n const view = this.getViewer().activeView;\n\n const corners = view.vportRect;\n\n const size = Math.max(Math.abs(corners[2] - corners[0]), Math.abs(corners[3] - corners[1]));\n\n const distX = ((this.m_startPoint.x - x) * Math.PI) / size;\n const distY = ((this.m_startPoint.y - y) * Math.PI) / size;\n\n this.m_startPoint.x = x;\n this.m_startPoint.y = y;\n\n const xOrbit = distY;\n const yOrbit = distX;\n\n const viewParams = {\n position: view.viewPosition,\n target: view.viewTarget,\n upVector: view.upVector,\n viewFieldWidth: view.viewFieldWidth,\n viewFieldHeight: view.viewFieldHeight,\n perspective: view.perspective,\n };\n\n view.delete();\n\n const sideVector = this.getSideVector(viewParams);\n\n if (xOrbit !== 0.0) {\n this.calculateXOrbit(viewParams, -xOrbit, sideVector);\n }\n\n if (yOrbit !== 0.0) {\n this.calculateYOrbit(viewParams, yOrbit, sideVector);\n }\n\n sideVector.delete();\n\n const extView = this.getViewer().getActiveTvExtendedView();\n\n extView.setView(\n viewParams.position,\n viewParams.target,\n viewParams.upVector,\n viewParams.viewFieldWidth,\n viewParams.viewFieldHeight,\n viewParams.perspective\n );\n extView.delete();\n\n this._subject.activeDragger()?.updatePreview();\n }\n\n public endAction() {\n this._endInteractivity();\n }\n\n private getSideVector(viewParams: any): any {\n const pUpV = this.toVector(viewParams.upVector);\n const pTarget = this.toPoint(viewParams.target);\n const pPosition = this.toPoint(viewParams.position);\n\n const direct = pTarget.sub(pPosition);\n const vDirect = direct.asVector();\n\n const vCross = pUpV.crossProduct(vDirect);\n const sideVector = vCross.normalize();\n\n this.deleteAll([direct, pUpV, pTarget, pPosition, vDirect, vCross]);\n\n return sideVector;\n }\n\n private calculateXOrbit(viewParams: any, delta: number, sideVector: Vector3d): void {\n {\n const pPoint = this.toPoint(viewParams.position);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const rotatePoint = pPoint.rotateByBasePoint(delta, sideVector, pCenter);\n viewParams.position = rotatePoint.toArray();\n\n this.deleteAll([pPoint, pCenter, rotatePoint]);\n }\n\n {\n const pTarget = this.toPoint(viewParams.target);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const rotatePoint = pTarget.rotateByBasePoint(delta, sideVector, pCenter);\n viewParams.target = rotatePoint.toArray();\n\n this.deleteAll([pTarget, pCenter, rotatePoint]);\n }\n\n {\n const pPoint = this.toPoint(viewParams.position);\n const pTarget = this.toPoint(viewParams.target);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const pUp = pTarget.sub(pPoint);\n const vUp = pUp.asVector();\n\n const crossProduct = vUp.crossProduct(sideVector);\n const crossProductNormal = crossProduct.normalize();\n\n viewParams.upVector = crossProductNormal.toArray();\n\n this.deleteAll([pPoint, pTarget, pCenter, pUp, vUp, crossProduct, crossProductNormal]);\n }\n }\n\n private calculateYOrbit(viewParams: any, delta: number, sideVector: any): void {\n {\n const pPoint = this.toPoint(viewParams.position);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const zAxis = this.toVector(this._m_module.Vector3d.kZAxis);\n\n const rotatePoint = pPoint.rotateByBasePoint(delta, zAxis, pCenter);\n viewParams.position = rotatePoint.toArray();\n\n this.deleteAll([zAxis, pPoint, pCenter, rotatePoint]);\n }\n\n {\n const pTarget = this.toPoint(viewParams.target);\n const pCenter = this.toPoint(this.m_viewCenter);\n\n const zAxis = this.toVector(this._m_module.Vector3d.kZAxis);\n\n const rotatePoint = pTarget.rotateByBasePoint(delta, zAxis, pCenter);\n viewParams.target = rotatePoint.toArray();\n\n this.deleteAll([zAxis, pTarget, pCenter, rotatePoint]);\n }\n\n {\n const zAxis = this.toVector(this._m_module.Vector3d.kZAxis);\n const pTarget = this.toPoint(viewParams.target);\n const pPoint = this.toPoint(viewParams.position);\n\n const side = sideVector.rotateBy(delta, zAxis);\n\n const pUp = pTarget.sub(pPoint);\n const vUp = pUp.asVector();\n\n const cross = vUp.crossProduct(side);\n const crossNormal = cross.normalize();\n\n viewParams.upVector = crossNormal.toArray();\n\n this.deleteAll([zAxis, pTarget, pPoint, side, pUp, vUp, cross, crossNormal]);\n }\n }\n\n private getCenter(): any {\n const viewer = this.getViewer();\n let center;\n\n const pSet = viewer.getSelected();\n if (!pSet.isNull() && pSet.numItems() !== 0) {\n const itr = pSet.getIterator();\n let ext, entId, extSelected;\n for (; !itr.done(); itr.step()) {\n entId = itr.getEntity();\n ext = entId.getWCSExtents();\n if (extSelected) extSelected.addExt(ext);\n else extSelected = ext;\n }\n center = extSelected.center();\n\n extSelected.delete();\n itr.delete();\n } else {\n center = viewer.getActiveExtents().center();\n }\n\n return center;\n }\n\n private getViewer(): any {\n return this._m_module.getViewer();\n }\n\n private toVector(geVector): Vector3d {\n return this._m_module.Vector3d.createFromArray(geVector);\n }\n\n private toPoint(gePoint: number[]): Point3d {\n return this._m_module.Point3d.createFromArray(gePoint);\n }\n\n private deleteAll(objects): void {\n for (const obj of objects) {\n obj?.delete?.();\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { OrbitAction } from \"./Actions/OrbitAction\";\nimport { Point2d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdOrbitDragger extends OdBaseDragger {\n private _orbitAction: OrbitAction;\n protected m_viewCenter: any;\n protected m_startPoint: Point2d;\n protected startCameraParams: any;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this._orbitAction = new OrbitAction(this.m_module, this.subject, this.beginInteractivity, this.endInteractivity);\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this._orbitAction.beginAction(x, y);\n }\n\n setDefaultViewParams(): void {\n const extView = this.getViewer().getActiveTvExtendedView();\n extView.setView(\n this.startCameraParams.position,\n this.startCameraParams.target,\n this.startCameraParams.upVector,\n this.startCameraParams.viewFieldWidth,\n this.startCameraParams.viewFieldHeight,\n this.startCameraParams.perspective\n );\n extView.delete();\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n this._orbitAction.action(x, y);\n }\n }\n\n override end(): void {\n this.press = false;\n this._orbitAction.endAction();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Point2d, Point3d } from \"../Common/Geometry\";\nimport { ViewParams } from \"../Common/OdaGeAction\";\nimport { Viewer } from \"../../Viewer\";\n\nexport class PanAction {\n private _m_module: any;\n private _subject: Viewer;\n private _m_start: Point3d;\n private _deltaScreenPosition: Point2d;\n private _beginInteractivity: () => void;\n private _endInteractivity: () => void;\n private _getViewParams: () => ViewParams;\n private _setViewParams: (params: ViewParams) => void;\n\n constructor(\n m_module: any,\n subject: Viewer,\n beginInteractivity: () => void,\n endInteractivity: () => void,\n getViewParams: () => ViewParams,\n setViewParams: (params: ViewParams) => void\n ) {\n this._m_module = m_module;\n this._subject = subject;\n this._beginInteractivity = beginInteractivity;\n this._endInteractivity = endInteractivity;\n this._getViewParams = getViewParams;\n this._setViewParams = setViewParams;\n }\n\n public beginAction(x: number, y: number) {\n this._m_start = this.screenToWorld(x, y);\n this._deltaScreenPosition = { x, y };\n this._beginInteractivity();\n }\n\n public action(x: number, y: number) {\n const { Vector3d } = this._m_module;\n const params = this._getViewParams();\n const pt = this.screenToWorld(x, y);\n\n const ptSub = this._m_start.sub(pt);\n const delta = ptSub.asVector();\n\n const target = Vector3d.createFromArray(params.target);\n const targetWithDelta = target.add(delta);\n params.target = targetWithDelta.toArray();\n\n const position = Vector3d.createFromArray(params.position);\n const positionWithDelta = position.add(delta);\n params.position = positionWithDelta.toArray();\n\n this._setViewParams(params);\n target.delete();\n\n targetWithDelta.delete();\n position.delete();\n positionWithDelta.delete();\n\n this._subject.activeDragger()?.updatePreview();\n this._subject.emitEvent({\n type: \"pan\",\n x,\n y,\n dX: x - this._deltaScreenPosition.x,\n dY: y - this._deltaScreenPosition.y,\n });\n\n this._deltaScreenPosition = { x, y };\n }\n\n public endAction() {\n this._endInteractivity();\n }\n\n private screenToWorld(x: number, y: number): Point3d {\n return this._m_module.Point3d.createFromArray(this._m_module.getViewer().screenToWorld(x, y));\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { PanAction } from \"./Actions/PanAction\";\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdPanDragger extends OdBaseDragger {\n private _panAction: PanAction;\n protected m_start: Point3d;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this._panAction = new PanAction(\n this.m_module,\n this.subject,\n this.beginInteractivity,\n this.endInteractivity,\n this.getViewParams,\n this.setViewParams\n );\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this._panAction.beginAction(x, y);\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n this._panAction.action(x, y);\n }\n }\n\n override end(x: number, y: number): void {\n this.press = false;\n this._panAction.endAction();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Viewer } from \"../../Viewer\";\n\nexport class ZoomAction {\n private _m_module: any;\n private _subject: Viewer;\n\n constructor(m_module: any, subject: Viewer) {\n this._m_module = m_module;\n this._subject = subject;\n }\n\n public action(x: number, y: number, zoomFactor: number) {\n const viewer = this._m_module.getViewer();\n viewer.zoomAt(zoomFactor, x, y);\n\n this._subject.deviceAutoRegeneration();\n this._subject.activeDragger()?.updatePreview();\n this._subject.emitEvent({\n type: \"zoomat\",\n data: zoomFactor,\n });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { ZoomAction } from \"./Actions/ZoomAction\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OdZoomDragger extends OdBaseDragger {\n private _zoomAction: ZoomAction;\n protected pressX: number;\n protected pressY: number;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this._zoomAction = new ZoomAction(this.m_module, this.subject);\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this.pressX = x;\n this.pressY = y;\n this.beginInteractivity();\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press && Math.abs(dltY) <= 10e-6) {\n const ZOOM_SPEED = 0.025;\n const zoomFactor = dltY > 0 ? 1 + ZOOM_SPEED : 1 - ZOOM_SPEED;\n this._zoomAction.action(this.pressX, this.pressY, zoomFactor);\n }\n }\n\n override end(): void {\n this.press = false;\n this.endInteractivity();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Viewer } from \"../Viewer\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\nimport { ZoomAction } from \"./Actions/ZoomAction\";\n\nconst INTERACTIVITY_TIME_OUT = 100;\n\nexport class OdZoomWheelDragger extends OdBaseDragger {\n private _zoomAction: ZoomAction;\n\n private _endInteractivityTimeOutId;\n\n private _isEnableInteractivityMode: boolean;\n\n constructor(subject: Viewer) {\n super(subject);\n\n // ignore all events except \"wheel\" so as not to interfere with other handlers\n this.canvasEvents = [\"wheel\"];\n this._zoomAction = new ZoomAction(this.m_module, this.subject);\n this._endInteractivityTimeOutId = undefined;\n this._isEnableInteractivityMode = false;\n }\n\n wheel(event) {\n if (!this.subject.options.enableZoomWheel) {\n return;\n }\n\n event = event || window.event;\n event.preventDefault();\n\n const zoomReverse = this.subject.options.reverseZoomWheel ? -1 : 1;\n const zoomSpeed = 0.075 * zoomReverse;\n\n const viewer = this.getViewer();\n if (viewer) {\n const zoomFactor = event.deltaY > 0 ? 1 + zoomSpeed : 1 - zoomSpeed;\n\n this._zoomAction.action(\n event.offsetX * window.devicePixelRatio,\n event.offsetY * window.devicePixelRatio,\n zoomFactor\n );\n\n if (!this._isEnableInteractivityMode) {\n this._isEnableInteractivityMode = true;\n this.beginInteractivity();\n }\n\n if (this._endInteractivityTimeOutId) {\n clearTimeout(this._endInteractivityTimeOutId);\n }\n\n if (!this._isEnableInteractivityMode) {\n this._isEnableInteractivityMode = true;\n this.beginInteractivity();\n }\n\n if (this._endInteractivityTimeOutId) {\n clearTimeout(this._endInteractivityTimeOutId);\n }\n\n this.subject.update(true);\n\n this._endInteractivityTimeOutId = setTimeout(() => {\n this._endInteractivityTimeOutId = undefined;\n this.endInteractivity();\n this._isEnableInteractivityMode = false;\n }, INTERACTIVITY_TIME_OUT);\n }\n }\n\n override dispose(): void {\n if (this._endInteractivityTimeOutId) {\n clearTimeout(this._endInteractivityTimeOutId);\n this.endInteractivity();\n this._isEnableInteractivityMode = false;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Point3d } from \"../Common/Geometry\";\n\nexport class OdSelectionFrame {\n protected m_start: number[];\n protected m_end: number[];\n protected m_model: any;\n protected m_module: any;\n protected m_entity: any;\n protected m_frame: any;\n\n constructor() {\n this.m_start = [0, 0, 0]; // 0\n this.m_end = [0, 0, 0]; // 2\n\n this.m_model = null;\n }\n\n createPoint3d(): Point3d {\n return new this.m_module.Point3d();\n }\n\n init(instance: any, model: any): void {\n this.m_module = instance;\n this.m_model = model;\n }\n\n getViewer() {\n return this.m_module.getViewer();\n }\n\n setValue(value: number[]): void {\n this.m_end = value;\n this.draw();\n }\n\n setStartPoint(point: number[]): void {\n this.m_start = point;\n this.m_end = point;\n this.draw();\n }\n\n toDoubleArray(points: Point3d[]): number[] {\n const p: number[] = [];\n for (let i = 0; i < points.length; i++) {\n p.push(points[i].x);\n p.push(points[i].y);\n p.push(points[i].z);\n }\n return p;\n }\n\n draw(): void {\n const view = this.getViewer().activeView;\n const viewM = view.viewingMatrix;\n\n const points = [];\n points.push(this.m_start);\n points.push(this.createPoint3d());\n points.push(this.m_end);\n points.push(this.createPoint3d());\n\n const p0 = this.createPoint3d();\n p0.set(this.m_start[0], this.m_start[1], this.m_start[2]);\n\n const p2 = this.createPoint3d();\n p2.set(this.m_end[0], this.m_end[1], this.m_end[2]);\n\n p0.transformBy(viewM);\n p2.transformBy(viewM);\n\n points[1].x = p0.x;\n points[3].x = p2.x;\n points[1].y = p2.y;\n points[3].y = p0.y;\n points[1].z = points[3].z = p2.z;\n\n const eyeM = view.eyeToWorldMatrix;\n points[1].transformBy(eyeM);\n points[3].transformBy(eyeM);\n\n if (!this.m_entity) {\n this.m_entity = this.m_model.appendEntity(\"\");\n const entityPtr = this.m_entity.openObject();\n\n entityPtr.setColor(112, 112, 112);\n entityPtr.setLineWeight(2);\n\n this.m_frame = entityPtr.appendPolygon(this.toDoubleArray(points));\n entityPtr.delete();\n } else {\n this.m_frame.openAsPolygon().setPoints(this.toDoubleArray(points));\n }\n }\n\n clear(): void {\n if (this.m_entity) {\n this.m_model.removeEntity(this.m_entity);\n this.m_entity = null;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\n\nimport { Viewer } from \"../../Viewer\";\nimport { OdBaseDragger } from \"../Common/OdBaseDragger\";\nimport { OdSelectionFrame } from \"./OdSelectionFrame\";\n\nexport class OdZoomWindowDragger extends OdBaseDragger {\n protected m_frame: any;\n protected m_minX: number;\n protected m_minY: number;\n protected m_maxX: number;\n protected m_maxY: number;\n\n constructor(subject: Viewer) {\n super(subject);\n this.autoSelect = true;\n this.press = false;\n this.needInputText = false;\n\n this.m_frame = new OdSelectionFrame();\n this.m_frame.init(this.m_module, this.getModel());\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n this.m_minX = x;\n this.m_minY = y;\n\n const startPoint = this.screenToWorld(x, y);\n this.m_frame.setStartPoint(startPoint);\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n this.m_maxX = x;\n this.m_maxY = y;\n\n const point = this.screenToWorld(x, y);\n this.m_frame.setValue(point);\n }\n }\n\n override end(x: number, y: number): void {\n this.press = false;\n this.m_maxX = x;\n this.m_maxY = y;\n\n if (this.m_minX !== this.m_maxX && this.m_minY !== this.m_maxY) {\n this.m_frame.clear();\n this.getViewer().zoomWindow(this.m_minX, this.m_minY, this.m_maxX, this.m_maxY);\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n/* eslint-disable no-unused-vars */\nimport { Viewer } from \"../Viewer\";\nimport { Point2d } from \"./Common/Geometry\";\nimport { ViewParams } from \"./Common/OdaGeAction\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport class OrbitAroundBuildingDragger extends OdBaseDragger {\n protected maxPolarAngle: number;\n protected minPolarAngle: number;\n protected m_viewCenter: any;\n protected m_startPoint: Point2d;\n protected startCameraParams: ViewParams;\n protected m_delta: number;\n\n constructor(viewer: Viewer) {\n super(viewer);\n this.autoSelect = true;\n this.press = false;\n this.maxPolarAngle = Math.PI / 2;\n this.minPolarAngle = 0; // radians\n }\n\n override start(x: number, y: number): void {\n this.press = true;\n\n this.m_viewCenter = this.getCenter();\n this.m_startPoint = { x, y };\n\n const view = this.getViewer().activeView;\n\n this.startCameraParams = this.getViewParams();\n\n const corners = view.vportRect;\n\n this.m_delta = Math.max(corners[1] - corners[0], corners[2] - corners[3]);\n\n this.beginInteractivity();\n }\n\n setDefaultViewParams(): void {\n this.setViewParams(this.startCameraParams);\n }\n\n override drag(x: number, y: number, dltX: number, dltY: number): void {\n if (this.press) {\n let dX = x - this.m_startPoint.x;\n let dY = y - this.m_startPoint.y;\n\n dX *= Math.PI / this.m_delta;\n dY *= Math.PI / this.m_delta;\n\n this.setDefaultViewParams();\n\n const { Vector3d, Matrix3d } = this.m_module;\n\n const target = Vector3d.createFromArray(this.startCameraParams.target);\n const offset = Vector3d.createFromArray(this.startCameraParams.position).sub(target);\n const dir = offset.normalize();\n\n const zMatrix = new Matrix3d();\n zMatrix.setToIdentity();\n const xMatrix = new Matrix3d();\n xMatrix.setToIdentity();\n\n // ---- restore start rotation ----\n\n const yAxis = Vector3d.createFromArray([dir.x, dir.y, dir.z]);\n const zAxis = Vector3d.createFromArray(this.startCameraParams.upVector);\n const xAxis = yAxis.crossProduct(zAxis);\n\n // ----------- zAxis rotation restore -----------\n let xyDir = Vector3d.createFromArray([yAxis.x, yAxis.y, 0]);\n\n if (xyDir.length() <= 0.00001) {\n xyDir.set(-xAxis.y, xAxis.x, 0);\n } else {\n xyDir = xyDir.normalize();\n }\n const xyAngle =\n Math.sign(xyDir.dotProduct(Vector3d.createFromArray([-1, 0, 0]))) *\n xyDir.angleTo(Vector3d.createFromArray([0, 1, 0]));\n dX -= xyAngle;\n // ----------- zAxis rotation restore -----------\n\n // ----------- xAxis rotation restore -----------\n let yzDir = Vector3d.createFromArray([dir.x, dir.y, 0]);\n let yzAngle = 0;\n if (yzDir.length() <= 0.00001) {\n yzAngle = (-dir.z * Math.PI) / 2;\n } else {\n yzDir = yzDir.normalize();\n yzAngle = -yzDir.angleTo(dir);\n }\n dY -= yzAngle;\n // ----------- xAxis rotation restore -----------\n\n // ---- restore start rotation ----\n\n zMatrix.setToRotation(-dX, [0, 0, 1], [0, 0, 0]);\n\n const xAngle = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, dY));\n xMatrix.setToRotation(xAngle, [1, 0, 0], [0, 0, 0]);\n\n const endMatrix = zMatrix.postMultBy(xMatrix);\n\n let pos = Vector3d.createFromArray([0, 1, 0]).transformBy(endMatrix);\n const up = Vector3d.createFromArray([0, 0, 1]).transformBy(endMatrix);\n\n pos.setLength(offset.length());\n pos = target.add(pos);\n\n const current = this.getViewParams();\n\n current.position = pos.toArray();\n current.upVector = up.toArray();\n\n this.setViewParams(current);\n }\n }\n\n override end(): void {\n this.press = false;\n this.endInteractivity();\n }\n\n getCenter(): any {\n const viewer = this.getViewer();\n\n let ext = viewer.getActiveExtents();\n\n const pSet = viewer.getSelected();\n if (!pSet.isNull() && pSet.numItems() !== 0) {\n const itr = pSet.getIterator();\n const entId = itr.getEntity();\n\n if (entId.getType() === 1) {\n const obj = entId.openObject();\n\n ext.delete();\n ext = obj.getExtents();\n\n obj.delete();\n } else if (entId.getType() === 2) {\n const obj = entId.openObjectAsInsert();\n const extTuple = obj.getExtents();\n\n ext.delete();\n ext = extTuple.ext;\n\n extTuple.delete();\n obj.delete();\n }\n\n itr.delete();\n }\n\n const center = ext.center();\n\n ext.delete();\n return center;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Viewer } from \"../../Viewer\";\nimport { OrbitAction } from \"../Actions/OrbitAction\";\nimport { PanAction } from \"../Actions/PanAction\";\nimport { ZoomAction } from \"../Actions/ZoomAction\";\nimport { Point2d } from \"./Geometry\";\nimport { OdBaseDragger } from \"./OdBaseDragger\";\n\nexport enum GestureAction {\n None,\n Orbit,\n Pan,\n Zoom,\n}\n\nexport class GestureManager extends OdBaseDragger {\n private _previousEvents = new Map<number, PointerEvent>();\n private _currentEvents = new Map<number, PointerEvent>();\n private _lastGestureAction = GestureAction.None;\n private _orbitAction: OrbitAction;\n private _panAction: PanAction;\n private _zoomAction: ZoomAction;\n\n private _initialDistance: number;\n private readonly _maxInitialDistanceDifference = 30 * window.devicePixelRatio;\n\n private _isSingleTouchEnabled = false;\n\n public get isSingleTouchEnabled(): boolean {\n return this._isSingleTouchEnabled;\n }\n\n public set isSingleTouchEnabled(value: boolean) {\n this._isSingleTouchEnabled = value;\n }\n\n public constructor(subject: Viewer) {\n super(subject);\n\n this._orbitAction = new OrbitAction(this.m_module, this.subject, this.beginInteractivity, this.endInteractivity);\n this._panAction = new PanAction(\n this.m_module,\n this.subject,\n this.beginInteractivity,\n this.endInteractivity,\n this.getViewParams,\n this.setViewParams\n );\n this._zoomAction = new ZoomAction(this.m_module, this.subject);\n }\n\n private getMiddlePoint(events: Map<number, PointerEvent>): Point2d {\n if (events.size !== 2) {\n return undefined;\n }\n\n const keys = this.getKeys(events);\n const point0 = this.relativeCoords(events.get(keys[0]));\n const point1 = this.relativeCoords(events.get(keys[1]));\n\n return {\n x: Math.floor((point0.x + point1.x) / 2),\n y: Math.floor((point0.y + point1.y) / 2),\n };\n }\n\n private getFirstPoint(events: Map<number, PointerEvent>): Point2d {\n if (events.size < 1) {\n return undefined;\n }\n\n const keys = this.getKeys(events);\n return this.relativeCoords(events.get(keys[0]));\n }\n\n private getDistance(events: Map<number, PointerEvent>): number {\n if (events.size !== 2) {\n return -1;\n }\n\n const keys = this.getKeys(events);\n const point0 = this.relativeCoords(events.get(keys[0]));\n const point1 = this.relativeCoords(events.get(keys[1]));\n\n return Math.hypot(point0.x - point1.x, point0.y - point1.y);\n }\n\n private updateEvent(event: PointerEvent) {\n const eventNotInCurrentEvents = !this._currentEvents.get(event.pointerId);\n if (eventNotInCurrentEvents && this._currentEvents.size === 2) {\n return;\n }\n\n const previousEvent = this._currentEvents.get(event.pointerId);\n if (previousEvent) {\n this._previousEvents.set(previousEvent.pointerId, previousEvent);\n }\n\n this._currentEvents.set(event.pointerId, event);\n\n if (eventNotInCurrentEvents) {\n this._initialDistance = this.getDistance(this._currentEvents);\n }\n }\n\n private removeEvent(event: PointerEvent) {\n this._currentEvents.delete(event.pointerId);\n this._previousEvents.delete(event.pointerId);\n\n if (this._currentEvents.size < 2) {\n this._initialDistance = -1;\n }\n }\n\n private getKeys(map: Map<number, PointerEvent>): number[] {\n return Array.from(map.keys());\n }\n\n private analyzeGesture() {\n if (this._currentEvents.size === 2) {\n const currentDistance = this.getDistance(this._currentEvents);\n const previousDistance = this.getDistance(this._previousEvents);\n\n const currentDistanceEqualsInitialDistance =\n Math.abs(this._initialDistance - currentDistance) <= this._maxInitialDistanceDifference;\n if (currentDistanceEqualsInitialDistance) {\n this.executePanAction(this.getMiddlePoint(this._currentEvents));\n } else {\n if (previousDistance !== -1 && currentDistance !== previousDistance) {\n this.executeZoomAction(currentDistance, previousDistance);\n }\n }\n } else if (this._currentEvents.size === 1 && this.isSingleTouchEnabled) {\n this.executeOrbitAction(this.getFirstPoint(this._currentEvents));\n }\n }\n\n private executeZoomAction(currentDistance: number, previousDistance: number) {\n if (this._lastGestureAction !== GestureAction.Zoom) {\n this.executeEndAction(this._lastGestureAction);\n this._lastGestureAction = GestureAction.Zoom;\n OdBaseDragger.isGestureActive = true;\n }\n\n const zoomSpeed = (currentDistance - previousDistance) / 700;\n const zoomFactor = 1 + zoomSpeed;\n const middlePoint = this.getMiddlePoint(this._currentEvents);\n this._zoomAction.action(middlePoint.x, middlePoint.y, zoomFactor);\n this.subject.update();\n }\n\n private executePanAction(currentPoint: Point2d) {\n if (this._lastGestureAction !== GestureAction.Pan) {\n this.executeEndAction(this._lastGestureAction);\n this._lastGestureAction = GestureAction.Pan;\n OdBaseDragger.isGestureActive = true;\n\n this._panAction.beginAction(currentPoint.x, currentPoint.y);\n }\n\n this._panAction.action(currentPoint.x, currentPoint.y);\n this.subject.update();\n }\n\n private executeOrbitAction(currentPoint: Point2d) {\n if (this._lastGestureAction !== GestureAction.Orbit) {\n this.executeEndAction(this._lastGestureAction);\n this._lastGestureAction = GestureAction.Orbit;\n OdBaseDragger.isGestureActive = true;\n\n this._orbitAction.beginAction(currentPoint.x, currentPoint.y);\n }\n\n this._orbitAction.action(currentPoint.x, currentPoint.y);\n this.subject.update();\n }\n\n private executeEndAction(gestureAction: GestureAction) {\n if (gestureAction === GestureAction.Orbit) this._orbitAction.endAction();\n if (gestureAction === GestureAction.Pan) this._panAction.endAction();\n OdBaseDragger.isGestureActive = false;\n }\n\n private needIgnoreEvent(event: PointerEvent): boolean {\n return (\n !this.subject.options.enableZoomWheel || !this.subject.options.enableGestures || !this.eventIsTouchEvent(event)\n );\n }\n\n private eventIsTouchEvent(event: PointerEvent): boolean {\n return event.pointerType === \"touch\" || event.pointerType === \"\";\n }\n\n override pointerdown(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.updateEvent(event);\n }\n\n override pointermove(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.updateEvent(event);\n this.analyzeGesture();\n }\n\n override pointerup(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.removeEvent(event);\n\n if (this._currentEvents.size < 2) {\n this.executeEndAction(this._lastGestureAction);\n OdBaseDragger.isGestureActive = false;\n }\n\n this._lastGestureAction = GestureAction.None;\n }\n\n override pointercancel(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.pointerup(event);\n }\n\n pointerleave(event: PointerEvent) {\n if (this.needIgnoreEvent(event)) {\n return;\n }\n\n this.pointerup(event);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nexport function loadScript(url: string): Promise<HTMLScriptElement> {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = url;\n script.async = true;\n script.onload = () => resolve(script);\n script.onerror = () => {\n script.remove();\n reject(new Error(`GET ${url} failed to load script`));\n };\n document.body.appendChild(script);\n });\n}\n\nfunction loadVisuazlizeJsScript(url: string): Promise<HTMLScriptElement> {\n if (window[\"getVisualizeLibInst\"]) {\n const script = window[\"getVisualizeLibInst\"].script;\n if (script) {\n if (script.src === url) return Promise.resolve(script);\n script.remove();\n }\n delete window[\"getVisualizeLibInst\"];\n }\n return loadScript(url);\n}\n\nexport const loadVisualizeJs = (url: string, onprogress): Promise<any> => {\n return loadVisuazlizeJsScript(url).then((script) => {\n return new Promise((resolve, reject) => {\n const instance = window[\"getVisualizeLibInst\"]({\n urlMemFile: url + \".wasm\",\n TOTAL_MEMORY: 134217728,\n onprogress,\n });\n instance[\"loadWasmError\"] = reject;\n instance.postRun.push(() => {\n window[\"getVisualizeLibInst\"].script = script;\n resolve(instance);\n });\n });\n });\n};\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model } from \"@inweb/client\";\nimport { IOptions } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\n\nexport class BaseLoader {\n protected viewer: Viewer;\n protected model: Model;\n protected options: IOptions;\n\n constructor(viewer: Viewer, model: Model, options: IOptions) {\n this.viewer = viewer;\n this.model = model;\n this.options = options;\n }\n\n async load(): Promise<void> {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\n\nexport class TCSLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n\n const filesToDownload = [this.model.database, ...this.model.geometry];\n\n this.viewer._abortController = abortController;\n\n console.time(\"File load time\");\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n for (let i = 0; i < filesToDownload.length; i++) {\n const dataId = filesToDownload[i];\n\n const chunkLoadHandler = (progress: number) => {\n const data = (i + progress) / filesToDownload.length;\n this.viewer.emitEvent({ type: \"geometryprogress\", data, model: this.model });\n };\n\n const arrayBuffer = await this.model.downloadResource(dataId, chunkLoadHandler, abortController.signal);\n\n if (abortController.signal.aborted) {\n await Promise.reject(new Error(`Open model aborted ${this.model.name}`));\n }\n\n visViewer.parseStream(new Uint8Array(arrayBuffer));\n this.viewer.update();\n\n const data = new Uint8Array(arrayBuffer);\n\n if (i === 0) {\n this.viewer.update(true);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, model: this.model });\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data, model: this.model });\n }\n }\n\n console.timeEnd(\"File load time\");\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\n\nexport class VsfXLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n\n this.viewer._abortController = abortController;\n\n const chunkLoadHandler = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, model: this.model });\n };\n\n console.time(\"File load time\");\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n const arrayBuffer = await this.model.downloadResource(\n this.model.database,\n chunkLoadHandler,\n abortController.signal\n );\n\n if (abortController.signal.aborted) {\n await Promise.reject(new Error(`Open model aborted ${this.model.name}`));\n }\n\n const data = new Uint8Array(arrayBuffer);\n\n if (this.viewer.visualizeJs) {\n visViewer.parseVsfx(data);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n }\n\n console.timeEnd(\"File load time\");\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, model: this.model });\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","import { Viewer } from \"../Viewer\";\n\nconst DELAY_TIME_MULTIPLEXER = 2.0;\nconst START_UPDATE_TIME = 1000;\n\nexport enum UpdateType {\n kDelay,\n kNormal,\n kForce,\n}\n\nexport class UpdaterController {\n private lastUpdate: number;\n private viewer: Viewer;\n public delayUpdateTime: number;\n\n constructor() {\n this.lastUpdate = 0;\n this.delayUpdateTime = START_UPDATE_TIME;\n }\n\n initialize(viewer: Viewer) {\n this.viewer = viewer;\n this.lastUpdate = performance.now();\n }\n\n update(type: UpdateType) {\n const isNeedUpdate = type !== UpdateType.kDelay || performance.now() - this.lastUpdate >= this.delayUpdateTime;\n const isForce = type === UpdateType.kForce;\n\n if (isNeedUpdate) {\n this.viewer.update(isForce);\n this.lastUpdate = performance.now();\n this.delayUpdateTime *= DELAY_TIME_MULTIPLEXER;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\nimport { UpdaterController, UpdateType } from \"./UpdaterController\";\n\nexport class VsfXStreamingLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n\n const updaterController = new UpdaterController();\n updaterController.initialize(this.viewer);\n\n this.viewer._abortController = abortController;\n\n let isFireDatabaseChunk = false;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array) => {\n if (!this.viewer.visualizeJs) return;\n\n const status = visViewer.parseVsfx(chunk);\n updaterController.update(UpdateType.kDelay);\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, model: this.model });\n\n let state = false;\n if (\n status === visLib.DatabaseStreamStatus.ReadyServiceData ||\n (status === visLib.DatabaseStreamStatus.Complete && !isFireDatabaseChunk)\n ) {\n isFireDatabaseChunk = true;\n state = true;\n }\n\n if (state) {\n updaterController.update(UpdateType.kForce);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, model: this.model });\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, model: this.model });\n }\n };\n\n console.time(\"File load time\");\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal);\n console.timeEnd(\"File load time\");\n\n updaterController.update(UpdateType.kNormal);\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { BaseLoader } from \"./BaseLoader\";\nimport { UpdaterController, UpdateType } from \"./UpdaterController\";\n\nconst PENDING_REQUESTS_SIZE = 50;\nconst PENDING_REQUESTS_TIMEOUT = 250;\n\nexport class VsfXPartialLoader extends BaseLoader {\n override async load(): Promise<void> {\n if (!this.viewer.visualizeJs) return;\n\n const visLib = this.viewer.visLib();\n const visViewer = visLib.getViewer();\n const abortController = new AbortController();\n const abortControllerForRequestMap = new Map();\n let servicePartAborted = false;\n\n const pendingRequestsMap = new Map();\n let pendingRequestsTimerId = 0;\n const pendingRequestsAbortHandler = () => clearTimeout(pendingRequestsTimerId);\n\n const pendingRequestsAbortController = new AbortController();\n abortControllerForRequestMap.set(0, pendingRequestsAbortController);\n\n const updaterController = new UpdaterController();\n updaterController.initialize(this.viewer);\n\n this.viewer._abortController = abortController;\n this.viewer._abortControllerForRequestMap = abortControllerForRequestMap;\n\n visViewer.memoryLimit = this.options.memoryLimit;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array, requestId = 0) => {\n if (!this.viewer.visualizeJs) return;\n\n const state = visViewer.parseVsfxInPartialMode(requestId, chunk);\n updaterController.update(UpdateType.kDelay);\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, model: this.model });\n\n if (state) {\n updaterController.update(UpdateType.kForce);\n\n this.viewer.syncOpenCloudVisualStyle(false);\n this.viewer.syncOptions();\n this.viewer.resize();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, model: this.model });\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, model: this.model });\n }\n };\n\n const downloadResourceRange = async (dataId: string, requestId: number, ranges: any) => {\n const abortCtrl = new AbortController();\n abortControllerForRequestMap.set(requestId, abortCtrl);\n try {\n await this.model.downloadResourceRange(dataId, requestId, ranges, chunkLoadHandler, abortCtrl.signal);\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n } finally {\n ranges.forEach((range) => visViewer.onRequestResponseComplete(range.requestId));\n abortControllerForRequestMap.delete(requestId);\n updaterController.update(UpdateType.kNormal);\n }\n };\n\n const requestRecordsToRanges = (requestId: number, records: any): any => {\n const ranges = [];\n for (let i = 0; i < records.size(); i++) {\n const record = records.get(i);\n ranges.push({\n requestId,\n begin: Number(record.begin),\n end: Number(record.end),\n });\n record.delete();\n }\n return ranges;\n };\n\n const objectHandler = {\n onServicePartReceived: (bHasIndex: boolean) => {\n if (bHasIndex) {\n servicePartAborted = true;\n abortController.abort();\n }\n },\n\n onRequest: (requestId: number, records: any) => {\n const ranges = requestRecordsToRanges(requestId, records);\n downloadResourceRange(this.model.database, requestId, ranges);\n },\n\n onFullLoaded: () => {\n updaterController.update(UpdateType.kNormal);\n },\n\n onRequestResponseParsed: (requestId: number) => {\n abortControllerForRequestMap.delete(requestId);\n updaterController.update(UpdateType.kNormal);\n },\n\n onRequestAborted: (requestId: number) => {\n const abortCtrl = abortControllerForRequestMap.get(requestId);\n if (abortCtrl) abortCtrl.abort();\n },\n\n onRequestResourceFile: (requestId: number, _: string, records: any) => {\n const dataId = `${this.model.fileId}${this.model.file.type}`;\n const ranges = requestRecordsToRanges(requestId, records);\n\n let pendingRanges = [];\n let requestNumber = 0;\n const pendingRequest = pendingRequestsMap.get(dataId);\n if (pendingRequest) {\n pendingRanges = pendingRequest.ranges;\n requestNumber = pendingRequest.number;\n }\n\n // first several records of each file are processed without grouping (they usually require to be processed sequentially)\n if (requestNumber <= 5) {\n pendingRequestsMap.set(dataId, { ranges: [], number: requestNumber + 1 });\n downloadResourceRange(dataId, requestId, ranges);\n return;\n }\n\n pendingRanges = pendingRanges.concat(ranges);\n\n // group requests to each file to launch a combined server request\n if (pendingRanges.length >= PENDING_REQUESTS_SIZE) {\n if (pendingRequestsTimerId) {\n window.clearTimeout(pendingRequestsTimerId);\n pendingRequestsTimerId = 0;\n }\n\n pendingRequestsMap.set(dataId, { ranges: [], number: requestNumber + 1 });\n downloadResourceRange(dataId, requestId, pendingRanges);\n return;\n }\n\n pendingRequestsMap.set(dataId, { ranges: pendingRanges, number: requestNumber + 1 });\n\n // set timeout to wait for the new requests, after that process the remaining requests\n if (pendingRequestsTimerId === 0) {\n pendingRequestsTimerId = window.setTimeout(() => {\n pendingRequestsAbortController.signal.removeEventListener(\"abort\", pendingRequestsAbortHandler);\n pendingRequestsTimerId = 0;\n\n pendingRequestsMap.forEach((request, dataId) => {\n if (request.ranges.length > 0) {\n pendingRequestsMap.set(dataId, { ranges: [], number: request.number + 1 });\n downloadResourceRange(dataId, requestId, request.ranges);\n }\n });\n }, PENDING_REQUESTS_TIMEOUT);\n\n pendingRequestsAbortController.signal.addEventListener(\"abort\", pendingRequestsAbortHandler, { once: true });\n }\n },\n };\n\n visViewer.attachPartialResolver(objectHandler);\n\n try {\n this.viewer.emitEvent({ type: \"geometrystart\", model: this.model });\n\n await this.model.downloadResource(this.model.database, chunkLoadHandler, abortController.signal).catch((e) => {\n if (!servicePartAborted) throw e;\n });\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (e: any) {\n if (pendingRequestsTimerId) {\n window.clearTimeout(pendingRequestsTimerId);\n pendingRequestsTimerId = 0;\n }\n\n this.viewer.emitEvent({ type: \"geometryerror\", data: e, model: this.model });\n throw e;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Model } from \"@inweb/client\";\nimport { IOptions } from \"@inweb/viewer-core\";\n\nimport { TCSLoader } from \"./TCSLoader\";\nimport { VsfXLoader } from \"./VsfXLoader\";\nimport { VsfXStreamingLoader } from \"./VsfXStreamingLoader\";\nimport { VsfXPartialLoader } from \"./VsfXPartialLoader\";\nimport { Viewer } from \"../Viewer\";\n\nexport class LoaderFactory {\n create(viewer: Viewer, model: Model, options: IOptions) {\n const geometryType = model.database.split(\".\").pop();\n\n if (model.geometry.length === 0 && geometryType === \"vsfx\") {\n if (!options.enableStreamingMode) return new VsfXLoader(viewer, model, options);\n else if (options.enablePartialMode) return new VsfXPartialLoader(viewer, model, options);\n else return new VsfXStreamingLoader(viewer, model, options);\n }\n\n if (geometryType === \"data\") {\n return new TCSLoader(viewer, model, options);\n }\n\n throw new Error(`Unknown geometry type: ${geometryType}`);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport const MARKUP_ENTITY_LINE = \"$MarkupTempEntity_Line\";\n\nexport class OdaLineDragger extends OdBaseDragger {\n protected entity: any;\n protected points: any[];\n protected drawPoints: any[];\n\n constructor(subject: Viewer) {\n super(subject);\n this.press = false;\n }\n\n override dispose(): void {\n super.dispose();\n this.end();\n this.points = null;\n this.drawPoints = null;\n }\n\n override start(x: number, y: number): void {\n const point = this.getViewer().screenToWorld(x, y);\n this.drawPoints = [point[0], point[1], point[2]];\n }\n\n override drag(x: number, y: number): void {\n if (this.isDragging) {\n const point = this.getViewer().screenToWorld(x, y);\n this.drawPoints.push(point[0], point[1], point[2]);\n this._updateFrame();\n }\n }\n\n override end(): void {\n if (this.entity) {\n this.entity.delete();\n this.drawPoints = null;\n this.entity = null;\n }\n }\n\n private _updateFrame(): void {\n if (this.entity) {\n const model = this.getViewer().getMarkupModel();\n model.removeEntity(this.entity);\n model.delete();\n this.entity.delete();\n }\n\n this.entity = this.getActiveMarkupEntity(MARKUP_ENTITY_LINE);\n\n const entityPtr = this.entity.openObject();\n entityPtr.appendPolyline(this.drawPoints).delete();\n entityPtr.delete();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\nimport { Viewer } from \"../Viewer\";\nimport { Point3d } from \"./Common/Geometry\";\nimport { OdBaseDragger } from \"./Common/OdBaseDragger\";\n\nexport const MARKUP_ENTITY_TEXT = \"$MarkupTempEntity_Text\";\n\nexport class OdaTextDragger extends OdBaseDragger {\n protected textRef: HTMLTextAreaElement;\n protected m_center: Point3d;\n protected entity: any;\n protected readonly TEXT_HEIGHT_ALIGN = 24;\n\n constructor(subject: Viewer) {\n super(subject);\n this.press = false;\n }\n\n override dispose(): void {\n super.dispose();\n this.textRef?.remove();\n this.textRef = null;\n }\n\n private _finishInput(): void {\n if (this.textRef && this.textRef.value.trimLeft()) {\n this._updateFrame();\n }\n this.textRef?.remove();\n this.textRef = null;\n }\n\n override start(x: number, y: number, absoluteX: number, absoluteY: number) {\n if (!this.textRef) {\n this.textRef = document.createElement(\"textarea\");\n this.textRef.style.zIndex = \"9999\";\n this.textRef.style.position = \"absolute\";\n this.textRef.style.display = \"block\";\n this.textRef.style.top = absoluteY + \"px\";\n this.textRef.style.left = absoluteX + \"px\";\n this.textRef.onkeypress = (event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n this._finishInput();\n }\n };\n document.body.appendChild(this.textRef);\n\n this.press = true;\n this.m_center = this.screenToWorld(x, y + this.TEXT_HEIGHT_ALIGN);\n this.needInputText = true;\n } else {\n this._finishInput();\n }\n }\n\n private _updateFrame(): void {\n this.entity = this.getActiveMarkupEntity(MARKUP_ENTITY_TEXT);\n const entityPtr = this.entity.openObject();\n\n const view = this.getViewer().activeView;\n const pos = this.toPoint(view.viewPosition);\n const target = this.toPoint(view.viewTarget);\n\n const eyeToWorld = view.eyeToWorldMatrix;\n const eyeDir = pos.sub(target).asVector();\n\n const xDir = this.toVector([1.0, 0.0, 0.0]);\n const direction = xDir.transformBy(eyeToWorld);\n\n const mtrx = this.createMatrix3d();\n mtrx.setToWorldToPlane(this.toGeVector(eyeDir));\n direction.transformBy(mtrx);\n\n const angel = -Math.atan2(-direction.y, direction.x);\n\n const textSize = 0.02;\n let textScale = 1.0;\n\n const projMtrx = view.projectionMatrix;\n const mtrxNumber = projMtrx.get(1, 1);\n const tol = 1.0e-6;\n if (!(mtrxNumber < tol && mtrxNumber > -tol)) {\n textScale = 1 / mtrxNumber;\n }\n\n const geomData = entityPtr.appendText(this.toGePoint(this.m_center), this.textRef.value.trimLeft());\n const textPtr = geomData.openAsText();\n\n textPtr.setNormal(this.toGeVector(eyeDir));\n textPtr.setRotation(angel);\n textPtr.setTextSize(textSize * textScale);\n textPtr.delete();\n geomData.delete();\n entityPtr.delete();\n }\n}\n","import { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { ILine, IText, IViewpoint } from \"@inweb/viewer-core\";\nimport { IMarkup, IMarkupObject, IWorldTransform, MarkupMode } from \"@inweb/markup\";\nimport { Viewer } from \"../../Viewer\";\nimport { MARKUP_ENTITY_LINE, OdaLineDragger } from \"../../Draggers/OdaLineDragger\";\nimport { MARKUP_ENTITY_TEXT, OdaTextDragger } from \"../../Draggers/OdaTextDragger\";\n\nexport class VisualizeMarkup implements IMarkup {\n private _viewer: Viewer;\n protected _markupColor = { r: 255, g: 0, b: 0 };\n\n public lineWidth = 4;\n public lineType: \"solid\";\n public fontSize = 34;\n\n initialize(\n container: HTMLElement,\n containerEvents: string[],\n viewer?: IEventEmitter,\n worldTransformer?: IWorldTransform\n ): void {\n this._viewer = viewer as Viewer;\n this._viewer.registerDragger(\"Line\", OdaLineDragger);\n this._viewer.registerDragger(\"Text\", OdaTextDragger);\n }\n\n dispose(): void {}\n\n syncOverlay(): void {}\n\n clearOverlay(): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n model.clearEntities();\n model.delete();\n }\n\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markupColor;\n }\n\n setMarkupColor(r: number, g: number, b: number): void {\n const color = { r, g, b };\n this._markupColor = color;\n }\n\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n const itr = model.getEntitiesIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n const entityPtr = entityId.openObject();\n const entityName = entityPtr.getName();\n\n if (entityName === MARKUP_ENTITY_LINE || entityName === MARKUP_ENTITY_TEXT) {\n entityPtr.setColor(r, g, b);\n }\n\n entityPtr.delete();\n }\n itr.delete();\n\n this._viewer.update();\n }\n\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n throw new Error(\"Not implemented yet\");\n }\n\n setViewpoint(viewpoint: IViewpoint): void {\n function getLogicalPoint3dAsArray(point3d) {\n return [point3d.x, point3d.y, point3d.z];\n }\n\n function getPoint3d(module, gePoint) {\n return module.Point3d.createFromArray(gePoint);\n }\n\n if (!this._viewer.visualizeJs) return;\n\n const visLib = this._viewer.visLib();\n const visViewer = visLib.getViewer();\n const activeView = visViewer.activeView;\n\n this._viewer.syncOverlay();\n\n const markupColor = viewpoint.custom_fields.markup_color || { r: 255, g: 0, b: 0 };\n this.setMarkupColor(markupColor.r, markupColor.g, markupColor.b);\n\n if (viewpoint.lines) {\n for (const line of viewpoint.lines) {\n const entityId = this._viewer.addMarkupEntity(MARKUP_ENTITY_LINE);\n const entityPtr = entityId.openObject();\n\n const entityData = [];\n for (const point of line.points) {\n entityData.push(point.x, point.y, point.z);\n }\n const geomData = entityPtr.appendPolyline(entityData);\n\n geomData.delete();\n entityPtr.delete();\n }\n }\n\n if (viewpoint.texts) {\n const pos = getPoint3d(visLib, activeView.viewPosition);\n const target = getPoint3d(visLib, activeView.viewTarget);\n const normal = pos.sub(target).asVector();\n\n for (const text of viewpoint.texts) {\n const entityId = this._viewer.addMarkupEntity(MARKUP_ENTITY_TEXT);\n const entityPtr = entityId.openObject();\n\n const geomData = entityPtr.appendText(getLogicalPoint3dAsArray(text.position), text.text);\n\n const textPtr = geomData.openAsText();\n textPtr.setNormal(getLogicalPoint3dAsArray(normal));\n textPtr.setRotation(text.angle);\n textPtr.setTextSize(text.text_size);\n\n textPtr.delete();\n geomData.delete();\n entityPtr.delete();\n }\n }\n\n this._viewer.update();\n }\n\n getViewpoint(): IViewpoint {\n function getLogicalPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n if (!this._viewer.visualizeJs) return {};\n\n const visLib = this._viewer.visLib();\n const visViewer = visLib.getViewer();\n\n const viewpoint: IViewpoint = {\n lines: [],\n texts: [],\n };\n\n const model = visViewer.getMarkupModel();\n const itr = model.getEntitiesIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n const entityPtr = entityId.openObject();\n const entityName = entityPtr.getName();\n\n const geomItr = entityPtr.getGeometryDataIterator();\n if (geomItr.done()) {\n entityPtr.delete();\n continue;\n }\n\n const geometryId = geomItr.getGeometryData();\n\n if (entityName === MARKUP_ENTITY_LINE) {\n const polylinePtr = geometryId.openAsPolyline();\n const points = polylinePtr.getPoints();\n\n const line: ILine = {\n points: [],\n };\n for (const point of points) {\n line.points.push(getLogicalPoint3dFromArray(point));\n }\n\n viewpoint.lines.push(line);\n polylinePtr.delete();\n } else if (entityName === MARKUP_ENTITY_TEXT) {\n const textPtr = geometryId.openAsText();\n const position = textPtr.getPosition();\n\n const text: IText = {\n position: getLogicalPoint3dFromArray(position),\n text: textPtr.getString(),\n angle: textPtr.getRotation(),\n text_size: textPtr.getTextSize(),\n };\n\n viewpoint.texts.push(text);\n textPtr.delete();\n }\n\n entityPtr.delete();\n }\n itr.delete();\n\n viewpoint.snapshot = {\n data: visLib.canvas.toDataURL(\"image/jpeg\", 0.25),\n };\n\n viewpoint.custom_fields = {\n markup_color: this.getMarkupColor(),\n };\n\n viewpoint.description = new Date().toDateString();\n return viewpoint;\n }\n\n enableEditMode(mode: MarkupMode | false): this {\n return this;\n }\n\n createObject(type: string, params: any): IMarkupObject {\n return undefined;\n }\n\n getObjects(): IMarkupObject[] {\n return [];\n }\n\n getSelectedObjects(): IMarkupObject[] {\n return [];\n }\n\n selectObjects(objects: IMarkupObject[]): void {}\n\n clearSelected(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IMarkup, Markup as KonvaMarkup } from \"@inweb/markup\";\nimport { VisualizeMarkup } from \"./Visualize/VisualizeMarkup\";\n\n/**\n * Defines the type of the markup core.\n */\nexport type MarkupType = \"Konva\" | \"Visualize\";\n\nexport class MarkupFactory {\n public static createMarkup(markupType: MarkupType = \"Konva\"): IMarkup {\n let markup: IMarkup;\n\n switch (markupType) {\n case \"Konva\":\n markup = new KonvaMarkup();\n break;\n\n case \"Visualize\":\n markup = new VisualizeMarkup();\n break;\n\n default:\n throw new Error(\"Error during Markup initialization. Unknown Markup type.\");\n break;\n }\n\n return markup;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { Assembly, Client, File, Model } from \"@inweb/client\";\nimport {\n CANVAS_EVENTS,\n CanvasEventMap,\n commands,\n Dragger,\n IClippingPlane,\n IDragger,\n IOrthogonalCamera,\n IOptions,\n IViewer,\n IViewpoint,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\nimport { IMarkup, IWorldTransform } from \"@inweb/markup\";\n\nimport { MeasureLineDragger } from \"./Draggers/MeasureLineDragger/index\";\nimport { OdaWalkDragger } from \"./Draggers/OdaWalkDragger\";\nimport { OdCuttingPlaneXAxisDragger } from \"./Draggers/OdCuttingPlaneXAxisDragger\";\nimport { OdCuttingPlaneYAxisDragger } from \"./Draggers/OdCuttingPlaneYAxisDragger\";\nimport { OdCuttingPlaneZAxisDragger } from \"./Draggers/OdCuttingPlaneZAxisDragger\";\nimport { OdOrbitDragger } from \"./Draggers/OdOrbitDragger\";\nimport { OdPanDragger } from \"./Draggers/OdPanDragger\";\nimport { OdZoomDragger } from \"./Draggers/OdZoomDragger\";\nimport { OdZoomWheelDragger } from \"./Draggers/OdZoomWheelDragger\";\nimport { OdZoomWindowDragger } from \"./Draggers/OdZoomWindowDragger/index\";\nimport { OrbitAroundBuildingDragger } from \"./Draggers/OrbitAroundBuildingDragger\";\nimport { GestureManager } from \"./Draggers/Common/GestureManager\";\n\nimport { loadVisualizeJs } from \"./utils\";\nimport { LoaderFactory } from \"./Loaders/LoaderFactory\";\nimport { MarkupFactory, MarkupType } from \"./Markup/MarkupFactory\";\n\nconst OVERLAY_VIEW_NAME = \"$OVERLAY_VIEW_NAME\";\n\nconst isExist = (value) => value !== undefined && value !== null;\n\n/**\n * 3D viewer powered by\n * {@link https://cloud.opendesign.com/docs/index.html#/visualizejs | VisualizeJS} library.\n */\n\nexport class Viewer\n extends EventEmitter2<ViewerEventMap & CanvasEventMap & OptionsEventMap>\n implements IViewer, IWorldTransform\n{\n private _activeDragger: IDragger | null;\n private _zoomWheelDragger: OdZoomWheelDragger | null;\n private _gestureManager: GestureManager | null;\n private _enableAutoUpdate: boolean;\n private _isNeedRender: boolean;\n private _isRunAsyncUpdate: boolean;\n private _renderTime: DOMHighResTimeStamp;\n\n protected _options: Options;\n protected _visualizeJsUrl = \"\";\n protected _visualizeJs: any;\n protected _visualizeTimestamp: number;\n\n private canvaseventlistener: (event: Event) => void;\n\n public draggerFactory: Map<string, typeof Dragger>;\n public canvasEvents: string[];\n private frameId = 0;\n private _resizeObserver: ResizeObserver | undefined;\n private _markup: IMarkup;\n public canvas: HTMLCanvasElement | undefined;\n\n public _abortController: AbortController | undefined;\n public _abortControllerForRequestMap: Map<string, AbortController> | undefined;\n public _abortControllerForReferences: AbortController | undefined;\n public client: Client | undefined;\n\n /**\n * @param client - The `Client` instance that is used to load model reference files from the\n * Open Cloud Server. Do not specify `Client` if you need a standalone viewer instance to\n * view `VSFX` files from the web or from local computer.\n * @param params - An object containing viewer configuration parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own\n * library instance, or specify `undefined` or blank to use the default URL defined by\n * `Viewer.visualize` library you are using.\n * @param params.enableAutoUpdate - Enable auto-update of the viewer after any changes. If\n * the auto-update is disabled, you need to register an `update` event handler and update\n * the `VisualizeJS` viewer and active dragger manually. Default is `true`.\n * @param params.markupType - The type of the markup core: `Visualize` (deprecated) or\n * `Konva`. Default is `Konva`.\n */\n constructor(\n client?: Client,\n params: { visualizeJsUrl?: string; enableAutoUpdate?: boolean; markupType?: MarkupType } = {}\n ) {\n super();\n this.configure(params);\n\n this._options = new Options(this);\n\n this.client = client;\n\n this._activeDragger = null;\n this._zoomWheelDragger = null;\n this._gestureManager = null;\n this._renderTime = 0;\n\n this.draggerFactory = new Map<string, typeof Dragger>();\n this.registerDragger(\"Pan\", OdPanDragger);\n this.registerDragger(\"Orbit\", OdOrbitDragger);\n this.registerDragger(\"Zoom\", OdZoomDragger);\n this.registerDragger(\"ZoomWindow\", OdZoomWindowDragger);\n this.registerDragger(\"OrbitAroundBuilding\", OrbitAroundBuildingDragger);\n this.registerDragger(\"MeasureLine\", MeasureLineDragger);\n this.registerDragger(\"CuttingPlaneXAxis\", OdCuttingPlaneXAxisDragger);\n this.registerDragger(\"CuttingPlaneYAxis\", OdCuttingPlaneYAxisDragger);\n this.registerDragger(\"CuttingPlaneZAxis\", OdCuttingPlaneZAxisDragger);\n this.registerDragger(\"Walk\", OdaWalkDragger);\n\n this.canvasEvents = CANVAS_EVENTS.slice();\n this.canvaseventlistener = (event: Event) => this.emit(event);\n\n this._enableAutoUpdate = params.enableAutoUpdate ?? true;\n this._isNeedRender = false;\n this._isRunAsyncUpdate = false;\n\n this.render = this.render.bind(this);\n this.resize = this.resize.bind(this);\n\n this._markup = MarkupFactory.createMarkup(params.markupType);\n }\n\n /**\n * Viewer options.\n */\n get options(): IOptions {\n return this._options;\n }\n\n /**\n * `VisualizeJS` library URL. Use {@link configure | configure()} to change library URL.\n *\n * @readonly\n */\n get visualizeJsUrl(): string {\n return this._visualizeJsUrl;\n }\n\n /**\n * 2D markup core instance used to create markups.\n *\n * @readonly\n */\n get markup(): IMarkup {\n return this._markup;\n }\n\n /**\n * Changes the viewer parameters.\n *\n * @param params - An object containing new parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own\n * library instance or specify `undefined` or blank to use the default URL defined by\n * `Viewer.visualize` library you are using.\n */\n configure(params: { visualizeJsUrl?: string }): this {\n this._visualizeJsUrl = params.visualizeJsUrl || \"VISUALIZE_JS_URL\";\n return this;\n }\n\n /**\n * Loads the `VisualizeJS` module and initialize it with the specified canvas. Call\n * {@link dispose | dispose()} to release allocated resources.\n *\n * Fires:\n *\n * - {@link InitializeProgressEvent | initializeprogress}\n *\n * @param canvas -\n * {@link https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement | HTMLCanvasElement}\n * for `VisualizeJS`.\n * @param onProgress - A callback function that handles events measuring progress of loading\n * of the `VisualizeJS` library.\n */\n async initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent) => void): Promise<this> {\n this.addEventListener(\"optionschange\", (event) => this.syncOptions(event.data));\n\n if (canvas.style.width === \"\" && canvas.style.height === \"\") {\n canvas.style.width = \"100%\";\n canvas.style.height = \"100%\";\n }\n canvas.parentElement.style.touchAction = \"none\";\n canvas.style.touchAction = \"none\";\n\n canvas.width = canvas.clientWidth * window.devicePixelRatio;\n canvas.height = canvas.clientHeight * window.devicePixelRatio;\n\n this._visualizeTimestamp = Date.now();\n const visualizeTimestamp = this._visualizeTimestamp;\n\n const visualizeJs: any = await loadVisualizeJs(this.visualizeJsUrl, (event) => {\n const { loaded, total } = event;\n if (onProgress) onProgress(new ProgressEvent(\"progress\", { lengthComputable: true, loaded, total }));\n this.emitEvent({ type: \"initializeprogress\", data: loaded / total, loaded, total });\n });\n\n if (visualizeTimestamp !== this._visualizeTimestamp)\n throw new Error(\n \"Viewer error: dispose() was called before initialize() completed. Are you using React strict mode?\"\n );\n\n this._visualizeJs = visualizeJs;\n this.visualizeJs.canvas = canvas;\n this.visualizeJs.Viewer.create();\n\n this.canvas = canvas;\n this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));\n\n this._markup.initialize(this.canvas, this.canvasEvents, this, this);\n\n this._resizeObserver = new ResizeObserver(this.resize);\n this._resizeObserver.observe(canvas.parentElement);\n this.resize();\n\n this._zoomWheelDragger = new OdZoomWheelDragger(this);\n this._zoomWheelDragger.name = \"ZoomWheel\";\n this._zoomWheelDragger.initialize();\n\n this._gestureManager = new GestureManager(this);\n this._gestureManager.initialize();\n\n this.syncOpenCloudVisualStyle(true);\n this.syncOptions();\n\n this._renderTime = performance.now();\n this.render(this._renderTime);\n\n this.emitEvent({ type: \"initialize\" });\n\n return this;\n }\n\n /**\n * Releases all resources allocated by this viewer instance. Call this method before release\n * the `Viewer` instance.\n */\n dispose(): this {\n this.cancel();\n this.emitEvent({ type: \"dispose\" });\n\n if (this.frameId) cancelAnimationFrame(this.frameId);\n this.frameId = 0;\n\n this.setActiveDragger(\"\");\n this.removeAllListeners();\n\n if (this._gestureManager) this._gestureManager.dispose();\n this._gestureManager = undefined;\n\n if (this._zoomWheelDragger) this._zoomWheelDragger.dispose();\n this._zoomWheelDragger = undefined;\n\n if (this._resizeObserver) this._resizeObserver.disconnect();\n this._resizeObserver = undefined;\n\n this._markup.dispose();\n\n if (this.canvas) {\n this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n }\n\n if (this._visualizeJs) this._visualizeJs.getViewer().clear();\n this._visualizeJs = undefined;\n this._visualizeTimestamp = undefined;\n\n return this;\n }\n\n /**\n * Returns `true` if `VisualizeJS` module has been loaded and initialized.\n */\n isInitialized(): boolean {\n return !!this.visualizeJs;\n }\n\n // internal render/resize routines\n\n private render(time: DOMHighResTimeStamp) {\n this.frameId = requestAnimationFrame(this.render);\n\n if (!this.visualizeJs) return;\n\n if (this._isRunAsyncUpdate) return;\n\n const visViewer = this.visualizeJs.getViewer();\n if (visViewer.isRunningAnimation() || this._isNeedRender) {\n visViewer.update();\n this._activeDragger?.updatePreview();\n this._isNeedRender = !visViewer.getActiveDevice().isValid();\n\n const deltaTime = (time - this._renderTime) / 1000;\n this._renderTime = time;\n this.emitEvent({ type: \"render\", time, deltaTime });\n }\n }\n\n public resize(): this {\n if (!this.visualizeJs) return this;\n\n const { clientWidth, clientHeight } = this.canvas;\n\n if (!clientWidth || !clientHeight) return this; // <- invisible viewer, or viewer with parent removed\n\n this.canvas.width = clientWidth * window.devicePixelRatio;\n this.canvas.height = clientHeight * window.devicePixelRatio;\n\n const visViewer = this.visualizeJs.getViewer();\n visViewer.resize(0, this.canvas.width, this.canvas.height, 0);\n\n this.update(true);\n this.emitEvent({ type: \"resize\", width: clientWidth, height: clientHeight });\n\n return this;\n }\n\n /**\n * Updates the viewer.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register\n * an `update` event handler and update the `Visualize` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param force - If `true` updates the viewer immidietly. Otherwise updates on next\n * animation frame. Default is `false`.\n */\n update(force = false) {\n if (this._enableAutoUpdate) {\n if (force) {\n this.visViewer()?.update();\n this.activeDragger()?.updatePreview();\n } else {\n this._isNeedRender = true;\n }\n }\n this.emitEvent({ type: \"update\", data: force });\n }\n\n private scheduleUpdateAsync(maxScheduleUpdateTimeInMs = 50): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => {\n try {\n if (this._enableAutoUpdate) {\n this.visViewer()?.update(maxScheduleUpdateTimeInMs);\n this.activeDragger()?.updatePreview();\n }\n this.emitEvent({ type: \"update\", data: false });\n resolve();\n } catch (e) {\n console.error(e);\n reject();\n }\n }, 0);\n });\n }\n\n /**\n * Updates the viewer asynchronously without locking the user interface. Used to update the\n * viewer after changes that require a long rendering time.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register\n * an `update` event handler and update the `VisualizeJS` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param maxScheduleUpdateTimeInMs - Maximum time for one update, default 30 ms.\n * @param maxScheduleUpdateCount - Maximum count of scheduled updates.\n */\n async updateAsync(maxScheduleUpdateTimeInMs = 50, maxScheduleUpdateCount = 50): Promise<void> {\n this._isRunAsyncUpdate = true;\n const device = this.visViewer().getActiveDevice();\n try {\n for (let iterationCount = 0; !device.isValid() && iterationCount < maxScheduleUpdateCount; iterationCount++) {\n await this.scheduleUpdateAsync(maxScheduleUpdateTimeInMs);\n }\n await this.scheduleUpdateAsync(maxScheduleUpdateTimeInMs);\n } catch (e) {\n console.error(e);\n } finally {\n this._isRunAsyncUpdate = false;\n }\n }\n\n /**\n * Returns `VisualizeJS`\n * {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module} instance.\n */\n get visualizeJs(): any {\n return this._visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS`\n * {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module} instance.\n */\n visLib(): any {\n return this.visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS`\n * {@link https://cloud.opendesign.com/docs/index.html#/vis/Viewer | Viewer} instance.\n */\n visViewer(): any {\n return this.visualizeJs?.getViewer();\n }\n\n // update the VisualizeJS options\n\n syncOpenCloudVisualStyle(isInitializing: boolean): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const device = visViewer.getActiveDevice();\n if (device.isNull()) return this;\n\n const view = device.getActiveView();\n\n // setup light\n view.enableDefaultLighting(true, visLib.DefaultLightingType.kTwoLights);\n view.setDefaultLightingIntensity(1.25);\n\n let visualStyleId;\n try {\n visualStyleId = visViewer.findVisualStyle(\"OpenCloud\");\n } catch (e) {\n // if (!isInitializing) {\n // console.log(\"OpenCloud visual style not found, creating it on client side\");\n // }\n visualStyleId = visViewer.createVisualStyle(\"OpenCloud\");\n\n const colorDef = new visLib.OdTvColorDef(66, 66, 66);\n const shadedVsId = visViewer.findVisualStyle(\"Realistic\");\n\n const visualStylePtr = visualStyleId.openObject();\n visualStylePtr.copyFrom(shadedVsId);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kFaceModifiers, 0, visLib.VisualStyleOperations.kSet);\n //visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeModel, 1, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeModel, 2, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionDouble(visLib.VisualStyleOptions.kEdgeCreaseAngle, 60, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeStyles, 0, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionInt32(visLib.VisualStyleOptions.kEdgeModifiers, 8, visLib.VisualStyleOperations.kSet);\n visualStylePtr.setOptionColor(\n visLib.VisualStyleOptions.kEdgeColorValue,\n colorDef,\n visLib.VisualStyleOperations.kSet\n );\n visualStylePtr.delete();\n }\n\n view.visualStyle = visualStyleId;\n\n view.delete();\n device.delete();\n\n return this;\n }\n\n syncOptions(options: IOptions = this.options): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const device = visViewer.getActiveDevice();\n if (device.isNull()) return this;\n\n if (options.showWCS !== visViewer.getEnableWCS()) {\n visViewer.setEnableWCS(options.showWCS);\n }\n if (options.cameraAnimation !== visViewer.getEnableAnimation()) {\n visViewer.setEnableAnimation(options.cameraAnimation);\n }\n if (options.antialiasing !== visViewer.fxaaAntiAliasing3d) {\n visViewer.fxaaAntiAliasing3d = options.antialiasing;\n visViewer.fxaaQuality = 5;\n }\n\n if (options.shadows !== visViewer.shadows) {\n visViewer.shadows = options.shadows;\n\n const canvas = visLib.canvas;\n device.invalidate([0, canvas.clientWidth, canvas.clientHeight, 0]);\n }\n\n if (options.groundShadow !== visViewer.groundShadow) {\n visViewer.groundShadow = options.groundShadow;\n }\n\n if (options.ambientOcclusion !== device.getOptionBool(visLib.DeviceOptions.kSSAOEnable)) {\n device.setOptionBool(visLib.DeviceOptions.kSSAOEnable, options.ambientOcclusion);\n device.setOptionBool(visLib.DeviceOptions.kSSAODynamicRadius, true);\n device.setOptionDouble(visLib.DeviceOptions.kSSAORadius, 1);\n device.setOptionInt32(visLib.DeviceOptions.kSSAOLoops, 32);\n device.setOptionDouble(visLib.DeviceOptions.kSSAOPower, 2);\n device.setOptionInt32(visLib.DeviceOptions.kSSAOBlurRadius, 2);\n\n const activeView = visViewer.activeView;\n activeView.setSSAOEnabled(options.ambientOcclusion);\n activeView.delete();\n }\n\n if (isExist(options.edgeModel)) {\n const activeView = device.getActiveView();\n\n const visualStyleId = visViewer.findVisualStyle(\"OpenCloud\");\n const visualStylePtr = visualStyleId.openObject();\n\n visualStylePtr.setOptionInt32(\n visLib.VisualStyleOptions.kEdgeModel,\n options.edgeModel ? 2 : 0,\n visLib.VisualStyleOperations.kSet\n );\n\n activeView.visualStyle = visualStyleId;\n\n visualStylePtr.delete();\n visualStyleId.delete();\n activeView.delete();\n }\n\n device.delete();\n\n this.syncHighlightingOptions(options);\n this.update();\n\n return this;\n }\n\n syncHighlightingOptions(options: IOptions = this.options): this {\n if (!this.visualizeJs) return this;\n\n const params = options.enableCustomHighlight ? options : Options.defaults();\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n const { Entry, OdTvRGBColorDef } = visLib;\n\n const highlightStyleId = visViewer.findHighlightStyle(\"Web_Default\");\n const highlightStylePtr = highlightStyleId.openObject();\n\n if (isExist(params.facesColor)) {\n const color = new OdTvRGBColorDef(params.facesColor.r, params.facesColor.g, params.facesColor.b);\n highlightStylePtr.setFacesColor(Entry.k3D.value | Entry.k3DTop.value, color);\n color.delete();\n }\n\n if (isExist(params.facesOverlap)) {\n highlightStylePtr.setFacesVisibility(Entry.k3DTop.value, params.facesOverlap);\n }\n if (isExist(params.facesTransparancy)) {\n highlightStylePtr.setFacesTransparency(Entry.k3D.value | Entry.k3DTop.value, params.facesTransparancy);\n }\n\n if (isExist(params.edgesColor)) {\n const color = new OdTvRGBColorDef(params.edgesColor.r, params.edgesColor.g, params.edgesColor.b);\n highlightStylePtr.setEdgesColor(\n Entry.k3DTop.value | Entry.k3D.value | Entry.k2D.value | Entry.k2DTop.value,\n color\n );\n color.delete();\n }\n\n if (isExist(params.edgesVisibility)) {\n highlightStylePtr.setEdgesVisibility(\n Entry.k2D.value | Entry.k2DTop.value | Entry.k3DTop.value | Entry.k3D.value,\n params.edgesVisibility\n );\n }\n if (isExist(params.edgesOverlap)) {\n const visibility = !isExist(params.edgesVisibility) ? true : params.edgesVisibility;\n highlightStylePtr.setEdgesVisibility(Entry.k2DTop.value | Entry.k3DTop.value, params.edgesOverlap && visibility);\n }\n\n const device = visViewer.getActiveDevice();\n if (!device.isNull()) {\n const canvas = visLib.canvas;\n\n device.invalidate([0, canvas.clientWidth, canvas.clientHeight, 0]);\n device.delete();\n }\n\n return this;\n }\n\n /**\n * List of names of registered draggers. By default, the following draggers are registered:\n *\n * - `Line`\n * - `Text`\n * - `Pan`\n * - `Orbit`\n * - `Zoom`\n * - `ZoomWindow`\n * - `OrbitAroundBuilding`\n * - `MeasureLine`\n * - `CuttingPlaneXAxis`\n * - `CuttingPlaneYAxis`\n * - `CuttingPlaneZAxis`\n * - `Walk`\n *\n * @readonly\n */\n get draggers(): string[] {\n return [...this.draggerFactory.keys()];\n }\n\n /**\n * Registers a dragger for the viewer. Dragger is an object that received mouse/keyboard\n * events and does something to the viewer.\n *\n * @param name - Dragger name.\n * @param dragger - Dragger class.\n */\n public registerDragger(name: string, dragger: typeof Dragger): void {\n this.draggerFactory.set(name, dragger);\n }\n\n /**\n * Returns active dragger instance or `null` if there is no active dragger.\n */\n activeDragger(): IDragger | null {\n return this._activeDragger;\n }\n\n /**\n * Changes the active dragger. Viewer must be initialized before enable dragger or exception is thrown.\n *\n * Fires:\n *\n * - {@link ChangeActiveDraggerEvent | changeactivedragger}\n *\n * @param name - Dragger name. Can be one of the {@link draggers} list.\n * @returns Returns active dragger instance or `null` if there is no dragger with the given name.\n */\n setActiveDragger(name: string): IDragger | null {\n if (this._activeDragger?.name !== name) {\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\n if (this.visualizeJs) {\n const Constructor = this.draggerFactory.get(name);\n if (Constructor) {\n this._activeDragger = new Constructor(this);\n this._activeDragger.name = name;\n this._activeDragger.initialize();\n }\n }\n const canvas = this.canvas;\n if (canvas) {\n canvas.className = canvas.className\n .split(\" \")\n .filter((x) => !x.startsWith(\"oda-cursor-\"))\n .filter((x) => x)\n .concat(`oda-cursor-${name.toLowerCase()}`)\n .join(\" \");\n }\n this.emitEvent({ type: \"changeactivedragger\", data: name });\n }\n return this._activeDragger;\n }\n\n /**\n * Resets the state of the active dragger.\n */\n resetActiveDragger(): void {\n const dragger = this._activeDragger;\n if (dragger) {\n this.setActiveDragger(\"\");\n this.setActiveDragger(dragger.name);\n }\n }\n\n /**\n * Removes all cutting planes.\n */\n clearSlices(): void {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n activeView.removeCuttingPlanes();\n activeView.delete();\n\n this.update();\n }\n\n /**\n * Clears the overlay view.\n */\n clearOverlay(): void {\n if (!this.visualizeJs) return;\n\n this._markup.clearOverlay();\n this.update();\n }\n\n /**\n * Creates an overlay view. Overlay view is used to draw cutting planes and `Visualize` markups.\n */\n syncOverlay(): any {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n let overlayView = visViewer.getViewByName(OVERLAY_VIEW_NAME);\n if (!overlayView) {\n const markupModel = visViewer.getMarkupModel();\n const pDevice = visViewer.getActiveDevice();\n\n overlayView = pDevice.createView(OVERLAY_VIEW_NAME, false);\n overlayView.addModel(markupModel);\n\n activeView.addSibling(overlayView);\n pDevice.addView(overlayView);\n }\n\n overlayView.viewPosition = activeView.viewPosition;\n overlayView.viewTarget = activeView.viewTarget;\n overlayView.upVector = activeView.upVector;\n overlayView.viewFieldWidth = activeView.viewFieldWidth;\n overlayView.viewFieldHeight = activeView.viewFieldHeight;\n\n const viewPort = overlayView.getViewport();\n overlayView.setViewport(viewPort.lowerLeft, viewPort.upperRight);\n overlayView.vportRect = activeView.vportRect;\n\n this._markup.syncOverlay();\n this.update();\n }\n\n /**\n * Returns `true` if current model is 3D model.\n */\n is3D(): boolean {\n if (!this.visualizeJs) return false;\n\n const visViewer = this.visViewer();\n const ext = visViewer.getActiveExtents();\n const min = ext.min();\n const max = ext.max();\n const extHeight = max[2] - min[2];\n return extHeight !== 0;\n\n //return visViewer.activeView.upVector[1] >= 0.95;\n }\n\n screenToWorld(position: { x: number; y: number }): { x: number; y: number; z: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y, z: 0 };\n\n const activeView = this.visViewer().activeView;\n const worldPoint = activeView.transformScreenToWorld(\n position.x * window.devicePixelRatio,\n position.y * window.devicePixelRatio\n );\n\n const result = { x: worldPoint[0], y: worldPoint[1], z: worldPoint[2] };\n\n activeView.delete();\n\n return result;\n }\n\n worldToScreen(position: { x: number; y: number; z: number }): { x: number; y: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y };\n\n const activeView = this.visViewer().activeView;\n const devicePoint = activeView.transformWorldToScreen(position.x, position.y, position.z);\n\n const result = { x: devicePoint[0] / window.devicePixelRatio, y: devicePoint[1] / window.devicePixelRatio };\n\n activeView.delete();\n\n return result;\n }\n\n getScale(): { x: number; y: number; z: number } {\n const result = { x: 1.0, y: 1.0, z: 1.0 };\n\n const projMatrix = this.visViewer().activeView.projectionMatrix;\n const tolerance = 1.0e-6;\n\n const x = projMatrix.get(0, 0);\n if (x > tolerance || x < -tolerance) result.x = 1 / x;\n\n const y = projMatrix.get(1, 1);\n if (y > tolerance || y < -tolerance) result.y = 1 / y;\n\n const z = projMatrix.get(2, 2);\n if (z > tolerance || z < -tolerance) result.z = 1 / z;\n\n return result;\n }\n\n /**\n * Returns a list of original handles for the selected objects.\n */\n getSelected(): string[] {\n return this.executeCommand(\"getSelected\");\n }\n\n /**\n * Selects the model objects by original handles that are obtained using `File.searchProperties()`.\n *\n * Fires:\n *\n * - {@link SelectEvent | select}\n *\n * @param handles - The list of original handles.\n */\n setSelected(handles?: string[]): void {\n this.executeCommand(\"setSelected\", handles);\n }\n\n // Internal loading routines\n\n async loadReferences(model: Model | File | Assembly): Promise<this> {\n if (!this.visualizeJs) return this;\n if (!this.client) return this;\n\n const abortController = new AbortController();\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = abortController;\n\n let references: any[] = [];\n await model\n .getReferences(abortController.signal)\n .then((data) => (references = data.references))\n .catch((e) => console.error(\"Cannot load model references.\", e));\n\n for (const file of references) {\n await this.client\n .downloadFile(file.id, undefined, abortController.signal)\n .then((arrayBuffer) => this.visualizeJs?.getViewer().addEmbeddedFile(file.name, new Uint8Array(arrayBuffer)))\n .catch((e) => console.error(`Cannot load reference file ${file.name}.`, e));\n }\n\n return this;\n }\n\n applyModelTransformMatrix(model: Model | Assembly) {\n this.executeCommand(\"applyModelTransform\", model);\n }\n\n applySceneGraphSettings(options = this.options) {\n if (!this.visualizeJs) return;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const device = visViewer.getActiveDevice();\n if (isExist(options.sceneGraph)) {\n device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, !options.sceneGraph);\n }\n // if (options.enablePartialMode && visLib.HpTrc.Usd >= visViewer.memoryLimit) {\n // device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, true);\n // }\n device.delete();\n\n this.update();\n }\n\n /**\n * Loads a file from Open Cloud Server into the viewer.\n *\n * The file geometry data on the server must be converted to `VSFX` format.\n *\n * This method requires a `Client` instance to be specified when creating the viewer to load\n * model reference files from the Open Cloud Server. For a standalone viewer instance use\n * {@link openVsfFile | openVsfFile()} or {@link openVsfxFile | openVsfxFile()}.\n *\n * Fires:\n *\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryChunkEvent | geometrychunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param file - File, assembly or specific model to load. If a `File` instance with multiple\n * models is specified, the default model will be loaded. If there is no default model,\n * first availiable model will be loaded.\n */\n async open(file: File | Assembly | Model): Promise<this> {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", file, model: file });\n\n let model: Model | undefined = undefined;\n if (file) {\n const models = (await file.getModels()) || [];\n model = models.find((model: Model) => model.default) || models[0];\n }\n if (!model) throw new Error(\"No default model found\");\n\n const overrideOptions = new Options();\n overrideOptions.data = this._options.data;\n if (file.type === \".rcs\" && !overrideOptions.enablePartialMode) {\n console.log(\"Partial load mode is forced for RCS file\");\n overrideOptions.enablePartialMode = true;\n }\n\n const loaderFactory = new LoaderFactory();\n const loader = loaderFactory.create(this, model, overrideOptions);\n\n await this.loadReferences(model);\n await loader.load();\n\n if (this.visualizeJs) {\n this.applyModelTransformMatrix(model);\n this.applySceneGraphSettings();\n }\n\n return this;\n }\n\n /**\n * Loads a `VSF` file into the viewer.\n *\n * Fires:\n *\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param buffer - Binary data buffer to load.\n */\n openVsfFile(buffer: Uint8Array | ArrayBuffer): this {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", buffer });\n\n try {\n this.emitEvent({ type: \"geometrystart\", buffer });\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseFile(data);\n\n this.syncOpenCloudVisualStyle(false);\n this.syncOptions();\n this.resize();\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, buffer });\n this.emitEvent({ type: \"databasechunk\", data, buffer });\n this.emitEvent({ type: \"geometryend\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, buffer });\n throw error;\n }\n\n return this;\n }\n\n /**\n * Loads a `VSFX` file into the viewer.\n *\n * Fires:\n *\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param buffer - Binary data buffer to load.\n */\n openVsfxFile(buffer: Uint8Array | ArrayBuffer): this {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", buffer });\n\n try {\n this.emitEvent({ type: \"geometrystart\", buffer });\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseVsfx(data);\n\n this.syncOpenCloudVisualStyle(false);\n this.syncOptions();\n this.resize();\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, buffer });\n this.emitEvent({ type: \"databasechunk\", data, buffer });\n this.emitEvent({ type: \"geometryend\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, buffer });\n throw error;\n }\n\n return this;\n }\n\n /**\n * Cancels asynchronous model loading started by {@link open | open()}.\n */\n cancel(): this {\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = undefined;\n\n this._abortController?.abort();\n this._abortController = undefined;\n\n this._abortControllerForRequestMap?.forEach((controller) => controller.abort());\n this._abortControllerForRequestMap = undefined;\n\n this.emitEvent({ type: \"cancel\" });\n\n return this;\n }\n\n /**\n * Unloads the model and clears the viewer and markups.\n */\n clear(): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = visLib.getViewer();\n\n this.clearOverlay();\n\n visViewer.clear();\n visViewer.createLocalDatabase();\n\n this.syncOpenCloudVisualStyle(true);\n this.syncOptions();\n this.resize();\n\n this.emitEvent({ type: \"clear\" });\n\n return this;\n }\n\n /**\n * Returns the color of new markup objects.\n */\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markup.getMarkupColor();\n }\n\n /**\n * Sets the color of new markup objects.\n *\n * Fires:\n *\n * - {@link ChangeMarkupColorEvent | changemarkupcolor}\n *\n * @param r - The `red` component of the color, as a number between 0 and 255.\n * @param g - The `green` component of the color, as a number between 0 and 255.\n * @param b - The `blue` component of the color, as a number between 0 and 255.\n */\n setMarkupColor(r = 255, g = 0, b = 0): void {\n this._markup.setMarkupColor(r, g, b);\n const color = { r, g, b };\n this.emitEvent({ type: \"changemarkupcolor\", data: color });\n }\n\n /**\n * Colors all markup objects with the specified color.\n *\n * @param r - The `red` component of the color, as a number between 0 and 255.\n * @param g - The `green` component of the color, as a number between 0 and 255.\n * @param b - The `blue` component of the color, as a number between 0 and 255.\n */\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n this._markup.colorizeAllMarkup(r, g, b);\n }\n\n /**\n * Colors the selected markup objects with the specified color.\n *\n * @param r - `Red` part of color.\n * @param g - `Green` part of color.\n * @param b - `Blue` part of color.\n */\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n this._markup.colorizeSelectedMarkups(r, g, b);\n }\n\n /**\n * Adds an empty `Visualize` markup entity to the overlay.\n */\n addMarkupEntity(entityName: string) {\n if (!this.visualizeJs) return null;\n\n this.syncOverlay();\n\n const visViewer = this.visViewer();\n const model = visViewer.getMarkupModel();\n const entityId = model.appendEntity(entityName);\n const entityPtr = entityId.openObject();\n\n const color = this.getMarkupColor();\n entityPtr.setColor(color.r, color.g, color.b);\n entityPtr.setLineWeight(2);\n entityPtr.delete();\n\n this.update();\n\n return entityId;\n }\n\n /**\n * Sets the viewer state to the specified viewpoint.\n *\n * To get a list of available viewpoints from the server for a specific file, use the\n * `File.getViewpoints()`.\n *\n * @param viewpoint - Viewpoint data.\n */\n drawViewpoint(viewpoint: IViewpoint): void {\n this.setOrthogonalCameraSettings(viewpoint.orthogonal_camera);\n this.setClippingPlanes(viewpoint.clipping_planes);\n this._markup.setViewpoint(viewpoint);\n }\n\n /**\n * Saves the viewer state at the viewpoint.\n *\n * To save a viewpoint to the server for a specific file, use the `File.saveViewpoint()`.\n */\n createViewpoint(): IViewpoint {\n const vp = this._markup.getViewpoint();\n vp.orthogonal_camera = this.getOrthogonalCameraSettings();\n vp.clipping_planes = this.getClippingPlanes();\n\n return vp;\n }\n\n private getPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n private getLogicalPoint3dAsArray(point3d) {\n return [point3d.x, point3d.y, point3d.z];\n }\n\n private getOrthogonalCameraSettings(): IOrthogonalCamera {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n return {\n view_point: this.getPoint3dFromArray(activeView.viewPosition),\n direction: this.getPoint3dFromArray(activeView.viewTarget),\n up_vector: this.getPoint3dFromArray(activeView.upVector),\n field_width: activeView.viewFieldWidth,\n field_height: activeView.viewFieldHeight,\n };\n }\n\n private setOrthogonalCameraSettings(settings: IOrthogonalCamera) {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n this.resetActiveDragger();\n this.clearSlices();\n this.clearOverlay();\n\n if (settings) {\n activeView.setView(\n this.getLogicalPoint3dAsArray(settings.view_point),\n this.getLogicalPoint3dAsArray(settings.direction),\n this.getLogicalPoint3dAsArray(settings.up_vector),\n settings.field_width,\n settings.field_height,\n true\n );\n }\n\n this.syncOverlay();\n }\n\n private getClippingPlanes(): IClippingPlane[] {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n const clipping_planes = [];\n for (let i = 0; i < activeView.numCuttingPlanes(); i++) {\n const cuttingPlane = activeView.getCuttingPlane(i);\n\n const plane = {\n location: this.getPoint3dFromArray(cuttingPlane.getOrigin()),\n direction: this.getPoint3dFromArray(cuttingPlane.normal()),\n };\n\n clipping_planes.push(plane);\n }\n\n return clipping_planes;\n }\n\n private setClippingPlanes(clippingPlanes: IClippingPlane[]) {\n if (clippingPlanes) {\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n for (const plane of clippingPlanes) {\n const cuttingPlane = new (this.visLib().OdTvPlane)();\n cuttingPlane.set(this.getLogicalPoint3dAsArray(plane.location), this.getLogicalPoint3dAsArray(plane.direction));\n\n activeView.addCuttingPlane(cuttingPlane);\n activeView.setEnableCuttingPlaneFill(true, 0x66, 0x66, 0x66);\n }\n }\n }\n\n /**\n * Executes the command denoted by the given command identifier.\n *\n * @param id - Identifier of the command to execute.\n * @param args - Parameters passed to the command function.\n * @returns A returned value of the given command. Returns `undefined` when the command doesn't exists.\n */\n executeCommand(id: string, ...args: any[]): any {\n return commands(\"VisualizeJS\").executeCommand(id, this, ...args);\n }\n\n public deviceAutoRegeneration() {\n const visViewer = this.visViewer();\n const device = visViewer.getActiveDevice();\n\n const coef = device.getOptionDouble(this.visLib().DeviceOptions.kRegenCoef);\n if (coef > 1.0) {\n visViewer.regenAll();\n this.update();\n }\n }\n}\n"],"names":["Commands","constructor","this","_commands","Map","registerCommand","id","handler","description","thisArg","set","registerCommandAlias","alias","viewer","args","executeCommand","getCommand","get","getCommands","map","forEach","value","key","command","isDraggerCommand","draggers","includes","setActiveDragger","console","warn","undefined","result","apply","emit","type","data","commands","viewerType","defaultOptions","showWCS","cameraAnimation","antialiasing","groundShadow","shadows","cameraAxisXSpeed","cameraAxisYSpeed","ambientOcclusion","enableStreamingMode","enablePartialMode","memoryLimit","cuttingPlaneFillColor","red","green","blue","edgesColor","r","g","b","facesColor","edgesVisibility","edgesOverlap","facesOverlap","facesTransparancy","enableCustomHighlight","sceneGraph","edgeModel","reverseZoomWheel","enableZoomWheel","enableGestures","geometryType","Options","emitter","_emitter","_data","loadFromStorage","defaults","notifierChangeEvent","change","saveToStorage","window","localStorage","setItem","JSON","stringify","error","item","getItem","parse","resetToDefaults","fields","resetData","reduce","acc","field","Boolean","CanvasEvents","CANVAS_EVENTS","Dragger","name","initialize","dispose","updatePreview","composeMatrixFromTransform","transform","modelCenter","visLib","translate","scale","rotation","translateMatrix","Matrix3d","setTranslation","x","y","z","rotateMatrix","setToRotation","angle","scaleMatrix","setToScaling","postMultBy","applyModelTransform","model","visualizeJs","getModelTransformMatrix","visViewer","getViewer","modelItr","getModelIterator","done","step","modelPtr","getModel","getDatabaseHandle","extents","getExtents","transformBy","getUnitsMatrix","matrix","center","setModelingMatrix","delete","_a","clearViewExtentsCache","call","update","clearOverlay","clearSlices","createPreview","encoderOptions","canvas","toDataURL","explode","index","getDefaultViewPositions","defViewPos","DefaultViewPosition","Object","keys","filter","getModels","handles","getName","push","getSelected","selectionSet","isNull","numItems","itr","getIterator","entityId","getEntity","entityPtr","getType","openObject","openObjectAsInsert","handle","getNativeDatabaseHandle","hideSelected","hideSelectedObjects","isolateSelected","isolateSelectedObjects","regenerateAll","regenAll","resetView","selectModel","activeView","selectCrossing","setSelected","emitEvent","dragger","setDefaultViewPosition","position","setDefaultViewPositionWithAnimation","setMarkupColor","OdTvSelectionSet","getEntityByOriginalHandle","appendEntity","showAll","unisolateSelectedObjects","unselect","zoomToExtents","force","animate","options","saveEnableAmination","getEnableAnimation","setEnableAnimation","zoomExtents","deviceAutoRegeneration","zoomToObjects","zoomToSelected","isTemplateModel","async","autoTransformAllModelsToCentralPoint","viewExt","getActiveExtents","centralPoint","ext","unitsMatrix","unitsMatrixInvert","invert","resMatrixWithUnits","resScale","Math","abs","max","min","setModelTransformMatrix","MarkupColor","setColor","asHex","HEX","asRGB","R","G","B","rgbToHex","valueToHex","c","hex","toString","WorldTransform","screenToWorld","worldToScreen","getScale","LineTypeSpecs","KonvaLine","params","ref","_b","_ref","points","konvaPoints","point","Konva","Line","stroke","color","strokeWidth","width","globalCompositeOperation","lineCap","lineJoin","draggable","strokeScaleEnabled","dash","on","e","attrs","target","_id","enableMouseEditing","getColor","getRotation","setRotation","degrees","getZIndex","zIndex","setZIndex","destroy","getPoints","setLineWidth","size","getLineWidth","getLineType","typeSpecs","setLineType","specs","addPoints","newPoints","concat","KonvaText","_c","TEXT_FONT_FAMILY","text","Text","fontSize","fontFamily","fill","align","getTextWidth","scaleByX","scaleX","scaleByY","scaleY","newWidth","newHeight","height","minWidth","round","getFontSize","getText","setText","getPosition","setPosition","setFontSize","KonvaRectangle","_d","Rect","lineWidth","minHeight","getWidth","getHeigth","setWidth","w","setHeight","h","KonvaEllipse","radius","Ellipse","radiusX","radiusY","newRadiusX","newRadiusY","minRadiusX","minRadiusY","evt","ctrlKey","shiftKey","getRadiusX","setRadiusX","getRadiusY","setRadiusY","KonvaArrow","start","end","Arrow","setPoints","length","getStartPoint","setStartPoint","getEndPoint","setEndPoint","KonvaImage","_ratio","EPSILON","BASE64_HEADER_START","BASE64_NOT_FOUND","src","startsWith","_canvasImage","image","Image","onload","maxWidth","heightOutOfCanvas","maxHeight","widthOutOfCanvas","onerror","getSrc","setSrc","getHeight","KonvaCloud","arcRadius","Shape","sceneFunc","context","shape","calculateMidpoint","midX","midY","midPoint","baseArcLength","beginPath","iPoint","approxArcLength","dx","dy","sqrt","arcCount","floor","lengthMod","pX","pY","pEndX","pEndY","endAngle","atan","startAngle","PI","counterClockwise","iArc","arc","closePath","fillStrokeShape","className","getSelfRect","MarkupMode2Konva","SelectMarkup","initializer","Rectangle","Cloud","KonvaMarkup","_containerEvents","_markupIsActive","_markupColor","lineType","changeActiveDragger","event","draggerName","_markupContainer","_container","split","toLowerCase","join","removeTextInput","removeImageInput","enableEditMode","resizeContainer","entries","contentRect","_konvaStage","pan","dX","devicePixelRatio","dY","getObjects","obj","move","redirectToViewer","_viewer","container","containerEvents","worldTransformer","Error","_worldTransformer","document","createElement","style","top","left","outline","parentDiv","parentElement","appendChild","_resizeObserver","ResizeObserver","observe","initializeKonva","addEventListener","removeEventListener","destroyKonva","disconnect","remove","syncOverlay","clearSelected","getMarkupColor","colorizeAllMarkup","hexColor","colorizeSelectedMarkups","getSelectedObjects","setViewpoint","viewpoint","_e","_f","_g","_h","markupColor","custom_fields","markup_color","lines","line","linePoints","screenPoint","addLine","texts","addText","text_size","font_size","rectangles","rect","addRectangle","line_width","ellipses","ellipse","addEllipse","arrows","arrow","startPoint","endPoint","addArrow","clouds","cloud","addCloud","images","addImage","getViewpoint","getMarkupLines","getMarkupTexts","getMarkupArrows","getMarkupClouds","getMarkupEllipses","getMarkupImages","getMarkupRectangles","snapshot","combineMarkupWithDrawing","Date","toDateString","mode","_markupMode","createObject","konvaShape","object","addObject","objects","konvaLayerFind","_konvaTransformer","nodes","values","find","selectObjects","selectedObjs","_groupImages","add","_groupTexts","_groupGeometry","_konvaLayer","parent","stage","Stage","clientWidth","clientHeight","layer","Layer","pixelRation","Group","transformer","Transformer","shouldOverdrawWholeArea","keepRatio","flipEnabled","isPaint","lastLine","mouseDownPos","lastObj","pos","getPointerPosition","some","m","defParams","startX","startY","_textInputRef","_textInputPos","_textInputAngle","createTextInput","pageX","pageY","_imageInputRef","_imageInputPos","createImageInput","rotateEnabled","metaPressed","metaKey","isSelected","indexOf","slice","splice","tabIndex","focus","code","preventDefault","worldPoints","absoluteTransform","getAbsoluteTransform","i","atPoint","worldPoint","konvaLine","textSize","textScale","rectangle","atStartPoint","worldStartPoint","atEndPoint","worldEndPoint","tempCanvas","ctx","getContext","HTMLCanvasElement","drawImage","toCanvas","pixelRatio","inputX","inputY","display","onkeydown","body","setTimeout","convertBase64","file","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","accept","onchange","files","base64","oncancel","click","at","tolerance","konvaText","konvaRectangle","konvaEllipse","konvaArrow","konvaCloud","konvaImage","EventEmitter2","_listeners","listener","listeners","removeAllListeners","invoke","off","OdaGeAction","module","setViewParams","extView","m_module","getActiveTvExtendedView","setView","upVector","viewFieldWidth","viewFieldHeight","perspective","getViewParams","view","viewPosition","viewTarget","getMarkupModel","copyPoint","p","Point3d","createVector3d","Vector3d","createPoint3d","createMatrix3d","createPlane","OdTvPlane","toVector","geVector","createFromArray","toGeVector","v","toGePoint","toPoint","gePoint","toDoubleArray","correctCameraTarget","contains","CLICK_DELTA","INTERACTIVITY_FPS","OdBaseDragger","subject","super","beginInteractivity","endInteractivity","device","getActiveDevice","invalidate","needInputText","mouseDownPosition","autoSelect","onmessage","canvasEvents","bind","setEnableAutoSelect","relativeCoords","offsetX","offsetY","pointerdown","ev","isPrimary","isGestureActive","setPointerCapture","pointerId","relCoord","isDragging","clientX","clientY","pointerup","needSkipPointerUp","releasePointerCapture","pointercancel","dispatchEvent","PointerEvent","pointermove","drag","movementX","movementY","isNotDragging","getEnableAutoSelect","select","dblclick","clickView","viewAt","active","pSelected","entity","zoomToEntity","deleteAll","absoluteX","absoluteY","getActiveMarkupEntity","entityName","addMarkupEntity","syncOverlayView","_isGestureActive","_needSkipPointerUp","createHtmlElementIfNeed","element","targetElement","dataTestId","setAttribute","destroyHtmlElement","removeChild","moduleInstance","avp","mtx","worldToDeviceMatrix","devicePoint","res","getDistance","gePoint1","gePoint2","tvPoint1","tvPoint2","distance","distanceTo","toFixed","normalizeFloat","ceil","lineSegmentsIntersect","p1","p2","p3","p4","a_dx","a_dy","b_dx","b_dy","s","t","checkSegmentsIntersect","isInsideRect","getDataForDrawLineWithFixed","pLU","pRU","pLB","pRB","intersects","fixedP1","fixedP2","pow","onSetCallback","cb","onclick","onSetSelectivity","enable","pointerEvents","MeasureLineItem","htmlElemStartPoint","htmlElemEndPoint","htmlElemLine","htmlElemTitle","unit","lineThickness","border","background","boxShadow","utils.createHtmlElementIfNeed","isFinishDraw","drawMeasureLine","pointSize","getBoundingClientRect","pScreenStart","utils.worldToScreen","utils.isInsideRect","cursor","borderRadius","pScreenEnd","point1","point2","utils.getDataForDrawLineWithFixed","transformOrigin","widthTitle","font","padding","textAlign","innerHTML","utils.getDistance","isFinish","setSize","clear","utils.destroyHtmlElement","setUnit","setConversionFactor","setStyle","setSelectionReactor","reactor","utils.onSetCallback","onStartPoint","onEndPoint","onTitle","setSelectability","utils.onSetSelectivity","renameUnit","table","MeasureLineDragger","press","gripingRadius","firstPoint","secondPoint","renameUnitTable","Millimeters","Centimeters","Meters","Feet","Inches","Yards","Kilometers","Miles","Micrometers","MicroInches","Undefined","items","m_overlayElement","resize","getSnapPointRadius","corners","viewDcCorners","pt1","lowerLeft","pt2","upperRight","createNewMeasureIfNeed","getSnapPoint","previewMeasureLine","newLineMeasure","createMeasureLine","getUnit","FocalLengthConst","calcFocalLength","lensLength","fieldWidth","fieldHeight","OdaWalkDragger","multiplier","speed","keyPressMap","Set","keydown","keyup","lastFrameTS","animationId","processMovement","deltaAngle","oldWCSEnableValue","getEnableWCS","setEnableWCS","maxDimension","getMaxDimension","viewParams","getActiveModel","cameraId","appendCamera","setupCamera","cameraWalker","OdTvCameraWalker","setCamera","enableZoomWheelPreviousValue","cancelAnimationFrame","removeEntity","timestamp","requestAnimationFrame","deltaTS","currentDelta","keyCode","moveForward","moveBackward","moveLeft","moveRight","moveUp","moveDown","dltX","dltY","turnLeft","turnDown","pCamera","camera","openObjectAsCamera","dir","direction","up","rotMatrix","zAxisVector","setupCameraByDirection","toArray","setDisplayGlyph","setDisplayTarget","setAutoAdjust","setNearClip","setFarClip","setViewParameters","focalL","pTarget","viewDir","viewDirSub","sub","viewDirVec","asVector","viewDirVecNormal","normalize","geViewDir","newGeViewDir","pTarget2","newGeViewDirPt","newPos","assignView","xmax","ymax","zmax","sceneExtents","xmin","ymin","zmin","volume","OdBaseCuttingPlaneDragger","m_size_x","m_size_y","m_size_z","m_center","m_normal","createNormal","plane","addCuttingPlane","numCuttingPlanes","setEnableCuttingPlaneFill","setCuttingPlaneFillPatternEnabled","CuttingPlaneFillStyle","kHorizontalBars","m_model","m_entity","planePreview","handleDelta","delta","getPlanePreviewCoordinate","m_last","m_click","oldCenter","oldLast","newPlane","newCutting","updateCuttingPlane","drawPreview","getSize","GeometryTypes","transparencyDef","OdTvTransparencyDef","colorDef","OdTvColorDef","setValue","kFaces","kEdges","setLineWeight","setTransparency","appendPolygon","polygonPtr","openAsPolygon","setFilled","OdCuttingPlaneXAxisDragger","OdCuttingPlaneYAxisDragger","OdCuttingPlaneZAxisDragger","OrbitAction","_m_module","_subject","_beginInteractivity","_endInteractivity","beginAction","m_viewCenter","getCenter","m_startPoint","action","vportRect","distX","distY","xOrbit","yOrbit","sideVector","getSideVector","calculateXOrbit","calculateYOrbit","activeDragger","endAction","pUpV","pPosition","direct","vDirect","vCross","crossProduct","pPoint","pCenter","rotatePoint","rotateByBasePoint","pUp","vUp","crossProductNormal","zAxis","kZAxis","side","rotateBy","cross","crossNormal","pSet","entId","extSelected","getWCSExtents","addExt","OdOrbitDragger","_orbitAction","setDefaultViewParams","startCameraParams","PanAction","_getViewParams","_setViewParams","_m_start","_deltaScreenPosition","pt","ptSub","targetWithDelta","positionWithDelta","OdPanDragger","_panAction","ZoomAction","zoomFactor","zoomAt","OdZoomDragger","_zoomAction","pressX","pressY","ZOOM_SPEED","INTERACTIVITY_TIME_OUT","OdZoomWheelDragger","_endInteractivityTimeOutId","_isEnableInteractivityMode","wheel","zoomReverse","zoomSpeed","deltaY","clearTimeout","OdSelectionFrame","m_start","m_end","init","instance","draw","viewM","viewingMatrix","p0","eyeM","eyeToWorldMatrix","m_frame","OdZoomWindowDragger","m_minX","m_minY","m_maxX","m_maxY","zoomWindow","OrbitAroundBuildingDragger","maxPolarAngle","minPolarAngle","m_delta","offset","zMatrix","setToIdentity","xMatrix","yAxis","xAxis","xyDir","xyAngle","sign","dotProduct","angleTo","yzDir","yzAngle","xAngle","endMatrix","setLength","current","extTuple","GestureAction","GestureManager","isSingleTouchEnabled","_isSingleTouchEnabled","_previousEvents","_currentEvents","_lastGestureAction","None","_maxInitialDistanceDifference","getMiddlePoint","events","getKeys","point0","getFirstPoint","hypot","updateEvent","eventNotInCurrentEvents","previousEvent","_initialDistance","removeEvent","Array","from","analyzeGesture","currentDistance","previousDistance","currentDistanceEqualsInitialDistance","executePanAction","executeZoomAction","executeOrbitAction","Zoom","executeEndAction","middlePoint","currentPoint","Pan","Orbit","gestureAction","needIgnoreEvent","eventIsTouchEvent","pointerType","pointerleave","loadScript","url","script","loadVisuazlizeJsScript","loadVisualizeJs","onprogress","then","urlMemFile","TOTAL_MEMORY","postRun","BaseLoader","load","TCSLoader","abortController","AbortController","filesToDownload","database","geometry","_abortController","time","dataId","chunkLoadHandler","progress","arrayBuffer","downloadResource","signal","aborted","parseStream","Uint8Array","syncOpenCloudVisualStyle","syncOptions","timeEnd","VsfXLoader","parseVsfx","DELAY_TIME_MULTIPLEXER","START_UPDATE_TIME","UpdateType","UpdaterController","lastUpdate","delayUpdateTime","performance","now","isNeedUpdate","kDelay","isForce","kForce","VsfXStreamingLoader","updaterController","isFireDatabaseChunk","chunk","status","state","DatabaseStreamStatus","ReadyServiceData","Complete","kNormal","PENDING_REQUESTS_SIZE","PENDING_REQUESTS_TIMEOUT","VsfXPartialLoader","abortControllerForRequestMap","servicePartAborted","pendingRequestsMap","pendingRequestsTimerId","pendingRequestsAbortHandler","pendingRequestsAbortController","_abortControllerForRequestMap","requestId","parseVsfxInPartialMode","downloadResourceRange","ranges","abortCtrl","range","onRequestResponseComplete","requestRecordsToRanges","records","record","begin","Number","objectHandler","onServicePartReceived","bHasIndex","abort","onRequest","onFullLoaded","onRequestResponseParsed","onRequestAborted","onRequestResourceFile","_","fileId","pendingRanges","requestNumber","pendingRequest","number","request","once","attachPartialResolver","catch","LoaderFactory","create","pop","MARKUP_ENTITY_LINE","OdaLineDragger","drawPoints","_updateFrame","appendPolyline","MARKUP_ENTITY_TEXT","OdaTextDragger","TEXT_HEIGHT_ALIGN","textRef","_finishInput","trimLeft","onkeypress","eyeToWorld","eyeDir","xDir","mtrx","setToWorldToPlane","angel","atan2","projMtrx","projectionMatrix","mtrxNumber","tol","geomData","appendText","textPtr","openAsText","setNormal","setTextSize","VisualizeMarkup","registerDragger","clearEntities","getEntitiesIterator","getLogicalPoint3dAsArray","point3d","getPoint3d","entityData","normal","getLogicalPoint3dFromArray","array","geomItr","getGeometryDataIterator","geometryId","getGeometryData","polylinePtr","openAsPolyline","getString","getTextSize","MarkupFactory","createMarkup","markupType","markup","OVERLAY_VIEW_NAME","isExist","Viewer","client","_visualizeJsUrl","frameId","configure","_options","_activeDragger","_zoomWheelDragger","_gestureManager","_renderTime","draggerFactory","canvaseventlistener","_enableAutoUpdate","enableAutoUpdate","_isNeedRender","_isRunAsyncUpdate","render","_markup","visualizeJsUrl","onProgress","touchAction","_visualizeTimestamp","visualizeTimestamp","loaded","total","ProgressEvent","lengthComputable","_visualizeJs","cancel","isInitialized","isRunningAnimation","isValid","deltaTime","scheduleUpdateAsync","maxScheduleUpdateTimeInMs","updateAsync","maxScheduleUpdateCount","iterationCount","isInitializing","getActiveView","enableDefaultLighting","DefaultLightingType","kTwoLights","setDefaultLightingIntensity","visualStyleId","findVisualStyle","createVisualStyle","shadedVsId","visualStylePtr","copyFrom","setOptionInt32","VisualStyleOptions","kFaceModifiers","VisualStyleOperations","kSet","kEdgeModel","setOptionDouble","kEdgeCreaseAngle","kEdgeStyles","kEdgeModifiers","setOptionColor","kEdgeColorValue","visualStyle","fxaaAntiAliasing3d","fxaaQuality","getOptionBool","DeviceOptions","kSSAOEnable","setOptionBool","kSSAODynamicRadius","kSSAORadius","kSSAOLoops","kSSAOPower","kSSAOBlurRadius","setSSAOEnabled","syncHighlightingOptions","Entry","OdTvRGBColorDef","highlightStyleId","findHighlightStyle","highlightStylePtr","setFacesColor","k3D","k3DTop","setFacesVisibility","setFacesTransparency","setEdgesColor","k2D","k2DTop","setEdgesVisibility","visibility","Constructor","resetActiveDragger","removeCuttingPlanes","overlayView","getViewByName","markupModel","pDevice","createView","addModel","addSibling","addView","viewPort","getViewport","setViewport","is3D","extHeight","transformScreenToWorld","transformWorldToScreen","projMatrix","loadReferences","_abortControllerForReferences","references","getReferences","downloadFile","addEmbeddedFile","applyModelTransformMatrix","applySceneGraphSettings","kDelaySceneGraphProc","open","models","default","overrideOptions","log","loaderFactory","loader","openVsfFile","buffer","parseFile","openVsfxFile","controller","createLocalDatabase","drawViewpoint","setOrthogonalCameraSettings","orthogonal_camera","setClippingPlanes","clipping_planes","createViewpoint","vp","getOrthogonalCameraSettings","getClippingPlanes","getPoint3dFromArray","view_point","up_vector","field_width","field_height","settings","cuttingPlane","getCuttingPlane","location","getOrigin","clippingPlanes","coef","getOptionDouble","kRegenCoef"],"mappings":"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"}