@inweb/viewer-visualize 25.3.20 → 25.3.21

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","../../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/Markup/IMarkup.ts","../src/Viewer/Markup/Impl/Konva/MarkupColor.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaLine.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaText.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaRectangle.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaEllipse.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaArrow.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaImage.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaCloud.ts","../src/Viewer/Markup/Impl/Konva/KonvaMarkup.ts","../src/Viewer/Draggers/OdaLineDragger.ts","../src/Viewer/Draggers/OdaTextDragger.ts","../src/Viewer/Markup/Impl/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 CANVAS_EVENTS = [ \"click\", \"dblclick\", \"mousedown\", \"mousemove\", \"mouseup\", \"mouseleave\", \"pointerdown\", \"pointermove\", \"pointerup\", \"pointerleave\", \"pointercancel\", \"wheel\", \"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\" ];\n\nexport { CANVAS_EVENTS, Options, commands, defaultOptions };\n//# sourceMappingURL=viewer-core.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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 = (translate, rotate, scale, modelCenter, matrix) => {\n const translateMatrix = matrix.setTranslation([translate.x, translate.y, translate.z]);\n const rotateMatrix = matrix.setToRotation(rotate.angle, [rotate.x, rotate.y, rotate.z], modelCenter);\n const scaleMatrix = matrix.setToScaling(scale, modelCenter);\n return translateMatrix.postMultBy(rotateMatrix).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 const matrix = composeMatrixFromTransform(\n transform.translate,\n transform.rotation,\n transform.scale,\n extents.center(),\n new visLib.Matrix3d()\n );\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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToExtents\", zoomToExtents);\ncommands(\"VisualizeJS\").registerCommandAlias(\"zoomToExtents\", \"zoomExtents\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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.update();\n viewer.emitEvent({ type: \"zoom\" });\n\n selectionSet.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToObjects\", zoomToObjects);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToSelected\", zoomToSelected);\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(event, ...args) {\n if (typeof event === \"string\") return this.emitEvent({\n type: event,\n args: args\n }); else if (typeof event === \"object\") return this.emitEvent(event); else return false;\n }\n}\n\nexport { EventEmitter2 };\n//# sourceMappingURL=eventemitter2.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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-2021, 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-2021 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\n/**\n * A [Viewer]{@link Viewer} event that fires when the viewer needs to be updated.\n *\n * @property {string} type - `update`\n * @event update\n */\n\n/**\n * A [Viewer]{@link Viewer} event that fires when the user selects an entity with the mouse.\n *\n * @property {string} type - `select`\n * @property {OdTvSelectionSet} data - The set of selected entities. For more information, see\n * [OdTvSelectionSet](https://cloud.opendesign.com/docs/index.html#/vis/OdTvSelectionSet?id=odtvselectionset).\n * @event select\n */\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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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.activeDragger()?.updatePreview();\n this._subject.emitEvent({\n type: \"zoomat\",\n data: zoomFactor,\n });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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) {\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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2023, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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\n .downloadResource(this.model.database, chunkLoadHandler, abortController.signal)\n .catch((error) => {\n if (!servicePartAborted) throw error;\n });\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error: any) {\n if (pendingRequestsTimerId) {\n window.clearTimeout(pendingRequestsTimerId);\n pendingRequestsTimerId = 0;\n }\n\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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","import { IViewpoint } from \"@inweb/viewer-core\";\n\nimport { OdBaseDragger } from \"../Draggers/Common/OdBaseDragger\";\nimport { Viewer } from \"../Viewer\";\nimport { IMarkupObject } from \"./Api/IMarkupObject\";\n\nexport enum MarkupType {\n Unknown,\n Konva = \"Konva\",\n Visualize = \"Visualize\",\n}\n\nexport enum MarkupMode {\n Line = \"Line\",\n Text = \"Text\",\n Rectangle = \"Rectangle\",\n Ellipse = \"Ellipse\",\n Arrow = \"Arrow\",\n Image = \"Image\",\n Cloud = \"Cloud\",\n}\n\nexport interface IMarkup {\n lineWidth: number;\n\n initialize(viewer: Viewer, canvas: HTMLCanvasElement, canvasEvents: string[]): void;\n dispose(): void;\n\n getDraggers(): Map<string, typeof OdBaseDragger>;\n clearOverlay(): void;\n setMarkupColor(r: number, g: number, b: number): void;\n getMarkupColor(): { r: number; g: number; b: number };\n colorizeAllMarkup(r: number, g: number, b: number): void;\n setViewpoint(viewpoint: IViewpoint): void;\n getViewpoint(): IViewpoint;\n\n createObject(type: string, params: any): IMarkupObject;\n getObjects(): IMarkupObject[];\n getSelectedObjects(): IMarkupObject[];\n selectObjects(objects: IMarkupObject[]): void;\n clearSelected(): void;\n}\n","export class MarkupColor {\n public R: number;\n public G: number;\n public B: number;\n\n private _hex: string;\n\n /**\n * Color in #000000 format\n */\n get HexColor(): string {\n return \"#\" + this._hex;\n }\n\n get RGB(): { r: number; g: number; b: number } {\n return { r: this.R, g: this.G, b: this.B };\n }\n\n constructor(r: number, g: number, b: number) {\n this.setColor(r, g, b);\n }\n\n public setColor(r: number, g: number, b: number): void {\n this.R = r;\n this.G = g;\n this.B = b;\n\n this._hex = this.rgbToHex(r, g, b);\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n const valueToHex = (c) => {\n const hex = c.toString(16);\n return hex === \"0\" ? \"00\" : hex;\n };\n\n return valueToHex(r) + valueToHex(g) + valueToHex(b);\n }\n}\n","import Konva from \"konva\";\nimport { LineType } from \"@inweb/viewer-core\";\nimport { IMarkupLine } from \"../../IMarkupLine\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nconst LineTypeSpecs = new Map<string, number[]>([\n [\"solid\", []],\n [\"dot\", [30, 30, 0.001, 30]],\n [\"dash\", [30, 30]],\n]);\n\nexport class KonvaLine implements IMarkupLine, IMarkupColorable {\n private _ref: Konva.Line;\n\n constructor(\n params: { points: { x: number; y: number }[]; type?: LineType; width?: number; color?: string; id?: string },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.points) return;\n\n const konvaPoints = [];\n params.points.forEach((point) => konvaPoints.push(point.x, point.y));\n\n this._ref = new Konva.Line({\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.width ?? 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\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"line\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPoints(): number[] {\n return this._ref.points();\n }\n\n setLineWidth(size: number) {\n this._ref.strokeWidth(size);\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n\n getLineType(): string {\n const typeSpecs = this._ref.dash() || [];\n let type: LineType;\n switch (typeSpecs) {\n case LineTypeSpecs.get(\"dot\"):\n type = \"dot\";\n break;\n case LineTypeSpecs.get(\"dash\"):\n type = \"dash\";\n break;\n default:\n type = \"solid\";\n break;\n }\n return type;\n }\n\n setLineType(type: string) {\n const specs = LineTypeSpecs.get(type);\n if (specs) this._ref.dash(specs);\n }\n\n addPoints(points: [{ x: number; y: number }]) {\n let newPoints = this._ref.points();\n points.forEach((point) => {\n newPoints = newPoints.concat([point.x, point.y]);\n });\n\n this._ref.points(newPoints);\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupText } from \"../../IMarkupText\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaText implements IMarkupText, IMarkupColorable {\n private _ref: Konva.Text;\n private readonly TEXT_FONT_FAMILY = \"Calibri\";\n\n constructor(\n params: {\n position: { x: number; y: number };\n text: string;\n rotation?: number;\n fontSize?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params || !params.text) return;\n\n this._ref = new Konva.Text({\n x: params.position.x,\n y: params.position.y,\n text: params.text,\n fontSize: params.fontSize ?? 34,\n fontFamily: this.TEXT_FONT_FAMILY,\n fill: params.color ?? \"#ff0000\",\n align: \"left\",\n draggable: true,\n rotation: params.rotation ?? 0,\n });\n\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"text\";\n }\n\n getColor(): string {\n return this._ref.fill();\n }\n\n setColor(hex: string) {\n this._ref.fill(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getText(): string {\n return this._ref.text();\n }\n\n setText(text: string): void {\n this._ref.text(text);\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.getPosition();\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n\n getFontSize() {\n return this._ref.fontSize();\n }\n\n setFontSize(size: number) {\n this._ref.fontSize(size);\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupRectangle } from \"../../IMarkupRectangle\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaRectangle implements IMarkupRectangle, IMarkupColorable {\n private _ref: Konva.Rect;\n\n constructor(\n params: {\n position: { x: number; y: number };\n width?: number;\n height?: number;\n lineWidth?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.position) return;\n\n this._ref = new Konva.Rect({\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.lineWidth ?? 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n x: params.position.x,\n y: params.position.y,\n width: params.width ?? 200,\n height: params.height ?? 200,\n draggable: true,\n strokeScaleEnabled: false,\n });\n\n this._ref.id(this._ref._id.toString());\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.position();\n }\n\n getWidth(): number {\n return this._ref.width();\n }\n\n getHeigth(): number {\n return this._ref.height();\n }\n\n setWidth(w: number) {\n this._ref.width(w);\n }\n\n setHeight(h: number) {\n this._ref.height(h);\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean): void {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"rectangle\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string): void {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete(): void {\n this._ref.destroy();\n this._ref = null;\n }\n\n setLineWidth(size: number): void {\n this._ref.strokeWidth(size);\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupEllipse } from \"../../IMarkupEllipse\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaEllipse implements IMarkupEllipse, IMarkupColorable {\n private _ref: Konva.Ellipse;\n\n constructor(\n params: {\n position: { x: number; y: number };\n radius: { x: number; y: number };\n lineWidth?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.position) return;\n\n this._ref = new Konva.Ellipse({\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.lineWidth ?? 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\n this._ref.id(this._ref._id.toString());\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.position();\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n\n getRadiusX(): number {\n return this._ref.radiusX();\n }\n\n setRadiusX(r: number) {\n this._ref.radius({ x: r, y: this._ref.radiusY() });\n }\n\n getRadiusY(): number {\n return this._ref.radiusY();\n }\n\n setRadiusY(r: number) {\n this._ref.radius({ x: this._ref.radiusX(), y: r });\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n\n setLineWidth(size: number) {\n this._ref.strokeWidth(size);\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"ellipse\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupArrow } from \"../../IMarkupArrow\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaArrow implements IMarkupArrow, IMarkupColorable {\n private _ref: Konva.Arrow;\n\n constructor(\n params: {\n start: { x: number; y: number };\n end: { x: number; y: number };\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.start || !params.end) return;\n\n this._ref = new Konva.Arrow({\n stroke: params.color ?? \"#ff0000\",\n fill: params.color ?? \"#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\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"arrow\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPoints(): { x: number; y: number }[] {\n const points = this._ref.points();\n return [\n { x: points[0], y: points[1] },\n { x: points[2], y: points[3] },\n ];\n }\n\n setPoints(points: { x: number; y: number }[]) {\n if (points.length === 2) {\n this._ref.points([points[0].x, points[0].y, points[1].x, points[1].y]);\n }\n }\n\n getStartPoint(): { x: number; y: number } {\n const points = this._ref.points();\n return { x: points[0], y: points[1] };\n }\n\n setStartPoint(x: number, y: number) {\n const points = this._ref.points();\n this._ref.points([x, y, points[2], points[3]]);\n }\n\n getEndPoint(): { x: number; y: number } {\n const points = this._ref.points();\n return { x: points[2], y: points[3] };\n }\n\n setEndPoint(x: number, y: number) {\n const points = this._ref.points();\n this._ref.points([points[0], points[1], x, y]);\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupImage } from \"../../IMarkupImage\";\n\nexport class KonvaImage implements IMarkupImage {\n private _ref: Konva.Image;\n private _canvasImage: HTMLImageElement;\n private _ratio = 1;\n\n constructor(\n params: { position: { x: number; y: number }; src: string; width: number; height: number; id?: string },\n ref = null\n ) {\n if (ref) {\n if (ref.height() === 0 || ref.width() === 0) return;\n\n this._ref = ref;\n this._canvasImage = ref.image();\n this._ratio = this._ref.height() / this._ref.width();\n return;\n }\n\n if (!params.position || !params.src) return;\n this._canvasImage = new Image();\n\n this._ref = new Konva.Image({\n x: params.position.x,\n y: params.position.y,\n image: this._canvasImage,\n width: params.width,\n height: params.height,\n draggable: true,\n });\n\n this._canvasImage.onload = () => {\n this._ref.image(this._canvasImage);\n this._ratio = this._ref.height() === 0 || this._ref.width() === 0 ? 1 : this._ref.height() / this._ref.width();\n };\n\n this._canvasImage.src = params.src;\n\n this._ref.id(this._ref._id.toString());\n }\n\n getSrc(): string {\n return this._canvasImage.src;\n }\n\n setSrc(src: any) {\n this._canvasImage.src = src;\n }\n\n getWidth(): number {\n return this._ref.width();\n }\n\n setWidth(w: number) {\n this._ref.width(w);\n this._ref.height(w * this._ratio);\n }\n\n getHeight(): number {\n return this._ref.height();\n }\n\n setHeight(h: number) {\n this._ref.height(h);\n this._ref.width(h / this._ratio);\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"image\";\n }\n\n // we can break Liskov Substitution Principle, need to use separate IColorable\n // getColor(): string {\n // return this._ref.fill();\n // }\n\n // setColor(hex: string) {\n // this._ref.fill(hex);\n // }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.getPosition();\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\nimport { IMarkupCloud } from \"../../IMarkupCloud\";\n\nexport class KonvaCloud implements IMarkupCloud, IMarkupColorable {\n private _ref: Konva.Shape;\n\n constructor(\n params: {\n position: { x: number; y: number };\n width?: number;\n height?: number;\n lineWidth?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.position || !params.width || !params.height) return;\n\n const arcRadius = 16;\n\n this._ref = new Konva.Shape({\n x: params.position.x,\n y: params.position.y,\n width: params.width ?? 200,\n height: params.height ?? 200,\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.lineWidth ?? 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 { x: midX, y: midY };\n }\n\n const points = [\n { x: 0, y: 0 },\n { x: 0 + this._ref.width(), y: 0 },\n { x: 0 + this._ref.width(), y: 0 + this._ref.height() },\n { x: 0, y: 0 + this._ref.height() },\n { x: 0, y: 0 },\n ];\n\n const midPoint = calculateMidpoint({ x: 0, y: 0 }, this._ref.width(), this._ref.height());\n\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\n const arcCount = Math.floor(length / approxArcLength);\n const lengthMod = length % approxArcLength;\n approxArcLength = baseArcLength + arcCount / lengthMod;\n\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\n pX += dx / arcCount;\n pY += dy / arcCount;\n }\n }\n\n context.closePath();\n // (!) Konva specific method, it is very important\n // it will apply are required styles\n context.fillStrokeShape(shape);\n },\n });\n\n this._ref.className = \"Cloud\";\n\n this._ref.on(\"transform\", (e) => {\n const attrs = e.target.attrs;\n\n const minWidth = 100;\n const minHeight = 100;\n\n const newWidth = this._ref.width() * attrs.scaleX;\n const newHeight = this._ref.height() * attrs.scaleY;\n\n if (newWidth < minWidth || newHeight < minHeight) {\n this._ref.scale({ x: 1, y: 1 });\n return;\n }\n\n if (Math.abs(attrs.scaleX - 1) > 10e-6) {\n this._ref.width(newWidth);\n }\n\n if (Math.abs(attrs.scaleY - 1) > 10e-6) {\n this._ref.height(newHeight);\n }\n\n this._ref.scale({ x: 1, y: 1 });\n });\n\n this._ref.getSelfRect = () => {\n return {\n x: 0 - arcRadius,\n y: 0 - arcRadius,\n width: this._ref.width() + 2 * arcRadius,\n height: this._ref.height() + 2 * arcRadius,\n };\n };\n\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"cloud\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPosition() {\n return this._ref.position();\n }\n\n setPosition(x: number, y: number) {\n this._ref.position({ x, y });\n }\n\n getWidth(): number {\n return this._ref.width();\n }\n\n setWidth(w: number) {\n this._ref.width(w);\n }\n\n getHeigth(): number {\n return this._ref.height();\n }\n\n setHeight(h: number) {\n this._ref.height(h);\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n\n setLineWidth(size: number) {\n this._ref.strokeWidth(size);\n }\n}\n","import Konva from \"konva\";\nimport { ChangeActiveDraggerEvent, IViewpoint, LineType, PanEvent } from \"@inweb/viewer-core\";\n\nimport { IMarkup, MarkupMode } from \"../../IMarkup\";\nimport { Viewer } from \"../../../Viewer\";\nimport { MarkupColor } from \"./MarkupColor\";\nimport * as utils from \"../../../Draggers/MeasureLineDragger/MeasureUtils\";\nimport { OdBaseDragger } from \"../../../Draggers/Common/OdBaseDragger\";\nimport { IMarkupObject } from \"../../Api/IMarkupObject\";\nimport { KonvaLine } from \"../../Api/Impl/Konva/KonvaLine\";\nimport { KonvaText } from \"../../Api/Impl/Konva/KonvaText\";\nimport { KonvaRectangle } from \"../../Api/Impl/Konva/KonvaRectangle\";\nimport { KonvaEllipse } from \"../../Api/Impl/Konva/KonvaEllipse\";\nimport { KonvaArrow } from \"../../Api/Impl/Konva/KonvaArrow\";\nimport { KonvaImage } from \"../../Api/Impl/Konva/KonvaImage\";\nimport { KonvaCloud } from \"../../Api/Impl/Konva/KonvaCloud\";\n\nclass KonvaShape {\n name: string;\n initializer: (ref: any) => any;\n}\n\n// move to separate class and create factory with enum?\nconst MarkupMode2Konva = new Map<MarkupMode, KonvaShape>([\n [\n MarkupMode.Line,\n {\n name: \"Line\",\n initializer: (ref) => {\n return new KonvaLine(null, ref);\n },\n },\n ],\n [\n MarkupMode.Text,\n {\n name: \"Text\",\n initializer: (ref) => {\n return new KonvaText(null, ref);\n },\n },\n ],\n [\n MarkupMode.Rectangle,\n {\n name: \"Rect\",\n initializer: (ref) => {\n return new KonvaRectangle(null, ref);\n },\n },\n ],\n [\n MarkupMode.Ellipse,\n {\n name: \"Ellipse\",\n initializer: (ref) => {\n return new KonvaEllipse(null, ref);\n },\n },\n ],\n [\n MarkupMode.Arrow,\n {\n name: \"Arrow\",\n initializer: (ref) => {\n return new KonvaArrow(null, ref);\n },\n },\n ],\n [\n MarkupMode.Image,\n {\n name: \"Image\",\n initializer: (ref) => {\n return new KonvaImage(null, ref);\n },\n },\n ],\n [\n MarkupMode.Cloud,\n {\n name: \"Cloud\",\n initializer: (ref) => {\n return new KonvaCloud(null, ref);\n },\n },\n ],\n]);\n\nexport class KonvaMarkup implements IMarkup {\n private _isInitialized = false;\n private _viewer: Viewer;\n private _canvasOriginal: HTMLCanvasElement;\n private _canvasEvents: string[];\n private _markupIsActive: boolean;\n private _markupMode: MarkupMode;\n private _markupColor: MarkupColor;\n private _konvaStage: Konva.Stage;\n private _konvaLayer: Konva.Layer;\n private _konvaTransformer: Konva.Transformer;\n\n private _textInputRef: HTMLTextAreaElement;\n private _textInputPos: Konva.Vector2d;\n private _textInputAngle: number;\n private _markupContainer: HTMLDivElement;\n private _zIndex = 1;\n\n private readonly _markupContainerName = \"markupContainer\";\n\n public lineWidth = 4;\n\n initialize(viewer: Viewer, canvas: HTMLCanvasElement, canvasEvents: string[] = []): void {\n if (!Konva)\n throw new Error(\n 'Konva Markup: Error during Markup Initialization. Konva is not initialized. Update node_modules or add to your page <script src=\"https://unpkg.com/konva@9/konva.min.js\"></script>'\n );\n\n this._viewer = viewer;\n\n this._canvasOriginal = canvas;\n this._canvasEvents = canvasEvents;\n\n this._markupContainer = document.createElement(\"div\");\n this._markupContainer.id = this._markupContainerName;\n this._markupContainer.style.position = \"absolute\";\n this._markupContainer.style.top = \"0px\";\n this._markupContainer.style.left = \"0px\";\n // to eliminate grey box during delete elements\n this._markupContainer.style.outline = \"0px\";\n\n const parentDiv = this._canvasOriginal.parentElement;\n parentDiv.appendChild(this._markupContainer);\n\n this._markupColor = new MarkupColor(255, 0, 0);\n this._markupIsActive = false;\n\n this.initializeKonva();\n this.resize();\n\n this._canvasEvents.forEach((x) => this._markupContainer.addEventListener(x, this.redirectToViewer));\n\n this._viewer.addEventListener(\"resize\", this.resize);\n this._viewer.addEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._viewer.addEventListener(\"pan\", this.pan);\n\n this._isInitialized = true;\n }\n\n dispose(): void {\n if (!this._isInitialized) return;\n\n this._canvasEvents.forEach((x) => this._markupContainer.removeEventListener(x, this.redirectToViewer));\n\n this._viewer.removeEventListener(\"pan\", this.pan);\n this._viewer.removeEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._viewer.removeEventListener(\"resize\", this.resize);\n\n this.destroyKonva();\n\n this._markupContainer.remove();\n\n this._markupContainer = undefined;\n this._canvasOriginal = undefined;\n this._viewer = undefined;\n\n this._isInitialized = false;\n }\n\n changeActiveDragger = (event: ChangeActiveDraggerEvent) => {\n const draggerName = event.data;\n\n this._markupContainer.className = this._canvasOriginal.className\n .split(\" \")\n .filter((x) => !x.startsWith(\"oda-cursor-\"))\n .filter((x) => x)\n .concat(`oda-cursor-${draggerName.toLowerCase()}`)\n .join(\" \");\n\n this.removeTextInput();\n\n const markupMode = MarkupMode[draggerName];\n const konvaMode = MarkupMode2Konva.get(markupMode);\n if (konvaMode) {\n this._markupMode = markupMode;\n this._markupIsActive = true;\n } else {\n this._markupIsActive = false;\n this._konvaTransformer.nodes([]);\n }\n };\n\n resize = () => {\n this._konvaStage?.width(this._canvasOriginal.clientWidth);\n this._konvaStage?.height(this._canvasOriginal.clientHeight);\n };\n\n pan = (event: PanEvent) => {\n const dX = event.dX / window.devicePixelRatio;\n const dY = event.dY / window.devicePixelRatio;\n\n Object.values(MarkupMode).forEach((mode) => this.konvaLayerFind(mode).forEach((x) => x.move({ x: dX, y: dY })));\n };\n\n redirectToViewer = (event) => {\n this._viewer.emit(event);\n };\n\n getDraggers(): Map<string, typeof OdBaseDragger> {\n return null;\n }\n\n clearOverlay(): void {\n this.removeTextInput();\n this._konvaTransformer.nodes([]);\n Object.values(MarkupMode).forEach((mode) => this.konvaLayerFind(mode).forEach((x) => x.destroy()));\n }\n\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markupColor.RGB;\n }\n\n setMarkupColor(r: number, g: number, b: number): void {\n this._markupColor.setColor(r, g, b);\n }\n\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n const hex = new MarkupColor(r, g, b).HexColor;\n Object.values(MarkupMode).forEach((mode) => {\n this.konvaLayerFind(mode).forEach((x) => {\n const konvaObj = MarkupMode2Konva.get(mode).initializer(x);\n if (konvaObj.setColor) konvaObj.setColor(hex);\n });\n });\n\n this._konvaLayer.draw();\n }\n\n setViewpoint(viewpoint: IViewpoint): void {\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 this.loadMarkup(viewpoint);\n }\n\n getViewpoint(): IViewpoint {\n // TODO: at the current 25.2 state we need VisualizeJS here and below. In the future we need to use it as an external interface.\n if (!this._viewer.visualizeJs) return {};\n\n const viewpoint: IViewpoint = {\n lines: [],\n texts: [],\n arrows: [],\n clouds: [],\n ellipses: [],\n images: [],\n rectangles: [],\n };\n\n viewpoint.snapshot = {\n data: this.combineMarkupWithDrawing(),\n };\n\n viewpoint.custom_fields = {\n markup_color: this.getMarkupColor(),\n };\n\n this.fillViewpointShapes(viewpoint);\n\n viewpoint.description = new Date().toDateString();\n return viewpoint;\n }\n\n createObject(type: string, params: any): IMarkupObject {\n let object;\n let zIndex = this._zIndex;\n\n // TODO: factory?\n switch (type) {\n case \"line\":\n object = new KonvaLine(params);\n zIndex = 1;\n break;\n case \"text\":\n object = new KonvaText(params);\n break;\n case \"rectangle\":\n object = new KonvaRectangle(params);\n zIndex = 1;\n break;\n case \"ellipse\":\n object = new KonvaEllipse(params);\n zIndex = 1;\n break;\n case \"arrow\":\n object = new KonvaArrow(params);\n break;\n case \"image\":\n object = new KonvaImage(params);\n zIndex = 0;\n break;\n case \"cloud\":\n object = new KonvaCloud(params);\n zIndex = 1;\n break;\n default:\n throw new Error(\"Markup CreateObject - unsupported type has been detected.\");\n }\n\n this.addObject(object);\n\n // Set zIndex only when shape has been added to Layer else we will get \"Konva warning: Node has no parent. zIndex parameter is ignored.\"\n object.setZIndex(zIndex);\n this._zIndex++;\n return object;\n }\n\n getObjects(): IMarkupObject[] {\n const objects = [];\n this.konvaLayerFind(MarkupMode.Line).forEach((line) => {\n objects.push(new KonvaLine(null, line));\n });\n\n this.konvaLayerFind(MarkupMode.Text).forEach((text) => {\n objects.push(new KonvaText(null, text));\n });\n\n this.konvaLayerFind(MarkupMode.Rectangle).forEach((rectangle) => {\n objects.push(new KonvaRectangle(null, rectangle));\n });\n\n this.konvaLayerFind(MarkupMode.Ellipse).forEach((ellipse) => {\n objects.push(new KonvaEllipse(null, ellipse));\n });\n\n this.konvaLayerFind(MarkupMode.Arrow).forEach((arrow) => {\n objects.push(new KonvaArrow(null, arrow));\n });\n\n this.konvaLayerFind(MarkupMode.Image).forEach((image) => {\n objects.push(new KonvaImage(null, image));\n });\n\n this.konvaLayerFind(MarkupMode.Cloud).forEach((cloud) => {\n objects.push(new KonvaCloud(null, cloud));\n });\n\n return objects;\n }\n\n getSelectedObjects(): IMarkupObject[] {\n const objects = [];\n\n this._konvaTransformer.nodes().forEach((obj) => {\n const konvaShapeName = obj.className;\n switch (konvaShapeName) {\n case \"Line\":\n objects.push(new KonvaLine(null, obj));\n break;\n case \"Text\":\n objects.push(new KonvaText(null, obj));\n break;\n case \"Rect\":\n objects.push(new KonvaRectangle(null, obj));\n break;\n case \"Ellipse\":\n objects.push(new KonvaEllipse(null, obj));\n break;\n case \"Arrow\":\n objects.push(new KonvaArrow(null, obj));\n break;\n case \"Image\":\n objects.push(new KonvaImage(null, obj));\n break;\n case \"Cloud\":\n objects.push(new KonvaCloud(null, obj));\n break;\n default:\n break;\n }\n });\n\n return objects;\n }\n\n selectObjects(objects: IMarkupObject[]) {\n const selectedObjs = this._konvaTransformer.nodes().concat(objects.map((x) => x.ref()));\n this._konvaTransformer.nodes(selectedObjs);\n }\n\n clearSelected(): void {\n this._konvaTransformer.nodes([]);\n }\n\n private getPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n private fillViewpointShapes(viewpoint) {\n const markupLines = this.getMarkupLines();\n if (markupLines && markupLines.length > 0) {\n markupLines?.forEach((line) => {\n viewpoint.lines.push(line);\n });\n }\n\n const markupTexts = this.getMarkupTexts();\n if (markupTexts && markupTexts.length > 0) {\n markupTexts?.forEach((text) => {\n viewpoint.texts.push(text);\n });\n }\n\n const markupRectangles = this.getMarkupRectangles();\n if (markupRectangles && markupRectangles.length > 0) {\n markupRectangles?.forEach((rectangle) => {\n viewpoint.rectangles.push(rectangle);\n });\n }\n\n const markupEllipses = this.getMarkupEllipses();\n if (markupEllipses && markupEllipses.length > 0) {\n markupEllipses?.forEach((ellipse) => {\n viewpoint.ellipses.push(ellipse);\n });\n }\n\n const markupArrows = this.getMarkupArrows();\n if (markupArrows && markupArrows.length > 0) {\n markupArrows?.forEach((arrow) => {\n viewpoint.arrows.push(arrow);\n });\n }\n\n const markupImages = this.getMarkupImages();\n if (markupImages && markupImages.length > 0) {\n markupImages?.forEach((image) => {\n viewpoint.images.push(image);\n });\n }\n\n const markupClouds = this.getMarkupClouds();\n if (markupClouds && markupClouds.length > 0) {\n markupClouds?.forEach((cloud) => {\n viewpoint.clouds.push(cloud);\n });\n }\n }\n\n private addObject(object: IMarkupObject): void {\n this._konvaLayer.add(object.ref());\n }\n\n private konvaLayerFind(markupShape: MarkupMode): any {\n const konvaShape = MarkupMode2Konva.get(markupShape);\n if (konvaShape) {\n // for \"draggable\" Konva uses Rectangles in Transformer. We need only Shapes from Layer.\n const konvaShapes = this._konvaLayer.find(konvaShape.name).filter((x) => x.parent instanceof Konva.Layer);\n return konvaShapes;\n }\n }\n\n private initializeKonva(): any {\n // first we need Konva core things: stage and layer\n this._konvaStage = new Konva.Stage({\n container: this._markupContainerName,\n width: this._canvasOriginal.clientWidth,\n height: this._canvasOriginal.clientHeight,\n });\n const stage = this._konvaStage;\n const layer = new Konva.Layer({ pixelRation: window.devicePixelRatio });\n stage.add(layer);\n this._konvaLayer = layer;\n\n const transformer = new Konva.Transformer({\n shouldOverdrawWholeArea: false,\n });\n\n this._konvaTransformer = transformer;\n layer.add(transformer);\n\n let isPaint = false;\n let lastLine;\n\n stage.on(\"mousedown touchstart\", (e) => {\n // do nothing if we mousedown on any shape\n if (!this._markupIsActive || e.target !== stage || this._markupMode === MarkupMode.Text) return;\n\n if (e.target === stage && transformer.nodes().length > 0) {\n transformer.nodes([]);\n return;\n }\n\n const pos = stage.getPointerPosition();\n\n if (this._markupMode === MarkupMode.Line) {\n // add point twice, so we have some drawings even on a simple click\n lastLine = this.addLine([pos.x, pos.y, pos.x, pos.y]);\n\n isPaint = true;\n }\n // 25.2 - currently only for debug purposes:\n else if (this._markupMode === MarkupMode.Rectangle) {\n this.addRectangle({ x: pos.x, y: pos.y }, 50, 50);\n } else if (this._markupMode === MarkupMode.Ellipse) {\n this.addEllipse({ x: pos.x, y: pos.y }, { x: 50, y: 50 });\n } else if (this._markupMode === MarkupMode.Arrow) {\n this.addArrow({ x: pos.x, y: pos.y }, { x: pos.x + 50, y: pos.y + 50 });\n } else if (this._markupMode === MarkupMode.Cloud) {\n this.addCloud({ x: pos.x, y: pos.y }, 200, 400);\n }\n });\n\n stage.on(\"mouseup touchend\", (e) => {\n if (!this._markupIsActive) return;\n isPaint = false;\n });\n\n stage.on(\"mousemove touchmove\", (e) => {\n if (!this._markupIsActive) return;\n if (!isPaint) {\n return;\n }\n\n // prevent scrolling on touch devices\n //e.evt.preventDefault();\n\n const pos = stage.getPointerPosition();\n const newPoints = lastLine.points().concat([pos.x, pos.y]);\n lastLine.points(newPoints);\n });\n\n // clicks should select/deselect shapes\n stage.on(\"click tap\", (e) => {\n if (!this._markupIsActive) return;\n\n // if click on empty area - remove all selections\n if (e.target === stage) {\n if (this._markupMode === MarkupMode.Text) {\n if (this._textInputRef) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle);\n 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 }\n transformer.nodes([]);\n return;\n }\n\n if (e.target.className === \"Text\" && transformer.nodes().length === 1 && transformer.nodes()[0] === e.target) {\n if (this._textInputRef) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle);\n else\n this.createTextInput(\n { x: e.target.attrs.x, y: e.target.attrs.y },\n e.evt.pageX,\n e.evt.pageY,\n e.target.attrs.rotation,\n e.target.attrs.text\n );\n return;\n } else {\n this.removeTextInput();\n }\n\n if (transformer.nodes().filter((x) => x.className === \"Cloud\").length > 0 || e.target.className === \"Cloud\") {\n transformer.rotateEnabled(false);\n } else {\n transformer.rotateEnabled(true);\n }\n\n // do we pressed shift or ctrl?\n const metaPressed = e.evt.shiftKey || e.evt.ctrlKey || e.evt.metaKey;\n const isSelected = transformer.nodes().indexOf(e.target) >= 0;\n\n if (!metaPressed && !isSelected) {\n // if no key pressed and the node is not selected\n // select just one\n transformer.nodes([e.target]);\n } else if (metaPressed && isSelected) {\n // if we pressed keys and node was selected\n // we need to remove it from selection:\n const nodes = transformer.nodes().slice(); // use slice to have new copy of array\n // remove node from array\n nodes.splice(nodes.indexOf(e.target), 1);\n transformer.nodes(nodes);\n } else if (metaPressed && !isSelected) {\n // add the node into selection\n const nodes = transformer.nodes().concat([e.target]);\n transformer.nodes(nodes);\n }\n });\n\n const container = stage.container();\n container.tabIndex = 1;\n // focus it\n // also stage will be in focus on its click\n container.focus();\n\n container.addEventListener(\"keydown\", (e) => {\n if (!this._markupIsActive) return;\n if (e.code === \"Delete\") {\n const trNodes = this._konvaTransformer.nodes();\n if (trNodes.length > 0) {\n this._konvaTransformer.nodes().forEach((x) => x.destroy());\n this._konvaTransformer.nodes([]);\n }\n layer.draw();\n return;\n }\n e.preventDefault();\n });\n }\n\n private destroyKonva() {\n this.clearOverlay();\n\n this._konvaStage.destroy();\n\n this._konvaLayer = undefined;\n this._konvaTransformer = undefined;\n this._konvaStage = undefined;\n }\n\n private getMarkupLines() {\n const lines = [];\n this.konvaLayerFind(MarkupMode.Line).forEach((line) => {\n const linePoints = line.points();\n if (!linePoints) return;\n const worldPoints = [];\n const absoluteTransform = line.getAbsoluteTransform();\n for (let i = 0; i < linePoints.length; i += 2) {\n // we need getAbsoluteTransform because inside Konva position starts from {0, 0}\n // https://stackoverflow.com/a/57641487 - check answer's comments\n const atPoint = absoluteTransform.point({ x: linePoints[i], y: linePoints[i + 1] });\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(atPoint.x * window.devicePixelRatio, atPoint.y * window.devicePixelRatio);\n worldPoints.push(worldPoint);\n }\n\n const konvaLine = new KonvaLine(null, line);\n lines.push({\n id: konvaLine.id(),\n points: worldPoints.map((p) => this.getPoint3dFromArray(p)),\n color: konvaLine.getColor() || \"ff0000\",\n type: konvaLine.getLineType() || \"solid\",\n width: konvaLine.getLineWidth() || 3,\n });\n });\n\n return lines;\n }\n\n private getMarkupTexts() {\n const texts = [];\n\n const textSize = 0.02;\n let textScale = 1.0;\n\n const projMtrx = this._viewer.visViewer().activeView.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 this.konvaLayerFind(MarkupMode.Text).forEach((text) => {\n if (!text) return;\n\n const position = this._viewer\n .visViewer()\n .screenToWorld(text.x() * window.devicePixelRatio, text.y() * window.devicePixelRatio);\n\n const shape = new KonvaText(null, text);\n texts.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(position),\n text: shape.getText(),\n text_size: textSize * textScale,\n angle: shape.getRotation(),\n color: shape.getColor(),\n font_size: shape.getFontSize(),\n });\n });\n\n return texts;\n }\n\n private getMarkupRectangles() {\n const rectangles = [];\n this.konvaLayerFind(MarkupMode.Rectangle).forEach((rect) => {\n const position = rect.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaRectangle(null, rect);\n rectangles.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor(),\n });\n });\n\n return rectangles;\n }\n\n private getMarkupEllipses() {\n const ellipses = [];\n this.konvaLayerFind(MarkupMode.Ellipse).forEach((ellipse) => {\n const position = ellipse.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaEllipse(null, ellipse);\n ellipses.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n radius: { x: ellipse.getRadiusX(), y: ellipse.getRadiusY() },\n line_width: shape.getLineWidth(),\n color: shape.getColor(),\n });\n });\n\n return ellipses;\n }\n\n private getMarkupArrows() {\n const arrows = [];\n this.konvaLayerFind(MarkupMode.Arrow).forEach((arrow) => {\n // we need getAbsoluteTransform because inside Konva position starts from {0, 0}\n const absoluteTransform = arrow.getAbsoluteTransform();\n\n const atStartPoint = absoluteTransform.point({ x: arrow.points()[0], y: arrow.points()[1] });\n const worldStartPoint = this._viewer\n .visViewer()\n .screenToWorld(atStartPoint.x * window.devicePixelRatio, atStartPoint.y * window.devicePixelRatio);\n\n const atEndPoint = absoluteTransform.point({ x: arrow.points()[2], y: arrow.points()[3] });\n const worldEndPoint = this._viewer\n .visViewer()\n .screenToWorld(atEndPoint.x * window.devicePixelRatio, atEndPoint.y * window.devicePixelRatio);\n\n const shape = new KonvaArrow(null, arrow);\n arrows.push({\n id: shape.id(),\n start: this.getPoint3dFromArray(worldStartPoint),\n end: this.getPoint3dFromArray(worldEndPoint),\n color: shape.getColor(),\n });\n });\n\n return arrows;\n }\n\n private getMarkupImages() {\n const images = [];\n this.konvaLayerFind(MarkupMode.Image).forEach((image) => {\n const position = image.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaImage(null, image);\n images.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n src: shape.getSrc(),\n width: shape.getWidth(),\n height: shape.getHeight(),\n });\n });\n\n return images;\n }\n\n private getMarkupClouds() {\n const clouds = [];\n this.konvaLayerFind(MarkupMode.Cloud).forEach((cloud) => {\n const position = cloud.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaCloud(null, cloud);\n clouds.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor(),\n });\n });\n\n return clouds;\n }\n\n private loadMarkup(viewpoint: IViewpoint) {\n viewpoint.lines?.forEach((vpLine) => {\n const linePoints = [];\n vpLine.points.forEach((point) => {\n const screenPoint = utils.worldToScreen(\n [point.x, point.y, point.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n linePoints.push(screenPoint.x);\n linePoints.push(screenPoint.y);\n });\n\n this.addLine(linePoints, vpLine.color, vpLine.type, vpLine.width, vpLine.id);\n });\n\n viewpoint.texts?.forEach((vpText) => {\n const screenPoint = utils.worldToScreen(\n [vpText.position.x, vpText.position.y, vpText.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n this.addText(vpText.text, screenPoint, vpText.angle, vpText.color, vpText.text_size, vpText.font_size, vpText.id);\n });\n\n viewpoint.rectangles?.forEach((vpRect) => {\n const screenPoint = utils.worldToScreen(\n [vpRect.position.x, vpRect.position.y, vpRect.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addRectangle(\n { x: screenPoint.x, y: screenPoint.y },\n vpRect.width,\n vpRect.height,\n vpRect.line_width,\n vpRect.color,\n vpRect.id\n );\n });\n\n viewpoint.ellipses?.forEach((vpEllipse) => {\n const screenPoint = utils.worldToScreen(\n [vpEllipse.position.x, vpEllipse.position.y, vpEllipse.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addEllipse(\n { x: screenPoint.x, y: screenPoint.y },\n { x: vpEllipse.radius.x, y: vpEllipse.radius.y },\n vpEllipse.line_width,\n vpEllipse.color,\n vpEllipse.id\n );\n });\n\n viewpoint.arrows?.forEach((vpArrow) => {\n const startPoint = utils.worldToScreen(\n [vpArrow.start.x, vpArrow.start.y, vpArrow.start.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n const endPoint = utils.worldToScreen(\n [vpArrow.end.x, vpArrow.end.y, vpArrow.end.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addArrow({ x: startPoint.x, y: startPoint.y }, { x: endPoint.x, y: endPoint.y }, vpArrow.color, vpArrow.id);\n });\n\n viewpoint.clouds?.forEach((vpCloud) => {\n const screenPoint = utils.worldToScreen(\n [vpCloud.position.x, vpCloud.position.y, vpCloud.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addCloud(\n { x: screenPoint.x, y: screenPoint.y },\n vpCloud.width,\n vpCloud.height,\n vpCloud.line_width,\n vpCloud.color,\n vpCloud.id\n );\n });\n\n viewpoint.images?.forEach((vpImage) => {\n const screenPoint = utils.worldToScreen(\n [vpImage.position.x, vpImage.position.y, vpImage.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addImage({ x: screenPoint.x, y: screenPoint.y }, vpImage.src, vpImage.width, vpImage.height, vpImage.id);\n });\n }\n\n private combineMarkupWithDrawing() {\n const trNodes = this._konvaTransformer.nodes();\n if (trNodes.length > 0) {\n this._konvaTransformer.nodes([]);\n }\n\n const tempCanvas = document.createElement(\"canvas\");\n tempCanvas.height = this._canvasOriginal.height;\n tempCanvas.width = this._canvasOriginal.width;\n const ctx = tempCanvas.getContext(\"2d\");\n ctx.drawImage(this._canvasOriginal, 0, 0);\n ctx.drawImage(this._konvaStage.toCanvas({ pixelRatio: window.devicePixelRatio }), 0, 0);\n return tempCanvas.toDataURL(\"image/jpeg\", 0.25);\n }\n\n private addLine(\n linePoints: number[],\n color?: string,\n type?: LineType,\n width?: number,\n id?: string\n ): Konva.Line | void {\n if (!linePoints || linePoints.length === 0) return;\n const points: { x: number; y: number }[] = [];\n for (let i = 0; i < linePoints.length; i += 2) {\n points.push({ x: linePoints[i], y: linePoints[i + 1] });\n }\n\n const konvaLine = new KonvaLine({\n points,\n type: type || \"solid\",\n width: width || this.lineWidth,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaLine.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private createTextInput(pos: Konva.Vector2d, inputX: number, inputY: number, angle: number, text: string): void {\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.onkeydown = (event) => {\n if (event.key === \"Enter\") {\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\n setTimeout(() => {\n this._textInputRef.focus();\n }, 50);\n } else {\n this.removeTextInput();\n }\n }\n\n private removeTextInput(): void {\n this._textInputRef?.remove();\n this._textInputRef = null;\n this._textInputPos = null;\n this._textInputAngle = 0;\n }\n\n private addText(\n specifiedText: string,\n position: Konva.Vector2d,\n angle?: number,\n color?: string,\n textSize?: number,\n fontSize?: number,\n id?: string\n ): void {\n if (specifiedText) {\n const tol = 1.0e-6;\n\n // in case we have old viewpoint without font_size\n if (textSize && textSize > tol && (!fontSize || fontSize < tol)) {\n const size = 0.02;\n let scale = 1.0;\n\n const projMtrx = this._viewer.visViewer().activeView.projectionMatrix;\n const mtrxNumber = projMtrx.get(1, 1);\n\n if (mtrxNumber > tol || mtrxNumber < -tol) {\n scale = 1 / mtrxNumber;\n }\n fontSize = textSize / (scale / size) / 34;\n }\n\n const konvaText = new KonvaText({\n position: { x: position.x, y: position.y },\n text: specifiedText,\n rotation: angle,\n fontSize,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n this._konvaLayer.add(konvaText.ref());\n }\n\n const trNodes = this._konvaTransformer.nodes();\n if (trNodes.length > 0) {\n // in case of edit - remove old Konva.Text object\n trNodes[0].destroy();\n this._konvaTransformer.nodes([]);\n }\n\n this.removeTextInput();\n\n return;\n }\n\n private addRectangle(\n position: Konva.Vector2d,\n width: number,\n height: number,\n lineWidth?: number,\n color?: string,\n id?: string\n ): Konva.Rect | void {\n if (!position) return;\n\n const konvaRectangle = new KonvaRectangle({\n position,\n width,\n height,\n lineWidth: lineWidth || this.lineWidth,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaRectangle.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addEllipse(\n position: { x: number; y: number },\n radius: { x: number; y: number },\n lineWidth?: number,\n color?: string,\n id?: string\n ): Konva.Ellipse | void {\n if (!position) return;\n\n const konvaEllipse = new KonvaEllipse({\n position,\n radius,\n lineWidth,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaEllipse.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addArrow(\n start: { x: number; y: number },\n end: { x: number; y: number },\n color?: string,\n id?: string\n ): Konva.Arrow | void {\n if (!start || !end) return;\n\n const konvaArrow = new KonvaArrow({\n start,\n end,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaArrow.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addCloud(\n position: { x: number; y: number },\n width: number,\n height: number,\n lineWidth?: number,\n color?: string,\n id?: string\n ): Konva.Shape | void {\n if (!position || !width || !height) return;\n\n const konvaCloud = new KonvaCloud({\n position,\n width,\n height,\n color: color || this._markupColor.HexColor,\n lineWidth: lineWidth || this.lineWidth,\n id,\n });\n\n const obj = konvaCloud.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addImage(\n position: { x: number; y: number },\n src: string,\n width: number,\n height: number,\n id?: string\n ): Konva.Image | void {\n if (!position || !width || !height) return;\n\n const konvaImage = new KonvaImage({\n position,\n src,\n width,\n height,\n id,\n });\n\n const obj = konvaImage.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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-2021, 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-2021 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 { ILine, IText, IViewpoint } from \"@inweb/viewer-core\";\n\nimport { IMarkup, MarkupMode } from \"../../IMarkup\";\nimport { Viewer } from \"../../../Viewer\";\nimport { OdBaseDragger } from \"../../../Draggers/Common/OdBaseDragger\";\nimport { MARKUP_ENTITY_LINE, OdaLineDragger } from \"../../../Draggers/OdaLineDragger\";\nimport { MARKUP_ENTITY_TEXT, OdaTextDragger } from \"../../../Draggers/OdaTextDragger\";\nimport { IMarkupObject } from \"../../Api/IMarkupObject\";\n\nexport class VisualizeMarkup implements IMarkup {\n private _viewer: Viewer;\n protected _markupColor = { r: 255, g: 0, b: 0 };\n\n public lineWidth = 0;\n\n initialize(viewer: Viewer, canvas: HTMLCanvasElement, canvasEvents: string[]): void {\n this._viewer = viewer;\n }\n\n dispose(): void {}\n\n getDraggers(): Map<string, typeof OdBaseDragger> {\n return new Map<string, typeof OdBaseDragger>([\n [MarkupMode.Line, OdaLineDragger],\n [MarkupMode.Text, OdaTextDragger],\n ]);\n }\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 this._viewer.update();\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 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 getLayer(): any {\n throw new Error(\"Not implemented yet\");\n }\n\n createObject(type: string, params: any): IMarkupObject {\n throw new Error(\"Not implemented yet\");\n }\n\n getObjects(): IMarkupObject[] {\n throw new Error(\"Not implemented yet\");\n }\n\n getSelectedObjects(): IMarkupObject[] {\n throw new Error(\"Not implemented yet\");\n }\n\n selectObjects(objects: IMarkupObject[]): void {\n throw new Error(\"Not implemented yet\");\n }\n\n clearSelected(): void {\n throw new Error(\"Not implemented yet\");\n }\n}\n","import { IMarkup, MarkupType } from \"./IMarkup\";\nimport { KonvaMarkup } from \"./Impl/Konva/KonvaMarkup\";\nimport { VisualizeMarkup } from \"./Impl/Visualize/VisualizeMarkup\";\n\nexport class MarkupFactory {\n public static createMarkup(markupType: MarkupType): IMarkup {\n let markup;\n switch (markupType) {\n case MarkupType.Konva:\n markup = this.createKonva();\n break;\n\n case MarkupType.Visualize:\n markup = this.createVisualize();\n break;\n\n default:\n throw new Error(\"Error during Markup Initialization. Markup Type is unknown.\");\n break;\n }\n\n return markup;\n }\n\n private static createKonva(): IMarkup {\n return new KonvaMarkup();\n }\n\n private static createVisualize(): IMarkup {\n return new VisualizeMarkup();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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 commands,\n IClippingPlane,\n IOptions,\n IOrthogonalCamera,\n IViewpoint,\n IViewer,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\n\nimport { OdBaseDragger } from \"./Draggers/Common/OdBaseDragger\";\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 } from \"./Markup/MarkupFactory\";\nimport { IMarkup, MarkupType } from \"./Markup/IMarkup\";\n\nconst OVERLAY_VIEW_NAME = \"$OVERLAY_VIEW_NAME\";\n\nconst isExist = (value) => value !== undefined && value !== null;\n\n/**\n * The `Client.js` library class that provides methods to integrate with the\n * [VisualizeJS](https://cloud.opendesign.com/docs/index.html#/visualizejs) library.\n */\n\nexport class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> implements IViewer {\n private _activeDragger: OdBaseDragger | 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 _abortControllerForReferences: AbortController | undefined;\n\n private canvaseventlistener: (event: Event) => void;\n\n public draggerFactory: Map<string, typeof OdBaseDragger>;\n public canvasEvents: string[];\n private frameId = 0;\n private _resizeObserver: ResizeObserver | undefined;\n public canvas: HTMLCanvasElement | undefined;\n public markup: IMarkup;\n\n public visualizeJs: any;\n public _abortController: AbortController | undefined;\n public _abortControllerForRequestMap: Map<string, AbortController> | undefined;\n public client: Client | undefined;\n\n /**\n * @param client - The `Client` instance that provides access to a server. Do not specify\n * `Client` if you need a standalone viewer instance without access to server models.\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 leave it undefined or blank to use the default URL defined by\n * `Client.js` you are using.\n *\n * _Note: Your own `VisualizeJS` library version must match the version of the `Client.js`\n * 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 update the `VisualizeJS` viewer and the active\n * dragger manually using the `update` event. Default is `true`.\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.markup = MarkupFactory.createMarkup(params.markupType ?? MarkupType.Konva);\n\n this.draggerFactory = new Map<string, typeof OdBaseDragger>();\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 const markupDraggers = this.markup.getDraggers();\n markupDraggers?.forEach((value, key) => {\n this.registerDragger(key, value);\n });\n\n this.canvasEvents = CANVAS_EVENTS;\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\n /**\n * `VisualizeJS` parameters.\n */\n get options(): Options {\n return this._options;\n }\n\n /**\n * `VisualizeJS` library URL. Use {@link Viewer#configure | configure()} to change library URL.\n *\n * @readonly\n */\n get visualizeJsUrl(): string {\n return this._visualizeJsUrl;\n }\n\n /**\n * Change the viewer configuration parameters.\n *\n * @param params - An object containing new configuration parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own\n * library instance or leave it blank to use the default URL defined by `Client.js`.\n */\n configure(params: { visualizeJsUrl?: string }): this {\n this._visualizeJsUrl = params.visualizeJsUrl || \"VISUALIZE_JS_URL\";\n return this;\n }\n\n /**\n * A [Viewer]{@link Viewer} event measuring progress of loading a `VisualizeJS` library.\n *\n * @property {string} type - `visualizeprogress`\n * @property {number} loaded - A 64-bit unsigned integer value indicating the amount of work\n * already performed by the underlying process. The ratio of work done can be calculated by\n * dividing total by the value of this property.\n * @property {number} total - A 64-bit unsigned integer representing the total amount of work\n * that the underlying process is in the progress of performing.\n * @event visualizeprogress\n */\n\n /**\n * Load `VisualizeJS` module and initialize it with the specified canvas. Call\n * {@link Viewer#dispose | dispose()} to release allocated resources.\n *\n * @async\n * @param canvas - HTML `<canvas>` element for `VisualizeJS`.\n * @param onProgress - A callback function that handles events measuring progress of loading\n * of the `VisualizeJS` library. Retrieves {@link event:visualizeprogress | visualizeprogress} event.\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 const visualizeJs: any = await loadVisualizeJs(this.visualizeJsUrl, (ev) => {\n const { loaded, timeStamp, total, lengthComputable } = ev;\n const event = { loaded, timeStamp, total, lengthComputable, type: \"visualizeprogress\" } as ProgressEvent;\n onProgress?.(event);\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);\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 return this;\n }\n\n /**\n * Releases all resources allocated by this `Viewer` instance. Call this method before\n * release 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\n this._zoomWheelDragger?.dispose();\n this._gestureManager?.dispose();\n\n this.removeAllListeners();\n\n this._resizeObserver?.disconnect();\n this._resizeObserver = undefined;\n\n this.markup.dispose();\n\n this.canvasEvents.forEach((x) => this.canvas?.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n\n this.visualizeJs?.getViewer().clear();\n this.visualizeJs = undefined;\n\n return this;\n }\n\n /**\n * Returns `true` if `VisualizeJS` module has been loaded andinitialized.\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. Do nothing if the auto-update mode is disabled in the constructor (use\n * the `update` event to update viewer 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 /**\n * Update with internal schedule, need after change operation when have long update for\n * update without lock UI\n *\n * @param maxScheduleUpdateTimeInMs - Maximum time for one update, by default 30 ms\n * @param maxScheduleUpdateCount - Maximum count of schedule update\n * @returns return void Promise\n */\n\n private scheduleUpdateAsync(maxScheduleUpdateTimeInMs = 50): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => {\n try {\n this.visViewer()?.update(maxScheduleUpdateTimeInMs);\n this.activeDragger()?.updatePreview();\n resolve();\n } catch (e) {\n console.error(e);\n reject();\n }\n }, 0);\n });\n }\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 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 available draggers:\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 * Register dragger on draggerFactory.\n *\n * @param name - Dragger name.\n * @param dragger - Dragger class.\n */\n public registerDragger(name: string, dragger: typeof OdBaseDragger): 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(): any | null {\n return this._activeDragger;\n }\n\n /**\n * Set active dragger. `Viewer` must be {@link Viewer#initialize | initialized} before enable\n * dragger or exception is thrown.\n *\n * Fires:\n *\n * - {@link ChangeActiveDragger | changeactivedragger}\n *\n * @param name - Dragger name. Can be one of the {@link Viewer#draggers | draggers} list.\n * @returns Returns active dragger instance or `null` if there is no dragger with the given name.\n */\n setActiveDragger(name: string): OdBaseDragger | null {\n if (this._activeDragger?.name !== name) {\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\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 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 * Reset 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 * Remove 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 * Remove markup overlay.\n */\n clearOverlay(): void {\n this.markup.clearOverlay();\n }\n\n /**\n * Synchronize markup overlay.\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 overlayModel = visViewer.getMarkupModel();\n const pDevice = visViewer.getActiveDevice();\n\n overlayView = pDevice.createView(OVERLAY_VIEW_NAME, false);\n overlayView.addModel(overlayModel);\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.update();\n\n return overlayView;\n }\n\n /**\n * Returns `true` if current drawing is 3D drawing.\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 /**\n * Returns a list of original handles for the selected entities.\n */\n getSelected(): string[] {\n return this.executeCommand(\"getSelected\");\n }\n\n /**\n * Select model entities by original handles that are obtained using\n * {@link File.getProperties | File.getProperties()} or\n * {@link File.searchProperties | File.searchProperties()} methods.\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 /**\n * Load model references into the viewer. References are images, fonts, or any other files to\n * correct rendering of the model.\n *\n * @async\n * @param model - Instance of model with references. If a `File` instance is specified\n * instead of a model, the file references will be loaded.\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 // Internal loading routines\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 model of a file or assembly into the viewer.\n *\n * This method requires a [Client]{@link Client | Client} instance to work. For standalone\n * viewer instance use {@link Viewer#openVsfFile | openVsfFile()} or\n * {@link Viewer#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 * @async\n * @param file - File or Assembly or Model instance to load. If a `File` instance with\n * multiple models is specified, the default model will be loaded. If there is no default\n * model, 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 Viewer#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.\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 * Get markup color.\n *\n * @returns Color with `RGB` values.\n */\n getMarkupColor(): { r: number; g: number; b: number } {\n return this.markup.getMarkupColor();\n }\n\n /**\n * Set markup 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 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 * Colorize all markup entities 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 colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n this.markup.colorizeAllMarkup(r, g, b);\n }\n\n /**\n * Add an empty 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 * Draw a viewpoint. To get a list of available model viewpoints, use the\n * {@link Model#getViewpoints | Model.getViewpoints()} or\n * {@link File#getViewpoints | File.getViewpoints()}.\n *\n * @param viewpoint - Viewpoint.\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 * Create a viewpoint. To add a viewpoint to the list of model viewpoints, use the\n * {@link Model#saveViewpoint | Model.saveViewpoint()} or\n * {@link File#saveViewpoint | 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"],"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","CANVAS_EVENTS","composeMatrixFromTransform","translate","rotate","scale","modelCenter","matrix","translateMatrix","setTranslation","x","y","z","rotateMatrix","setToRotation","angle","scaleMatrix","setToScaling","postMultBy","applyModelTransform","model","visualizeJs","getModelTransformMatrix","visLib","visViewer","getViewer","modelItr","getModelIterator","done","step","modelPtr","getModel","transform","getDatabaseHandle","extents","getExtents","rotation","center","Matrix3d","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","zoomToObjects","zoomToSelected","EventEmitter2","_listeners","addEventListener","listener","removeEventListener","listeners","length","removeAllListeners","event","invoke","slice","on","off","OdaGeAction","module","setViewParams","params","extView","m_module","getActiveTvExtendedView","setView","target","upVector","viewFieldWidth","viewFieldHeight","perspective","getViewParams","view","obj","viewPosition","viewTarget","getMarkupModel","copyPoint","point","p","Point3d","createVector3d","Vector3d","createPoint3d","createMatrix3d","createPlane","OdTvPlane","toVector","geVector","createFromArray","toGeVector","v","toGePoint","toPoint","gePoint","screenToWorld","toDoubleArray","points","i","correctCameraTarget","ext","getActiveExtents","min","max","contains","CLICK_DELTA","INTERACTIVITY_FPS","OdBaseDragger","subject","super","beginInteractivity","endInteractivity","device","getActiveDevice","invalidate","width","height","needInputText","mouseDownPosition","autoSelect","onmessage","canvasEvents","initialize","bind","setEnableAutoSelect","dispose","relativeCoords","offsetX","devicePixelRatio","offsetY","pointerdown","ev","isPrimary","isGestureActive","setPointerCapture","pointerId","relCoord","isDragging","start","clientX","clientY","pointerup","needSkipPointerUp","releasePointerCapture","end","pointercancel","dispatchEvent","PointerEvent","pointermove","drag","movementX","movementY","click","isNotDragging","Math","abs","getEnableAutoSelect","select","dblclick","clickView","viewAt","active","pSelected","entity","zoomToEntity","deleteAll","absoluteX","absoluteY","getActiveMarkupEntity","entityName","addMarkupEntity","syncOverlayView","syncOverlay","objects","updatePreview","_isGestureActive","_needSkipPointerUp","createHtmlElementIfNeed","element","targetElement","dataTestId","document","createElement","setAttribute","appendChild","destroyHtmlElement","removeChild","worldToScreen","moduleInstance","worldPoint","avp","mtx","worldToDeviceMatrix","devicePoint","transformBy","res","getDistance","gePoint1","gePoint2","tvPoint1","tvPoint2","distance","distanceTo","toFixed","normalizeFloat","ceil","floor","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","dx","dy","atan","PI","size","sqrt","pow","onSetCallback","cb","onclick","onSetSelectivity","enable","style","pointerEvents","MeasureLineItem","htmlElemStartPoint","htmlElemEndPoint","htmlElemLine","htmlElemTitle","startPoint","endPoint","unit","lineThickness","border","background","color","boxShadow","utils.createHtmlElementIfNeed","isFinishDraw","drawMeasureLine","pointSize","rect","getBoundingClientRect","pScreenStart","utils.worldToScreen","utils.isInsideRect","display","cursor","top","left","borderRadius","zIndex","pScreenEnd","point1","point2","utils.getDataForDrawLineWithFixed","transformOrigin","pX","pY","widthTitle","font","padding","textAlign","innerHTML","utils.getDistance","setStartPoint","setEndPoint","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","body","resize","remove","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","code","add","timestamp","requestAnimationFrame","deltaTS","currentDelta","keyCode","moveForward","moveBackward","moveLeft","moveRight","moveUp","moveDown","dltX","dltY","turnLeft","turnDown","pCamera","camera","openObjectAsCamera","dir","direction","up","pos","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","setColor","kFaces","kEdges","setLineWeight","setTransparency","appendPolygon","polygonPtr","openAsPolygon","setFilled","setPoints","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","dX","dY","OdPanDragger","_panAction","ZoomAction","zoomFactor","zoomAt","OdZoomDragger","_zoomAction","pressX","pressY","ZOOM_SPEED","INTERACTIVITY_TIME_OUT","OdZoomWheelDragger","_endInteractivityTimeOutId","_isEnableInteractivityMode","wheel","preventDefault","zoomReverse","zoomSpeed","deltaY","clearTimeout","setTimeout","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","Promise","resolve","reject","script","src","async","onload","onerror","Error","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","name","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","file","pendingRanges","requestNumber","pendingRequest","number","concat","request","once","attachPartialResolver","catch","LoaderFactory","create","split","pop","MarkupType","MarkupMode","MarkupColor","HexColor","_hex","RGB","R","G","B","rgbToHex","valueToHex","c","hex","toString","LineTypeSpecs","KonvaLine","ref","_ref","konvaPoints","Konva","Line","stroke","strokeWidth","_b","globalCompositeOperation","lineCap","lineJoin","draggable","strokeScaleEnabled","dash","_id","enableMouseEditing","getColor","getRotation","setRotation","degrees","getZIndex","setZIndex","destroy","getPoints","setLineWidth","getLineWidth","getLineType","typeSpecs","setLineType","specs","addPoints","newPoints","KonvaText","TEXT_FONT_FAMILY","text","Text","fontSize","fontFamily","fill","align","_c","getText","setText","getPosition","setPosition","getFontSize","setFontSize","KonvaRectangle","Rect","lineWidth","_d","getWidth","getHeigth","setWidth","w","setHeight","h","KonvaEllipse","Ellipse","radiusX","radius","radiusY","getRadiusX","setRadiusX","getRadiusY","setRadiusY","KonvaArrow","Arrow","getStartPoint","getEndPoint","KonvaImage","_ratio","_canvasImage","image","Image","getSrc","setSrc","getHeight","KonvaCloud","arcRadius","Shape","sceneFunc","context","shape","calculateMidpoint","midX","midY","midPoint","baseArcLength","beginPath","iPoint","approxArcLength","arcCount","lengthMod","pEndX","pEndY","endAngle","startAngle","counterClockwise","iArc","arc","closePath","fillStrokeShape","className","e","attrs","minWidth","minHeight","newWidth","scaleX","newHeight","scaleY","getSelfRect","MarkupMode2Konva","initializer","Rectangle","Cloud","KonvaMarkup","_isInitialized","_zIndex","_markupContainerName","changeActiveDragger","draggerName","_markupContainer","_canvasOriginal","startsWith","toLowerCase","join","removeTextInput","markupMode","konvaMode","_markupMode","_markupIsActive","_konvaTransformer","nodes","_konvaStage","clientWidth","clientHeight","pan","values","mode","konvaLayerFind","move","redirectToViewer","_viewer","_canvasEvents","outline","parentDiv","parentElement","_markupColor","initializeKonva","destroyKonva","getDraggers","getMarkupColor","colorizeAllMarkup","konvaObj","_konvaLayer","setViewpoint","viewpoint","markupColor","custom_fields","markup_color","loadMarkup","getViewpoint","lines","texts","arrows","clouds","ellipses","images","rectangles","snapshot","combineMarkupWithDrawing","fillViewpointShapes","Date","toDateString","createObject","object","addObject","getObjects","line","rectangle","ellipse","arrow","cloud","getSelectedObjects","konvaShapeName","selectObjects","selectedObjs","clearSelected","getPoint3dFromArray","array","markupLines","getMarkupLines","markupTexts","getMarkupTexts","markupRectangles","getMarkupRectangles","markupEllipses","getMarkupEllipses","markupArrows","getMarkupArrows","markupImages","getMarkupImages","markupClouds","getMarkupClouds","markupShape","konvaShape","konvaShapes","find","parent","Layer","Stage","container","stage","layer","pixelRation","transformer","Transformer","shouldOverdrawWholeArea","isPaint","lastLine","getPointerPosition","addLine","addRectangle","addEllipse","addArrow","addCloud","_textInputRef","addText","_textInputPos","_textInputAngle","createTextInput","evt","pageX","pageY","rotateEnabled","metaPressed","shiftKey","ctrlKey","metaKey","isSelected","indexOf","splice","tabIndex","focus","trNodes","linePoints","worldPoints","absoluteTransform","getAbsoluteTransform","atPoint","konvaLine","textSize","textScale","projMtrx","projectionMatrix","mtrxNumber","tol","text_size","font_size","line_width","atStartPoint","worldStartPoint","atEndPoint","worldEndPoint","vpLine","screenPoint","vpText","vpRect","vpEllipse","_e","vpArrow","_f","vpCloud","_g","vpImage","addImage","tempCanvas","ctx","getContext","drawImage","toCanvas","pixelRatio","inputX","inputY","onkeydown","specifiedText","konvaText","konvaRectangle","konvaEllipse","konvaArrow","konvaCloud","konvaImage","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","geomData","appendText","textPtr","openAsText","setNormal","setTextSize","VisualizeMarkup","clearEntities","getEntitiesIterator","getLogicalPoint3dAsArray","point3d","getPoint3d","entityData","normal","getLogicalPoint3dFromArray","geomItr","getGeometryDataIterator","geometryId","getGeometryData","polylinePtr","openAsPolyline","getString","getTextSize","getLayer","MarkupFactory","createMarkup","markupType","markup","createKonva","Visualize","createVisualize","OVERLAY_VIEW_NAME","isExist","Viewer","client","_visualizeJsUrl","frameId","configure","_options","_activeDragger","_zoomWheelDragger","_gestureManager","_renderTime","draggerFactory","registerDragger","markupDraggers","canvaseventlistener","_enableAutoUpdate","enableAutoUpdate","_isNeedRender","_isRunAsyncUpdate","render","visualizeJsUrl","onProgress","touchAction","loaded","timeStamp","total","lengthComputable","_resizeObserver","ResizeObserver","observe","cancel","disconnect","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","overlayModel","pDevice","createView","addModel","addSibling","addView","viewPort","getViewport","setViewport","is3D","extHeight","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","view_point","up_vector","field_width","field_height","settings","cuttingPlane","getCuttingPlane","location","getOrigin","clippingPlanes"],"mappings":";;AAAA,MAAMA;IACF,WAAAC;QACIC,KAAKC,YAAY,IAAIC;AACxB;IACD,eAAAC,CAAgBC,IAAIC,SAASC,aAAaC;QACtCP,KAAKC,UAAUO,IAAIJ,IAAI;YACnBA,IAAIA;YACJC,SAASA;YACTE,SAASA;YACTD,aAAaA;;AAEpB;IACD,oBAAAG,CAAqBL,IAAIM;QACrBV,KAAKG,gBAAgBO,SAASC,WAAWC,SAASZ,KAAKa,eAAeT,IAAIO,WAAWC;AACxF;IACD,UAAAE,CAAWV;QACP,OAAOJ,KAAKC,UAAUc,IAAIX;AAC7B;IACD,WAAAY;QACI,MAAMC,MAAM,IAAIf;QAChBF,KAAKC,UAAUiB,SAAS,CAACC,OAAOC,QAAQH,IAAIT,IAAIY,KAAKD;QACrD,OAAOF;AACV;IACD,cAAAJ,CAAeT,IAAIO,WAAWC;QAC1B,MAAMS,UAAUrB,KAAKC,UAAUc,IAAIX;QACnC,KAAKiB,SAAS;YACV,IAAIV,QAAQ;gBACR,MAAMW,mBAAmBX,OAAOY,SAASC,SAASpB;gBAClD,IAAIkB,kBAAkB,OAAOX,OAAOc,iBAAiBrB;AACxD;YACDsB,QAAQC,KAAK,YAAYvB;YACzB,OAAOwB;AACV;QACD,OAAOvB,SAASA,SAASE,SAASA,WAAWc;QAC7C,MAAMQ,SAASxB,QAAQyB,MAAMvB,SAAS,EAAEI,WAAWC;QACnDD,WAAW,QAAQA,gBAAgB,SAAS,IAAIA,OAAOoB,KAAK;YACxDC,MAAM;YACNC,MAAM7B;YACNQ,MAAMA;;QAEV,OAAOiB;AACV;;;AAGL,MAAM5B,YAAY,IAAIC;;AAEtB,SAASgC,SAASC,aAAa;IAC3B,IAAIN,SAAS5B,UAAUc,IAAIoB;IAC3B,KAAKN,QAAQ;QACTA,SAAS,IAAI/B;QACbG,UAAUO,IAAI2B,YAAYN;AAC7B;IACD,OAAOA;AACX;;AAEAK,SAAS,IAAI/B,gBAAgB,SAAS,OAAQ;;AAE9C+B,SAAS,eAAe/B,gBAAgB,SAAS,OAAQ;;AAEzD+B,SAAS,WAAW/B,gBAAgB,SAAS,OAAQ;;AAErD,SAASiC;IACL,OAAO;QACHC,SAAS;QACTC,iBAAiB;QACjBC,cAAc;QACdC,cAAc;QACdC,SAAS;QACTC,kBAAkB;QAClBC,kBAAkB;QAClBC,kBAAkB;QAClBC,qBAAqB;QACrBC,mBAAmB;QACnBC,aAAa;QACbC,uBAAuB;YACnBC,KAAK;YACLC,OAAO;YACPC,MAAM;;QAEVC,YAAY;YACRC,GAAG;YACHC,GAAG;YACHC,GAAG;;QAEPC,YAAY;YACRH,GAAG;YACHC,GAAG;YACHC,GAAG;;QAEPE,iBAAiB;QACjBC,cAAc;QACdC,cAAc;QACdC,mBAAmB;QACnBC,uBAAuB;QACvBC,YAAY;QACZC,WAAW;QACXC,kBAAkB;QAClBC,iBAAiB;QACjBC,gBAAgB;QAChBC,cAAc;;AAEtB;;AAEA,MAAMC;IACF,WAAArE,CAAYsE;QACRrE,KAAKsE,WAAWD;QAChBrE,KAAKuE,QAAQnC;QACbpC,KAAKwE;AACR;IACD,eAAOC;QACH,OAAOrC;AACV;IACD,mBAAAsC;QACIhD,QAAQC,KAAK;QACb3B,KAAK2E;AACR;IACD,MAAAA;QACI,IAAI3E,KAAKsE,aAAa1C,WAAW;YAC7B5B,KAAK4E;YACL5E,KAAKsE,SAASvC,KAAK;gBACfC,MAAM;gBACNC,MAAMjC;;AAEb;AACJ;IACD,aAAA4E;QACI,WAAWC,WAAW,aAAa;YAC/BC,aAAaC,QAAQ,sBAAsBC,KAAKC,UAAUjF,KAAKiC;AAClE,UAAC,OAAOiD;YACLxD,QAAQwD,MAAM,gCAAgCA;AACjD;AACJ;IACD,eAAAV;QACI,WAAWK,WAAW,aAAa;YAC/B,MAAMM,OAAOL,aAAaM,QAAQ;YAClC,IAAID,MAAM;gBACN,MAAMlD,OAAO+C,KAAKK,MAAMF;gBACxBnF,KAAKiC,OAAO;uBACLA;;AAEV;AACJ,UAAC,OAAOiD;YACLxD,QAAQwD,MAAM,gCAAgCA;AACjD;AACJ;IACD,eAAAI,CAAgBC;QACZ,IAAIA,WAAW3D,WAAW;YACtB,MAAM6C,WAAWL,QAAQK;YACzB,MAAMe,YAAYD,OAAOE,QAAM,CAAGC,KAAKC;gBACnCD,IAAIC,SAASlB,SAASkB;gBACtB,OAAOD;AACV,gBAAG,CAAE;YACN1F,KAAKiC,OAAO;mBACLjC,KAAKiC;mBACLuD;;AAEnB,eAAe;YACHxF,KAAKiC,OAAO;mBACLjC,KAAKiC;mBACLmC,QAAQK;;AAElB;AACJ;IACD,QAAIxC;QACA,OAAOjC,KAAKuE;AACf;IACD,QAAItC,CAAKd;QACL,MAAM2B,oBAAoB3B,MAAM0B,sBAAsB1B,MAAM2B,oBAAoB;QAChF,MAAMgB,aAAahB,oBAAoB,QAAQ3B,MAAM2C;QACrD9D,KAAKuE,QAAQ;eACNH,QAAQK;eACRzE,KAAKuE;eACLpD;YACH2B,mBAAmBA;YACnBgB,YAAYA;;QAEhB9D,KAAK2E;AACR;IACD,WAAItC;QACA,OAAOrC,KAAKuE,MAAMlC;AACrB;IACD,WAAIA,CAAQlB;QACRnB,KAAKuE,MAAMlC,UAAUlB;QACrBnB,KAAK2E;AACR;IACD,mBAAIrC;QACA,OAAOtC,KAAKuE,MAAMjC;AACrB;IACD,mBAAIA,CAAgBnB;QAChBnB,KAAKuE,MAAMjC,kBAAkBnB;QAC7BnB,KAAK2E;AACR;IACD,gBAAIpC;QACA,OAAOvC,KAAKuE,MAAMhC;AACrB;IACD,gBAAIA,CAAapB;QACbnB,KAAKuE,MAAMhC,eAAepB;QAC1BnB,KAAK2E;AACR;IACD,gBAAInC;QACA,OAAOxC,KAAKuE,MAAM/B;AACrB;IACD,gBAAIA,CAAarB;QACbnB,KAAKuE,MAAM/B,eAAerB;QAC1BnB,KAAK2E;AACR;IACD,WAAIlC;QACA,OAAOzC,KAAKuE,MAAM9B;AACrB;IACD,WAAIA,CAAQtB;QACRnB,KAAKuE,MAAM9B,UAAUtB;QACrBnB,KAAK2E;AACR;IACD,oBAAIjC;QACA,OAAO1C,KAAKuE,MAAM7B;AACrB;IACD,oBAAIA,CAAiBvB;QACjBnB,KAAKuE,MAAM7B,mBAAmBvB;QAC9BnB,KAAK2E;AACR;IACD,oBAAIhC;QACA,OAAO3C,KAAKuE,MAAM5B;AACrB;IACD,oBAAIA,CAAiBxB;QACjBnB,KAAK2C,mBAAmBxB;QACxBnB,KAAK2E;AACR;IACD,oBAAI/B;QACA,OAAO5C,KAAKuE,MAAM3B;AACrB;IACD,oBAAIA,CAAiBzB;QACjBnB,KAAKuE,MAAM3B,mBAAmBzB;QAC9BnB,KAAK2E;AACR;IACD,uBAAI9B;QACA,OAAO7C,KAAKuE,MAAM1B;AACrB;IACD,uBAAIA,CAAoB1B;QACpBnB,KAAKuE,MAAM1B,sBAAsB1B;QACjC,KAAKA,OAAOnB,KAAKuE,MAAMzB,oBAAoB;QAC3C9C,KAAK2E;AACR;IACD,qBAAI7B;QACA,OAAO9C,KAAKuE,MAAMzB;AACrB;IACD,qBAAIA,CAAkB3B;QAClBnB,KAAKuE,MAAMzB,oBAAoB3B;QAC/B,IAAIA,OAAO;YACPnB,KAAKuE,MAAM1B,sBAAsB;YACjC7C,KAAKuE,MAAMT,aAAa;AAC3B;QACD9D,KAAK2E;AACR;IACD,eAAI5B;QACA,OAAO/C,KAAKuE,MAAMxB;AACrB;IACD,eAAIA,CAAY5B;QACZnB,KAAKuE,MAAMxB,cAAc5B;QACzBnB,KAAK2E;AACR;IACD,yBAAI3B;QACA,OAAOhD,KAAKuE,MAAMvB;AACrB;IACD,yBAAIA,CAAsB7B;QACtBnB,KAAKuE,MAAMvB,wBAAwB7B;QACnCnB,KAAK2E;AACR;IACD,cAAIvB;QACA,OAAOpD,KAAKuE,MAAMnB;AACrB;IACD,cAAIA,CAAWjC;QACXnB,KAAKuE,MAAMnB,aAAajC;QACxBnB,KAAK2E;AACR;IACD,cAAInB;QACA,OAAOxD,KAAKuE,MAAMf;AACrB;IACD,cAAIA,CAAWrC;QACXnB,KAAKuE,MAAMf,aAAarC;QACxBnB,KAAK2E;AACR;IACD,mBAAIlB;QACA,OAAOzD,KAAKuE,MAAMd;AACrB;IACD,mBAAIA,CAAgBtC;QAChBnB,KAAKuE,MAAMd,kBAAkBtC;QAC7BnB,KAAK2E;AACR;IACD,gBAAIjB;QACA,OAAO1D,KAAKuE,MAAMb;AACrB;IACD,gBAAIA,CAAavC;QACbnB,KAAKuE,MAAMb,eAAevC;QAC1BnB,KAAK2E;AACR;IACD,gBAAIhB;QACA,OAAO3D,KAAKuE,MAAMZ;AACrB;IACD,gBAAIA,CAAaxC;QACbnB,KAAKuE,MAAMZ,eAAexC;QAC1BnB,KAAK2E;AACR;IACD,qBAAIf;QACA,OAAO5D,KAAKuE,MAAMX;AACrB;IACD,qBAAIA,CAAkBzC;QAClBnB,KAAKuE,MAAMX,oBAAoBzC;QAC/BnB,KAAK2E;AACR;IACD,yBAAId;QACA,OAAO7D,KAAKuE,MAAMV;AACrB;IACD,yBAAIA,CAAsB1C;QACtBnB,KAAKuE,MAAMV,wBAAwB1C;QACnCnB,KAAK2E;AACR;IACD,cAAIb;QACA,OAAO9D,KAAKuE,MAAMT;AACrB;IACD,cAAIA,CAAW3C;QACXnB,KAAKuE,MAAMT,aAAa3C;QACxB,IAAIA,OAAOnB,KAAKuE,MAAMzB,oBAAoB;QAC1C9C,KAAK2E;AACR;IACD,aAAIZ;QACA,OAAO6B,QAAQ5F,KAAKuE,MAAMR;AAC7B;IACD,aAAIA,CAAU5C;QACVnB,KAAKuE,MAAMR,YAAY6B,QAAQzE;QAC/BnB,KAAK2E;AACR;IACD,oBAAIX;QACA,OAAOhE,KAAKuE,MAAMP;AACrB;IACD,oBAAIA,CAAiB7C;QACjBnB,KAAKuE,MAAMP,qBAAqB7C;QAChCnB,KAAK2E;AACR;IACD,mBAAIV;QACA,OAAOjE,KAAKuE,MAAMN;AACrB;IACD,mBAAIA,CAAgB9C;QAChBnB,KAAKuE,MAAMN,oBAAoB9C;QAC/BnB,KAAK2E;AACR;IACD,kBAAIT;QACA,OAAOlE,KAAKuE,MAAML;AACrB;IACD,kBAAIA,CAAe/C;QACfnB,KAAKuE,MAAML,mBAAmB/C;QAC9BnB,KAAK2E;AACR;IACD,gBAAIR;QACA,OAAOnE,KAAKuE,MAAMJ;AACrB;IACD,gBAAIA,CAAahD;QACbnB,KAAKuE,MAAMJ,eAAehD;QAC1BnB,KAAK2E;AACR;;;AAGA,MAACkB,gBAAgB,EAAE,SAAS,YAAY,aAAa,aAAa,WAAW,cAAc,eAAe,eAAe,aAAa,gBAAgB,iBAAiB,SAAS,cAAc,aAAa,YAAY;;AC9UrN,MAAMC,6BAA6B,CAACC,WAAWC,QAAQC,OAAOC,aAAaC;IAChF,MAAMC,kBAAkBD,OAAOE,eAAe,EAACN,UAAUO,GAAGP,UAAUQ,GAAGR,UAAUS;IACnF,MAAMC,eAAeN,OAAOO,cAAcV,OAAOW,OAAO,EAACX,OAAOM,GAAGN,OAAOO,GAAGP,OAAOQ,KAAIN;IACxF,MAAMU,cAAcT,OAAOU,aAAaZ,OAAOC;IAC/C,OAAOE,gBAAgBU,WAAWL,cAAcK,WAAWF;AAAY;;AAGzE,SAASG,oBAAoBpG,QAAgBqG;;IAC3C,KAAKrG,OAAOsG,aAAa;IACzB,KAAKD,MAAME,yBAAyB;IAEpC,MAAMC,SAASxG,OAAOwG;IACtB,MAAMC,YAAYD,OAAOE;IAEzB,MAAMC,WAAWF,UAAUG;IAC3B,OAAQD,SAASE,QAAQF,SAASG,QAAQ;QACxC,MAAMC,WAAWJ,SAASK;QAE1B,MAAMC,YAAYZ,MAAME,wBAAwBQ,SAASG;QACzD,IAAID,WAAW;YACb,MAAME,UAAUJ,SAASK;YACzB,MAAM5B,SAASL,2BACb8B,UAAU7B,WACV6B,UAAUI,UACVJ,UAAU3B,OACV6B,QAAQG,UACR,IAAId,OAAOe;YAGbR,SAASS,kBAAkBhC,QAAQ;AACpC;AACF;IACDmB,SAASc;KAETC,KAAAjB,UAAUkB,2BAAqB,QAAAD,YAAA,SAAA,IAAAA,GAAAE,KAAAnB;IAE/BzG,OAAO6H;AACT;;AAEAtG,SAAS,eAAe/B,gBAAgB,uBAAuB4G;;ACxC/D7E,SAAS,eAAe/B,gBAAgB,gBAAgBQ,UAAmBA,OAAO8H;;AAClFvG,SAAS,eAAezB,qBAAqB,eAAe;;ACD5DyB,SAAS,eAAe/B,gBAAgB,gBAAgBQ,UAAmBA,OAAO+H;;ACAlF,SAASC,cAAchI,QAAgBqB,OAAO,cAAc4G,iBAAiB;;IAC3E,KAAKjI,OAAOsG,aAAa,OAAO;IAEhC,SAAOoB,KAAA1H,OAAOkI,YAAQ,QAAAR,YAAA,SAAA,IAAAA,GAAAS,UAAU9G,MAAM4G,oBAAmB;AAC3D;;AAEA1G,SAAS,eAAe/B,gBAAgB,iBAAiBwI;;ACNzD,SAASI,QAAQpI,QAAgBqI,QAAQ;IACvC,KAAKrI,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzBA,UAAU2B,QAAQC;IAElBrI,OAAO6H;IACP7H,OAAOoB,KAAK;QAAEC,MAAM;QAAWC,MAAM+G;;AACvC;;AAEA9G,SAAS,eAAe/B,gBAAgB,WAAW4I;;AACnD7G,SAAS,eAAe/B,gBAAgB,YAAYQ,UAAgBoI,QAAQpI,QAAQ;;ACXpF,SAASsI,wBAAwBtI;IAC/B,KAAKA,OAAOsG,aAAa,OAAO;IAEhC,MAAME,SAASxG,OAAOwG;IAEtB,MAAM+B,aAAa/B,OAAOgC;IAC1B,OAAOC,OAAOC,KAAKH,YAAYI,QAAQhD,KAAMA,MAAM;AACrD;;AAEApE,SAAS,eAAe/B,gBAAgB,2BAA2B8I;;ACTnE,SAASM,UAAU5I;IACjB,KAAKA,OAAOsG,aAAa,OAAO;IAEhC,MAAMG,YAAYzG,OAAOyG;IAEzB,MAAMoC,UAAoB;IAC1B,MAAMlC,WAAWF,UAAUG;IAC3B,OAAQD,SAASE,QAAQF,SAASG,QAAQ;QACxC,MAAMC,WAAWJ,SAASK;QAC1B,IAAID,SAAS+B,UAAU,OAAO,KAAKD,QAAQE,KAAKhC,SAASG;AAC1D;IACDP,SAASc;IAET,OAAOoB;AACT;;AAEAtH,SAAS,eAAe/B,gBAAgB,aAAaoJ;;AChBrD,SAASI,YAAYhJ;IACnB,KAAKA,OAAOsG,aAAa,OAAO;IAEhC,MAAMG,YAAYzG,OAAOyG;IAEzB,MAAMoC,UAAoB;IAC1B,MAAMI,eAAexC,UAAUuC;IAC/B,KAAKC,aAAaC,YAAYD,aAAaE,eAAe,GAAG;QAC3D,MAAMC,MAAMH,aAAaI;QACzB,OAAQD,IAAIvC,QAAQuC,IAAItC,QAAQ;YAC9B,MAAMwC,WAAWF,IAAIG;YAErB,MAAMC,YACJF,SAASG,cAAc,IACnBH,SAASI,eACTJ,SAASG,cAAc,IACvBH,SAASK,uBACT;YAEN,IAAIH,WAAW;gBACb,MAAMI,SAASJ,UAAUK;gBACzB,IAAID,WAAW,MAAMf,QAAQE,KAAKa;gBAClCJ,UAAU/B;AACX;AACF;QACD2B,IAAI3B;AACL;IAED,OAAOoB;AACT;;AAEAtH,SAAS,eAAe/B,gBAAgB,eAAewJ;;AC/BvD,SAASc,aAAa9J;IACpB,KAAKA,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzBA,UAAUsD,oBAAoB;IAE9B/J,OAAO6H;IACP7H,OAAOoB,KAAK;QAAEC,MAAM;;AACtB;;AAEAE,SAAS,eAAe/B,gBAAgB,gBAAgBsK;;ACVxD,SAASE,gBAAgBhK;IACvB,KAAKA,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzBA,UAAUwD,uBAAuB;IAEjCjK,OAAO6H;IACP7H,OAAOoB,KAAK;QAAEC,MAAM;;AACtB;;AAEAE,SAAS,eAAe/B,gBAAgB,mBAAmBwK;;ACV3D,SAASE,cAAclK;IACrB,KAAKA,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzBA,UAAU0D;IAEVnK,OAAO6H;IACP7H,OAAOoB,KAAK;QAAEC,MAAM;;AACtB;;AAEAE,SAAS,eAAe/B,gBAAgB,iBAAiB0K;;ACVzD,SAASE,UAAUpK;IACjB,KAAKA,OAAOsG,aAAa;IAEzBtG,OAAOE,eAAe,oBAAoB;IAC1CF,OAAOE,eAAe;IACtBF,OAAOE,eAAe;IACtBF,OAAOE,eAAe;IACtBF,OAAOE,eAAe;IACtBF,OAAOE,eAAe;IACtBF,OAAOE,eAAe,WAAW;IACjCF,OAAOE,eAAe,iBAAiB;IACvCF,OAAOE,eAAe;IAEtBF,OAAOoB,KAAK;QAAEC,MAAM;;AACtB;;AAEAE,SAAS,eAAe/B,gBAAgB,aAAa4K;;AChBrD,SAASC,YAAYrK,QAAgB4J;IACnC,KAAK5J,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzB,MAAM6D,aAAa7D,UAAU6D;IAE7B,MAAM3D,WAAWF,UAAUG;IAC3B,OAAQD,SAASE,QAAQF,SAASG,QAAQ;QACxC,MAAMC,WAAWJ,SAASK;QAC1B,IAAID,SAASG,wBAAwB0C,QAAQ;YAC3C,MAAMX,eAAeqB,WAAWC,eAAe,EAAC,GAAG,MAAM,MAAM,KAAIxD;YAEnEN,UAAU+D,YAAYvB;YACtB,MAAMJ,UAAU7I,OAAOgJ;YAEvBhJ,OAAO6H;YACP7H,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAUC,MAAM2H;gBAAcJ;;YAEvDI,aAAaxB;YACb;AACD;AACF;IACDd,SAASc;AACX;;AAEAlG,SAAS,eAAe/B,gBAAgB,eAAe6K;;ACzBvD9I,SAAS,eAAe/B,gBAAgB,qBAAoB,CAACQ,QAAgB0K,UAAU;IACrF1K,OAAOc,iBAAiB4J;AAAQ;;ACDlC,SAASC,uBAAuB3K,QAAgB4K,WAAW;IACzD,KAAK5K,OAAOsG,aAAa;IAEzB,MAAME,SAASxG,OAAOwG;IACtB,MAAMC,YAAYzG,OAAOyG;IAEzB,MAAM8B,aAAa/B,OAAOgC;IAC1B/B,UAAUoE,oCAAoCtC,WAAWqC;IAEzD5K,OAAO6H;IACP7H,OAAOoB,KAAK;QAAEC,MAAM;QAAgBC,MAAMsJ;;AAC5C;;AAEArJ,SAAS,eAAe/B,gBAAgB,0BAA0BmL;;AAClEpJ,SAAS,eAAe/B,gBAAgB,eAAeQ,UAAW2K,uBAAuB3K,QAAQ;;AACjGuB,SAAS,eAAe/B,gBAAgB,kBAAkBQ,UAAW2K,uBAAuB3K,QAAQ;;AACpGuB,SAAS,eAAe/B,gBAAgB,gBAAgBQ,UAAW2K,uBAAuB3K,QAAQ;;AAClGuB,SAAS,eAAe/B,gBAAgB,iBAAiBQ,UAAW2K,uBAAuB3K,QAAQ;;AACnGuB,SAAS,eAAe/B,gBAAgB,iBAAiBQ,UAAW2K,uBAAuB3K,QAAQ;;AACnGuB,SAAS,eAAe/B,gBAAgB,gBAAgBQ,UAAW2K,uBAAuB3K,QAAQ;;AAClGuB,SAAS,eAAe/B,gBAAgB,cAAcQ,UAAW2K,uBAAuB3K,QAAQ;;AAChGuB,SAAS,eAAe/B,gBAAgB,cAAcQ,UAAW2K,uBAAuB3K,QAAQ;;AAChGuB,SAAS,eAAe/B,gBAAgB,cAAcQ,UAAW2K,uBAAuB3K,QAAQ;;AAChGuB,SAAS,eAAe/B,gBAAgB,cAAcQ,UAAW2K,uBAAuB3K,QAAQ;;ACvBhGuB,SAAS,eAAe/B,gBAAgB,mBAAkB,CAACQ,QAAgB0C,IAAI,KAAKC,IAAI,GAAGC,IAAI;IAC7F5C,OAAO8K,eAAepI,GAAGC,GAAGC;AAAE;;ACDhC,SAAS4H,YAAYxK,QAAgB6I,UAAoB;IACvD,KAAK7I,OAAOsG,aAAa;IAEzB,MAAME,SAASxG,OAAOwG;IACtB,MAAMC,YAAYD,OAAOE;IAEzB,MAAMuC,eAAe,IAAIzC,OAAOuE;IAChClC,YAAO,QAAPA,iBAAO,SAAA,IAAPA,QAAStI,SAASqJ;QAChB,MAAMN,WAAW7C,UAAUuE,0BAA0BpB,SAAS;QAC9D,KAAKN,SAASJ,UAAUD,aAAagC,aAAa3B;AAAS;IAG7D7C,UAAU+D,YAAYvB;IAEtBjJ,OAAO6H;IACP7H,OAAOyK,UAAU;QAAEpJ,MAAM;QAAUC,MAAM2H;QAAcJ;;IAEvDI,aAAaxB;AACf;;AAEAlG,SAAS,eAAe/B,gBAAgB,eAAegL;;ACpBvD,SAASU,QAAQlL;IACf,KAAKA,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzBA,UAAU0E,yBAAyB;IAEnCnL,OAAO6H;IACP7H,OAAOoB,KAAK;QAAEC,MAAM;;AACtB;;AAEAE,SAAS,eAAe/B,gBAAgB,WAAW0L;;ACVnD,SAASE,SAASpL;IAChB,KAAKA,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzBA,UAAU2E;IAEVpL,OAAO6H;IACP7H,OAAOyK,UAAU;QAAEpJ,MAAM;QAAUC,MAAMmF,UAAUuC;QAAeH,SAAS;;AAC7E;;AAEAtH,SAAS,eAAe/B,gBAAgB,YAAY4L;;ACVpD,SAASC,cAAcrL,QAAgBsL,QAAQ,OAAOC,UAAUvL,OAAOwL,QAAQ7J;IAC7E,KAAK3B,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IACzB,MAAMgF,sBAAsBhF,UAAUiF;IAEtCjF,UAAUkF,mBAAmBJ;IAC7B9E,UAAUmF,YAAYN;IACtB7E,UAAUoB;IACVpB,UAAUkF,mBAAmBF;IAE7BzL,OAAO6H;IACP7H,OAAOyK,UAAU;QAAEpJ,MAAM;;AAC3B;;AAEAE,SAAS,eAAe/B,gBAAgB,iBAAiB6L;;AACzD9J,SAAS,eAAezB,qBAAqB,iBAAiB;;AChB9D,SAAS+L,cAAc7L,QAAgB6I,UAAoB;;IACzD,KAAK7I,OAAOsG,aAAa;IAEzB,MAAME,SAASxG,OAAOwG;IACtB,MAAMC,YAAYzG,OAAOyG;IAEzB,MAAMwC,eAAe,IAAIzC,OAAOuE;IAChClC,QAAQtI,SAASqJ;QACf,MAAMN,WAAW7C,UAAUuE,0BAA0BpB,SAAS;QAC9D,KAAKN,SAASJ,UAAUD,aAAagC,aAAa3B;AAAS;KAG7D5B,KAAAjB,UAAUoF,mBAAgB,QAAAnE,YAAA,SAAA,IAAAA,GAAAE,KAAAnB,WAAAwC;IAE1BjJ,OAAO6H;IACP7H,OAAOyK,UAAU;QAAEpJ,MAAM;;IAEzB4H,aAAaxB;AACf;;AAEAlG,SAAS,eAAe/B,gBAAgB,iBAAiBqM;;ACpBzD,SAASC,eAAe9L;;IACtB,KAAKA,OAAOsG,aAAa;IAEzB,MAAMG,YAAYzG,OAAOyG;IAEzB,MAAMwC,eAAexC,UAAUuC;KAC/BtB,KAAAjB,UAAUoF,mBAAgB,QAAAnE,YAAA,SAAA,IAAAA,GAAAE,KAAAnB,WAAAwC;IAE1BjJ,OAAO6H;IACP7H,OAAOyK,UAAU;QAAEpJ,MAAM;;AAC3B;;AAEAE,SAAS,eAAe/B,gBAAgB,kBAAkBsM;;ACtC1D,MAAMC;IACF,WAAA3M;QACIC,KAAK2M,aAAa;AACrB;IACD,gBAAAC,CAAiB5K,MAAM6K;QACnB,IAAI7M,KAAK2M,WAAW3K,UAAUJ,WAAW5B,KAAK2M,WAAW3K,QAAQ;QACjEhC,KAAK2M,WAAW3K,MAAM0H,KAAKmD;QAC3B,OAAO7M;AACV;IACD,mBAAA8M,CAAoB9K,MAAM6K;QACtB,IAAI7M,KAAK2M,WAAW3K,UAAUJ,WAAW,OAAO5B;QAChD,MAAM+M,YAAY/M,KAAK2M,WAAW3K,MAAMsH,QAAQhD,KAAKA,MAAMuG;QAC3D,IAAIE,UAAUC,WAAW,GAAGhN,KAAK2M,WAAW3K,QAAQ+K,uBAAuB/M,KAAK2M,WAAW3K;QAC3F,OAAOhC;AACV;IACD,kBAAAiN,CAAmBjL;QACf,IAAIA,aAAahC,KAAK2M,WAAW3K,YAAYhC,KAAK2M,aAAa;QAC/D,OAAO3M;AACV;IACD,SAAAoL,CAAU8B;QACN,IAAIlN,KAAK2M,WAAWO,MAAMlL,UAAUJ,WAAW,OAAO;QACtD,MAAMuL,SAASnN,KAAK2M,WAAWO,MAAMlL,MAAMoL;QAC3CD,OAAOjM,SAAS2L,YAAYA,SAAStE,KAAKvI,MAAMkN;QAChD,OAAO;AACV;IACD,EAAAG,CAAGrL,MAAM6K;QACL,OAAO7M,KAAK4M,iBAAiB5K,MAAM6K;AACtC;IACD,GAAAS,CAAItL,MAAM6K;QACN,OAAO7M,KAAK8M,oBAAoB9K,MAAM6K;AACzC;IACD,IAAA9K,CAAKmL,UAAUtM;QACX,WAAWsM,UAAU,UAAU,OAAOlN,KAAKoL,UAAU;YACjDpJ,MAAMkL;YACNtM,MAAMA;iBACD,WAAWsM,UAAU,UAAU,OAAOlN,KAAKoL,UAAU8B,aAAa,OAAO;AACrF;;;MCHQK;IAGX,WAAAxN,CAAYyN;QAmFFxN,KAAAyN,gBAAiBC;;YACzB,MAAMC,UAAU3N,KAAK4N,SAASvG,YAAYwG;YAC1CF,QAAQG,QACNJ,OAAOnC,UACPmC,OAAOK,QACPL,OAAOM,UACPN,OAAOO,gBACPP,OAAOQ,iBACPR,OAAOS;aAET9F,KAAAsF,QAAQvF,YAAM,QAAAC,YAAA,SAAA,IAAAA,GAAAE,KAAAoF;AAAI;QAGV3N,KAAaoO,gBAAG;;YACxB,MAAMC,OAAOrO,KAAK4N,SAASvG,YAAY4D;YACvC,MAAMqD,MAAM;gBACV/C,UAAU8C,KAAKE;gBACfR,QAAQM,KAAKG;gBACbR,UAAUK,KAAKL;gBACfC,gBAAgBI,KAAKJ;gBACrBC,iBAAiBG,KAAKH;gBACtBC,aAAaE,KAAKF;;aAEpB9F,KAAAgG,KAAKjG,YAAM,QAAAC,YAAA,SAAA,IAAAA,GAAAE,KAAA8F;YACX,OAAOC;AAAG;QA1GVtO,KAAK4N,WAAWJ;AACjB;IAES,SAAAnG;QACR,OAAOrH,KAAK4N,SAASvG;AACtB;IAES,QAAAM;QACR,OAAO3H,KAAKqH,YAAYoH;AACzB;IAES,SAAAC,CAAUC;QAClB,MAAMC,IAAa,IAAI5O,KAAK4N,SAASiB;QACrCD,EAAEpO,IAAImO,MAAMrI,GAAGqI,MAAMpI,GAAGoI,MAAMnI;QAC9B,OAAOoI;AACR;IAES,cAAAE;QACR,OAAO,IAAI9O,KAAK4N,SAASmB;AAC1B;IAES,aAAAC;QACR,OAAO,IAAIhP,KAAK4N,SAASiB;AAC1B;IAES,cAAAI;QACR,OAAO,IAAIjP,KAAK4N,SAAS1F;AAC1B;IAES,WAAAgH;QACR,OAAO,IAAIlP,KAAK4N,SAASuB;AAC1B;IAES,QAAAC,CAASC;QACjB,OAAOrP,KAAK4N,SAASmB,SAASO,gBAAgBD;AAC/C;IAES,UAAAE,CAAWC;QACnB,OAAO,EAACA,EAAElJ,GAAGkJ,EAAEjJ,GAAGiJ,EAAEhJ;AACrB;IAES,SAAAiJ,CAAUd;QAClB,OAAO,EAACA,MAAMrI,GAAGqI,MAAMpI,GAAGoI,MAAMnI;AACjC;IAES,OAAAkJ,CAAQC;QAChB,OAAO3P,KAAK4N,SAASiB,QAAQS,gBAAgBK;AAC9C;IAES,aAAAC,CAActJ,GAAWC;QACjC,OAAOvG,KAAK0P,QAAQ1P,KAAK4N,SAASvG,YAAYuI,cAActJ,GAAGC;AAChE;IAES,aAAAsJ,CAAcC;QACtB,MAAMlB,IAAc;QACpB,KAAK,IAAImB,IAAI,GAAGA,IAAID,OAAO9C,QAAQ+C,KAAK;YACtCnB,EAAElF,KAAKoG,OAAOC,GAAGzJ;YACjBsI,EAAElF,KAAKoG,OAAOC,GAAGxJ;YACjBqI,EAAElF,KAAKoG,OAAOC,GAAGvJ;AAClB;QACD,OAAOoI;AACR;IAES,mBAAAoB;QACR,MAAMtC,SAAS1N,KAAKoO;QACpB,MAAM6B,MAAMjQ,KAAK4N,SAASvG,YAAY6I;QACtC,OAAMC,KAAEA,KAAGC,KAAEA,OAAQH;QACrB,MAAMlC,SAAS/N,KAAK0P,QAAQhC,OAAOK;QAEnC,MAAMsC,WACJtC,OAAOzH,KAAK6J,IAAI7J,KAChByH,OAAOxH,KAAK4J,IAAI5J,KAChBwH,OAAOvH,KAAK2J,IAAI3J,KAChBuH,OAAOzH,KAAK8J,IAAI9J,KAChByH,OAAOxH,KAAK6J,IAAI7J,KAChBwH,OAAOvH,KAAK4J,IAAI5J;QAClB,KAAK6J,UAAU;YACb3C,OAAOK,SAASkC,IAAIhI;YACpBjI,KAAKyN,cAAcC;AACpB;AACF;;;ACxFH,MAAM4C,cAAc;;AAEpB,MAAMC,oBAAoB;;AAkBpB,MAAOC,sBAAsBjD;IAYjC,WAAAxN,CAAY0Q;QACVC,MAAMD,QAAQxJ;QAuINjH,KAAkB2Q,qBAAG;YAC7B,MAAMhQ,SAASX,KAAKqH;YACpB,MAAMgH,OAAO1N,OAAOsK;YACpB,IAAIoD,KAAK,uBAAuB;gBAC9BA,KAAKsC,mBAAmBJ;gBACxBvQ,KAAKyQ,QAAQjI;AACd;YACD6F,KAAKjG;AAAQ;QAGLpI,KAAgB4Q,mBAAG;YAC3B,MAAMjQ,SAASX,KAAKqH;YACpB,MAAMgH,OAAO1N,OAAOsK;YACpB,IAAIoD,KAAK,qBAAqB;gBAC5BA,KAAKuC;gBAEL,MAAMC,SAAS7Q,KAAKqH,YAAYyJ;gBAChC,MAAMjI,SAAS7I,KAAK4N,SAAS/E;gBAC7BgI,OAAOE,WAAW,EAAC,GAAG,GAAGlI,OAAOmI,OAAOnI,OAAOoI;gBAC9CJ,OAAOzI;gBACPpI,KAAKyQ,QAAQjI;AACd;YACD6F,KAAKjG;AAAQ;QA5JbpI,KAAKyQ,UAAUA;QACfzQ,KAAKkR,gBAAgB;QACrBlR,KAAKmR,oBAAoB;YAAE7K,GAAG;YAAGC,GAAG;;QACpCvG,KAAKoR,aAAa;QAElBpR,KAAKqR,YAAanE,SAAUlN,KAAKyQ,QAAQrF,UAAU8B;QACnDlN,KAAKsR,eAAezL;AACrB;IAEM,UAAA0L;QACLvR,KAAKsR,eAAetR,KAAKsR,aAAahI,QAAQhD,YAAatG,KAAKsG,OAAO;QACvEtG,KAAKsR,aAAapQ,SAASoF,KAAOtG,KAAKsG,KAAKtG,KAAKsG,GAAGkL,KAAKxR;QACzDA,KAAKsR,aAAapQ,SAASoF,KAAMtG,KAAKyQ,QAAQpD,GAAG/G,GAAGtG,KAAKsG;QAEzDtG,KAAKqH,YAAYoK,sBAAsBzR,KAAKoR;AAC7C;IAEM,OAAAM;QACL1R,KAAKsR,aAAapQ,SAASoF,KAAMtG,KAAKyQ,QAAQnD,IAAIhH,GAAGtG,KAAKsG;AAC3D;IAES,cAAAqL,CAAezE;QACvB,OAAO;YAAE5G,GAAG4G,MAAM0E,UAAU/M,OAAOgN;YAAkBtL,GAAG2G,MAAM4E,UAAUjN,OAAOgN;;AAChF;IAES,WAAAE,CAAYC;QACpB,KAAKA,GAAGC,aAAazB,cAAc0B,iBAAiB;YAClD;AACD;QAEAF,GAAGjE,OAAuBoE,kBAAkBH,GAAGI;QAEhD,MAAMC,WAAWrS,KAAK2R,eAAeK;QACrChS,KAAKsS,aAAa;QAClBtS,KAAKmR,oBAAoB;YAAE7K,GAAG+L,SAAS/L;YAAGC,GAAG8L,SAAS9L;;QACtDvG,KAAKuS,MAAMF,SAAS/L,GAAG+L,SAAS9L,GAAGyL,GAAGQ,SAASR,GAAGS;QAClDzS,KAAKyQ,QAAQjI;AACd;IAES,SAAAkK,CAAUV;QAClB,IAAIxB,cAAcmC,mBAAmB;YACnC;AACD;QAED,KAAKX,GAAGC,WAAW;YACjB;AACD;QAEAD,GAAGjE,OAAuB6E,sBAAsBZ,GAAGI;QAEpD,MAAMC,WAAWrS,KAAK2R,eAAeK;QACrChS,KAAK6S,IAAIR,SAAS/L,GAAG+L,SAAS9L;QAC9BvG,KAAKsS,aAAa;QAClBtS,KAAKyQ,QAAQjI;AACd;IAES,aAAAsK,CAAcd;QACtB,KAAKA,GAAGC,WAAW;YACjB;AACD;QAEDjS,KAAK4N,SAAS/E,OAAOkK,cAAc,IAAIC,aAAa,aAAahB;AAClE;IAES,WAAAiB,CAAYjB;QACpB,KAAKA,GAAGC,aAAazB,cAAc0B,iBAAiB;YAClD;AACD;QAED,MAAMG,WAAWrS,KAAK2R,eAAeK;QACrChS,KAAKkT,KAAKb,SAAS/L,GAAG+L,SAAS9L,GAAGyL,GAAGmB,WAAWnB,GAAGoB;QACnD,IAAIpT,KAAKsS,YAAY;YACnBtS,KAAKyQ,QAAQjI;AACd;AACF;IAES,KAAA6K,CAAMrB;QACd,MAAMrR,SAASX,KAAKqH;QACpB,MAAMgL,WAAWrS,KAAK2R,eAAeK;QACrC,MAAM1L,IAAI+L,SAAS/L;QACnB,MAAMC,IAAI8L,SAAS9L;QAEnB,MAAM+M,gBACJC,KAAKC,IAAIlN,IAAItG,KAAKmR,kBAAkB7K,KAAKgK,eAAeiD,KAAKC,IAAIjN,IAAIvG,KAAKmR,kBAAkB5K,KAAK+J;QAEnG,IAAI3P,UAAUA,OAAO8S,yBAAyBH,eAAe;YAC3D3S,OAAOoL;YACPpL,OAAO+S,OAAOpN,GAAGC,GAAGD,GAAGC;YACvBvG,KAAKyQ,QAAQjI;YAEb,MAAMoB,eAAejJ,OAAOgJ;YAC5B,MAAMH,UAAUxJ,KAAKyQ,QAAQ9G;YAC7B3J,KAAKqR,UAAU;gBAAErP,MAAM;gBAAUC,MAAM2H;gBAAcJ;;AACtD;AACF;IAES,QAAAmK,CAAS3B;QACjB,MAAMrR,SAASX,KAAKqH;QACpB,MAAMgL,WAAWrS,KAAK2R,eAAeK;QACrC,MAAM1L,IAAI+L,SAAS/L;QACnB,MAAMC,IAAI8L,SAAS9L;QAEnB,MAAMsK,SAASlQ,OAAOmQ;QACtB,MAAM8C,YAAY/C,OAAOgD,OAAO,EAACvN,GAAGC;QACpC,IAAIqN,cAAcA,UAAUE,QAAQ;YAClCnT,OAAOsK,aAAa2I;YACpBA,UAAUxL;YACVpI,KAAKyQ,QAAQjI;AACd,eAAM;YACL,IAAI7H,UAAUA,OAAO8S,uBAAuB;gBAC1C,MAAMM,YAAYpT,OAAOgJ;gBAEzB,KAAKoK,UAAUlK,YAAYkK,UAAUjK,eAAe,GAAG;oBACrD,MAAMC,MAAMgK,UAAU/J;oBACtB,MAAMgK,SAASjK,IAAIG;oBACnBvJ,OAAOsT,aAAaD;oBAEpBhU,KAAKqR,UAAU;wBAAErP,MAAM;wBAAgBC,MAAM+R;;oBAC7ChU,KAAKyQ,QAAQjI;oBAEbxI,KAAKkU,UAAU,EAACnK,KAAKiK;AACtB;AACF;AACF;QAEDnD,OAAOzI;AACR;IAES,KAAAmK,CAAMjM,GAAWC,GAAW4N,YAAY,GAAGC,YAAY,IAAW;IAElE,IAAAlB,CAAK5M,GAAWC,GAAW4N,YAAY,GAAGC,YAAY,IAAW;IAEjE,GAAAvB,CAAIvM,GAAWC,IAAmB;IA2BlC,qBAAA8N,CAAsBC;QAC9B,OAAOtU,KAAKyQ,QAAQ8D,gBAAgBD;AACrC;IAEO,eAAAE;QACN,OAAOxU,KAAKyQ,QAAQgE;AACrB;IAES,SAAAP,CAAUQ;;QAClB,KAAK,MAAMpG,OAAOoG,SAAS;aACzBrM,KAAAiG,gBAAAA,aAAG,SAAA,IAAHA,IAAKlG;AACN;AACF;IAEM,aAAAuM,IAAwB;IAIrB,0BAAWzC,CAAgB/Q;QACnC,IAAIqP,cAAcoE,qBAAqBzT,OAAO;YAC5C;AACD;QAEDqP,cAAcoE,mBAAmBzT;QACjC,IAAIqP,cAAcoE,kBAAkB;YAClCpE,cAAcmC,oBAAoB;AACnC;AACF;IAES,0BAAWT;QACnB,OAAO1B,cAAcoE;AACtB;IAIO,4BAAWjC;QACjB,IAAInC,cAAcqE,oBAAoB;YACpCrE,cAAcmC,oBAAoB;YAClC,OAAO;AACR;QAED,OAAO;AACR;IAEO,4BAAWA,CAAkBxR;QACnCqP,cAAcqE,qBAAqB1T;AACpC;;;AA9BcqP,cAAgBoE,mBAAG;;AAiBnBpE,cAAkBqE,qBAAG;;SCvOtBC,wBACdC,SACAC,eACAC;IAEA,KAAKF,SAAS;QACZA,UAAUG,SAASC,cAAc;QACjCJ,QAAQK,aAAa,eAAeH;QAEpCD,cAAcK,YAAYN;AAC3B;IACD,OAAOA;AACT;;AAEgB,SAAAO,mBAAmBP,SAAsBC;IACvD,IAAID,SAAS;QACXC,cAAcO,YAAYR;AAC3B;IACD,OAAO;AACT;;SAEgBS,cAAc7F,SAAmB8F,gBAAgB9U;IAC/D,MAAM+U,aAAaD,eAAe5G,QAAQS,gBAAgBK;IAC1D,MAAMgG,MAAMhV,OAAOsK;IACnB,MAAM2K,MAAMD,IAAIE;IAEhB,MAAMC,cAAcJ,WAAWK,YAAYH;IAE3C,MAAMI,MAAM;QAAE1P,GAAGwP,YAAYxP,IAAIzB,OAAOgN;QAAkBtL,GAAGuP,YAAYvP,IAAI1B,OAAOgN;;IAEpF+D,IAAIxN;IACJsN,WAAWtN;IACX0N,YAAY1N;IACZuN,IAAIvN;IACJ,OAAO4N;AACT;;SAEgBC,YAAYC,UAAoBC,UAAoBV;IAClE,MAAMW,WAAWX,eAAe5G,QAAQS,gBAAgB4G;IACxD,MAAMG,WAAWZ,eAAe5G,QAAQS,gBAAgB6G;IAExD,MAAMG,WAAWF,SAASG,WAAWF,UAAUG,QAAQ;IAEvDJ,SAAShO;IACTiO,SAASjO;IAET,OAAOkO;AACT;;AA6BA,SAASG,eAAetV;IACtB,OAAOA,QAAQ,IAAIoS,KAAKmD,KAAKvV,SAASoS,KAAKoD,MAAMxV;AACnD;;AAEA,MAAMyV,wBAAwB,CAACC,IAAaC,IAAaC,IAAaC;IACpE,MAAMC,OAAOH,GAAGxQ,IAAIuQ,GAAGvQ;IACvB,MAAM4Q,OAAOJ,GAAGvQ,IAAIsQ,GAAGtQ;IACvB,MAAM4Q,OAAOH,GAAG1Q,IAAIyQ,GAAGzQ;IACvB,MAAM8Q,OAAOJ,GAAGzQ,IAAIwQ,GAAGxQ;IACvB,MAAM8Q,MAAMH,QAAQL,GAAGvQ,IAAIyQ,GAAGzQ,KAAK2Q,QAAQJ,GAAGtQ,IAAIwQ,GAAGxQ,QAAQ4Q,OAAOD,OAAOD,OAAOG;IAClF,MAAME,MAAMH,QAAQN,GAAGtQ,IAAIwQ,GAAGxQ,KAAK6Q,QAAQP,GAAGvQ,IAAIyQ,GAAGzQ,QAAQ6Q,OAAOD,OAAOD,OAAOG;IAClF,OAAOC,KAAK,KAAKA,KAAK,KAAKC,KAAK,KAAKA,KAAK,IACtC;QACEhR,GAAGmQ,eAAeI,GAAGvQ,IAAIgR,IAAIL;QAC7B1Q,GAAGkQ,eAAeI,GAAGtQ,IAAI+Q,IAAIJ;QAE/B;AAAK;;AAGX,SAASK,uBAAuBV,IAAaC,IAAaC,IAAaC,IAAahB;IAClF,MAAM3S,IAAIuT,sBAAsBC,IAAIC,IAAIC,IAAIC;IAC5C,IAAI3T,GAAG;QACL2S,IAAItM,KAAKrG;AACV;AACH;;SAEgBmU,aAAa5I,GAAYoC,OAAeC;IACtD,OAAOrC,EAAEtI,KAAK0K,SAASpC,EAAEtI,KAAK,KAAKsI,EAAErI,KAAK0K,UAAUrC,EAAErI,KAAK;AAC7D;;AAEM,SAAUkR,4BAA4BZ,IAAaC,IAAa9F,OAAeC;IACnF,MAAMyG,MAAM;QAAEpR,GAAG;QAAGC,GAAG;;IACvB,MAAMoR,MAAM;QAAErR,GAAG0K;QAAOzK,GAAG;;IAE3B,MAAMqR,MAAM;QAAEtR,GAAG;QAAGC,GAAG0K;;IACvB,MAAM4G,MAAM;QAAEvR,GAAG0K;QAAOzK,GAAG0K;;IAE3B,MAAM6G,aAAwB;IAE9BP,uBAAuBV,IAAIC,IAAIY,KAAKC,KAAKG;IACzCP,uBAAuBV,IAAIC,IAAIY,KAAKE,KAAKE;IACzCP,uBAAuBV,IAAIC,IAAIc,KAAKC,KAAKC;IACzCP,uBAAuBV,IAAIC,IAAIe,KAAKF,KAAKG;IAEzC,IAAIC,UAAmB;IACvB,IAAIC,UAAmB;IAEvB,IAAIF,WAAW9K,WAAW,GAAG;QAC3B+K,UAAUlB;QACVmB,UAAUlB;AACX,WAAM,IAAIgB,WAAW9K,WAAW,GAAG;QAClC,IAAIwK,aAAaX,IAAI7F,OAAOC,SAAS;YACnC8G,UAAUlB;YACVmB,UAAUF,WAAW;AACtB,eAAM;YACLC,UAAUD,WAAW;YACrBE,UAAUlB;AACX;AACF,WAAM;QACLiB,UAAUD,WAAW;QACrBE,UAAUF,WAAW;AACtB;IAED,MAAMG,KAAKD,QAAQ1R,IAAIyR,QAAQzR;IAC/B,MAAM4R,KAAKF,QAAQzR,IAAIwR,QAAQxR;IAC/B,IAAII,QAAS,MAAM4M,KAAK4E,KAAKD,KAAKD,MAAO1E,KAAK6E;IAC9C,IAAIH,KAAK,GAAG;QACVtR,SAAS;AACV;IACD,MAAM0R,OAAO9E,KAAK+E,KAAK/E,KAAKgF,IAAIN,IAAI,KAAK1E,KAAKgF,IAAIL,IAAI;IACtD,OAAO;QAAEvR;QAAOqK,OAAOqH;QAAMxB,IAAIkB;QAASjB,IAAIkB;;AAChD;;AAEgB,SAAAQ,cAAczD,SAAsB0D;IAClD,IAAI1D,SAAS;QACXA,QAAQ2D,UAAUD,KAAK,MAAMA,OAAO;AACrC;AACH;;AAEgB,SAAAE,iBAAiB5D,SAAsB6D;IACrD7D,QAAQ8D,MAAMC,gBAAgBF,SAAS,SAAS;AAClD;;MC7JaG;IAkBX,WAAAhZ,CAAYiV,eAA4BrU,QAAa8U;QACnDzV,KAAKgZ,qBAAqB;QAC1BhZ,KAAKiZ,mBAAmB;QACxBjZ,KAAKkZ,eAAe;QACpBlZ,KAAKmZ,gBAAgB;QAErBnZ,KAAKoZ,aAAa;QAClBpZ,KAAKqZ,WAAW;QAEhBrZ,KAAKsZ,OAAO;QACZtZ,KAAKiG,QAAQ;QACbjG,KAAKqY,OAAO;QACZrY,KAAKuZ,gBAAgB;QAErBvZ,KAAK6Y,QAAQ;YACXW,QAAQ;YACRC,YAAY;YACZC,OAAO;YACPC,WAAW;;QAGb3Z,KAAKgZ,qBAAqBY,wBAA8B5Z,KAAKgZ,oBAAoBhE,eAAe;QAChGhV,KAAKiZ,mBAAmBW,wBAA8B5Z,KAAKiZ,kBAAkBjE,eAAe;QAC5FhV,KAAKkZ,eAAeU,wBAA8B5Z,KAAKkZ,cAAclE,eAAe;QACpFhV,KAAKmZ,gBAAgBS,wBAA8B5Z,KAAKmZ,eAAenE,eAAe;QAEtFhV,KAAKW,SAASA;QACdX,KAAKyV,iBAAiBA;QACtBzV,KAAKgV,gBAAgBA;QACrBhV,KAAK6Z,eAAe;AACrB;IAED,eAAAC;QACE,MAAMC,YAAY/Z,KAAKqY;QACvB,MAAM2B,OAAOha,KAAKyV,eAAe5M,OAAOoR;QAGxC,IAAIja,KAAKoZ,YAAY;YACnBpZ,KAAKgZ,qBAAqBY,wBACxB5Z,KAAKgZ,oBACLhZ,KAAKgV,eACL;YAGF,MAAMkF,eAAeC,cAAoBna,KAAKoZ,YAAYpZ,KAAKyV,gBAAgBzV,KAAKW;YACpF,IAAIyZ,aAAmBF,cAAcF,KAAKhJ,OAAOgJ,KAAK/I,SAAS;gBAC7DjR,KAAKgZ,mBAAmBH,MAAMwB,UAAU;gBACxCra,KAAKgZ,mBAAmBH,MAAMyB,SAAS;gBACvCta,KAAKgZ,mBAAmBH,MAAMtN,WAAW;gBACzCvL,KAAKgZ,mBAAmBH,MAAM0B,MAAM,GAAGL,aAAa3T,IAAIwT,YAAY;gBACpE/Z,KAAKgZ,mBAAmBH,MAAM2B,OAAO,GAAGN,aAAa5T,IAAIyT,YAAY;gBACrE/Z,KAAKgZ,mBAAmBH,MAAM4B,eAAe,GAAGV;gBAChD/Z,KAAKgZ,mBAAmBH,MAAMW,SAASxZ,KAAK6Y,MAAMW;gBAClDxZ,KAAKgZ,mBAAmBH,MAAMY,aAAazZ,KAAK6Y,MAAMY;gBACtDzZ,KAAKgZ,mBAAmBH,MAAM6B,SAAS;gBACvC1a,KAAKgZ,mBAAmBH,MAAM7H,QAAQ,GAAG+I;gBACzC/Z,KAAKgZ,mBAAmBH,MAAM5H,SAAS,GAAG8I;gBAC1C/Z,KAAKgZ,mBAAmBH,MAAMc,YAAY3Z,KAAK6Y,MAAMc;AACtD,mBAAM;gBACL3Z,KAAKgZ,mBAAmBH,MAAMwB,UAAU;AACzC;AACF;QAGD,IAAIra,KAAKqZ,YAAYrZ,KAAK6Z,cAAc;YACtC7Z,KAAKiZ,mBAAmBW,wBAA8B5Z,KAAKiZ,kBAAkBjZ,KAAKgV,eAAe;YAEjG,MAAM2F,aAAaR,cAAoBna,KAAKqZ,UAAUrZ,KAAKyV,gBAAgBzV,KAAKW;YAEhF,IAAIyZ,aAAmBO,YAAYX,KAAKhJ,OAAOgJ,KAAK/I,SAAS;gBAC3DjR,KAAKiZ,iBAAiBJ,MAAMwB,UAAU;gBACtCra,KAAKiZ,iBAAiBJ,MAAMyB,SAAS;gBACrCta,KAAKiZ,iBAAiBJ,MAAMtN,WAAW;gBACvCvL,KAAKiZ,iBAAiBJ,MAAM0B,MAAM,GAAGI,WAAWpU,IAAIwT,YAAY;gBAChE/Z,KAAKiZ,iBAAiBJ,MAAM2B,OAAO,GAAGG,WAAWrU,IAAIyT,YAAY;gBACjE/Z,KAAKiZ,iBAAiBJ,MAAM4B,eAAe,GAAGV;gBAC9C/Z,KAAKiZ,iBAAiBJ,MAAMW,SAASxZ,KAAK6Y,MAAMW;gBAChDxZ,KAAKiZ,iBAAiBJ,MAAMY,aAAazZ,KAAK6Y,MAAMY;gBACpDzZ,KAAKiZ,iBAAiBJ,MAAM6B,SAAS;gBACrC1a,KAAKiZ,iBAAiBJ,MAAM7H,QAAQ,GAAG+I;gBACvC/Z,KAAKiZ,iBAAiBJ,MAAM5H,SAAS,GAAG8I;gBACxC/Z,KAAKiZ,iBAAiBJ,MAAMc,YAAY3Z,KAAK6Y,MAAMc;AACpD,mBAAM;gBACL3Z,KAAKiZ,iBAAiBJ,MAAMwB,UAAU;AACvC;AACF;QAED,IAAIra,KAAKqZ,YAAYrZ,KAAKoZ,YAAY;YACpC,MAAMwB,SAAST,cAAoBna,KAAKoZ,YAAYpZ,KAAKyV,gBAAgBzV,KAAKW;YAC9E,MAAMka,SAASV,cAAoBna,KAAKqZ,UAAUrZ,KAAKyV,gBAAgBzV,KAAKW;YAE5E,OAAMkW,IAAEA,IAAEC,IAAEA,IAAEnQ,OAAEA,OAAKqK,OAAEA,SAAU8J,4BAAkCF,QAAQC,QAAQb,KAAKhJ,OAAOgJ,KAAK/I;YAEpG,MAAMgH,KAAKnB,GAAGxQ,IAAIuQ,GAAGvQ;YACrB,MAAM4R,KAAKpB,GAAGvQ,IAAIsQ,GAAGtQ;YAErB,MAAM0K,SAASjR,KAAKuZ;YACpB,IAAIa,aAAmBvD,IAAImD,KAAKhJ,OAAOgJ,KAAK/I,WAAWmJ,aAAmBtD,IAAIkD,KAAKhJ,OAAOgJ,KAAK/I,SAAS;gBACtGjR,KAAKkZ,eAAeU,wBAA8B5Z,KAAKkZ,cAAclZ,KAAKgV,eAAe;gBACzFhV,KAAKkZ,aAAaL,MAAMwB,UAAU;gBAClCra,KAAKkZ,aAAaL,MAAMyB,SAAS;gBACjCta,KAAKkZ,aAAaL,MAAMtN,WAAW;gBACnCvL,KAAKkZ,aAAaL,MAAM0B,MAAM,GAAG1D,GAAGtQ;gBACpCvG,KAAKkZ,aAAaL,MAAM2B,OAAO,GAAG3D,GAAGvQ;gBACrCtG,KAAKkZ,aAAaL,MAAM7H,QAAQ,GAAGA;gBACnChR,KAAKkZ,aAAaL,MAAMjR,YAAY,UAAUjB;gBAC9C3G,KAAKkZ,aAAaL,MAAMkC,kBAAkB,OAAO9J,SAAS;gBAC1DjR,KAAKkZ,aAAaL,MAAMc,YAAY3Z,KAAK6Y,MAAMc;gBAC/C3Z,KAAKkZ,aAAaL,MAAMW,SAAS;gBACjCxZ,KAAKkZ,aAAaL,MAAMY,aAAazZ,KAAK6Y,MAAMY;gBAChDzZ,KAAKkZ,aAAaL,MAAM6B,SAAS;gBACjC1a,KAAKkZ,aAAaL,MAAM5H,SAAS,GAAGA;gBAEpC,MAAMqF,WAAW,GAAGtW,KAAKiW,iBAAiBjW,KAAKsZ;gBAE/C,MAAM0B,KAAKnE,GAAGvQ,IAAI2R,KAAK;gBACvB,MAAMgD,KAAKpE,GAAGtQ,IAAI2R,KAAK;gBAEvB,MAAMgD,aAAa5E,SAAStJ,SAAS;gBAErChN,KAAKmZ,gBAAgBS,wBAA8B5Z,KAAKmZ,eAAenZ,KAAKgV,eAAe;gBAC3FhV,KAAKmZ,cAAcN,MAAMwB,UAAU;gBACnCra,KAAKmZ,cAAcN,MAAMyB,SAAS;gBAClCta,KAAKmZ,cAAcN,MAAMsC,OAAO;gBAChCnb,KAAKmZ,cAAcN,MAAMa,QAAQ;gBACjC1Z,KAAKmZ,cAAcN,MAAMtN,WAAW;gBACpCvL,KAAKmZ,cAAcN,MAAM0B,MAAM,GAAGU;gBAClCjb,KAAKmZ,cAAcN,MAAM2B,OAAO,GAAGQ,KAAKE,aAAa;gBACrDlb,KAAKmZ,cAAcN,MAAM7H,QAAQ,GAAGkK;gBACpClb,KAAKmZ,cAAcN,MAAMkC,kBAAkB;gBAC3C/a,KAAKmZ,cAAcN,MAAM4B,eAAe;gBACxCza,KAAKmZ,cAAcN,MAAMc,YAAY3Z,KAAK6Y,MAAMc;gBAChD3Z,KAAKmZ,cAAcN,MAAMW,SAAS;gBAClCxZ,KAAKmZ,cAAcN,MAAMY,aAAazZ,KAAK6Y,MAAMY;gBACjDzZ,KAAKmZ,cAAcN,MAAM6B,SAAS;gBAClC1a,KAAKmZ,cAAcN,MAAMuC,UAAU;gBACnCpb,KAAKmZ,cAAcN,MAAMwC,YAAY;gBACrCrb,KAAKmZ,cAAcmC,YAAY,GAAGhF;AACnC,mBAAM;gBACLtW,KAAKkZ,aAAaL,MAAMwB,UAAU;gBAClCra,KAAKmZ,cAAcN,MAAMwB,UAAU;AACpC;AACF;AACF;IAED,WAAApE;QACE,OAAOsF,YAAkBvb,KAAKoZ,YAAYpZ,KAAKqZ,UAAUrZ,KAAKyV,kBAAkBzV,KAAKiG;AACtF;IAED,aAAAuV,CAAc7L;QACZ3P,KAAKoZ,aAAazJ;QAClB3P,KAAK8Z;AACN;IAED,WAAA2B,CAAY9L,SAAmB+L;QAC7B1b,KAAK6Z,eAAe6B,aAAa9Z,YAAY,OAAO8Z;QACpD1b,KAAKqZ,WAAW1J;QAChB3P,KAAK8Z;AACN;IAED,MAAAtR;QACExI,KAAK8Z;AACN;IAED,OAAA6B,CAAQtD;QACNrY,KAAKqY,OAAOA;QACZrY,KAAK8Z;AACN;IAED,KAAA8B;QACE5b,KAAKqZ,WAAW;QAChBrZ,KAAKoZ,aAAa;QAClBpZ,KAAKgZ,qBAAqB6C,mBAAyB7b,KAAKgZ,oBAAoBhZ,KAAKgV;QACjFhV,KAAKiZ,mBAAmB4C,mBAAyB7b,KAAKiZ,kBAAkBjZ,KAAKgV;QAC7EhV,KAAKkZ,eAAe2C,mBAAyB7b,KAAKkZ,cAAclZ,KAAKgV;QACrEhV,KAAKmZ,gBAAgB0C,mBAAyB7b,KAAKmZ,eAAenZ,KAAKgV;AACxE;IAED,OAAA8G,CAAQxC;QACNtZ,KAAKsZ,OAAOA;QACZtZ,KAAK8Z;AACN;IAED,mBAAAiC,CAAoB9V;QAClBjG,KAAKiG,QAAQA;QACbjG,KAAK8Z;AACN;IAED,QAAAkC,CAASnD;QACP7Y,KAAK6Y,QAAQA;QACb7Y,KAAK8Z;AACN;IAED,mBAAAmC,CAAoBC;QAClBC,cAAoBnc,KAAKgZ,oBAAoBkD,UAAUA,QAAQE,eAAe;QAC9ED,cAAoBnc,KAAKiZ,kBAAkBiD,UAAUA,QAAQG,aAAa;QAC1EF,cAAoBnc,KAAKmZ,eAAe+C,UAAUA,QAAQI,UAAU;AACrE;IAED,gBAAAC,CAAiB3D;QACf4D,iBAAuBxc,KAAKgZ,oBAAoBJ;QAChD4D,iBAAuBxc,KAAKiZ,kBAAkBL;QAC9C4D,iBAAuBxc,KAAKkZ,cAAcN;QAC1C4D,iBAAuBxc,KAAKmZ,eAAeP;AAC5C;;;AC5NH,SAAS6D,WAAWC,OAAOpD;IACzB,OAAOoD,MAAMpD,SAASA;AACxB;;AAEM,MAAOqD,2BAA2BnM;IAUtC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAKuZ,gBAAgB;QACrBvZ,KAAK4c,QAAQ;QACb5c,KAAK6c,gBAAgB;QACrB7c,KAAK8c,aAAa;QAClB9c,KAAK+c,cAAc;QAEnB/c,KAAKgd,kBAAkB;YACrBC,aAAa;YACbC,aAAa;YACbC,QAAQ;YACRC,MAAM;YACNC,QAAQ;YACRC,OAAO;YACPC,YAAY;YACZC,OAAO;YACPC,aAAa;YACbC,aAAa;YACbC,WAAW;;QAGb3d,KAAK4d,QAAQ;QAEb5d,KAAKsR,aAAa5H,KAAK;AACxB;IAEQ,UAAA6H;QACPb,MAAMa;QAENvR,KAAK6d,mBAAmB3I,SAASC,cAAc;QAC/CnV,KAAK6d,iBAAiBhF,MAAMY,aAAa;QACzCzZ,KAAK6d,iBAAiBhF,MAAMtN,WAAW;QACvCvL,KAAK6d,iBAAiBhF,MAAM6B,SAAS;QACrC1a,KAAK6d,iBAAiBhF,MAAMC,gBAAgB;QAC5C5D,SAAS4I,KAAKzI,YAAYrV,KAAK6d;QAE/B7d,KAAK+d;AACN;IAEQ,OAAArM;QACPhB,MAAMgB;QACN1R,KAAK6d,iBAAiBG;AACvB;IAEQ,aAAArJ;QACP3U,KAAK4d,MAAM1c,SAASiE,QAASA,KAAKqD;AACnC;IAED,MAAAuV;QACE,MAAM/D,OAAOha,KAAK4N,SAAS/E,OAAOoR;QAElCja,KAAK6d,iBAAiBhF,MAAM0B,MAAM,GAAGP,KAAKO;QAC1Cva,KAAK6d,iBAAiBhF,MAAM2B,OAAO,GAAGR,KAAKQ;QAC3Cxa,KAAK6d,iBAAiBhF,MAAM7H,QAAQ,GAAGgJ,KAAKhJ;QAC5ChR,KAAK6d,iBAAiBhF,MAAM5H,SAAS,GAAG+I,KAAK/I;AAC9C;IAED,kBAAAgN;QACE,MAAM5P,OAAOrO,KAAKqH,YAAY4D;QAC9B,MAAMiT,UAAU7P,KAAK8P;QAErB,MAAMC,MAAMF,QAAQG;QACpB,MAAMC,MAAMJ,QAAQK;QAEpBD,IAAI,MAAMF,IAAI;QACdE,IAAI,MAAMF,IAAI;QAEd,OAAO7K,KAAKpD,IAAImO,IAAI,IAAIA,IAAI,MAAM;AACnC;IAEQ,IAAApL,CAAK5M,GAAWC;QACvBvG,KAAKwe;QACL,MAAM7P,QAAQ3O,KAAKqH,YAAYoX,aAAanY,GAAGC,GAAGvG,KAAK6c;QAEvD,IAAI7c,KAAKsS,YAAY;YACnB,IAAI3D,OAAO;gBACT,IAAI3O,KAAK8c,YAAY;oBACnB9c,KAAK+c,cAAcpO;oBACnB3O,KAAK0e,mBAAmBlD,cAAcxb,KAAK8c;oBAC3C9c,KAAK0e,mBAAmBjD,YAAYzb,KAAK+c,aAAa;AACvD,uBAAM;oBACL/c,KAAK8c,aAAanO;oBAClB3O,KAAK0e,mBAAmBlD,cAAcxb,KAAK8c;AAC5C;AACF,mBAAM;gBACL9c,KAAK+c,cAAc;gBACnB/c,KAAK0e,mBAAmB9C;gBACxB5b,KAAK0e,mBAAmBlD,cAAcxb,KAAK8c;gBAC3C9c,KAAK0e,mBAAmBjD,YAAYzb,KAAKqH,YAAYuI,cAActJ,GAAGC,IAAI;AAC3E;AACF,eAAM;YACL,IAAIoI,OAAO;gBACT3O,KAAK0e,mBAAmBlD,cAAc7M;AACvC,mBAAM;gBACL3O,KAAK0e,mBAAmB9C;AACzB;AACF;AACF;IAEQ,GAAA/I;QACP,IAAI7S,KAAK8c,cAAc9c,KAAK+c,aAAa;YACvC,MAAM4B,iBAAiB3e,KAAK4e;YAC5BD,eAAenD,cAAcxb,KAAK8c;YAClC6B,eAAelD,YAAYzb,KAAK+c,aAAa;AAC9C;QACD/c,KAAK8c,aAAa;QAClB9c,KAAK+c,cAAc;QACnB/c,KAAK0e,mBAAmB9C;AACzB;IAED,sBAAA4C;QACE,KAAKxe,KAAK0e,oBAAoB;YAC5B1e,KAAK0e,qBAAqB1e,KAAK4e;AAChC;AACF;IAED,iBAAAA;QACE,MAAMje,SAASX,KAAK4N,SAASvG;QAC7B,MAAMlC,OAAO,IAAI4T,gBAAgB/Y,KAAK6d,kBAAkBld,QAAQX,KAAK4N;QACrEzI,KAAKoU,gBAAgBvZ,KAAKuZ,iBAAiBpU,KAAKoU;QAChDpU,KAAK2W,QAAQW,WAAWzc,KAAKgd,iBAAiBrc,OAAOke;QACrD7e,KAAK4d,MAAMlU,KAAKvE;QAChB,OAAOA;AACR;;;AC1IH,MAAM2Z,mBAAmB;;AAEzB,MAAMC,kBAAkB,CAACC,YAAoBC,YAAoBC,gBACvDF,aAAaF,mBAAoBvL,KAAK+E,KAAK2G,aAAaA,aAAaC,cAAcA;;AAGvF,MAAOC,uBAAuB3O;IAgBlC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAKW,SAASiB;QAEd5B,KAAKof,aAAa;QAClBpf,KAAKqf,QAAQ;QAEbrf,KAAKsf,cAAc,IAAIC;QACvBvf,KAAKwf,UAAUxf,KAAKwf,QAAQhO,KAAKxR;QACjCA,KAAKyf,QAAQzf,KAAKyf,MAAMjO,KAAKxR;QAE7BA,KAAK0f,cAAc;QACnB1f,KAAK2f,cAAc/d;QACnB5B,KAAK4f,kBAAkB5f,KAAK4f,gBAAgBpO,KAAKxR;QAEjDA,KAAK6f,aAAatM,KAAK6E,KAAK;QAC5BpY,KAAKoR,aAAa;AACnB;IAEQ,UAAAG;QACPb,MAAMa;QACNvR,KAAKW,SAASX,KAAKqH;QAEnBxC,OAAO+H,iBAAiB,WAAW5M,KAAKwf,SAAS;QACjD3a,OAAO+H,iBAAiB,SAAS5M,KAAKyf,OAAO;QAE7Czf,KAAK8f,oBAAoB9f,KAAKW,OAAOof;QACrC/f,KAAKW,OAAOqf,aAAa;QAEzB,MAAM3R,OAAOrO,KAAKW,OAAOsK;QACzB,MAAMgV,eAAejgB,KAAKkgB,gBAAgB7R;QAC1CrO,KAAKqf,QAAQY,eAAe;QAE5BjgB,KAAKyQ,QAAQrF,UAAU;YAAEpJ,MAAM;;QAE/BhC,KAAKmgB,aAAangB,KAAKoO;QAGvBpO,KAAKyN,cAAczN,KAAKmgB;QAGxB,MAAMnZ,QAAQhH,KAAKW,OAAOyf;QAC1BpgB,KAAKqgB,WAAWrZ,MAAMsZ,aAAa;QACnCtgB,KAAKugB,YAAYlS;QACjBrH,MAAMoB;QAGNpI,KAAKwgB,eAAe,IAAIxgB,KAAK4N,SAAS6S;QACtCzgB,KAAKwgB,aAAaE,UAAU1gB,KAAKqgB;QAEjCrgB,KAAKyQ,QAAQjI;QACbxI,KAAK2gB,+BAA+B3gB,KAAKyQ,QAAQtE,QAAQlI;QACzDjE,KAAKyQ,QAAQtE,QAAQlI,kBAAkB;AACxC;IAEQ,OAAAyN;;QACP1R,KAAK8f,oBACH9f,KAAK8f,sBAAsBle,YAAY5B,KAAK8f,oBAAoB9f,KAAKyQ,QAAQtE,QAAQ9J;QACvFrC,KAAKW,OAAOqf,aAAahgB,KAAK8f;QAE9BpP,MAAMgB;QAEN1R,KAAKsf,YAAY1D;QAEjB/W,OAAOiI,oBAAoB,WAAW9M,KAAKwf;QAC3C3a,OAAOiI,oBAAoB,SAAS9M,KAAKyf;QAEzC,IAAIzf,KAAK2f,aAAa;YACpB9a,OAAO+b,qBAAqB5gB,KAAK2f;YACjC3f,KAAK2f,cAAc/d;AACpB;QAED,IAAI5B,KAAKqgB,UAAU;YACjB,MAAMrZ,QAAQhH,KAAKW,OAAOyf;YAC1BpZ,MAAM6Z,aAAa7gB,KAAKqgB;YACxBrZ,MAAMoB;aACNC,KAAArI,KAAKwgB,kBAAc,QAAAnY,YAAA,SAAA,IAAAA,GAAAD;AACpB;QAED,IAAIpI,KAAKmgB,YAAY;YACnBngB,KAAKyN,cAAczN,KAAKmgB;YAExB,MAAMxK,MAAM3V,KAAKW,OAAOsK;YAExB0K,IAAIvN;AACL;QAEDpI,KAAKyQ,QAAQjI;QACbxI,KAAKyQ,QAAQtE,QAAQlI,kBAAkBjE,KAAK2gB;AAC7C;IAED,OAAAnB,CAAQxN;QACN,QAAQA,GAAG8O;UACT,KAAK;UACL,KAAK;YACH,IAAI9gB,KAAKof,aAAa,GAAG;gBACvBpf,KAAKof,aAAapf,KAAKof,aAAa;gBACpCpf,KAAKyQ,QAAQrF,UAAU;oBAAEpJ,MAAM;oBAAmBC,MAAMjC,KAAKof;;AAC9D;YACD;;UACF,KAAK;UACL,KAAK;YACH,IAAIpf,KAAKof,aAAa,IAAI;gBACxBpf,KAAKof,aAAapf,KAAKof,aAAa;gBACpCpf,KAAKyQ,QAAQrF,UAAU;oBAAEpJ,MAAM;oBAAmBC,MAAMjC,KAAKof;;AAC9D;YACD;;UACF,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;YACHpf,KAAKsf,YAAYyB,IAAI/O,GAAG8O;YACxB,KAAK9gB,KAAK2f,aAAa3f,KAAK4f,gBAAgB;YAC5C;;AAEL;IAED,KAAAH,CAAMzN;QACJhS,KAAKsf,YAAYlX,OAAO4J,GAAG8O;QAC3B,IAAI9gB,KAAKsf,YAAYjH,OAAO,KAAKrY,KAAK2f,aAAa;YACjD9a,OAAO+b,qBAAqB5gB,KAAK2f;YACjC3f,KAAK2f,cAAc/d;YACnB5B,KAAK0f,cAAc;AACpB;AACF;IAED,eAAAE,CAAgBoB;QACdhhB,KAAK2f,cAAcsB,sBAAsBjhB,KAAK4f;QAE9C,IAAI5f,KAAK0f,gBAAgB,GAAG;YAC1B,MAAMwB,UAAUF,YAAYhhB,KAAK0f;YACjC,MAAMyB,eAAenhB,KAAKof,aAAa8B,UAAUlhB,KAAKqf;YAEtD,KAAK,MAAM+B,WAAWphB,KAAKsf,aAAa;gBACtC,QAAQ8B;kBACN,KAAK;oBACHphB,KAAKwgB,aAAaa,YAAYF;oBAC9B;;kBACF,KAAK;oBACHnhB,KAAKwgB,aAAac,aAAaH;oBAC/B;;kBACF,KAAK;oBACHnhB,KAAKwgB,aAAae,SAASJ;oBAC3B;;kBACF,KAAK;oBACHnhB,KAAKwgB,aAAagB,UAAUL;oBAC5B;;kBACF,KAAK;oBACHnhB,KAAKwgB,aAAaiB,OAAON;oBACzB;;kBACF,KAAK;oBACHnhB,KAAKwgB,aAAakB,SAASP;oBAC3B;;AAEL;YACDnhB,KAAKyQ,QAAQjI;AACd;QAEDxI,KAAK0f,cAAcsB;AACpB;IAEQ,IAAA9N,CAAK5M,GAAGC,GAAGob,MAAMC;QACxB,IAAI5hB,KAAKqgB,YAAYrgB,KAAKsS,YAAY;YACpC,IAAIqP,SAAS,GAAK3hB,KAAK6hB,UAAUF,OAAO3hB,KAAK6f;YAC7C,IAAI+B,SAAS,GAAK5hB,KAAKwgB,aAAasB,SAASF,OAAO5hB,KAAK6f;YACzD7f,KAAKyQ,QAAQjI;AACd;AACF;IAED,QAAAqZ,CAASlb;QAEP,MAAMob,UAAU/hB,KAAKwgB,aAAawB,SAASC;QAC3C,MAAMC,MAAMliB,KAAKoP,SAAS2S,QAAQI;QAClC,MAAMC,KAAKpiB,KAAKoP,SAAS2S,QAAQ/T;QAEjC,MAAMqU,MAAMN,QAAQxW;QAEpB,MAAM+W,YAAYtiB,KAAKiP;QACvB,MAAMsT,cAAuB,EAAC,GAAG,GAAG;QACpCD,UAAU5b,cAAcC,OAAO4b,aAAaF;QAC5CH,IAAInM,YAAYuM;QAChBF,GAAGrM,YAAYuM;QACfP,QAAQS,uBAAuBH,KAAKH,IAAIO,WAAWL,GAAGK;QACtDV,QAAQ3Z;AACT;IAED,WAAAmY,CAAYlS;QACV,MAAM0T,UAAU/hB,KAAKqgB,SAAS4B;QAC9B,MAAMlU,SAASM,KAAKG;QAEpBuT,QAAQW,gBAAgB;QACxBX,QAAQY,iBAAiB;QACzBZ,QAAQa,cAAc;QACtBb,QAAQxB,YAAYlS,KAAKE,cAAcR,QAAQM,KAAKL;QACpD+T,QAAQc,YAAY,OAAO;QAC3Bd,QAAQe,WAAW,OAAO;QAC1Bf,QAAQgB,kBAAkB1U,KAAKJ,gBAAgBI,KAAKH,iBAAiB;QAErE,MAAM8U,SAASjE,gBAAgB1Q,KAAK2Q,YAAY3Q,KAAKJ,gBAAgBI,KAAKH;QAE1E,MAAM+U,UAAUjjB,KAAK0P,QAAQrB,KAAKG;QAClC,MAAM0U,UAAUljB,KAAK0P,QAAQrB,KAAKE;QAClC,MAAM4U,aAAaD,QAAQE,IAAIH;QAC/B,MAAMI,aAAaF,WAAWG;QAC9B,MAAMC,mBAAmBF,WAAWG;QAEpC,MAAMC,YAAYzjB,KAAKuP,WAAWgU;QAClC,MAAMG,eAAe,EAACD,UAAU,KAAKT,QAAQS,UAAU,KAAKT,QAAQS,UAAU,KAAKT;QAEnF,MAAMW,WAAW3jB,KAAK0P,QAAQrB,KAAKG;QACnC,MAAMoV,iBAAiB5jB,KAAK0P,QAAQgU;QAEpC,MAAMG,SAASF,SAAS5C,IAAI6C;QAC5B7B,QAAQxB,YAAYvgB,KAAKyP,UAAUoU,SAASxV,KAAKG,YAAYH,KAAKL;QAElEhO,KAAKkU,UAAU,EAAC+O,SAASC,SAASC,YAAYE,YAAYE,kBAAkBI,UAAUC,gBAAgBC;QAEtG9B,QAAQ+B,WAAWzV;QACnB0T,QAAQ3Z;AACT;IAED,eAAA8X,CAAgB7R;QACd,OAAO0V,MAAMC,MAAMC,QAAQ5V,KAAK6V,aAAa9T;QAC7C,OAAO+T,MAAMC,MAAMC,QAAQhW,KAAK6V,aAAa/T;QAC7C,MAAMmU,SAAS,EAACP,OAAOI,MAAMH,OAAOI,MAAMH,OAAOI;QACjD,OAAO9Q,KAAKnD,OAAOkU;AACpB;;;AC1PG,MAAOC,kCAAkC/T;IAa7C,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAK4c,QAAQ;QAIb,MAAM3M,MAAMjQ,KAAKqH,YAAY6I;QAC7B,MAAMC,MAAMF,IAAIE;QAChB,MAAMC,MAAMH,IAAIG;QAEhBpQ,KAAKwkB,WAAWjR,KAAKC,IAAIpD,IAAI,KAAKD,IAAI,MAAM;QAC5CnQ,KAAKykB,WAAWlR,KAAKC,IAAIpD,IAAI,KAAKD,IAAI,MAAM;QAC5CnQ,KAAK0kB,WAAWnR,KAAKC,IAAIpD,IAAI,KAAKD,IAAI,MAAM;QAE5CnQ,KAAK2kB,WAAW3kB,KAAK0P,QAAQO,IAAIhI;QACjCjI,KAAK4kB,WAAW5kB,KAAK6kB;QAErB,MAAMlP,MAAM3V,KAAKqH,YAAY4D;QAC7B,MAAM6Z,QAAQ9kB,KAAKkP;QACnB4V,MAAMtkB,IAAIR,KAAKyP,UAAUzP,KAAK2kB,WAAW3kB,KAAK4kB;QAE9CjP,IAAIoP,gBAAgBD;QACpB9kB,KAAKgJ,QAAQ2M,IAAIqP,qBAAqB;QAEtC,OAAM/hB,KAAEA,KAAGC,OAAEA,OAAKC,MAAEA,QAASnD,KAAKyQ,QAAQtE,QAAQnJ;QAClD2S,IAAIsP,0BAA0B,MAAMhiB,KAAKC,OAAOC;QAChDwS,IAAIuP,kCAAkC,MAAMllB,KAAK4N,SAASuX,sBAAsBC,iBAAiB,GAAK,GAAK;QAE3GplB,KAAKqlB,UAAUrlB,KAAK2H;QACpB3H,KAAK2I;QAEL3I,KAAKkU,UAAU,EAACjE,KAAK0F,KAAKmP;AAC3B;IAEQ,OAAApT;QACPhB,MAAMgB;QAEN,IAAI1R,KAAKslB,UAAU;YACjBtlB,KAAKqlB,QAAQxE,aAAa7gB,KAAKslB;YAC/BtlB,KAAKkU,UAAU,EAAClU,KAAKqlB,SAASrlB,KAAKslB,UAAUtlB,KAAKulB,cAAcvlB,KAAK2kB;YACrE3kB,KAAKslB,WAAW;YAChBtlB,KAAKulB,eAAe;YACpBvlB,KAAKyQ,QAAQjI;AACd;AACF;IAED,YAAAqc;QACE,OAAO,EAAC,GAAG,GAAG;AACf;IAED,WAAAW,CAAYC;QACV,OAAOA;AACR;IAED,yBAAAC;QACE,OAAO;AACR;IAEQ,KAAAnT,CAAMjM,GAAWC;QACxBvG,KAAK4c,QAAQ;QACb5c,KAAK2lB,SAAS3lB,KAAK4P,cAActJ,GAAGC;QACpCvG,KAAK4lB,UAAU;YAAEtf;YAAGC;;AACrB;IAEQ,IAAA2M,CAAK5M,GAAWC;QACvB,IAAIvG,KAAK4c,OAAO;YACd,MAAMjO,QAAQ3O,KAAK4P,cAActJ,GAAGC;YACpC,MAAMkf,QAAQzlB,KAAKwlB,YAAY7W,MAAMyU,IAAIpjB,KAAK2lB;YAE9C,MAAME,YAAY7lB,KAAK2kB;YACvB3kB,KAAK2kB,WAAWkB,UAAU9E,IAAI0E;YAE9B,MAAMK,UAAU9lB,KAAK2lB;YACrB3lB,KAAK2lB,SAAShX;YAEd,MAAMgH,MAAM3V,KAAKqH,YAAY4D;YAC7B,MAAM6Z,QAAQ9kB,KAAKkP;YACnB,MAAM6W,WAAWjB,MAAMtkB,IAAIR,KAAKyP,UAAUzP,KAAK2kB,WAAW3kB,KAAK4kB;YAC/D,MAAMoB,aAAarQ,IAAIsQ,mBAAmBjmB,KAAKgJ,OAAO8b;YAEtD9kB,KAAKkmB;YAELlmB,KAAKkU,UAAU,EAACyB,KAAKmP,OAAOe,WAAWJ,OAAOK,SAASC,UAAUC;YAEjE,MAAMnV,SAAS7Q,KAAKqH,YAAYyJ;YAChCD,OAAOE,WAAWF,OAAOsV;AAC1B;AACF;IAEQ,GAAAtT,CAAIvM,GAAWC;QACtBvG,KAAK4c,QAAQ;QACb,IAAItW,MAAMtG,KAAK4lB,QAAQtf,KAAKC,MAAMvG,KAAK4lB,QAAQrf,GAAG;YAChDvG,KAAK4kB,WAAW,EAAC5kB,KAAK4kB,SAAS,MAAM,GAAG5kB,KAAK4kB,SAAS,MAAM,GAAG5kB,KAAK4kB,SAAS,MAAM;YAEnF,MAAMjP,MAAM3V,KAAKqH,YAAY4D;YAC7B,MAAM6Z,QAAQ9kB,KAAKkP;YACnB4V,MAAMtkB,IAAIR,KAAKyP,UAAUzP,KAAK2kB,WAAW3kB,KAAK4kB;YAC9CjP,IAAIsQ,mBAAmBjmB,KAAKgJ,OAAO8b;YAEnC9kB,KAAKkU,UAAU,EAACyB,KAAKmP,OAAO9kB,KAAK2lB;YAEjC,MAAM9U,SAAS7Q,KAAKqH,YAAYyJ;YAChCD,OAAOE,WAAWF,OAAOsV;AAC1B;AACF;IAED,aAAAxd;QACE3I,KAAKslB,WAAWtlB,KAAKqlB,QAAQzZ,aAAa;QAE1C,MAAMwa,gBAAgBpmB,KAAK4N,SAASwY;QAEpC,MAAMC,kBAAkB,IAAIrmB,KAAK4N,SAAS0Y;QAC1C,MAAMC,WAAW,IAAIvmB,KAAK4N,SAAS4Y,aAAa,KAAK,KAAK;QAE1DH,gBAAgBI,SAAS;QAEzB,MAAMtc,YAAYnK,KAAKslB,SAASjb;QAChCF,UAAUuc,SAASH,UAAUH,cAAcO,OAAOxlB;QAElDolB,SAASG,SAAS,KAAK,KAAK;QAC5Bvc,UAAUuc,SAASH,UAAUH,cAAcQ,OAAOzlB;QAElDgJ,UAAU0c,cAAc;QAExB1c,UAAU2c,gBAAgBT,iBAAiBD,cAAcO;QACzDN,gBAAgBI,SAAS;QACzBtc,UAAU2c,gBAAgBT,iBAAiBD,cAAcQ;QAEzD5mB,KAAKulB,eAAepb,UAAU4c,cAAc/mB,KAAK0lB;QACjD,MAAMsB,aAAahnB,KAAKulB,aAAa0B;QACrCD,WAAWE,UAAU;QAErBlnB,KAAKkU,UAAU,EAACmS,iBAAiBE,UAAUpc,WAAW6c,YAAYZ;QAClEpmB,KAAKyQ,QAAQgE;AACd;IAED,WAAAyR;QACE,MAAMc,aAAahnB,KAAKulB,aAAa0B;QACrCD,WAAWG,UAAUnnB,KAAK0lB;QAC1B1lB,KAAKkU,UAAU,EAAC8S;QAChBhnB,KAAKyQ,QAAQgE;AACd;;;AC3JG,MAAO2S,mCAAmC7C;IACrC,YAAAM;QACP,OAAO,EAAC,GAAG,GAAG;AACf;IAEQ,WAAAW,CAAYC;QACnBA,MAAMlf,IAAI;QACVkf,MAAMjf,IAAI;QACV,OAAOif;AACR;IAEQ,yBAAAC;QACP,OAAO,EACL1lB,KAAK2kB,SAASre,GACdtG,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,IAAIxG,KAAK0kB,UACvB1kB,KAAK2kB,SAASre,GACdtG,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,IAAIxG,KAAK0kB,UACvB1kB,KAAK2kB,SAASre,GACdtG,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,IAAIxG,KAAK0kB,UACvB1kB,KAAK2kB,SAASre,GACdtG,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,IAAIxG,KAAK0kB;AAE1B;;;AC1BG,MAAO2C,mCAAmC9C;IACrC,YAAAM;QACP,OAAO,EAAC,GAAG,GAAG;AACf;IAEQ,WAAAW,CAAYC;QACnBA,MAAMnf,IAAI;QACVmf,MAAMjf,IAAI;QACV,OAAOif;AACR;IAEQ,yBAAAC;QACP,OAAO,EACL1lB,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,GACdvG,KAAK2kB,SAASne,IAAIxG,KAAK0kB,UACvB1kB,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,GACdvG,KAAK2kB,SAASne,IAAIxG,KAAK0kB,UACvB1kB,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,GACdvG,KAAK2kB,SAASne,IAAIxG,KAAK0kB,UACvB1kB,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,GACdvG,KAAK2kB,SAASne,IAAIxG,KAAK0kB;AAE1B;;;AC1BG,MAAO4C,mCAAmC/C;IACrC,YAAAM;QACP,OAAO,EAAC,GAAG,GAAG;AACf;IAEQ,WAAAW,CAAYC;QACnBA,MAAMnf,IAAI;QACVmf,MAAMlf,IAAI;QACV,OAAOkf;AACR;IAEQ,yBAAAC;QACP,OAAO,EACL1lB,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,GACdxG,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,GACdxG,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne,GACdxG,KAAK2kB,SAASre,IAAItG,KAAKwkB,UACvBxkB,KAAK2kB,SAASpe,IAAIvG,KAAKykB,UACvBzkB,KAAK2kB,SAASne;AAEjB;;;MCzBU+gB;IAQX,WAAAxnB,CAAY6N,UAAe6C,SAAiBE,oBAAgCC;QAC1E5Q,KAAKwnB,YAAY5Z;QACjB5N,KAAKynB,WAAWhX;QAChBzQ,KAAK0nB,sBAAsB/W;QAC3B3Q,KAAK2nB,oBAAoB/W;AAC1B;IAEM,WAAAgX,CAAYthB,GAAWC;QAC5BvG,KAAK6nB,eAAe7nB,KAAK8nB;QACzB9nB,KAAK+nB,eAAe;YAAEzhB;YAAGC;;QAEzB,MAAM8H,OAAOrO,KAAKqH,YAAY4D;QAE9BoD,KAAKjG;QACLpI,KAAK0nB;AACN;IAEM,MAAAM,CAAO1hB,GAAWC;;QACvB,MAAM8H,OAAOrO,KAAKqH,YAAY4D;QAE9B,MAAMiT,UAAU7P,KAAK4Z;QAErB,MAAM5P,OAAO9E,KAAKnD,IAAImD,KAAKC,IAAI0K,QAAQ,KAAKA,QAAQ,KAAK3K,KAAKC,IAAI0K,QAAQ,KAAKA,QAAQ;QAEvF,MAAMgK,SAAUloB,KAAK+nB,aAAazhB,IAAIA,KAAKiN,KAAK6E,KAAMC;QACtD,MAAM8P,SAAUnoB,KAAK+nB,aAAaxhB,IAAIA,KAAKgN,KAAK6E,KAAMC;QAEtDrY,KAAK+nB,aAAazhB,IAAIA;QACtBtG,KAAK+nB,aAAaxhB,IAAIA;QAEtB,MAAM6hB,SAASD;QACf,MAAME,SAASH;QAEf,MAAM/H,aAAa;YACjB5U,UAAU8C,KAAKE;YACfR,QAAQM,KAAKG;YACbR,UAAUK,KAAKL;YACfC,gBAAgBI,KAAKJ;YACrBC,iBAAiBG,KAAKH;YACtBC,aAAaE,KAAKF;;QAGpBE,KAAKjG;QAEL,MAAMkgB,aAAatoB,KAAKuoB,cAAcpI;QAEtC,IAAIiI,WAAW,GAAK;YAClBpoB,KAAKwoB,gBAAgBrI,aAAaiI,QAAQE;AAC3C;QAED,IAAID,WAAW,GAAK;YAClBroB,KAAKyoB,gBAAgBtI,YAAYkI,QAAQC;AAC1C;QAEDA,WAAWlgB;QAEX,MAAMuF,UAAU3N,KAAKqH,YAAYwG;QAEjCF,QAAQG,QACNqS,WAAW5U,UACX4U,WAAWpS,QACXoS,WAAWnS,UACXmS,WAAWlS,gBACXkS,WAAWjS,iBACXiS,WAAWhS;QAEbR,QAAQvF;SAERC,KAAArI,KAAKynB,SAASiB,qBAAe,QAAArgB,YAAA,SAAA,IAAAA,GAAEsM;AAChC;IAEM,SAAAgU;QACL3oB,KAAK2nB;AACN;IAEO,aAAAY,CAAcpI;QACpB,MAAMyI,OAAO5oB,KAAKoP,SAAS+Q,WAAWnS;QACtC,MAAMiV,UAAUjjB,KAAK0P,QAAQyQ,WAAWpS;QACxC,MAAM8a,YAAY7oB,KAAK0P,QAAQyQ,WAAW5U;QAE1C,MAAMud,SAAS7F,QAAQG,IAAIyF;QAC3B,MAAME,UAAUD,OAAOxF;QAEvB,MAAM0F,SAASJ,KAAKK,aAAaF;QACjC,MAAMT,aAAaU,OAAOxF;QAE1BxjB,KAAKkU,UAAU,EAAC4U,QAAQF,MAAM3F,SAAS4F,WAAWE,SAASC;QAE3D,OAAOV;AACR;IAEO,eAAAE,CAAgBrI,YAAiBsF,OAAe6C;QACtD;YACE,MAAMY,SAASlpB,KAAK0P,QAAQyQ,WAAW5U;YACvC,MAAM4d,UAAUnpB,KAAK0P,QAAQ1P,KAAK6nB;YAElC,MAAMuB,cAAcF,OAAOG,kBAAkB5D,OAAO6C,YAAYa;YAChEhJ,WAAW5U,WAAW6d,YAAY3G;YAElCziB,KAAKkU,UAAU,EAACgV,QAAQC,SAASC;AAClC;QAED;YACE,MAAMnG,UAAUjjB,KAAK0P,QAAQyQ,WAAWpS;YACxC,MAAMob,UAAUnpB,KAAK0P,QAAQ1P,KAAK6nB;YAElC,MAAMuB,cAAcnG,QAAQoG,kBAAkB5D,OAAO6C,YAAYa;YACjEhJ,WAAWpS,SAASqb,YAAY3G;YAEhCziB,KAAKkU,UAAU,EAAC+O,SAASkG,SAASC;AACnC;QAED;YACE,MAAMF,SAASlpB,KAAK0P,QAAQyQ,WAAW5U;YACvC,MAAM0X,UAAUjjB,KAAK0P,QAAQyQ,WAAWpS;YACxC,MAAMob,UAAUnpB,KAAK0P,QAAQ1P,KAAK6nB;YAElC,MAAMyB,MAAMrG,QAAQG,IAAI8F;YACxB,MAAMK,MAAMD,IAAIhG;YAEhB,MAAM2F,eAAeM,IAAIN,aAAaX;YACtC,MAAMkB,qBAAqBP,aAAazF;YAExCrD,WAAWnS,WAAWwb,mBAAmB/G;YAEzCziB,KAAKkU,UAAU,EAACgV,QAAQjG,SAASkG,SAASG,KAAKC,KAAKN,cAAcO;AACnE;AACF;IAEO,eAAAf,CAAgBtI,YAAiBsF,OAAe6C;QACtD;YACE,MAAMY,SAASlpB,KAAK0P,QAAQyQ,WAAW5U;YACvC,MAAM4d,UAAUnpB,KAAK0P,QAAQ1P,KAAK6nB;YAElC,MAAM4B,QAAQzpB,KAAKoP,SAASpP,KAAKwnB,UAAUzY,SAAS2a;YAEpD,MAAMN,cAAcF,OAAOG,kBAAkB5D,OAAOgE,OAAON;YAC3DhJ,WAAW5U,WAAW6d,YAAY3G;YAElCziB,KAAKkU,UAAU,EAACuV,OAAOP,QAAQC,SAASC;AACzC;QAED;YACE,MAAMnG,UAAUjjB,KAAK0P,QAAQyQ,WAAWpS;YACxC,MAAMob,UAAUnpB,KAAK0P,QAAQ1P,KAAK6nB;YAElC,MAAM4B,QAAQzpB,KAAKoP,SAASpP,KAAKwnB,UAAUzY,SAAS2a;YAEpD,MAAMN,cAAcnG,QAAQoG,kBAAkB5D,OAAOgE,OAAON;YAC5DhJ,WAAWpS,SAASqb,YAAY3G;YAEhCziB,KAAKkU,UAAU,EAACuV,OAAOxG,SAASkG,SAASC;AAC1C;QAED;YACE,MAAMK,QAAQzpB,KAAKoP,SAASpP,KAAKwnB,UAAUzY,SAAS2a;YACpD,MAAMzG,UAAUjjB,KAAK0P,QAAQyQ,WAAWpS;YACxC,MAAMmb,SAASlpB,KAAK0P,QAAQyQ,WAAW5U;YAEvC,MAAMoe,OAAOrB,WAAWsB,SAASnE,OAAOgE;YAExC,MAAMH,MAAMrG,QAAQG,IAAI8F;YACxB,MAAMK,MAAMD,IAAIhG;YAEhB,MAAMuG,QAAQN,IAAIN,aAAaU;YAC/B,MAAMG,cAAcD,MAAMrG;YAE1BrD,WAAWnS,WAAW8b,YAAYrH;YAElCziB,KAAKkU,UAAU,EAACuV,OAAOxG,SAASiG,QAAQS,MAAML,KAAKC,KAAKM,OAAOC;AAChE;AACF;IAEO,SAAAhC;QACN,MAAMnnB,SAASX,KAAKqH;QACpB,IAAIY;QAEJ,MAAM8hB,OAAOppB,OAAOgJ;QACpB,KAAKogB,KAAKlgB,YAAYkgB,KAAKjgB,eAAe,GAAG;YAC3C,MAAMC,MAAMggB,KAAK/f;YACjB,IAAIiG,KAAK+Z,OAAOC;YAChB,OAAQlgB,IAAIvC,QAAQuC,IAAItC,QAAQ;gBAC9BuiB,QAAQjgB,IAAIG;gBACZ+F,MAAM+Z,MAAME;gBACZ,IAAID,aAAaA,YAAYE,OAAOla,WAC/Bga,cAAcha;AACpB;YACDhI,SAASgiB,YAAYhiB;YAErBgiB,YAAY7hB;YACZ2B,IAAI3B;AACL,eAAM;YACLH,SAAStH,OAAOuP,mBAAmBjI;AACpC;QAED,OAAOA;AACR;IAEO,SAAAZ;QACN,OAAOrH,KAAKwnB,UAAUngB;AACvB;IAEO,QAAA+H,CAASC;QACf,OAAOrP,KAAKwnB,UAAUzY,SAASO,gBAAgBD;AAChD;IAEO,OAAAK,CAAQC;QACd,OAAO3P,KAAKwnB,UAAU3Y,QAAQS,gBAAgBK;AAC/C;IAEO,SAAAuE,CAAUQ;;QAChB,KAAK,MAAMpG,OAAOoG,SAAS;aACzBrM,KAAAiG,gBAAAA,aAAG,SAAA,IAAHA,IAAKlG;AACN;AACF;;;AC5NG,MAAOgiB,uBAAuB5Z;IAMlC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAKoR,aAAa;QAClBpR,KAAK4c,QAAQ;QACb5c,KAAKqqB,eAAe,IAAI9C,YAAYvnB,KAAK4N,UAAU5N,KAAKyQ,SAASzQ,KAAK2Q,oBAAoB3Q,KAAK4Q;AAChG;IAEQ,KAAA2B,CAAMjM,GAAWC;QACxBvG,KAAK4c,QAAQ;QACb5c,KAAKqqB,aAAazC,YAAYthB,GAAGC;AAClC;IAED,oBAAA+jB;QACE,MAAM3c,UAAU3N,KAAKqH,YAAYwG;QACjCF,QAAQG,QACN9N,KAAKuqB,kBAAkBhf,UACvBvL,KAAKuqB,kBAAkBxc,QACvB/N,KAAKuqB,kBAAkBvc,UACvBhO,KAAKuqB,kBAAkBtc,gBACvBjO,KAAKuqB,kBAAkBrc,iBACvBlO,KAAKuqB,kBAAkBpc;QAEzBR,QAAQvF;AACT;IAEQ,IAAA8K,CAAK5M,GAAWC,GAAWob,MAAcC;QAChD,IAAI5hB,KAAK4c,OAAO;YACd5c,KAAKqqB,aAAarC,OAAO1hB,GAAGC;AAC7B;AACF;IAEQ,GAAAsM;QACP7S,KAAK4c,QAAQ;QACb5c,KAAKqqB,aAAa1B;AACnB;;;MCzCU6B;IAUX,WAAAzqB,CACE6N,UACA6C,SACAE,oBACAC,kBACAxC,eACAX;QAEAzN,KAAKwnB,YAAY5Z;QACjB5N,KAAKynB,WAAWhX;QAChBzQ,KAAK0nB,sBAAsB/W;QAC3B3Q,KAAK2nB,oBAAoB/W;QACzB5Q,KAAKyqB,iBAAiBrc;QACtBpO,KAAK0qB,iBAAiBjd;AACvB;IAEM,WAAAma,CAAYthB,GAAWC;QAC5BvG,KAAK2qB,WAAW3qB,KAAK4P,cAActJ,GAAGC;QACtCvG,KAAK4qB,uBAAuB;YAAEtkB;YAAGC;;QACjCvG,KAAK0nB;AACN;IAEM,MAAAM,CAAO1hB,GAAWC;;QACvB,OAAMwI,UAAEA,YAAa/O,KAAKwnB;QAC1B,MAAM9Z,SAAS1N,KAAKyqB;QACpB,MAAMI,KAAK7qB,KAAK4P,cAActJ,GAAGC;QAEjC,MAAMukB,QAAQ9qB,KAAK2qB,SAASvH,IAAIyH;QAChC,MAAMpF,QAAQqF,MAAMxH;QAEpB,MAAMvV,SAASgB,SAASO,gBAAgB5B,OAAOK;QAC/C,MAAMgd,kBAAkBhd,OAAOgT,IAAI0E;QACnC/X,OAAOK,SAASgd,gBAAgBtI;QAEhC,MAAMlX,WAAWwD,SAASO,gBAAgB5B,OAAOnC;QACjD,MAAMyf,oBAAoBzf,SAASwV,IAAI0E;QACvC/X,OAAOnC,WAAWyf,kBAAkBvI;QAEpCziB,KAAK0qB,eAAehd;QACpBK,OAAO3F;QAEP2iB,gBAAgB3iB;QAChBmD,SAASnD;QACT4iB,kBAAkB5iB;SAElBC,KAAArI,KAAKynB,SAASiB,qBAAe,QAAArgB,YAAA,SAAA,IAAAA,GAAEsM;QAC/B3U,KAAKynB,SAASrc,UAAU;YACtBpJ,MAAM;YACNsE;YACAC;YACA0kB,IAAI3kB,IAAItG,KAAK4qB,qBAAqBtkB;YAClC4kB,IAAI3kB,IAAIvG,KAAK4qB,qBAAqBrkB;;QAGpCvG,KAAK4qB,uBAAuB;YAAEtkB;YAAGC;;AAClC;IAEM,SAAAoiB;QACL3oB,KAAK2nB;AACN;IAEO,aAAA/X,CAActJ,GAAWC;QAC/B,OAAOvG,KAAKwnB,UAAU3Y,QAAQS,gBAAgBtP,KAAKwnB,UAAUngB,YAAYuI,cAActJ,GAAGC;AAC3F;;;ACxEG,MAAO4kB,qBAAqB3a;IAIhC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAKoR,aAAa;QAClBpR,KAAK4c,QAAQ;QACb5c,KAAKorB,aAAa,IAAIZ,UACpBxqB,KAAK4N,UACL5N,KAAKyQ,SACLzQ,KAAK2Q,oBACL3Q,KAAK4Q,kBACL5Q,KAAKoO,eACLpO,KAAKyN;AAER;IAEQ,KAAA8E,CAAMjM,GAAWC;QACxBvG,KAAK4c,QAAQ;QACb5c,KAAKorB,WAAWxD,YAAYthB,GAAGC;AAChC;IAEQ,IAAA2M,CAAK5M,GAAWC,GAAWob,MAAcC;QAChD,IAAI5hB,KAAK4c,OAAO;YACd5c,KAAKorB,WAAWpD,OAAO1hB,GAAGC;AAC3B;AACF;IAEQ,GAAAsM,CAAIvM,GAAWC;QACtBvG,KAAK4c,QAAQ;QACb5c,KAAKorB,WAAWzC;AACjB;;;MCnCU0C;IAIX,WAAAtrB,CAAY6N,UAAe6C;QACzBzQ,KAAKwnB,YAAY5Z;QACjB5N,KAAKynB,WAAWhX;AACjB;IAEM,MAAAuX,CAAO1hB,GAAWC,GAAW+kB;;QAClC,MAAM3qB,SAASX,KAAKwnB,UAAUngB;QAC9B1G,OAAO4qB,OAAOD,YAAYhlB,GAAGC;SAE7B8B,KAAArI,KAAKynB,SAASiB,qBAAe,QAAArgB,YAAA,SAAA,IAAAA,GAAEsM;QAC/B3U,KAAKynB,SAASrc,UAAU;YACtBpJ,MAAM;YACNC,MAAMqpB;;AAET;;;AChBG,MAAOE,sBAAsBhb;IAKjC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAKoR,aAAa;QAClBpR,KAAK4c,QAAQ;QACb5c,KAAKyrB,cAAc,IAAIJ,WAAWrrB,KAAK4N,UAAU5N,KAAKyQ;AACvD;IAEQ,KAAA8B,CAAMjM,GAAWC;QACxBvG,KAAK4c,QAAQ;QACb5c,KAAK0rB,SAASplB;QACdtG,KAAK2rB,SAASplB;QACdvG,KAAK2Q;AACN;IAEQ,IAAAuC,CAAK5M,GAAWC,GAAWob,MAAcC;QAChD,IAAI5hB,KAAK4c,OAAO;YACd,MAAMgP,aAAa;YACnB,MAAMN,aAAa1J,OAAO,IAAI,IAAIgK,aAAa,IAAIA;YACnD5rB,KAAKyrB,YAAYzD,OAAOhoB,KAAK0rB,QAAQ1rB,KAAK2rB,QAAQL;AACnD;AACF;IAEQ,GAAAzY;QACP7S,KAAK4c,QAAQ;QACb5c,KAAK4Q;AACN;;;AC9BH,MAAMib,yBAAyB;;AAEzB,MAAOC,2BAA2Btb;IAOtC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QAGNzQ,KAAKsR,eAAe,EAAC;QACrBtR,KAAKyrB,cAAc,IAAIJ,WAAWrrB,KAAK4N,UAAU5N,KAAKyQ;QACtDzQ,KAAK+rB,6BAA6BnqB;QAClC5B,KAAKgsB,6BAA6B;AACnC;IAED,KAAAC,CAAM/e;QACJ,KAAKlN,KAAKyQ,QAAQtE,QAAQlI,iBAAiB;YACzC;AACD;QAEDiJ,QAAQA,SAASrI,OAAOqI;QACxBA,MAAMgf;QAEN,MAAMC,cAAcnsB,KAAKyQ,QAAQtE,QAAQnI,oBAAoB,IAAI;QACjE,MAAMooB,YAAY,OAAQD;QAE1B,MAAMxrB,SAASX,KAAKqH;QACpB,IAAI1G,QAAQ;YACV,MAAM2qB,aAAape,MAAMmf,SAAS,IAAI,IAAID,YAAY,IAAIA;YAE1DpsB,KAAKyrB,YAAYzD,OACf9a,MAAM0E,UAAU/M,OAAOgN,kBACvB3E,MAAM4E,UAAUjN,OAAOgN,kBACvByZ;YAGF,KAAKtrB,KAAKgsB,4BAA4B;gBACpChsB,KAAKgsB,6BAA6B;gBAClChsB,KAAK2Q;AACN;YAED,IAAI3Q,KAAK+rB,4BAA4B;gBACnCO,aAAatsB,KAAK+rB;AACnB;YAED,KAAK/rB,KAAKgsB,4BAA4B;gBACpChsB,KAAKgsB,6BAA6B;gBAClChsB,KAAK2Q;AACN;YAED,IAAI3Q,KAAK+rB,4BAA4B;gBACnCO,aAAatsB,KAAK+rB;AACnB;YAED/rB,KAAKyQ,QAAQjI,OAAO;YAEpBxI,KAAK+rB,6BAA6BQ,YAAW;gBAC3CvsB,KAAK+rB,6BAA6BnqB;gBAClC5B,KAAK4Q;gBACL5Q,KAAKgsB,6BAA6B;AAAK,gBACtCH;AACJ;AACF;IAEQ,OAAAna;QACP,IAAI1R,KAAK+rB,4BAA4B;YACnCO,aAAatsB,KAAK+rB;YAClB/rB,KAAK4Q;YACL5Q,KAAKgsB,6BAA6B;AACnC;AACF;;;MC7EUQ;IAQX,WAAAzsB;QACEC,KAAKysB,UAAU,EAAC,GAAG,GAAG;QACtBzsB,KAAK0sB,QAAQ,EAAC,GAAG,GAAG;QAEpB1sB,KAAKqlB,UAAU;AAChB;IAED,aAAArW;QACE,OAAO,IAAIhP,KAAK4N,SAASiB;AAC1B;IAED,IAAA8d,CAAKC,UAAe5lB;QAClBhH,KAAK4N,WAAWgf;QAChB5sB,KAAKqlB,UAAUre;AAChB;IAED,SAAAK;QACE,OAAOrH,KAAK4N,SAASvG;AACtB;IAED,QAAAof,CAAStlB;QACPnB,KAAK0sB,QAAQvrB;QACbnB,KAAK6sB;AACN;IAED,aAAArR,CAAc7M;QACZ3O,KAAKysB,UAAU9d;QACf3O,KAAK0sB,QAAQ/d;QACb3O,KAAK6sB;AACN;IAED,aAAAhd,CAAcC;QACZ,MAAMlB,IAAc;QACpB,KAAK,IAAImB,IAAI,GAAGA,IAAID,OAAO9C,QAAQ+C,KAAK;YACtCnB,EAAElF,KAAKoG,OAAOC,GAAGzJ;YACjBsI,EAAElF,KAAKoG,OAAOC,GAAGxJ;YACjBqI,EAAElF,KAAKoG,OAAOC,GAAGvJ;AAClB;QACD,OAAOoI;AACR;IAED,IAAAie;QACE,MAAMxe,OAAOrO,KAAKqH,YAAY4D;QAC9B,MAAM6hB,QAAQze,KAAK0e;QAEnB,MAAMjd,SAAS;QACfA,OAAOpG,KAAK1J,KAAKysB;QACjB3c,OAAOpG,KAAK1J,KAAKgP;QACjBc,OAAOpG,KAAK1J,KAAK0sB;QACjB5c,OAAOpG,KAAK1J,KAAKgP;QAEjB,MAAMge,KAAKhtB,KAAKgP;QAChBge,GAAGxsB,IAAIR,KAAKysB,QAAQ,IAAIzsB,KAAKysB,QAAQ,IAAIzsB,KAAKysB,QAAQ;QAEtD,MAAM3V,KAAK9W,KAAKgP;QAChB8H,GAAGtW,IAAIR,KAAK0sB,MAAM,IAAI1sB,KAAK0sB,MAAM,IAAI1sB,KAAK0sB,MAAM;QAEhDM,GAAGjX,YAAY+W;QACfhW,GAAGf,YAAY+W;QAEfhd,OAAO,GAAGxJ,IAAI0mB,GAAG1mB;QACjBwJ,OAAO,GAAGxJ,IAAIwQ,GAAGxQ;QACjBwJ,OAAO,GAAGvJ,IAAIuQ,GAAGvQ;QACjBuJ,OAAO,GAAGvJ,IAAIymB,GAAGzmB;QACjBuJ,OAAO,GAAGtJ,IAAIsJ,OAAO,GAAGtJ,IAAIsQ,GAAGtQ;QAE/B,MAAMymB,OAAO5e,KAAK6e;QAClBpd,OAAO,GAAGiG,YAAYkX;QACtBnd,OAAO,GAAGiG,YAAYkX;QAEtB,KAAKjtB,KAAKslB,UAAU;YAClBtlB,KAAKslB,WAAWtlB,KAAKqlB,QAAQzZ,aAAa;YAC1C,MAAMzB,YAAYnK,KAAKslB,SAASjb;YAEhCF,UAAUuc,SAAS,KAAK,KAAK;YAC7Bvc,UAAU0c,cAAc;YAExB7mB,KAAKmtB,UAAUhjB,UAAU4c,cAAc/mB,KAAK6P,cAAcC;YAC1D3F,UAAU/B;AACX,eAAM;YACLpI,KAAKmtB,QAAQlG,gBAAgBE,UAAUnnB,KAAK6P,cAAcC;AAC3D;AACF;IAED,KAAA8L;QACE,IAAI5b,KAAKslB,UAAU;YACjBtlB,KAAKqlB,QAAQxE,aAAa7gB,KAAKslB;YAC/BtlB,KAAKslB,WAAW;AACjB;AACF;;;AC7FG,MAAO8H,4BAA4B5c;IAOvC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAKoR,aAAa;QAClBpR,KAAK4c,QAAQ;QACb5c,KAAKkR,gBAAgB;QAErBlR,KAAKmtB,UAAU,IAAIX;QACnBxsB,KAAKmtB,QAAQR,KAAK3sB,KAAK4N,UAAU5N,KAAK2H;AACvC;IAEQ,KAAA4K,CAAMjM,GAAWC;QACxBvG,KAAK4c,QAAQ;QACb5c,KAAKqtB,SAAS/mB;QACdtG,KAAKstB,SAAS/mB;QAEd,MAAM6S,aAAapZ,KAAK4P,cAActJ,GAAGC;QACzCvG,KAAKmtB,QAAQ3R,cAAcpC;AAC5B;IAEQ,IAAAlG,CAAK5M,GAAWC,GAAWob,MAAcC;QAChD,IAAI5hB,KAAK4c,OAAO;YACd5c,KAAKutB,SAASjnB;YACdtG,KAAKwtB,SAASjnB;YAEd,MAAMoI,QAAQ3O,KAAK4P,cAActJ,GAAGC;YACpCvG,KAAKmtB,QAAQ1G,SAAS9X;AACvB;AACF;IAEQ,GAAAkE,CAAIvM,GAAWC;QACtBvG,KAAK4c,QAAQ;QACb5c,KAAKutB,SAASjnB;QACdtG,KAAKwtB,SAASjnB;QAEd,IAAIvG,KAAKqtB,WAAWrtB,KAAKutB,UAAUvtB,KAAKstB,WAAWttB,KAAKwtB,QAAQ;YAC9DxtB,KAAKmtB,QAAQvR;YACb5b,KAAKqH,YAAYomB,WAAWztB,KAAKqtB,QAAQrtB,KAAKstB,QAAQttB,KAAKutB,QAAQvtB,KAAKwtB;AACzE;AACF;;;AC7CG,MAAOE,mCAAmCld;IAQ9C,WAAAzQ,CAAYY;QACV+P,MAAM/P;QACNX,KAAKoR,aAAa;QAClBpR,KAAK4c,QAAQ;QACb5c,KAAK2tB,gBAAgBpa,KAAK6E,KAAK;QAC/BpY,KAAK4tB,gBAAgB;AACtB;IAEQ,KAAArb,CAAMjM,GAAWC;QACxBvG,KAAK4c,QAAQ;QAEb5c,KAAK6nB,eAAe7nB,KAAK8nB;QACzB9nB,KAAK+nB,eAAe;YAAEzhB;YAAGC;;QAEzB,MAAM8H,OAAOrO,KAAKqH,YAAY4D;QAE9BjL,KAAKuqB,oBAAoBvqB,KAAKoO;QAE9B,MAAM8P,UAAU7P,KAAK4Z;QAErBjoB,KAAK6tB,UAAUta,KAAKnD,IAAI8N,QAAQ,KAAKA,QAAQ,IAAIA,QAAQ,KAAKA,QAAQ;QAEtEle,KAAK2Q;AACN;IAED,oBAAA2Z;QACEtqB,KAAKyN,cAAczN,KAAKuqB;AACzB;IAEQ,IAAArX,CAAK5M,GAAWC,GAAWob,MAAcC;QAChD,IAAI5hB,KAAK4c,OAAO;YACd,IAAIqO,KAAK3kB,IAAItG,KAAK+nB,aAAazhB;YAC/B,IAAI4kB,KAAK3kB,IAAIvG,KAAK+nB,aAAaxhB;YAE/B0kB,MAAM1X,KAAK6E,KAAKpY,KAAK6tB;YACrB3C,MAAM3X,KAAK6E,KAAKpY,KAAK6tB;YAErB7tB,KAAKsqB;YAEL,OAAMvb,UAAEA,UAAQ7G,UAAEA,YAAalI,KAAK4N;YAEpC,MAAMG,SAASgB,SAASO,gBAAgBtP,KAAKuqB,kBAAkBxc;YAC/D,MAAM+f,SAAS/e,SAASO,gBAAgBtP,KAAKuqB,kBAAkBhf,UAAU6X,IAAIrV;YAC7E,MAAMmU,MAAM4L,OAAOtK;YAEnB,MAAMuK,UAAU,IAAI7lB;YACpB6lB,QAAQC;YACR,MAAMC,UAAU,IAAI/lB;YACpB+lB,QAAQD;YAIR,MAAME,QAAQnf,SAASO,gBAAgB,EAAC4S,IAAI5b,GAAG4b,IAAI3b,GAAG2b,IAAI1b;YAC1D,MAAMijB,QAAQ1a,SAASO,gBAAgBtP,KAAKuqB,kBAAkBvc;YAC9D,MAAMmgB,QAAQD,MAAMjF,aAAaQ;YAGjC,IAAI2E,QAAQrf,SAASO,gBAAgB,EAAC4e,MAAM5nB,GAAG4nB,MAAM3nB,GAAG;YAExD,IAAI6nB,MAAMphB,YAAY,MAAS;gBAC7BohB,MAAM5tB,KAAK2tB,MAAM5nB,GAAG4nB,MAAM7nB,GAAG;AAC9B,mBAAM;gBACL8nB,QAAQA,MAAM5K;AACf;YACD,MAAM6K,UACJ9a,KAAK+a,KAAKF,MAAMG,WAAWxf,SAASO,gBAAgB,GAAE,GAAG,GAAG,SAC5D8e,MAAMI,QAAQzf,SAASO,gBAAgB,EAAC,GAAG,GAAG;YAChD2b,MAAMoD;YAIN,IAAII,QAAQ1f,SAASO,gBAAgB,EAAC4S,IAAI5b,GAAG4b,IAAI3b,GAAG;YACpD,IAAImoB,UAAU;YACd,IAAID,MAAMzhB,YAAY,MAAS;gBAC7B0hB,WAAYxM,IAAI1b,IAAI+M,KAAK6E,KAAM;AAChC,mBAAM;gBACLqW,QAAQA,MAAMjL;gBACdkL,WAAWD,MAAMD,QAAQtM;AAC1B;YACDgJ,MAAMwD;YAKNX,QAAQrnB,eAAeukB,IAAI,EAAC,GAAG,GAAG,KAAI,EAAC,GAAG,GAAG;YAE7C,MAAM0D,SAASpb,KAAKnD,IAAIpQ,KAAK4tB,eAAera,KAAKpD,IAAInQ,KAAK2tB,eAAezC;YACzE+C,QAAQvnB,cAAcioB,QAAQ,EAAC,GAAG,GAAG,KAAI,EAAC,GAAG,GAAG;YAEhD,MAAMC,YAAYb,QAAQjnB,WAAWmnB;YAErC,IAAI5L,MAAMtT,SAASO,gBAAgB,EAAC,GAAG,GAAG,KAAIyG,YAAY6Y;YAC1D,MAAMxM,KAAKrT,SAASO,gBAAgB,EAAC,GAAG,GAAG,KAAIyG,YAAY6Y;YAE3DvM,IAAIwM,UAAUf,OAAO9gB;YACrBqV,MAAMtU,OAAOgT,IAAIsB;YAEjB,MAAMyM,UAAU9uB,KAAKoO;YAErB0gB,QAAQvjB,WAAW8W,IAAII;YACvBqM,QAAQ9gB,WAAWoU,GAAGK;YAEtBziB,KAAKyN,cAAcqhB;AACpB;AACF;IAEQ,GAAAjc;QACP7S,KAAK4c,QAAQ;QACb5c,KAAK4Q;AACN;IAED,SAAAkX;QACE,MAAMnnB,SAASX,KAAKqH;QAEpB,IAAI4I,MAAMtP,OAAOuP;QAEjB,MAAM6Z,OAAOppB,OAAOgJ;QACpB,KAAKogB,KAAKlgB,YAAYkgB,KAAKjgB,eAAe,GAAG;YAC3C,MAAMC,MAAMggB,KAAK/f;YACjB,MAAMggB,QAAQjgB,IAAIG;YAElB,IAAI8f,MAAM5f,cAAc,GAAG;gBACzB,MAAMkE,MAAM0b,MAAM3f;gBAElB4F,IAAI7H;gBACJ6H,MAAM3B,IAAIvG;gBAEVuG,IAAIlG;AACL,mBAAM,IAAI4hB,MAAM5f,cAAc,GAAG;gBAChC,MAAMkE,MAAM0b,MAAM1f;gBAClB,MAAMykB,WAAWzgB,IAAIvG;gBAErBkI,IAAI7H;gBACJ6H,MAAM8e,SAAS9e;gBAEf8e,SAAS3mB;gBACTkG,IAAIlG;AACL;YAED2B,IAAI3B;AACL;QAED,MAAMH,SAASgI,IAAIhI;QAEnBgI,IAAI7H;QACJ,OAAOH;AACR;;;ACxJH,IAAY+mB;;CAAZ,SAAYA;IACVA,cAAAA,cAAA,UAAA,KAAA;IACAA,cAAAA,cAAA,WAAA,KAAA;IACAA,cAAAA,cAAA,SAAA,KAAA;IACAA,cAAAA,cAAA,UAAA,KAAA;AACD,EALD,CAAYA,kBAAAA,gBAKX,CAAA;;AAEK,MAAOC,uBAAuBze;IAalC,wBAAW0e;QACT,OAAOlvB,KAAKmvB;AACb;IAED,wBAAWD,CAAqB/tB;QAC9BnB,KAAKmvB,wBAAwBhuB;AAC9B;IAED,WAAApB,CAAmB0Q;QACjBC,MAAMD;QArBAzQ,KAAAovB,kBAAkB,IAAIlvB;QACtBF,KAAAqvB,iBAAiB,IAAInvB;QACrBF,KAAAsvB,qBAAqBN,cAAcO;QAM1BvvB,KAAAwvB,gCAAgC,KAAK3qB,OAAOgN;QAErD7R,KAAqBmvB,wBAAG;QAa9BnvB,KAAKqqB,eAAe,IAAI9C,YAAYvnB,KAAK4N,UAAU5N,KAAKyQ,SAASzQ,KAAK2Q,oBAAoB3Q,KAAK4Q;QAC/F5Q,KAAKorB,aAAa,IAAIZ,UACpBxqB,KAAK4N,UACL5N,KAAKyQ,SACLzQ,KAAK2Q,oBACL3Q,KAAK4Q,kBACL5Q,KAAKoO,eACLpO,KAAKyN;QAEPzN,KAAKyrB,cAAc,IAAIJ,WAAWrrB,KAAK4N,UAAU5N,KAAKyQ;AACvD;IAEO,cAAAgf,CAAeC;QACrB,IAAIA,OAAOrX,SAAS,GAAG;YACrB,OAAOzW;AACR;QAED,MAAMyH,OAAOrJ,KAAK2vB,QAAQD;QAC1B,MAAME,SAAS5vB,KAAK2R,eAAe+d,OAAO3uB,IAAIsI,KAAK;QACnD,MAAMuR,SAAS5a,KAAK2R,eAAe+d,OAAO3uB,IAAIsI,KAAK;QAEnD,OAAO;YACL/C,GAAGiN,KAAKoD,OAAOiZ,OAAOtpB,IAAIsU,OAAOtU,KAAK;YACtCC,GAAGgN,KAAKoD,OAAOiZ,OAAOrpB,IAAIqU,OAAOrU,KAAK;;AAEzC;IAEO,aAAAspB,CAAcH;QACpB,IAAIA,OAAOrX,OAAO,GAAG;YACnB,OAAOzW;AACR;QAED,MAAMyH,OAAOrJ,KAAK2vB,QAAQD;QAC1B,OAAO1vB,KAAK2R,eAAe+d,OAAO3uB,IAAIsI,KAAK;AAC5C;IAEO,WAAA4M,CAAYyZ;QAClB,IAAIA,OAAOrX,SAAS,GAAG;YACrB,QAAQ;AACT;QAED,MAAMhP,OAAOrJ,KAAK2vB,QAAQD;QAC1B,MAAME,SAAS5vB,KAAK2R,eAAe+d,OAAO3uB,IAAIsI,KAAK;QACnD,MAAMuR,SAAS5a,KAAK2R,eAAe+d,OAAO3uB,IAAIsI,KAAK;QAEnD,OAAOkK,KAAKuc,MAAMF,OAAOtpB,IAAIsU,OAAOtU,GAAGspB,OAAOrpB,IAAIqU,OAAOrU;AAC1D;IAEO,WAAAwpB,CAAY7iB;QAClB,MAAM8iB,2BAA2BhwB,KAAKqvB,eAAetuB,IAAImM,MAAMkF;QAC/D,IAAI4d,2BAA2BhwB,KAAKqvB,eAAehX,SAAS,GAAG;YAC7D;AACD;QAED,MAAM4X,gBAAgBjwB,KAAKqvB,eAAetuB,IAAImM,MAAMkF;QACpD,IAAI6d,eAAe;YACjBjwB,KAAKovB,gBAAgB5uB,IAAIyvB,cAAc7d,WAAW6d;AACnD;QAEDjwB,KAAKqvB,eAAe7uB,IAAI0M,MAAMkF,WAAWlF;QAEzC,IAAI8iB,yBAAyB;YAC3BhwB,KAAKkwB,mBAAmBlwB,KAAKiW,YAAYjW,KAAKqvB;AAC/C;AACF;IAEO,WAAAc,CAAYjjB;QAClBlN,KAAKqvB,eAAejnB,OAAO8E,MAAMkF;QACjCpS,KAAKovB,gBAAgBhnB,OAAO8E,MAAMkF;QAElC,IAAIpS,KAAKqvB,eAAehX,OAAO,GAAG;YAChCrY,KAAKkwB,oBAAoB;AAC1B;AACF;IAEO,OAAAP,CAAQ1uB;QACd,OAAOmvB,MAAMC,KAAKpvB,IAAIoI;AACvB;IAEO,cAAAinB;QACN,IAAItwB,KAAKqvB,eAAehX,SAAS,GAAG;YAClC,MAAMkY,kBAAkBvwB,KAAKiW,YAAYjW,KAAKqvB;YAC9C,MAAMmB,mBAAmBxwB,KAAKiW,YAAYjW,KAAKovB;YAE/C,MAAMqB,uCACJld,KAAKC,IAAIxT,KAAKkwB,mBAAmBK,oBAAoBvwB,KAAKwvB;YAC5D,IAAIiB,sCAAsC;gBACxCzwB,KAAK0wB,iBAAiB1wB,KAAKyvB,eAAezvB,KAAKqvB;AAChD,mBAAM;gBACL,IAAImB,sBAAsB,KAAKD,oBAAoBC,kBAAkB;oBACnExwB,KAAK2wB,kBAAkBJ,iBAAiBC;AACzC;AACF;AACF,eAAM,IAAIxwB,KAAKqvB,eAAehX,SAAS,KAAKrY,KAAKkvB,sBAAsB;YACtElvB,KAAK4wB,mBAAmB5wB,KAAK6vB,cAAc7vB,KAAKqvB;AACjD;AACF;IAEO,iBAAAsB,CAAkBJ,iBAAyBC;QACjD,IAAIxwB,KAAKsvB,uBAAuBN,cAAc6B,MAAM;YAClD7wB,KAAK8wB,iBAAiB9wB,KAAKsvB;YAC3BtvB,KAAKsvB,qBAAqBN,cAAc6B;YACxCrgB,cAAc0B,kBAAkB;AACjC;QAED,MAAMka,aAAamE,kBAAkBC,oBAAoB;QACzD,MAAMlF,aAAa,IAAIc;QACvB,MAAM2E,cAAc/wB,KAAKyvB,eAAezvB,KAAKqvB;QAC7CrvB,KAAKyrB,YAAYzD,OAAO+I,YAAYzqB,GAAGyqB,YAAYxqB,GAAG+kB;QACtDtrB,KAAKyQ,QAAQjI;AACd;IAEO,gBAAAkoB,CAAiBM;QACvB,IAAIhxB,KAAKsvB,uBAAuBN,cAAciC,KAAK;YACjDjxB,KAAK8wB,iBAAiB9wB,KAAKsvB;YAC3BtvB,KAAKsvB,qBAAqBN,cAAciC;YACxCzgB,cAAc0B,kBAAkB;YAEhClS,KAAKorB,WAAWxD,YAAYoJ,aAAa1qB,GAAG0qB,aAAazqB;AAC1D;QAEDvG,KAAKorB,WAAWpD,OAAOgJ,aAAa1qB,GAAG0qB,aAAazqB;QACpDvG,KAAKyQ,QAAQjI;AACd;IAEO,kBAAAooB,CAAmBI;QACzB,IAAIhxB,KAAKsvB,uBAAuBN,cAAckC,OAAO;YACnDlxB,KAAK8wB,iBAAiB9wB,KAAKsvB;YAC3BtvB,KAAKsvB,qBAAqBN,cAAckC;YACxC1gB,cAAc0B,kBAAkB;YAEhClS,KAAKqqB,aAAazC,YAAYoJ,aAAa1qB,GAAG0qB,aAAazqB;AAC5D;QAEDvG,KAAKqqB,aAAarC,OAAOgJ,aAAa1qB,GAAG0qB,aAAazqB;QACtDvG,KAAKyQ,QAAQjI;AACd;IAEO,gBAAAsoB,CAAiBK;QACvB,IAAIA,kBAAkBnC,cAAckC,OAAOlxB,KAAKqqB,aAAa1B;QAC7D,IAAIwI,kBAAkBnC,cAAciC,KAAKjxB,KAAKorB,WAAWzC;QACzDnY,cAAc0B,kBAAkB;AACjC;IAEO,eAAAkf,CAAgBlkB;QACtB,QACGlN,KAAKyQ,QAAQtE,QAAQlI,oBAAoBjE,KAAKyQ,QAAQtE,QAAQjI,mBAAmBlE,KAAKqxB,kBAAkBnkB;AAE5G;IAEO,iBAAAmkB,CAAkBnkB;QACxB,OAAOA,MAAMokB,gBAAgB,WAAWpkB,MAAMokB,gBAAgB;AAC/D;IAEQ,WAAAvf,CAAY7E;QACnB,IAAIlN,KAAKoxB,gBAAgBlkB,QAAQ;YAC/B;AACD;QAEDlN,KAAK+vB,YAAY7iB;AAClB;IAEQ,WAAA+F,CAAY/F;QACnB,IAAIlN,KAAKoxB,gBAAgBlkB,QAAQ;YAC/B;AACD;QAEDlN,KAAK+vB,YAAY7iB;QACjBlN,KAAKswB;AACN;IAEQ,SAAA5d,CAAUxF;QACjB,IAAIlN,KAAKoxB,gBAAgBlkB,QAAQ;YAC/B;AACD;QAEDlN,KAAKmwB,YAAYjjB;QAEjB,IAAIlN,KAAKqvB,eAAehX,OAAO,GAAG;YAChCrY,KAAK8wB,iBAAiB9wB,KAAKsvB;YAC3B9e,cAAc0B,kBAAkB;AACjC;QAEDlS,KAAKsvB,qBAAqBN,cAAcO;AACzC;IAEQ,aAAAzc,CAAc5F;QACrB,IAAIlN,KAAKoxB,gBAAgBlkB,QAAQ;YAC/B;AACD;QAEDlN,KAAK0S,UAAUxF;AAChB;IAED,YAAAqkB,CAAarkB;QACX,IAAIlN,KAAKoxB,gBAAgBlkB,QAAQ;YAC/B;AACD;QAEDlN,KAAK0S,UAAUxF;AAChB;;;AC9OG,SAAUskB,WAAWC;IACzB,OAAO,IAAIC,SAAQ,CAACC,SAASC;QAC3B,MAAMC,SAAS3c,SAASC,cAAc;QACtC0c,OAAOC,MAAML;QACbI,OAAOE,QAAQ;QACfF,OAAOG,SAAS,MAAML,QAAQE;QAC9BA,OAAOI,UAAU;YACfJ,OAAO7T;YACP4T,OAAO,IAAIM,MAAM,OAAOT;AAA6B;QAEvDvc,SAAS4I,KAAKzI,YAAYwc;AAAO;AAErC;;AAEA,SAASM,uBAAuBV;IAC9B,IAAI5sB,OAAO,wBAAwB;QACjC,MAAMgtB,SAAShtB,OAAO,uBAAuBgtB;QAC7C,IAAIA,QAAQ;YACV,IAAIA,OAAOC,QAAQL,KAAK,OAAOC,QAAQC,QAAQE;YAC/CA,OAAO7T;AACR;eACMnZ,OAAO;AACf;IACD,OAAO2sB,WAAWC;AACpB;;AAEO,MAAMW,kBAAkB,CAACX,KAAaY,eACpCF,uBAAuBV,KAAKa,MAAMT,UAChC,IAAIH,SAAQ,CAACC,SAASC;IAC3B,MAAMhF,WAAW/nB,OAAO,uBAAuB;QAC7C0tB,YAAYd,MAAM;QAClBe,cAAc;QACdH;;IAEFzF,SAAS,mBAAmBgF;IAC5BhF,SAAS6F,QAAQ/oB,MAAK;QACpB7E,OAAO,uBAAuBgtB,SAASA;QACvCF,QAAQ/E;AAAS;AACjB;;MClCK8F;IAKX,WAAA3yB,CAAYY,QAAgBqG,OAAcmF;QACxCnM,KAAKW,SAASA;QACdX,KAAKgH,QAAQA;QACbhH,KAAKmM,UAAUA;AAChB;IAED,UAAMwmB,IAAwB;;;ACb1B,MAAOC,kBAAkBF;IACpB,UAAMC;QACb,KAAK3yB,KAAKW,OAAOsG,aAAa;QAE9B,MAAME,SAASnH,KAAKW,OAAOwG;QAC3B,MAAMC,YAAYD,OAAOE;QACzB,MAAMwrB,kBAAkB,IAAIC;QAE5B,MAAMC,kBAAkB,EAAC/yB,KAAKgH,MAAMgsB,aAAahzB,KAAKgH,MAAMisB;QAE5DjzB,KAAKW,OAAOuyB,mBAAmBL;QAE/BnxB,QAAQyxB,KAAK;QACb;YACEnzB,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBgF,OAAOhH,KAAKgH;;YAE3D,KAAK,IAAI+I,IAAI,GAAGA,IAAIgjB,gBAAgB/lB,QAAQ+C,KAAK;gBAC/C,MAAMqjB,SAASL,gBAAgBhjB;gBAE/B,MAAMsjB,mBAAoBC;oBACxB,MAAMrxB,QAAQ8N,IAAIujB,YAAYP,gBAAgB/lB;oBAC9ChN,KAAKW,OAAOyK,UAAU;wBAAEpJ,MAAM;wBAAoBC;wBAAM+E,OAAOhH,KAAKgH;;AAAQ;gBAG9E,MAAMusB,oBAAoBvzB,KAAKgH,MAAMwsB,iBAAiBJ,QAAQC,kBAAkBR,gBAAgBY;gBAEhG,IAAIZ,gBAAgBY,OAAOC,SAAS;0BAC5BhC,QAAQE,OAAO,IAAIM,MAAM,sBAAsBlyB,KAAKgH,MAAM2sB;AACjE;gBAEDvsB,UAAUwsB,YAAY,IAAIC,WAAWN;gBACrCvzB,KAAKW,OAAO6H;gBAEZ,MAAMvG,OAAO,IAAI4xB,WAAWN;gBAE5B,IAAIxjB,MAAM,GAAG;oBACX/P,KAAKW,OAAO6H,OAAO;oBAEnBxI,KAAKW,OAAOmzB,yBAAyB;oBACrC9zB,KAAKW,OAAOozB;oBACZ/zB,KAAKW,OAAOod;oBAEZ/d,KAAKW,OAAOyK,UAAU;wBAAEpJ,MAAM;wBAAiBC;wBAAM+E,OAAOhH,KAAKgH;;AAClE,uBAAM;oBACLhH,KAAKW,OAAOyK,UAAU;wBAAEpJ,MAAM;wBAAiBC;wBAAM+E,OAAOhH,KAAKgH;;AAClE;AACF;YAEDtF,QAAQsyB,QAAQ;YAEhBh0B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAegF,OAAOhH,KAAKgH;;AAC1D,UAAC,OAAO9B;YACPlF,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBC,MAAMiD;gBAAO8B,OAAOhH,KAAKgH;;YACxE,MAAM9B;AACP;AACF;;;ACvDG,MAAO+uB,mBAAmBvB;IACrB,UAAMC;QACb,KAAK3yB,KAAKW,OAAOsG,aAAa;QAE9B,MAAME,SAASnH,KAAKW,OAAOwG;QAC3B,MAAMC,YAAYD,OAAOE;QACzB,MAAMwrB,kBAAkB,IAAIC;QAE5B9yB,KAAKW,OAAOuyB,mBAAmBL;QAE/B,MAAMQ,mBAAoBC;YACxBtzB,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAoBC,MAAMqxB;gBAAUtsB,OAAOhH,KAAKgH;;AAAQ;QAGxFtF,QAAQyxB,KAAK;QACb;YACEnzB,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBgF,OAAOhH,KAAKgH;;YAE3D,MAAMusB,oBAAoBvzB,KAAKgH,MAAMwsB,iBACnCxzB,KAAKgH,MAAMgsB,UACXK,kBACAR,gBAAgBY;YAGlB,IAAIZ,gBAAgBY,OAAOC,SAAS;sBAC5BhC,QAAQE,OAAO,IAAIM,MAAM,sBAAsBlyB,KAAKgH,MAAM2sB;AACjE;YAED,MAAM1xB,OAAO,IAAI4xB,WAAWN;YAE5B,IAAIvzB,KAAKW,OAAOsG,aAAa;gBAC3BG,UAAU8sB,UAAUjyB;gBAEpBjC,KAAKW,OAAOmzB,yBAAyB;gBACrC9zB,KAAKW,OAAOozB;gBACZ/zB,KAAKW,OAAOod;AACb;YAEDrc,QAAQsyB,QAAQ;YAEhBh0B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBC;gBAAM+E,OAAOhH,KAAKgH;;YACjEhH,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAegF,OAAOhH,KAAKgH;;AAC1D,UAAC,OAAO9B;YACPlF,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBC,MAAMiD;gBAAO8B,OAAOhH,KAAKgH;;YACxE,MAAM9B;AACP;AACF;;;ACrEH,MAAMivB,yBAAyB;;AAC/B,MAAMC,oBAAoB;;AAE1B,IAAYC;;CAAZ,SAAYA;IACVA,WAAAA,WAAA,YAAA,KAAA;IACAA,WAAAA,WAAA,aAAA,KAAA;IACAA,WAAAA,WAAA,YAAA,KAAA;AACD,EAJD,CAAYA,eAAAA,aAIX,CAAA;;MAEYC;IAKX,WAAAv0B;QACEC,KAAKu0B,aAAa;QAClBv0B,KAAKw0B,kBAAkBJ;AACxB;IAED,UAAA7iB,CAAW5Q;QACTX,KAAKW,SAASA;QACdX,KAAKu0B,aAAaE,YAAYC;AAC/B;IAED,MAAAlsB,CAAOxG;QACL,MAAM2yB,eAAe3yB,SAASqyB,WAAWO,UAAUH,YAAYC,QAAQ10B,KAAKu0B,cAAcv0B,KAAKw0B;QAC/F,MAAMK,UAAU7yB,SAASqyB,WAAWS;QAEpC,IAAIH,cAAc;YAChB30B,KAAKW,OAAO6H,OAAOqsB;YACnB70B,KAAKu0B,aAAaE,YAAYC;YAC9B10B,KAAKw0B,mBAAmBL;AACzB;AACF;;;ACTG,MAAOY,4BAA4BrC;IAC9B,UAAMC;QACb,KAAK3yB,KAAKW,OAAOsG,aAAa;QAE9B,MAAME,SAASnH,KAAKW,OAAOwG;QAC3B,MAAMC,YAAYD,OAAOE;QACzB,MAAMwrB,kBAAkB,IAAIC;QAE5B,MAAMkC,oBAAoB,IAAIV;QAC9BU,kBAAkBzjB,WAAWvR,KAAKW;QAElCX,KAAKW,OAAOuyB,mBAAmBL;QAE/B,IAAIoC,sBAAsB;QAE1B,MAAM5B,mBAAmB,CAACC,UAAkB4B;YAC1C,KAAKl1B,KAAKW,OAAOsG,aAAa;YAE9B,MAAMkuB,SAAS/tB,UAAU8sB,UAAUgB;YACnCF,kBAAkBxsB,OAAO6rB,WAAWO;YAEpC50B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAoBC,MAAMqxB;gBAAUtsB,OAAOhH,KAAKgH;;YAE9E,IAAIouB,QAAQ;YACZ,IACED,WAAWhuB,OAAOkuB,qBAAqBC,oBACtCH,WAAWhuB,OAAOkuB,qBAAqBE,aAAaN,qBACrD;gBACAA,sBAAsB;gBACtBG,QAAQ;AACT;YAED,IAAIA,OAAO;gBACTJ,kBAAkBxsB,OAAO6rB,WAAWS;gBAEpC90B,KAAKW,OAAOmzB,yBAAyB;gBACrC9zB,KAAKW,OAAOozB;gBACZ/zB,KAAKW,OAAOod;gBAEZ/d,KAAKW,OAAOyK,UAAU;oBAAEpJ,MAAM;oBAAiBC,MAAMizB;oBAAOluB,OAAOhH,KAAKgH;;AACzE,mBAAM;gBACLhH,KAAKW,OAAOyK,UAAU;oBAAEpJ,MAAM;oBAAiBC,MAAMizB;oBAAOluB,OAAOhH,KAAKgH;;AACzE;AAAA;QAGHtF,QAAQyxB,KAAK;QACb;YACEnzB,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBgF,OAAOhH,KAAKgH;;kBAErDhH,KAAKgH,MAAMwsB,iBAAiBxzB,KAAKgH,MAAMgsB,UAAUK,kBAAkBR,gBAAgBY;YACzF/xB,QAAQsyB,QAAQ;YAEhBgB,kBAAkBxsB,OAAO6rB,WAAWmB;YAEpCx1B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAegF,OAAOhH,KAAKgH;;AAC1D,UAAC,OAAO9B;YACPlF,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBC,MAAMiD;gBAAO8B,OAAOhH,KAAKgH;;YACxE,MAAM9B;AACP;AACF;;;AC3DH,MAAMuwB,wBAAwB;;AAC9B,MAAMC,2BAA2B;;AAE3B,MAAOC,0BAA0BjD;IAC5B,UAAMC;QACb,KAAK3yB,KAAKW,OAAOsG,aAAa;QAE9B,MAAME,SAASnH,KAAKW,OAAOwG;QAC3B,MAAMC,YAAYD,OAAOE;QACzB,MAAMwrB,kBAAkB,IAAIC;QAC5B,MAAM8C,+BAA+B,IAAI11B;QACzC,IAAI21B,qBAAqB;QAEzB,MAAMC,qBAAqB,IAAI51B;QAC/B,IAAI61B,yBAAyB;QAC7B,MAAMC,8BAA8B,MAAM1J,aAAayJ;QAEvD,MAAME,iCAAiC,IAAInD;QAC3C8C,6BAA6Bp1B,IAAI,GAAGy1B;QAEpC,MAAMjB,oBAAoB,IAAIV;QAC9BU,kBAAkBzjB,WAAWvR,KAAKW;QAElCX,KAAKW,OAAOuyB,mBAAmBL;QAC/B7yB,KAAKW,OAAOu1B,gCAAgCN;QAE5CxuB,UAAUrE,cAAc/C,KAAKmM,QAAQpJ;QAErC,MAAMswB,mBAAmB,CAACC,UAAkB4B,OAAmBiB,YAAY;YACzE,KAAKn2B,KAAKW,OAAOsG,aAAa;YAE9B,MAAMmuB,QAAQhuB,UAAUgvB,uBAAuBD,WAAWjB;YAC1DF,kBAAkBxsB,OAAO6rB,WAAWO;YAEpC50B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAoBC,MAAMqxB;gBAAUtsB,OAAOhH,KAAKgH;;YAE9E,IAAIouB,OAAO;gBACTJ,kBAAkBxsB,OAAO6rB,WAAWS;gBAEpC90B,KAAKW,OAAOmzB,yBAAyB;gBACrC9zB,KAAKW,OAAOozB;gBACZ/zB,KAAKW,OAAOod;gBAEZ/d,KAAKW,OAAOyK,UAAU;oBAAEpJ,MAAM;oBAAiBC,MAAMizB;oBAAOluB,OAAOhH,KAAKgH;;AACzE,mBAAM;gBACLhH,KAAKW,OAAOyK,UAAU;oBAAEpJ,MAAM;oBAAiBC,MAAMizB;oBAAOluB,OAAOhH,KAAKgH;;AACzE;AAAA;QAGH,MAAMqvB,wBAAwBtE,OAAOqB,QAAgB+C,WAAmBG;YACtE,MAAMC,YAAY,IAAIzD;YACtB8C,6BAA6Bp1B,IAAI21B,WAAWI;YAC5C;sBACQv2B,KAAKgH,MAAMqvB,sBAAsBjD,QAAQ+C,WAAWG,QAAQjD,kBAAkBkD,UAAU9C;AAC/F,cAAC,OAAOvuB;gBACPlF,KAAKW,OAAOyK,UAAU;oBAAEpJ,MAAM;oBAAiBC,MAAMiD;oBAAO8B,OAAOhH,KAAKgH;;AACzE,cAAS;gBACRsvB,OAAOp1B,SAASs1B,SAAUpvB,UAAUqvB,0BAA0BD,MAAML;gBACpEP,6BAA6BxtB,OAAO+tB;gBACpCnB,kBAAkBxsB,OAAO6rB,WAAWmB;AACrC;AAAA;QAGH,MAAMkB,yBAAyB,CAACP,WAAmBQ;YACjD,MAAML,SAAS;YACf,KAAK,IAAIvmB,IAAI,GAAGA,IAAI4mB,QAAQte,QAAQtI,KAAK;gBACvC,MAAM6mB,SAASD,QAAQ51B,IAAIgP;gBAC3BumB,OAAO5sB,KAAK;oBACVysB;oBACAU,OAAOC,OAAOF,OAAOC;oBACrBhkB,KAAKikB,OAAOF,OAAO/jB;;gBAErB+jB,OAAOxuB;AACR;YACD,OAAOkuB;AAAM;QAGf,MAAMS,gBAAgB;YACpBC,uBAAwBC;gBACtB,IAAIA,WAAW;oBACbpB,qBAAqB;oBACrBhD,gBAAgBqE;AACjB;AAAA;YAGHC,WAAW,CAAChB,WAAmBQ;gBAC7B,MAAML,SAASI,uBAAuBP,WAAWQ;gBACjDN,sBAAsBr2B,KAAKgH,MAAMgsB,UAAUmD,WAAWG;AAAO;YAG/Dc,cAAc;gBACZpC,kBAAkBxsB,OAAO6rB,WAAWmB;AAAQ;YAG9C6B,yBAA0BlB;gBACxBP,6BAA6BxtB,OAAO+tB;gBACpCnB,kBAAkBxsB,OAAO6rB,WAAWmB;AAAQ;YAG9C8B,kBAAmBnB;gBACjB,MAAMI,YAAYX,6BAA6B70B,IAAIo1B;gBACnD,IAAII,WAAWA,UAAUW;AAAO;YAGlCK,uBAAuB,CAACpB,WAAmBqB,GAAWb;gBACpD,MAAMvD,SAAS,GAAGpzB,KAAKgH,MAAMywB,SAASz3B,KAAKgH,MAAM0wB,KAAK11B;gBACtD,MAAMs0B,SAASI,uBAAuBP,WAAWQ;gBAEjD,IAAIgB,gBAAgB;gBACpB,IAAIC,gBAAgB;gBACpB,MAAMC,iBAAiB/B,mBAAmB/0B,IAAIqyB;gBAC9C,IAAIyE,gBAAgB;oBAClBF,gBAAgBE,eAAevB;oBAC/BsB,gBAAgBC,eAAeC;AAChC;gBAGD,IAAIF,iBAAiB,GAAG;oBACtB9B,mBAAmBt1B,IAAI4yB,QAAQ;wBAAEkD,QAAQ;wBAAIwB,QAAQF,gBAAgB;;oBACrEvB,sBAAsBjD,QAAQ+C,WAAWG;oBACzC;AACD;gBAEDqB,gBAAgBA,cAAcI,OAAOzB;gBAGrC,IAAIqB,cAAc3qB,UAAUyoB,uBAAuB;oBACjD,IAAIM,wBAAwB;wBAC1BlxB,OAAOynB,aAAayJ;wBACpBA,yBAAyB;AAC1B;oBAEDD,mBAAmBt1B,IAAI4yB,QAAQ;wBAAEkD,QAAQ;wBAAIwB,QAAQF,gBAAgB;;oBACrEvB,sBAAsBjD,QAAQ+C,WAAWwB;oBACzC;AACD;gBAED7B,mBAAmBt1B,IAAI4yB,QAAQ;oBAAEkD,QAAQqB;oBAAeG,QAAQF,gBAAgB;;gBAGhF,IAAI7B,2BAA2B,GAAG;oBAChCA,yBAAyBlxB,OAAO0nB,YAAW;wBACzC0J,+BAA+BxC,OAAO3mB,oBAAoB,SAASkpB;wBACnED,yBAAyB;wBAEzBD,mBAAmB50B,SAAQ,CAAC82B,SAAS5E;4BACnC,IAAI4E,QAAQ1B,OAAOtpB,SAAS,GAAG;gCAC7B8oB,mBAAmBt1B,IAAI4yB,QAAQ;oCAAEkD,QAAQ;oCAAIwB,QAAQE,QAAQF,SAAS;;gCACtEzB,sBAAsBjD,QAAQ+C,WAAW6B,QAAQ1B;AAClD;AAAA;AACD,wBACDZ;oBAEHO,+BAA+BxC,OAAO7mB,iBAAiB,SAASopB,6BAA6B;wBAAEiC,MAAM;;AACtG;AAAA;;QAIL7wB,UAAU8wB,sBAAsBnB;QAEhC;YACE/2B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBgF,OAAOhH,KAAKgH;;kBAErDhH,KAAKgH,MACRwsB,iBAAiBxzB,KAAKgH,MAAMgsB,UAAUK,kBAAkBR,gBAAgBY,QACxE0E,OAAOjzB;gBACN,KAAK2wB,oBAAoB,MAAM3wB;AAAK;YAGxClF,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAegF,OAAOhH,KAAKgH;;AAC1D,UAAC,OAAO9B;YACP,IAAI6wB,wBAAwB;gBAC1BlxB,OAAOynB,aAAayJ;gBACpBA,yBAAyB;AAC1B;YAED/1B,KAAKW,OAAOyK,UAAU;gBAAEpJ,MAAM;gBAAiBC,MAAMiD;gBAAO8B,OAAOhH,KAAKgH;;YACxE,MAAM9B;AACP;AACF;;;MC7KUkzB;IACX,MAAAC,CAAO13B,QAAgBqG,OAAcmF;QACnC,MAAMhI,eAAe6C,MAAMgsB,SAASsF,MAAM,KAAKC;QAE/C,IAAIvxB,MAAMisB,SAASjmB,WAAW,KAAK7I,iBAAiB,QAAQ;YAC1D,KAAKgI,QAAQtJ,qBAAqB,OAAO,IAAIoxB,WAAWtzB,QAAQqG,OAAOmF,eAClE,IAAIA,QAAQrJ,mBAAmB,OAAO,IAAI6yB,kBAAkBh1B,QAAQqG,OAAOmF,eAC3E,OAAO,IAAI4oB,oBAAoBp0B,QAAQqG,OAAOmF;AACpD;QAED,IAAIhI,iBAAiB,QAAQ;YAC3B,OAAO,IAAIyuB,UAAUjyB,QAAQqG,OAAOmF;AACrC;QAED,MAAM,IAAI+lB,MAAM,0BAA0B/tB;AAC3C;;;ACzCH,IAAYq0B;;CAAZ,SAAYA;IACVA,WAAAA,WAAA,aAAA,KAAA;IACAA,WAAA,WAAA;IACAA,WAAA,eAAA;AACD,EAJD,CAAYA,eAAAA,aAIX,CAAA;;AAED,IAAYC;;CAAZ,SAAYA;IACVA,WAAA,UAAA;IACAA,WAAA,UAAA;IACAA,WAAA,eAAA;IACAA,WAAA,aAAA;IACAA,WAAA,WAAA;IACAA,WAAA,WAAA;IACAA,WAAA,WAAA;AACD,EARD,CAAYA,eAAAA,aAQX,CAAA;;MCpBYC;IAUX,YAAIC;QACF,OAAO,MAAM34B,KAAK44B;AACnB;IAED,OAAIC;QACF,OAAO;YAAEx1B,GAAGrD,KAAK84B;YAAGx1B,GAAGtD,KAAK+4B;YAAGx1B,GAAGvD,KAAKg5B;;AACxC;IAED,WAAAj5B,CAAYsD,GAAWC,GAAWC;QAChCvD,KAAK0mB,SAASrjB,GAAGC,GAAGC;AACrB;IAEM,QAAAmjB,CAASrjB,GAAWC,GAAWC;QACpCvD,KAAK84B,IAAIz1B;QACTrD,KAAK+4B,IAAIz1B;QACTtD,KAAKg5B,IAAIz1B;QAETvD,KAAK44B,OAAO54B,KAAKi5B,SAAS51B,GAAGC,GAAGC;AACjC;IAEO,QAAA01B,CAAS51B,GAAWC,GAAWC;QACrC,MAAM21B,aAAcC;YAClB,MAAMC,MAAMD,EAAEE,SAAS;YACvB,OAAOD,QAAQ,MAAM,OAAOA;AAAG;QAGjC,OAAOF,WAAW71B,KAAK61B,WAAW51B,KAAK41B,WAAW31B;AACnD;;;AChCH,MAAM+1B,gBAAgB,IAAIp5B,IAAsB,EAC9C,EAAC,SAAS,MACV,EAAC,OAAO,EAAC,IAAI,IAAI,MAAO,QACxB,EAAC,QAAQ,EAAC,IAAI;;MAGHq5B;IAGX,WAAAx5B,CACE2N,QACA8rB,MAAM;;QAEN,IAAIA,KAAK;YACPx5B,KAAKy5B,OAAOD;YACZ;AACD;QAED,KAAK9rB,OAAOoC,QAAQ;QAEpB,MAAM4pB,cAAc;QACpBhsB,OAAOoC,OAAO5O,SAASyN,SAAU+qB,YAAYhwB,KAAKiF,MAAMrI,GAAGqI,MAAMpI;QAEjEvG,KAAKy5B,OAAO,IAAIE,MAAMC,KAAK;YACzBC,SAAQxxB,KAAAqF,OAAOgM,wCAAS;YACxBogB,cAAaC,KAAArsB,OAAOsD,wCAAS;YAC7BgpB,0BAA0B;YAC1BC,SAAS;YACTC,UAAU;YACVpqB,QAAQ4pB;YACRS,WAAW;YACXC,oBAAoB;YACpBC,MAAMf,cAAcv4B,IAAI2M,OAAO1L,SAAS;;QAG1ChC,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,GAAAG;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAED,QAAAw4B;QACE,OAAOx6B,KAAKy5B,KAAKI;AAClB;IAED,QAAAnT,CAAS0S;QACPp5B,KAAKy5B,KAAKI,OAAOT;AAClB;IAED,WAAAqB;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;IAED,SAAAsB;QACE,OAAO/6B,KAAKy5B,KAAK3pB;AAClB;IAED,YAAAkrB,CAAa3iB;QACXrY,KAAKy5B,KAAKK,YAAYzhB;AACvB;IAED,YAAA4iB;QACE,OAAOj7B,KAAKy5B,KAAKK;AAClB;IAED,WAAAoB;QACE,MAAMC,YAAYn7B,KAAKy5B,KAAKY,UAAU;QACtC,IAAIr4B;QACJ,QAAQm5B;UACN,KAAK7B,cAAcv4B,IAAI;YACrBiB,OAAO;YACP;;UACF,KAAKs3B,cAAcv4B,IAAI;YACrBiB,OAAO;YACP;;UACF;YACEA,OAAO;YACP;;QAEJ,OAAOA;AACR;IAED,WAAAo5B,CAAYp5B;QACV,MAAMq5B,QAAQ/B,cAAcv4B,IAAIiB;QAChC,IAAIq5B,OAAOr7B,KAAKy5B,KAAKY,KAAKgB;AAC3B;IAED,SAAAC,CAAUxrB;QACR,IAAIyrB,YAAYv7B,KAAKy5B,KAAK3pB;QAC1BA,OAAO5O,SAASyN;YACd4sB,YAAYA,UAAUxD,OAAO,EAACppB,MAAMrI,GAAGqI,MAAMpI;AAAG;QAGlDvG,KAAKy5B,KAAK3pB,OAAOyrB;AAClB;;;MC7HUC;IAIX,WAAAz7B,CACE2N,QAQA8rB,MAAM;;QAXSx5B,KAAgBy7B,mBAAG;QAalC,IAAIjC,KAAK;YACPx5B,KAAKy5B,OAAOD;YACZ;AACD;QAED,KAAK9rB,WAAWA,OAAOguB,MAAM;QAE7B17B,KAAKy5B,OAAO,IAAIE,MAAMgC,KAAK;YACzBr1B,GAAGoH,OAAOnC,SAASjF;YACnBC,GAAGmH,OAAOnC,SAAShF;YACnBm1B,MAAMhuB,OAAOguB;YACbE,WAAUvzB,KAAAqF,OAAOkuB,2CAAY;YAC7BC,YAAY77B,KAAKy7B;YACjBK,OAAM/B,KAAArsB,OAAOgM,wCAAS;YACtBqiB,OAAO;YACP5B,WAAW;YACXnyB,WAAUg0B,KAAAtuB,OAAO1F,2CAAY;;QAG/BhI,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,GAAAG;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAED,QAAAw4B;QACE,OAAOx6B,KAAKy5B,KAAKqC;AAClB;IAED,QAAApV,CAAS0S;QACPp5B,KAAKy5B,KAAKqC,KAAK1C;AAChB;IAED,WAAAqB;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;IAED,OAAAwC;QACE,OAAOj8B,KAAKy5B,KAAKiC;AAClB;IAED,OAAAQ,CAAQR;QACN17B,KAAKy5B,KAAKiC,KAAKA;AAChB;IAED,WAAAS;QACE,OAAOn8B,KAAKy5B,KAAK0C;AAClB;IAED,WAAAC,CAAY91B,GAAWC;QACrBvG,KAAKy5B,KAAK2C,YAAY;YAAE91B;YAAGC;;AAC5B;IAED,WAAA81B;QACE,OAAOr8B,KAAKy5B,KAAKmC;AAClB;IAED,WAAAU,CAAYjkB;QACVrY,KAAKy5B,KAAKmC,SAASvjB;AACpB;;;MCxGUkkB;IAGX,WAAAx8B,CACE2N,QAQA8rB,MAAM;;QAEN,IAAIA,KAAK;YACPx5B,KAAKy5B,OAAOD;YACZ;AACD;QAED,KAAK9rB,OAAOnC,UAAU;QAEtBvL,KAAKy5B,OAAO,IAAIE,MAAM6C,KAAK;YACzB3C,SAAQxxB,KAAAqF,OAAOgM,wCAAS;YACxBogB,cAAaC,KAAArsB,OAAO+uB,4CAAa;YACjCzC,0BAA0B;YAC1BC,SAAS;YACTC,UAAU;YACV5zB,GAAGoH,OAAOnC,SAASjF;YACnBC,GAAGmH,OAAOnC,SAAShF;YACnByK,QAAOgrB,KAAAtuB,OAAOsD,wCAAS;YACvBC,SAAQyrB,KAAAhvB,OAAOuD,yCAAU;YACzBkpB,WAAW;YACXC,oBAAoB;;QAGtBp6B,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,WAAA8C;QACE,OAAOn8B,KAAKy5B,KAAKluB;AAClB;IAED,QAAAoxB;QACE,OAAO38B,KAAKy5B,KAAKzoB;AAClB;IAED,SAAA4rB;QACE,OAAO58B,KAAKy5B,KAAKxoB;AAClB;IAED,QAAA4rB,CAASC;QACP98B,KAAKy5B,KAAKzoB,MAAM8rB;AACjB;IAED,SAAAC,CAAUC;QACRh9B,KAAKy5B,KAAKxoB,OAAO+rB;AAClB;IAED,WAAAZ,CAAY91B,GAAWC;QACrBvG,KAAKy5B,KAAK2C,YAAY;YAAE91B;YAAGC;;AAC5B;IAED,GAAAizB;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAED,QAAAw4B;QACE,OAAOx6B,KAAKy5B,KAAKI;AAClB;IAED,QAAAnT,CAAS0S;QACPp5B,KAAKy5B,KAAKI,OAAOT;AAClB;IAED,WAAAqB;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;IAED,YAAAuB,CAAa3iB;QACXrY,KAAKy5B,KAAKK,YAAYzhB;AACvB;IAED,YAAA4iB;QACE,OAAOj7B,KAAKy5B,KAAKK;AAClB;;;MCjHUmD;IAGX,WAAAl9B,CACE2N,QAOA8rB,MAAM;;QAEN,IAAIA,KAAK;YACPx5B,KAAKy5B,OAAOD;YACZ;AACD;QAED,KAAK9rB,OAAOnC,UAAU;QAEtBvL,KAAKy5B,OAAO,IAAIE,MAAMuD,QAAQ;YAC5BrD,SAAQxxB,KAAAqF,OAAOgM,wCAAS;YACxBogB,cAAaC,KAAArsB,OAAO+uB,4CAAa;YACjCzC,0BAA0B;YAC1BC,SAAS;YACTC,UAAU;YACV5zB,GAAGoH,OAAOnC,SAASjF;YACnBC,GAAGmH,OAAOnC,SAAShF;YACnB42B,SAASzvB,OAAO0vB,OAAO92B;YACvB+2B,SAAS3vB,OAAO0vB,OAAO72B;YACvB4zB,WAAW;YACXC,oBAAoB;;QAGtBp6B,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,WAAA8C;QACE,OAAOn8B,KAAKy5B,KAAKluB;AAClB;IAED,WAAA6wB,CAAY91B,GAAWC;QACrBvG,KAAKy5B,KAAK2C,YAAY;YAAE91B;YAAGC;;AAC5B;IAED,UAAA+2B;QACE,OAAOt9B,KAAKy5B,KAAK0D;AAClB;IAED,UAAAI,CAAWl6B;QACTrD,KAAKy5B,KAAK2D,OAAO;YAAE92B,GAAGjD;YAAGkD,GAAGvG,KAAKy5B,KAAK4D;;AACvC;IAED,UAAAG;QACE,OAAOx9B,KAAKy5B,KAAK4D;AAClB;IAED,UAAAI,CAAWp6B;QACTrD,KAAKy5B,KAAK2D,OAAO;YAAE92B,GAAGtG,KAAKy5B,KAAK0D;YAAW52B,GAAGlD;;AAC/C;IAED,YAAA43B;QACE,OAAOj7B,KAAKy5B,KAAKK;AAClB;IAED,YAAAkB,CAAa3iB;QACXrY,KAAKy5B,KAAKK,YAAYzhB;AACvB;IAED,GAAAmhB;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAED,QAAAw4B;QACE,OAAOx6B,KAAKy5B,KAAKI;AAClB;IAED,QAAAnT,CAAS0S;QACPp5B,KAAKy5B,KAAKI,OAAOT;AAClB;IAED,WAAAqB;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;;;MChHUiE;IAGX,WAAA39B,CACE2N,QAMA8rB,MAAM;;QAEN,IAAIA,KAAK;YACPx5B,KAAKy5B,OAAOD;YACZ;AACD;QAED,KAAK9rB,OAAO6E,UAAU7E,OAAOmF,KAAK;QAElC7S,KAAKy5B,OAAO,IAAIE,MAAMgE,MAAM;YAC1B9D,SAAQxxB,KAAAqF,OAAOgM,wCAAS;YACxBoiB,OAAM/B,KAAArsB,OAAOgM,wCAAS;YACtBogB,aAAa;YACbE,0BAA0B;YAC1BC,SAAS;YACTC,UAAU;YACVpqB,QAAQ,EAACpC,OAAO6E,MAAMjM,GAAGoH,OAAO6E,MAAMhM,GAAGmH,OAAOmF,IAAIvM,GAAGoH,OAAOmF,IAAItM;YAClE4zB,WAAW;YACXC,oBAAoB;;QAGtBp6B,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,GAAAG;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAED,QAAAw4B;QACE,OAAOx6B,KAAKy5B,KAAKI;AAClB;IAED,QAAAnT,CAAS0S;QACPp5B,KAAKy5B,KAAKI,OAAOT;AAClB;IAED,WAAAqB;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;IAED,SAAAsB;QACE,MAAMjrB,SAAS9P,KAAKy5B,KAAK3pB;QACzB,OAAO,EACL;YAAExJ,GAAGwJ,OAAO;YAAIvJ,GAAGuJ,OAAO;WAC1B;YAAExJ,GAAGwJ,OAAO;YAAIvJ,GAAGuJ,OAAO;;AAE7B;IAED,SAAAqX,CAAUrX;QACR,IAAIA,OAAO9C,WAAW,GAAG;YACvBhN,KAAKy5B,KAAK3pB,OAAO,EAACA,OAAO,GAAGxJ,GAAGwJ,OAAO,GAAGvJ,GAAGuJ,OAAO,GAAGxJ,GAAGwJ,OAAO,GAAGvJ;AACpE;AACF;IAED,aAAAq3B;QACE,MAAM9tB,SAAS9P,KAAKy5B,KAAK3pB;QACzB,OAAO;YAAExJ,GAAGwJ,OAAO;YAAIvJ,GAAGuJ,OAAO;;AAClC;IAED,aAAA0L,CAAclV,GAAWC;QACvB,MAAMuJ,SAAS9P,KAAKy5B,KAAK3pB;QACzB9P,KAAKy5B,KAAK3pB,OAAO,EAACxJ,GAAGC,GAAGuJ,OAAO,IAAIA,OAAO;AAC3C;IAED,WAAA+tB;QACE,MAAM/tB,SAAS9P,KAAKy5B,KAAK3pB;QACzB,OAAO;YAAExJ,GAAGwJ,OAAO;YAAIvJ,GAAGuJ,OAAO;;AAClC;IAED,WAAA2L,CAAYnV,GAAWC;QACrB,MAAMuJ,SAAS9P,KAAKy5B,KAAK3pB;QACzB9P,KAAKy5B,KAAK3pB,OAAO,EAACA,OAAO,IAAIA,OAAO,IAAIxJ,GAAGC;AAC5C;;;MChHUu3B;IAKX,WAAA/9B,CACE2N,QACA8rB,MAAM;QAJAx5B,KAAM+9B,SAAG;QAMf,IAAIvE,KAAK;YACP,IAAIA,IAAIvoB,aAAa,KAAKuoB,IAAIxoB,YAAY,GAAG;YAE7ChR,KAAKy5B,OAAOD;YACZx5B,KAAKg+B,eAAexE,IAAIyE;YACxBj+B,KAAK+9B,SAAS/9B,KAAKy5B,KAAKxoB,WAAWjR,KAAKy5B,KAAKzoB;YAC7C;AACD;QAED,KAAKtD,OAAOnC,aAAamC,OAAOokB,KAAK;QACrC9xB,KAAKg+B,eAAe,IAAIE;QAExBl+B,KAAKy5B,OAAO,IAAIE,MAAMuE,MAAM;YAC1B53B,GAAGoH,OAAOnC,SAASjF;YACnBC,GAAGmH,OAAOnC,SAAShF;YACnB03B,OAAOj+B,KAAKg+B;YACZhtB,OAAOtD,OAAOsD;YACdC,QAAQvD,OAAOuD;YACfkpB,WAAW;;QAGbn6B,KAAKg+B,aAAahM,SAAS;YACzBhyB,KAAKy5B,KAAKwE,MAAMj+B,KAAKg+B;YACrBh+B,KAAK+9B,SAAS/9B,KAAKy5B,KAAKxoB,aAAa,KAAKjR,KAAKy5B,KAAKzoB,YAAY,IAAI,IAAIhR,KAAKy5B,KAAKxoB,WAAWjR,KAAKy5B,KAAKzoB;AAAO;QAGhHhR,KAAKg+B,aAAalM,MAAMpkB,OAAOokB;QAE/B9xB,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,MAAA8E;QACE,OAAOn+B,KAAKg+B,aAAalM;AAC1B;IAED,MAAAsM,CAAOtM;QACL9xB,KAAKg+B,aAAalM,MAAMA;AACzB;IAED,QAAA6K;QACE,OAAO38B,KAAKy5B,KAAKzoB;AAClB;IAED,QAAA6rB,CAASC;QACP98B,KAAKy5B,KAAKzoB,MAAM8rB;QAChB98B,KAAKy5B,KAAKxoB,OAAO6rB,IAAI98B,KAAK+9B;AAC3B;IAED,SAAAM;QACE,OAAOr+B,KAAKy5B,KAAKxoB;AAClB;IAED,SAAA8rB,CAAUC;QACRh9B,KAAKy5B,KAAKxoB,OAAO+rB;QACjBh9B,KAAKy5B,KAAKzoB,MAAMgsB,IAAIh9B,KAAK+9B;AAC1B;IAED,GAAAvE;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAWD,WAAAy4B;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;IAED,WAAA0C;QACE,OAAOn8B,KAAKy5B,KAAK0C;AAClB;IAED,WAAAC,CAAY91B,GAAWC;QACrBvG,KAAKy5B,KAAK2C,YAAY;YAAE91B;YAAGC;;AAC5B;;;MCrHU+3B;IAGX,WAAAv+B,CACE2N,QAQA8rB,MAAM;;QAEN,IAAIA,KAAK;YACPx5B,KAAKy5B,OAAOD;YACZ;AACD;QAED,KAAK9rB,OAAOnC,aAAamC,OAAOsD,UAAUtD,OAAOuD,QAAQ;QAEzD,MAAMstB,YAAY;QAElBv+B,KAAKy5B,OAAO,IAAIE,MAAM6E,MAAM;YAC1Bl4B,GAAGoH,OAAOnC,SAASjF;YACnBC,GAAGmH,OAAOnC,SAAShF;YACnByK,QAAO3I,KAAAqF,OAAOsD,wCAAS;YACvBC,SAAQ8oB,KAAArsB,OAAOuD,yCAAU;YACzB4oB,SAAQmC,KAAAtuB,OAAOgM,wCAAS;YACxBogB,cAAa4C,KAAAhvB,OAAO+uB,4CAAa;YACjCtC,WAAW;YACXC,oBAAoB;YACpBJ,0BAA0B;YAC1ByE,WAAW,CAACC,SAASC;gBACnB,SAASC,kBAAkBrzB,UAAUyF,OAAOC;oBAC1C,MAAM4tB,OAAOtzB,SAASjF,IAAI0K,QAAQ;oBAClC,MAAM8tB,OAAOvzB,SAAShF,IAAI0K,SAAS;oBACnC,OAAO;wBAAE3K,GAAGu4B;wBAAMt4B,GAAGu4B;;AACtB;gBAED,MAAMhvB,SAAS,EACb;oBAAExJ,GAAG;oBAAGC,GAAG;mBACX;oBAAED,GAAG,IAAItG,KAAKy5B,KAAKzoB;oBAASzK,GAAG;mBAC/B;oBAAED,GAAG,IAAItG,KAAKy5B,KAAKzoB;oBAASzK,GAAG,IAAIvG,KAAKy5B,KAAKxoB;mBAC7C;oBAAE3K,GAAG;oBAAGC,GAAG,IAAIvG,KAAKy5B,KAAKxoB;mBACzB;oBAAE3K,GAAG;oBAAGC,GAAG;;gBAGb,MAAMw4B,WAAWH,kBAAkB;oBAAEt4B,GAAG;oBAAGC,GAAG;mBAAKvG,KAAKy5B,KAAKzoB,SAAShR,KAAKy5B,KAAKxoB;gBAEhF,MAAM+tB,gBAAgB;gBACtBN,QAAQO;gBACR,KAAK,IAAIC,SAAS,GAAGA,SAASpvB,OAAO9C,SAAS,GAAGkyB,UAAU;oBACzD,IAAIC,kBAAkBH;oBACtB,MAAM/mB,KAAKnI,OAAOovB,SAAS,GAAG54B,IAAIwJ,OAAOovB,QAAQ54B;oBACjD,MAAM4R,KAAKpI,OAAOovB,SAAS,GAAG34B,IAAIuJ,OAAOovB,QAAQ34B;oBACjD,MAAMyG,SAASuG,KAAK+E,KAAKL,KAAKA,KAAKC,KAAKA;oBAExC,MAAMknB,WAAW7rB,KAAKoD,MAAM3J,SAASmyB;oBACrC,MAAME,YAAYryB,SAASmyB;oBAC3BA,kBAAkBH,gBAAgBI,WAAWC;oBAE7C,IAAIrkB,KAAKlL,OAAOovB,QAAQ54B,IAAI2R,KAAKmnB,WAAW;oBAC5C,IAAInkB,KAAKnL,OAAOovB,QAAQ34B,IAAI2R,KAAKknB,WAAW;oBAC5C,MAAME,QAAQxvB,OAAOovB,SAAS,GAAG54B;oBACjC,MAAMi5B,QAAQzvB,OAAOovB,SAAS,GAAG34B;oBACjC,MAAMi5B,WAAWjsB,KAAK4E,MAAMonB,QAAQtkB,OAAOqkB,QAAQtkB;oBACnD,MAAMykB,aAAaD,WAAWjsB,KAAK6E;oBACnC,MAAMsnB,mBAAmB1kB,KAAK+jB,SAASz4B,KAAK2U,KAAK8jB,SAASx4B;oBAC1D,KAAK,IAAIo5B,OAAO,GAAGA,OAAOP,UAAUO,QAAQ;wBAC1C,IAAID,kBAAkB;4BACpBhB,QAAQkB,IAAI5kB,IAAIC,IAAIsjB,WAAWiB,UAAUC;AAC1C,+BAAM;4BACLf,QAAQkB,IAAI5kB,IAAIC,IAAIsjB,WAAWkB,YAAYD;AAC5C;wBAEDxkB,MAAM/C,KAAKmnB;wBACXnkB,MAAM/C,KAAKknB;AACZ;AACF;gBAEDV,QAAQmB;gBAGRnB,QAAQoB,gBAAgBnB;AAAM;;QAIlC3+B,KAAKy5B,KAAKsG,YAAY;QAEtB//B,KAAKy5B,KAAKpsB,GAAG,cAAc2yB;YACzB,MAAMC,QAAQD,EAAEjyB,OAAOkyB;YAEvB,MAAMC,WAAW;YACjB,MAAMC,YAAY;YAElB,MAAMC,WAAWpgC,KAAKy5B,KAAKzoB,UAAUivB,MAAMI;YAC3C,MAAMC,YAAYtgC,KAAKy5B,KAAKxoB,WAAWgvB,MAAMM;YAE7C,IAAIH,WAAWF,YAAYI,YAAYH,WAAW;gBAChDngC,KAAKy5B,KAAKxzB,MAAM;oBAAEK,GAAG;oBAAGC,GAAG;;gBAC3B;AACD;YAED,IAAIgN,KAAKC,IAAIysB,MAAMI,SAAS,KAAK,MAAO;gBACtCrgC,KAAKy5B,KAAKzoB,MAAMovB;AACjB;YAED,IAAI7sB,KAAKC,IAAIysB,MAAMM,SAAS,KAAK,MAAO;gBACtCvgC,KAAKy5B,KAAKxoB,OAAOqvB;AAClB;YAEDtgC,KAAKy5B,KAAKxzB,MAAM;gBAAEK,GAAG;gBAAGC,GAAG;;AAAI;QAGjCvG,KAAKy5B,KAAK+G,cAAc,OACf;YACLl6B,GAAG,IAAIi4B;YACPh4B,GAAG,IAAIg4B;YACPvtB,OAAOhR,KAAKy5B,KAAKzoB,UAAU,IAAIutB;YAC/BttB,QAAQjR,KAAKy5B,KAAKxoB,WAAW,IAAIstB;;QAIrCv+B,KAAKy5B,KAAKr5B,GAAGJ,KAAKy5B,KAAKa,IAAIjB;AAC5B;IAED,GAAAG;QACE,OAAOx5B,KAAKy5B;AACb;IAED,EAAAr5B;QACE,OAAOJ,KAAKy5B,KAAKr5B;AAClB;IAED,kBAAAm6B,CAAmBp5B;QACjBnB,KAAKy5B,KAAKU,UAAUh5B;AACrB;IAED,IAAAa;QACE,OAAO;AACR;IAED,QAAAw4B;QACE,OAAOx6B,KAAKy5B,KAAKI;AAClB;IAED,QAAAnT,CAAS0S;QACPp5B,KAAKy5B,KAAKI,OAAOT;AAClB;IAED,WAAAqB;QACE,OAAOz6B,KAAKy5B,KAAKzxB;AAClB;IAED,WAAA0yB,CAAYC;QACV36B,KAAKy5B,KAAKzxB,SAAS2yB;AACpB;IAED,SAAAC;QACE,OAAO56B,KAAKy5B,KAAK/e;AAClB;IAED,SAAAmgB,CAAUngB;QACR1a,KAAKy5B,KAAK/e,OAAOA;AAClB;IAED;QACE1a,KAAKy5B,KAAKqB;QACV96B,KAAKy5B,OAAO;AACb;IAED,WAAA0C;QACE,OAAOn8B,KAAKy5B,KAAKluB;AAClB;IAED,WAAA6wB,CAAY91B,GAAWC;QACrBvG,KAAKy5B,KAAKluB,SAAS;YAAEjF;YAAGC;;AACzB;IAED,QAAAo2B;QACE,OAAO38B,KAAKy5B,KAAKzoB;AAClB;IAED,QAAA6rB,CAASC;QACP98B,KAAKy5B,KAAKzoB,MAAM8rB;AACjB;IAED,SAAAF;QACE,OAAO58B,KAAKy5B,KAAKxoB;AAClB;IAED,SAAA8rB,CAAUC;QACRh9B,KAAKy5B,KAAKxoB,OAAO+rB;AAClB;IAED,YAAA/B;QACE,OAAOj7B,KAAKy5B,KAAKK;AAClB;IAED,YAAAkB,CAAa3iB;QACXrY,KAAKy5B,KAAKK,YAAYzhB;AACvB;;;ACvLH,MAAMooB,mBAAmB,IAAIvgC,IAA4B,EACvD,EACEu4B,WAAWmB,MACX;IACEjG,MAAM;IACN+M,aAAclH,OACL,IAAID,UAAU,MAAMC;KAIjC,EACEf,WAAWkD,MACX;IACEhI,MAAM;IACN+M,aAAclH,OACL,IAAIgC,UAAU,MAAMhC;KAIjC,EACEf,WAAWkI,WACX;IACEhN,MAAM;IACN+M,aAAclH,OACL,IAAI+C,eAAe,MAAM/C;KAItC,EACEf,WAAWyE,SACX;IACEvJ,MAAM;IACN+M,aAAclH,OACL,IAAIyD,aAAa,MAAMzD;KAIpC,EACEf,WAAWkF,OACX;IACEhK,MAAM;IACN+M,aAAclH,OACL,IAAIkE,WAAW,MAAMlE;KAIlC,EACEf,WAAWyF,OACX;IACEvK,MAAM;IACN+M,aAAclH,OACL,IAAIsE,WAAW,MAAMtE;KAIlC,EACEf,WAAWmI,OACX;IACEjN,MAAM;IACN+M,aAAclH,OACL,IAAI8E,WAAW,MAAM9E;;;MAMvBqH;IAAb,WAAA9gC;QACUC,KAAc8gC,iBAAG;QAejB9gC,KAAO+gC,UAAG;QAED/gC,KAAoBghC,uBAAG;QAEjChhC,KAASy8B,YAAG;QA2DnBz8B,KAAAihC,sBAAuB/zB;YACrB,MAAMg0B,cAAch0B,MAAMjL;YAE1BjC,KAAKmhC,iBAAiBpB,YAAY//B,KAAKohC,gBAAgBrB,UACpDzH,MAAM,KACNhvB,QAAQhD,MAAOA,EAAE+6B,WAAW,iBAC5B/3B,QAAQhD,KAAMA,IACdyxB,OAAO,cAAcmJ,YAAYI,iBACjCC,KAAK;YAERvhC,KAAKwhC;YAEL,MAAMC,aAAahJ,WAAWyI;YAC9B,MAAMQ,YAAYjB,iBAAiB1/B,IAAI0gC;YACvC,IAAIC,WAAW;gBACb1hC,KAAK2hC,cAAcF;gBACnBzhC,KAAK4hC,kBAAkB;AACxB,mBAAM;gBACL5hC,KAAK4hC,kBAAkB;gBACvB5hC,KAAK6hC,kBAAkBC,MAAM;AAC9B;AAAA;QAGH9hC,KAAM+d,SAAG;;aACP1V,KAAArI,KAAK+hC,iBAAW,QAAA15B,YAAA,SAAA,IAAAA,GAAE2I,MAAMhR,KAAKohC,gBAAgBY;aAC7CjI,KAAA/5B,KAAK+hC,iBAAW,QAAAhI,YAAA,SAAA,IAAAA,GAAE9oB,OAAOjR,KAAKohC,gBAAgBa;AAAa;QAG7DjiC,KAAAkiC,MAAOh1B;YACL,MAAM+d,KAAK/d,MAAM+d,KAAKpmB,OAAOgN;YAC7B,MAAMqZ,KAAKhe,MAAMge,KAAKrmB,OAAOgN;YAE7BzI,OAAO+4B,OAAO1J,YAAYv3B,SAASkhC,QAASpiC,KAAKqiC,eAAeD,MAAMlhC,SAASoF,KAAMA,EAAEg8B,KAAK;gBAAEh8B,GAAG2kB;gBAAI1kB,GAAG2kB;;AAAO;QAGjHlrB,KAAAuiC,mBAAoBr1B;YAClBlN,KAAKwiC,QAAQzgC,KAAKmL;AAAM;AA26B3B;IAxgCC,UAAAqE,CAAW5Q,QAAgBkI,QAA2ByI,eAAyB;QAC7E,KAAKqoB,OACH,MAAM,IAAIzH,MACR;QAGJlyB,KAAKwiC,UAAU7hC;QAEfX,KAAKohC,kBAAkBv4B;QACvB7I,KAAKyiC,gBAAgBnxB;QAErBtR,KAAKmhC,mBAAmBjsB,SAASC,cAAc;QAC/CnV,KAAKmhC,iBAAiB/gC,KAAKJ,KAAKghC;QAChChhC,KAAKmhC,iBAAiBtoB,MAAMtN,WAAW;QACvCvL,KAAKmhC,iBAAiBtoB,MAAM0B,MAAM;QAClCva,KAAKmhC,iBAAiBtoB,MAAM2B,OAAO;QAEnCxa,KAAKmhC,iBAAiBtoB,MAAM6pB,UAAU;QAEtC,MAAMC,YAAY3iC,KAAKohC,gBAAgBwB;QACvCD,UAAUttB,YAAYrV,KAAKmhC;QAE3BnhC,KAAK6iC,eAAe,IAAInK,YAAY,KAAK,GAAG;QAC5C14B,KAAK4hC,kBAAkB;QAEvB5hC,KAAK8iC;QACL9iC,KAAK+d;QAEL/d,KAAKyiC,cAAcvhC,SAASoF,KAAMtG,KAAKmhC,iBAAiBv0B,iBAAiBtG,GAAGtG,KAAKuiC;QAEjFviC,KAAKwiC,QAAQ51B,iBAAiB,UAAU5M,KAAK+d;QAC7C/d,KAAKwiC,QAAQ51B,iBAAiB,uBAAuB5M,KAAKihC;QAC1DjhC,KAAKwiC,QAAQ51B,iBAAiB,OAAO5M,KAAKkiC;QAE1CliC,KAAK8gC,iBAAiB;AACvB;IAED,OAAApvB;QACE,KAAK1R,KAAK8gC,gBAAgB;QAE1B9gC,KAAKyiC,cAAcvhC,SAASoF,KAAMtG,KAAKmhC,iBAAiBr0B,oBAAoBxG,GAAGtG,KAAKuiC;QAEpFviC,KAAKwiC,QAAQ11B,oBAAoB,OAAO9M,KAAKkiC;QAC7CliC,KAAKwiC,QAAQ11B,oBAAoB,uBAAuB9M,KAAKihC;QAC7DjhC,KAAKwiC,QAAQ11B,oBAAoB,UAAU9M,KAAK+d;QAEhD/d,KAAK+iC;QAEL/iC,KAAKmhC,iBAAiBnjB;QAEtBhe,KAAKmhC,mBAAmBv/B;QACxB5B,KAAKohC,kBAAkBx/B;QACvB5B,KAAKwiC,UAAU5gC;QAEf5B,KAAK8gC,iBAAiB;AACvB;IAyCD,WAAAkC;QACE,OAAO;AACR;IAED,YAAAv6B;QACEzI,KAAKwhC;QACLxhC,KAAK6hC,kBAAkBC,MAAM;QAC7B14B,OAAO+4B,OAAO1J,YAAYv3B,SAASkhC,QAASpiC,KAAKqiC,eAAeD,MAAMlhC,SAASoF,KAAMA,EAAEw0B;AACxF;IAED,cAAAmI;QACE,OAAOjjC,KAAK6iC,aAAahK;AAC1B;IAED,cAAAptB,CAAepI,GAAWC,GAAWC;QACnCvD,KAAK6iC,aAAanc,SAASrjB,GAAGC,GAAGC;AAClC;IAED,iBAAA2/B,CAAkB7/B,IAAI,KAAKC,IAAI,GAAGC,IAAI;QACpC,MAAM61B,MAAM,IAAIV,YAAYr1B,GAAGC,GAAGC,GAAGo1B;QACrCvvB,OAAO+4B,OAAO1J,YAAYv3B,SAASkhC;YACjCpiC,KAAKqiC,eAAeD,MAAMlhC,SAASoF;gBACjC,MAAM68B,WAAW1C,iBAAiB1/B,IAAIqhC,MAAM1B,YAAYp6B;gBACxD,IAAI68B,SAASzc,UAAUyc,SAASzc,SAAS0S;AAAI;AAC7C;QAGJp5B,KAAKojC,YAAYvW;AAClB;IAED,YAAAwW,CAAaC;QACX,MAAMC,cAAcD,UAAUE,cAAcC,gBAAgB;YAAEpgC,GAAG;YAAKC,GAAG;YAAGC,GAAG;;QAC/EvD,KAAKyL,eAAe83B,YAAYlgC,GAAGkgC,YAAYjgC,GAAGigC,YAAYhgC;QAE9DvD,KAAK0jC,WAAWJ;AACjB;IAED,YAAAK;QAEE,KAAK3jC,KAAKwiC,QAAQv7B,aAAa,OAAO;QAEtC,MAAMq8B,YAAwB;YAC5BM,OAAO;YACPC,OAAO;YACPC,QAAQ;YACRC,QAAQ;YACRC,UAAU;YACVC,QAAQ;YACRC,YAAY;;QAGdZ,UAAUa,WAAW;YACnBliC,MAAMjC,KAAKokC;;QAGbd,UAAUE,gBAAgB;YACxBC,cAAczjC,KAAKijC;;QAGrBjjC,KAAKqkC,oBAAoBf;QAEzBA,UAAUhjC,eAAc,IAAIgkC,MAAOC;QACnC,OAAOjB;AACR;IAED,YAAAkB,CAAaxiC,MAAc0L;QACzB,IAAI+2B;QACJ,IAAI/pB,SAAS1a,KAAK+gC;QAGlB,QAAQ/+B;UACN,KAAK;YACHyiC,SAAS,IAAIlL,UAAU7rB;YACvBgN,SAAS;YACT;;UACF,KAAK;YACH+pB,SAAS,IAAIjJ,UAAU9tB;YACvB;;UACF,KAAK;YACH+2B,SAAS,IAAIlI,eAAe7uB;YAC5BgN,SAAS;YACT;;UACF,KAAK;YACH+pB,SAAS,IAAIxH,aAAavvB;YAC1BgN,SAAS;YACT;;UACF,KAAK;YACH+pB,SAAS,IAAI/G,WAAWhwB;YACxB;;UACF,KAAK;YACH+2B,SAAS,IAAI3G,WAAWpwB;YACxBgN,SAAS;YACT;;UACF,KAAK;YACH+pB,SAAS,IAAInG,WAAW5wB;YACxBgN,SAAS;YACT;;UACF;YACE,MAAM,IAAIwX,MAAM;;QAGpBlyB,KAAK0kC,UAAUD;QAGfA,OAAO5J,UAAUngB;QACjB1a,KAAK+gC;QACL,OAAO0D;AACR;IAED,UAAAE;QACE,MAAMjwB,UAAU;QAChB1U,KAAKqiC,eAAe5J,WAAWmB,MAAM14B,SAAS0jC;YAC5ClwB,QAAQhL,KAAK,IAAI6vB,UAAU,MAAMqL;AAAM;QAGzC5kC,KAAKqiC,eAAe5J,WAAWkD,MAAMz6B,SAASw6B;YAC5ChnB,QAAQhL,KAAK,IAAI8xB,UAAU,MAAME;AAAM;QAGzC17B,KAAKqiC,eAAe5J,WAAWkI,WAAWz/B,SAAS2jC;YACjDnwB,QAAQhL,KAAK,IAAI6yB,eAAe,MAAMsI;AAAW;QAGnD7kC,KAAKqiC,eAAe5J,WAAWyE,SAASh8B,SAAS4jC;YAC/CpwB,QAAQhL,KAAK,IAAIuzB,aAAa,MAAM6H;AAAS;QAG/C9kC,KAAKqiC,eAAe5J,WAAWkF,OAAOz8B,SAAS6jC;YAC7CrwB,QAAQhL,KAAK,IAAIg0B,WAAW,MAAMqH;AAAO;QAG3C/kC,KAAKqiC,eAAe5J,WAAWyF,OAAOh9B,SAAS+8B;YAC7CvpB,QAAQhL,KAAK,IAAIo0B,WAAW,MAAMG;AAAO;QAG3Cj+B,KAAKqiC,eAAe5J,WAAWmI,OAAO1/B,SAAS8jC;YAC7CtwB,QAAQhL,KAAK,IAAI40B,WAAW,MAAM0G;AAAO;QAG3C,OAAOtwB;AACR;IAED,kBAAAuwB;QACE,MAAMvwB,UAAU;QAEhB1U,KAAK6hC,kBAAkBC,QAAQ5gC,SAASoN;YACtC,MAAM42B,iBAAiB52B,IAAIyxB;YAC3B,QAAQmF;cACN,KAAK;gBACHxwB,QAAQhL,KAAK,IAAI6vB,UAAU,MAAMjrB;gBACjC;;cACF,KAAK;gBACHoG,QAAQhL,KAAK,IAAI8xB,UAAU,MAAMltB;gBACjC;;cACF,KAAK;gBACHoG,QAAQhL,KAAK,IAAI6yB,eAAe,MAAMjuB;gBACtC;;cACF,KAAK;gBACHoG,QAAQhL,KAAK,IAAIuzB,aAAa,MAAM3uB;gBACpC;;cACF,KAAK;gBACHoG,QAAQhL,KAAK,IAAIg0B,WAAW,MAAMpvB;gBAClC;;cACF,KAAK;gBACHoG,QAAQhL,KAAK,IAAIo0B,WAAW,MAAMxvB;gBAClC;;cACF,KAAK;gBACHoG,QAAQhL,KAAK,IAAI40B,WAAW,MAAMhwB;gBAClC;;AAGH;QAGH,OAAOoG;AACR;IAED,aAAAywB,CAAczwB;QACZ,MAAM0wB,eAAeplC,KAAK6hC,kBAAkBC,QAAQ/J,OAAOrjB,QAAQzT,KAAKqF,KAAMA,EAAEkzB;QAChFx5B,KAAK6hC,kBAAkBC,MAAMsD;AAC9B;IAED,aAAAC;QACErlC,KAAK6hC,kBAAkBC,MAAM;AAC9B;IAEO,mBAAAwD,CAAoBC;QAC1B,OAAO;YAAEj/B,GAAGi/B,MAAM;YAAIh/B,GAAGg/B,MAAM;YAAI/+B,GAAG++B,MAAM;;AAC7C;IAEO,mBAAAlB,CAAoBf;QAC1B,MAAMkC,cAAcxlC,KAAKylC;QACzB,IAAID,eAAeA,YAAYx4B,SAAS,GAAG;YACzCw4B,gBAAW,QAAXA,qBAAW,SAAA,IAAXA,YAAatkC,SAAS0jC;gBACpBtB,UAAUM,MAAMl6B,KAAKk7B;AAAK;AAE7B;QAED,MAAMc,cAAc1lC,KAAK2lC;QACzB,IAAID,eAAeA,YAAY14B,SAAS,GAAG;YACzC04B,gBAAW,QAAXA,qBAAW,SAAA,IAAXA,YAAaxkC,SAASw6B;gBACpB4H,UAAUO,MAAMn6B,KAAKgyB;AAAK;AAE7B;QAED,MAAMkK,mBAAmB5lC,KAAK6lC;QAC9B,IAAID,oBAAoBA,iBAAiB54B,SAAS,GAAG;YACnD44B,qBAAgB,QAAhBA,0BAAgB,SAAA,IAAhBA,iBAAkB1kC,SAAS2jC;gBACzBvB,UAAUY,WAAWx6B,KAAKm7B;AAAU;AAEvC;QAED,MAAMiB,iBAAiB9lC,KAAK+lC;QAC5B,IAAID,kBAAkBA,eAAe94B,SAAS,GAAG;YAC/C84B,mBAAc,QAAdA,wBAAc,SAAA,IAAdA,eAAgB5kC,SAAS4jC;gBACvBxB,UAAUU,SAASt6B,KAAKo7B;AAAQ;AAEnC;QAED,MAAMkB,eAAehmC,KAAKimC;QAC1B,IAAID,gBAAgBA,aAAah5B,SAAS,GAAG;YAC3Cg5B,iBAAY,QAAZA,sBAAY,SAAA,IAAZA,aAAc9kC,SAAS6jC;gBACrBzB,UAAUQ,OAAOp6B,KAAKq7B;AAAM;AAE/B;QAED,MAAMmB,eAAelmC,KAAKmmC;QAC1B,IAAID,gBAAgBA,aAAal5B,SAAS,GAAG;YAC3Ck5B,iBAAY,QAAZA,sBAAY,SAAA,IAAZA,aAAchlC,SAAS+8B;gBACrBqF,UAAUW,OAAOv6B,KAAKu0B;AAAM;AAE/B;QAED,MAAMmI,eAAepmC,KAAKqmC;QAC1B,IAAID,gBAAgBA,aAAap5B,SAAS,GAAG;YAC3Co5B,iBAAY,QAAZA,sBAAY,SAAA,IAAZA,aAAcllC,SAAS8jC;gBACrB1B,UAAUS,OAAOr6B,KAAKs7B;AAAM;AAE/B;AACF;IAEO,SAAAN,CAAUD;QAChBzkC,KAAKojC,YAAYriB,IAAI0jB,OAAOjL;AAC7B;IAEO,cAAA6I,CAAeiE;QACrB,MAAMC,aAAa9F,iBAAiB1/B,IAAIulC;QACxC,IAAIC,YAAY;YAEd,MAAMC,cAAcxmC,KAAKojC,YAAYqD,KAAKF,WAAW5S,MAAMrqB,QAAQhD,KAAMA,EAAEogC,kBAAkB/M,MAAMgN;YACnG,OAAOH;AACR;AACF;IAEO,eAAA1D;QAEN9iC,KAAK+hC,cAAc,IAAIpI,MAAMiN,MAAM;YACjCC,WAAW7mC,KAAKghC;YAChBhwB,OAAOhR,KAAKohC,gBAAgBY;YAC5B/wB,QAAQjR,KAAKohC,gBAAgBa;;QAE/B,MAAM6E,QAAQ9mC,KAAK+hC;QACnB,MAAMgF,QAAQ,IAAIpN,MAAMgN,MAAM;YAAEK,aAAaniC,OAAOgN;;QACpDi1B,MAAM/lB,IAAIgmB;QACV/mC,KAAKojC,cAAc2D;QAEnB,MAAME,cAAc,IAAItN,MAAMuN,YAAY;YACxCC,yBAAyB;;QAG3BnnC,KAAK6hC,oBAAoBoF;QACzBF,MAAMhmB,IAAIkmB;QAEV,IAAIG,UAAU;QACd,IAAIC;QAEJP,MAAMz5B,GAAG,yBAAyB2yB;YAEhC,KAAKhgC,KAAK4hC,mBAAmB5B,EAAEjyB,WAAW+4B,SAAS9mC,KAAK2hC,gBAAgBlJ,WAAWkD,MAAM;YAEzF,IAAIqE,EAAEjyB,WAAW+4B,SAASG,YAAYnF,QAAQ90B,SAAS,GAAG;gBACxDi6B,YAAYnF,MAAM;gBAClB;AACD;YAED,MAAMzf,MAAMykB,MAAMQ;YAElB,IAAItnC,KAAK2hC,gBAAgBlJ,WAAWmB,MAAM;gBAExCyN,WAAWrnC,KAAKunC,QAAQ,EAACllB,IAAI/b,GAAG+b,IAAI9b,GAAG8b,IAAI/b,GAAG+b,IAAI9b;gBAElD6gC,UAAU;AACX,mBAEI,IAAIpnC,KAAK2hC,gBAAgBlJ,WAAWkI,WAAW;gBAClD3gC,KAAKwnC,aAAa;oBAAElhC,GAAG+b,IAAI/b;oBAAGC,GAAG8b,IAAI9b;mBAAK,IAAI;AAC/C,mBAAM,IAAIvG,KAAK2hC,gBAAgBlJ,WAAWyE,SAAS;gBAClDl9B,KAAKynC,WAAW;oBAAEnhC,GAAG+b,IAAI/b;oBAAGC,GAAG8b,IAAI9b;mBAAK;oBAAED,GAAG;oBAAIC,GAAG;;AACrD,mBAAM,IAAIvG,KAAK2hC,gBAAgBlJ,WAAWkF,OAAO;gBAChD39B,KAAK0nC,SAAS;oBAAEphC,GAAG+b,IAAI/b;oBAAGC,GAAG8b,IAAI9b;mBAAK;oBAAED,GAAG+b,IAAI/b,IAAI;oBAAIC,GAAG8b,IAAI9b,IAAI;;AACnE,mBAAM,IAAIvG,KAAK2hC,gBAAgBlJ,WAAWmI,OAAO;gBAChD5gC,KAAK2nC,SAAS;oBAAErhC,GAAG+b,IAAI/b;oBAAGC,GAAG8b,IAAI9b;mBAAK,KAAK;AAC5C;AAAA;QAGHugC,MAAMz5B,GAAG,qBAAqB2yB;YAC5B,KAAKhgC,KAAK4hC,iBAAiB;YAC3BwF,UAAU;AAAK;QAGjBN,MAAMz5B,GAAG,wBAAwB2yB;YAC/B,KAAKhgC,KAAK4hC,iBAAiB;YAC3B,KAAKwF,SAAS;gBACZ;AACD;YAKD,MAAM/kB,MAAMykB,MAAMQ;YAClB,MAAM/L,YAAY8L,SAASv3B,SAASioB,OAAO,EAAC1V,IAAI/b,GAAG+b,IAAI9b;YACvD8gC,SAASv3B,OAAOyrB;AAAU;QAI5BuL,MAAMz5B,GAAG,cAAc2yB;YACrB,KAAKhgC,KAAK4hC,iBAAiB;YAG3B,IAAI5B,EAAEjyB,WAAW+4B,OAAO;gBACtB,IAAI9mC,KAAK2hC,gBAAgBlJ,WAAWkD,MAAM;oBACxC,IAAI37B,KAAK4nC,eAAe5nC,KAAK6nC,QAAQ7nC,KAAK4nC,cAAczmC,OAAOnB,KAAK8nC,eAAe9nC,KAAK+nC,uBACnF,IAAId,YAAYnF,QAAQ90B,WAAW,GAAG;wBACzC,MAAMqV,MAAMykB,MAAMQ;wBAClBtnC,KAAKgoC,gBAAgB3lB,KAAK2d,EAAEiI,IAAIC,OAAOlI,EAAEiI,IAAIE,OAAO,GAAG;AACxD;AACF;gBACDlB,YAAYnF,MAAM;gBAClB;AACD;YAED,IAAI9B,EAAEjyB,OAAOgyB,cAAc,UAAUkH,YAAYnF,QAAQ90B,WAAW,KAAKi6B,YAAYnF,QAAQ,OAAO9B,EAAEjyB,QAAQ;gBAC5G,IAAI/N,KAAK4nC,eAAe5nC,KAAK6nC,QAAQ7nC,KAAK4nC,cAAczmC,OAAOnB,KAAK8nC,eAAe9nC,KAAK+nC,uBAEtF/nC,KAAKgoC,gBACH;oBAAE1hC,GAAG05B,EAAEjyB,OAAOkyB,MAAM35B;oBAAGC,GAAGy5B,EAAEjyB,OAAOkyB,MAAM15B;mBACzCy5B,EAAEiI,IAAIC,OACNlI,EAAEiI,IAAIE,OACNnI,EAAEjyB,OAAOkyB,MAAMj4B,UACfg4B,EAAEjyB,OAAOkyB,MAAMvE;gBAEnB;AACD,mBAAM;gBACL17B,KAAKwhC;AACN;YAED,IAAIyF,YAAYnF,QAAQx4B,QAAQhD,KAAMA,EAAEy5B,cAAc,UAAS/yB,SAAS,KAAKgzB,EAAEjyB,OAAOgyB,cAAc,SAAS;gBAC3GkH,YAAYmB,cAAc;AAC3B,mBAAM;gBACLnB,YAAYmB,cAAc;AAC3B;YAGD,MAAMC,cAAcrI,EAAEiI,IAAIK,YAAYtI,EAAEiI,IAAIM,WAAWvI,EAAEiI,IAAIO;YAC7D,MAAMC,aAAaxB,YAAYnF,QAAQ4G,QAAQ1I,EAAEjyB,WAAW;YAE5D,KAAKs6B,gBAAgBI,YAAY;gBAG/BxB,YAAYnF,MAAM,EAAC9B,EAAEjyB;AACtB,mBAAM,IAAIs6B,eAAeI,YAAY;gBAGpC,MAAM3G,QAAQmF,YAAYnF,QAAQ10B;gBAElC00B,MAAM6G,OAAO7G,MAAM4G,QAAQ1I,EAAEjyB,SAAS;gBACtCk5B,YAAYnF,MAAMA;AACnB,mBAAM,IAAIuG,gBAAgBI,YAAY;gBAErC,MAAM3G,QAAQmF,YAAYnF,QAAQ/J,OAAO,EAACiI,EAAEjyB;gBAC5Ck5B,YAAYnF,MAAMA;AACnB;AAAA;QAGH,MAAM+E,YAAYC,MAAMD;QACxBA,UAAU+B,WAAW;QAGrB/B,UAAUgC;QAEVhC,UAAUj6B,iBAAiB,YAAYozB;YACrC,KAAKhgC,KAAK4hC,iBAAiB;YAC3B,IAAI5B,EAAElf,SAAS,UAAU;gBACvB,MAAMgoB,UAAU9oC,KAAK6hC,kBAAkBC;gBACvC,IAAIgH,QAAQ97B,SAAS,GAAG;oBACtBhN,KAAK6hC,kBAAkBC,QAAQ5gC,SAASoF,KAAMA,EAAEw0B;oBAChD96B,KAAK6hC,kBAAkBC,MAAM;AAC9B;gBACDiF,MAAMla;gBACN;AACD;YACDmT,EAAE9T;AAAgB;AAErB;IAEO,YAAA6W;QACN/iC,KAAKyI;QAELzI,KAAK+hC,YAAYjH;QAEjB96B,KAAKojC,cAAcxhC;QACnB5B,KAAK6hC,oBAAoBjgC;QACzB5B,KAAK+hC,cAAcngC;AACpB;IAEO,cAAA6jC;QACN,MAAM7B,QAAQ;QACd5jC,KAAKqiC,eAAe5J,WAAWmB,MAAM14B,SAAS0jC;YAC5C,MAAMmE,aAAanE,KAAK90B;YACxB,KAAKi5B,YAAY;YACjB,MAAMC,cAAc;YACpB,MAAMC,oBAAoBrE,KAAKsE;YAC/B,KAAK,IAAIn5B,IAAI,GAAGA,IAAIg5B,WAAW/7B,QAAQ+C,KAAK,GAAG;gBAG7C,MAAMo5B,UAAUF,kBAAkBt6B,MAAM;oBAAErI,GAAGyiC,WAAWh5B;oBAAIxJ,GAAGwiC,WAAWh5B,IAAI;;gBAC9E,MAAM2F,aAAa1V,KAAKwiC,QACrBp7B,YACAwI,cAAcu5B,QAAQ7iC,IAAIzB,OAAOgN,kBAAkBs3B,QAAQ5iC,IAAI1B,OAAOgN;gBACzEm3B,YAAYt/B,KAAKgM;AAClB;YAED,MAAM0zB,YAAY,IAAI7P,UAAU,MAAMqL;YACtChB,MAAMl6B,KAAK;gBACTtJ,IAAIgpC,UAAUhpC;gBACd0P,QAAQk5B,YAAY/nC,KAAK2N,KAAM5O,KAAKslC,oBAAoB12B;gBACxD8K,OAAO0vB,UAAU5O,cAAc;gBAC/Bx4B,MAAMonC,UAAUlO,iBAAiB;gBACjClqB,OAAOo4B,UAAUnO,kBAAkB;;AACnC;QAGJ,OAAO2I;AACR;IAEO,cAAA+B;QACN,MAAM9B,QAAQ;QAEd,MAAMwF,WAAW;QACjB,IAAIC,YAAY;QAEhB,MAAMC,WAAWvpC,KAAKwiC,QAAQp7B,YAAY6D,WAAWu+B;QACrD,MAAMC,aAAaF,SAASxoC,IAAI,GAAG;QACnC,MAAM2oC,MAAM;QACZ,IAAID,aAAaC,OAAOD,cAAcC,KAAK;YACzCJ,YAAY,IAAIG;AACjB;QAEDzpC,KAAKqiC,eAAe5J,WAAWkD,MAAMz6B,SAASw6B;YAC5C,KAAKA,MAAM;YAEX,MAAMnwB,WAAWvL,KAAKwiC,QACnBp7B,YACAwI,cAAc8rB,KAAKp1B,MAAMzB,OAAOgN,kBAAkB6pB,KAAKn1B,MAAM1B,OAAOgN;YAEvE,MAAM8sB,QAAQ,IAAInD,UAAU,MAAME;YAClCmI,MAAMn6B,KAAK;gBACTtJ,IAAIu+B,MAAMv+B;gBACVmL,UAAUvL,KAAKslC,oBAAoB/5B;gBACnCmwB,MAAMiD,MAAM1C;gBACZ0N,WAAWN,WAAWC;gBACtB3iC,OAAOg4B,MAAMlE;gBACb/gB,OAAOilB,MAAMnE;gBACboP,WAAWjL,MAAMtC;;AACjB;QAGJ,OAAOwH;AACR;IAEO,mBAAAgC;QACN,MAAM3B,aAAa;QACnBlkC,KAAKqiC,eAAe5J,WAAWkI,WAAWz/B,SAAS8Y;YACjD,MAAMzO,WAAWyO,KAAKzO;YACtB,MAAMmK,aAAa1V,KAAKwiC,QACrBp7B,YACAwI,cAAcrE,SAASjF,IAAIzB,OAAOgN,kBAAkBtG,SAAShF,IAAI1B,OAAOgN;YAE3E,MAAM8sB,QAAQ,IAAIpC,eAAe,MAAMviB;YACvCkqB,WAAWx6B,KAAK;gBACdtJ,IAAIu+B,MAAMv+B;gBACVmL,UAAUvL,KAAKslC,oBAAoB5vB;gBACnC1E,OAAO2tB,MAAMhC;gBACb1rB,QAAQ0tB,MAAM/B;gBACdiN,YAAYlL,MAAM1D;gBAClBvhB,OAAOilB,MAAMnE;;AACb;QAGJ,OAAO0J;AACR;IAEO,iBAAA6B;QACN,MAAM/B,WAAW;QACjBhkC,KAAKqiC,eAAe5J,WAAWyE,SAASh8B,SAAS4jC;YAC/C,MAAMv5B,WAAWu5B,QAAQv5B;YACzB,MAAMmK,aAAa1V,KAAKwiC,QACrBp7B,YACAwI,cAAcrE,SAASjF,IAAIzB,OAAOgN,kBAAkBtG,SAAShF,IAAI1B,OAAOgN;YAE3E,MAAM8sB,QAAQ,IAAI1B,aAAa,MAAM6H;YACrCd,SAASt6B,KAAK;gBACZtJ,IAAIu+B,MAAMv+B;gBACVmL,UAAUvL,KAAKslC,oBAAoB5vB;gBACnC0nB,QAAQ;oBAAE92B,GAAGw+B,QAAQxH;oBAAc/2B,GAAGu+B,QAAQtH;;gBAC9CqM,YAAYlL,MAAM1D;gBAClBvhB,OAAOilB,MAAMnE;;AACb;QAGJ,OAAOwJ;AACR;IAEO,eAAAiC;QACN,MAAMnC,SAAS;QACf9jC,KAAKqiC,eAAe5J,WAAWkF,OAAOz8B,SAAS6jC;YAE7C,MAAMkE,oBAAoBlE,MAAMmE;YAEhC,MAAMY,eAAeb,kBAAkBt6B,MAAM;gBAAErI,GAAGy+B,MAAMj1B,SAAS;gBAAIvJ,GAAGw+B,MAAMj1B,SAAS;;YACvF,MAAMi6B,kBAAkB/pC,KAAKwiC,QAC1Bp7B,YACAwI,cAAck6B,aAAaxjC,IAAIzB,OAAOgN,kBAAkBi4B,aAAavjC,IAAI1B,OAAOgN;YAEnF,MAAMm4B,aAAaf,kBAAkBt6B,MAAM;gBAAErI,GAAGy+B,MAAMj1B,SAAS;gBAAIvJ,GAAGw+B,MAAMj1B,SAAS;;YACrF,MAAMm6B,gBAAgBjqC,KAAKwiC,QACxBp7B,YACAwI,cAAco6B,WAAW1jC,IAAIzB,OAAOgN,kBAAkBm4B,WAAWzjC,IAAI1B,OAAOgN;YAE/E,MAAM8sB,QAAQ,IAAIjB,WAAW,MAAMqH;YACnCjB,OAAOp6B,KAAK;gBACVtJ,IAAIu+B,MAAMv+B;gBACVmS,OAAOvS,KAAKslC,oBAAoByE;gBAChCl3B,KAAK7S,KAAKslC,oBAAoB2E;gBAC9BvwB,OAAOilB,MAAMnE;;AACb;QAGJ,OAAOsJ;AACR;IAEO,eAAAqC;QACN,MAAMlC,SAAS;QACfjkC,KAAKqiC,eAAe5J,WAAWyF,OAAOh9B,SAAS+8B;YAC7C,MAAM1yB,WAAW0yB,MAAM1yB;YACvB,MAAMmK,aAAa1V,KAAKwiC,QACrBp7B,YACAwI,cAAcrE,SAASjF,IAAIzB,OAAOgN,kBAAkBtG,SAAShF,IAAI1B,OAAOgN;YAE3E,MAAM8sB,QAAQ,IAAIb,WAAW,MAAMG;YACnCgG,OAAOv6B,KAAK;gBACVtJ,IAAIu+B,MAAMv+B;gBACVmL,UAAUvL,KAAKslC,oBAAoB5vB;gBACnCoc,KAAK6M,MAAMR;gBACXntB,OAAO2tB,MAAMhC;gBACb1rB,QAAQ0tB,MAAMN;;AACd;QAGJ,OAAO4F;AACR;IAEO,eAAAoC;QACN,MAAMtC,SAAS;QACf/jC,KAAKqiC,eAAe5J,WAAWmI,OAAO1/B,SAAS8jC;YAC7C,MAAMz5B,WAAWy5B,MAAMz5B;YACvB,MAAMmK,aAAa1V,KAAKwiC,QACrBp7B,YACAwI,cAAcrE,SAASjF,IAAIzB,OAAOgN,kBAAkBtG,SAAShF,IAAI1B,OAAOgN;YAE3E,MAAM8sB,QAAQ,IAAIL,WAAW,MAAM0G;YACnCjB,OAAOr6B,KAAK;gBACVtJ,IAAIu+B,MAAMv+B;gBACVmL,UAAUvL,KAAKslC,oBAAoB5vB;gBACnC1E,OAAO2tB,MAAMhC;gBACb1rB,QAAQ0tB,MAAM/B;gBACdiN,YAAYlL,MAAM1D;gBAClBvhB,OAAOilB,MAAMnE;;AACb;QAGJ,OAAOuJ;AACR;IAEO,UAAAL,CAAWJ;;SACjBj7B,KAAAi7B,UAAUM,WAAK,QAAAv7B,YAAA,SAAA,IAAAA,GAAEnH,SAASgpC;YACxB,MAAMnB,aAAa;YACnBmB,OAAOp6B,OAAO5O,SAASyN;gBACrB,MAAMw7B,cAAchwB,cAClB,EAACxL,MAAMrI,GAAGqI,MAAMpI,GAAGoI,MAAMnI,KACzBxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;gBAEf2hC,WAAWr/B,KAAKygC,YAAY7jC;gBAC5ByiC,WAAWr/B,KAAKygC,YAAY5jC;AAAE;YAGhCvG,KAAKunC,QAAQwB,YAAYmB,OAAOxwB,OAAOwwB,OAAOloC,MAAMkoC,OAAOl5B,OAAOk5B,OAAO9pC;AAAG;SAG9E25B,KAAAuJ,UAAUO,WAAK,QAAA9J,YAAA,SAAA,IAAAA,GAAE74B,SAASkpC;YACxB,MAAMD,cAAchwB,cAClB,EAACiwB,OAAO7+B,SAASjF,GAAG8jC,OAAO7+B,SAAShF,GAAG6jC,OAAO7+B,SAAS/E,KACvDxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAEfpH,KAAK6nC,QAAQuC,OAAO1O,MAAMyO,aAAaC,OAAOzjC,OAAOyjC,OAAO1wB,OAAO0wB,OAAOT,WAAWS,OAAOR,WAAWQ,OAAOhqC;AAAG;SAGnH47B,KAAAsH,UAAUY,gBAAU,QAAAlI,YAAA,SAAA,IAAAA,GAAE96B,SAASmpC;YAC7B,MAAMF,cAAchwB,cAClB,EAACkwB,OAAO9+B,SAASjF,GAAG+jC,OAAO9+B,SAAShF,GAAG8jC,OAAO9+B,SAAS/E,KACvDxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAGfpH,KAAKwnC,aACH;gBAAElhC,GAAG6jC,YAAY7jC;gBAAGC,GAAG4jC,YAAY5jC;eACnC8jC,OAAOr5B,OACPq5B,OAAOp5B,QACPo5B,OAAOR,YACPQ,OAAO3wB,OACP2wB,OAAOjqC;AACR;SAGHs8B,KAAA4G,UAAUU,cAAQ,QAAAtH,YAAA,SAAA,IAAAA,GAAEx7B,SAASopC;YAC3B,MAAMH,cAAchwB,cAClB,EAACmwB,UAAU/+B,SAASjF,GAAGgkC,UAAU/+B,SAAShF,GAAG+jC,UAAU/+B,SAAS/E,KAChExG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAGfpH,KAAKynC,WACH;gBAAEnhC,GAAG6jC,YAAY7jC;gBAAGC,GAAG4jC,YAAY5jC;eACnC;gBAAED,GAAGgkC,UAAUlN,OAAO92B;gBAAGC,GAAG+jC,UAAUlN,OAAO72B;eAC7C+jC,UAAUT,YACVS,UAAU5wB,OACV4wB,UAAUlqC;AACX;SAGHmqC,KAAAjH,UAAUQ,YAAM,QAAAyG,YAAA,SAAA,IAAAA,GAAErpC,SAASspC;YACzB,MAAMpxB,aAAae,cACjB,EAACqwB,QAAQj4B,MAAMjM,GAAGkkC,QAAQj4B,MAAMhM,GAAGikC,QAAQj4B,MAAM/L,KACjDxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAGf,MAAMiS,WAAWc,cACf,EAACqwB,QAAQ33B,IAAIvM,GAAGkkC,QAAQ33B,IAAItM,GAAGikC,QAAQ33B,IAAIrM,KAC3CxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAGfpH,KAAK0nC,SAAS;gBAAEphC,GAAG8S,WAAW9S;gBAAGC,GAAG6S,WAAW7S;eAAK;gBAAED,GAAG+S,SAAS/S;gBAAGC,GAAG8S,SAAS9S;eAAKikC,QAAQ9wB,OAAO8wB,QAAQpqC;AAAG;SAGlHqqC,KAAAnH,UAAUS,YAAM,QAAA0G,YAAA,SAAA,IAAAA,GAAEvpC,SAASwpC;YACzB,MAAMP,cAAchwB,cAClB,EAACuwB,QAAQn/B,SAASjF,GAAGokC,QAAQn/B,SAAShF,GAAGmkC,QAAQn/B,SAAS/E,KAC1DxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAGfpH,KAAK2nC,SACH;gBAAErhC,GAAG6jC,YAAY7jC;gBAAGC,GAAG4jC,YAAY5jC;eACnCmkC,QAAQ15B,OACR05B,QAAQz5B,QACRy5B,QAAQb,YACRa,QAAQhxB,OACRgxB,QAAQtqC;AACT;SAGHuqC,KAAArH,UAAUW,YAAM,QAAA0G,YAAA,SAAA,IAAAA,GAAEzpC,SAAS0pC;YACzB,MAAMT,cAAchwB,cAClB,EAACywB,QAAQr/B,SAASjF,GAAGskC,QAAQr/B,SAAShF,GAAGqkC,QAAQr/B,SAAS/E,KAC1DxG,KAAKwiC,QAAQv7B,aACbjH,KAAKwiC,QAAQp7B;YAGfpH,KAAK6qC,SAAS;gBAAEvkC,GAAG6jC,YAAY7jC;gBAAGC,GAAG4jC,YAAY5jC;eAAKqkC,QAAQ9Y,KAAK8Y,QAAQ55B,OAAO45B,QAAQ35B,QAAQ25B,QAAQxqC;AAAG;AAEhH;IAEO,wBAAAgkC;QACN,MAAM0E,UAAU9oC,KAAK6hC,kBAAkBC;QACvC,IAAIgH,QAAQ97B,SAAS,GAAG;YACtBhN,KAAK6hC,kBAAkBC,MAAM;AAC9B;QAED,MAAMgJ,aAAa51B,SAASC,cAAc;QAC1C21B,WAAW75B,SAASjR,KAAKohC,gBAAgBnwB;QACzC65B,WAAW95B,QAAQhR,KAAKohC,gBAAgBpwB;QACxC,MAAM+5B,MAAMD,WAAWE,WAAW;QAClCD,IAAIE,UAAUjrC,KAAKohC,iBAAiB,GAAG;QACvC2J,IAAIE,UAAUjrC,KAAK+hC,YAAYmJ,SAAS;YAAEC,YAAYtmC,OAAOgN;YAAqB,GAAG;QACrF,OAAOi5B,WAAWhiC,UAAU,cAAc;AAC3C;IAEO,OAAAy+B,CACNwB,YACArvB,OACA1X,MACAgP,OACA5Q;QAEA,KAAK2oC,cAAcA,WAAW/7B,WAAW,GAAG;QAC5C,MAAM8C,SAAqC;QAC3C,KAAK,IAAIC,IAAI,GAAGA,IAAIg5B,WAAW/7B,QAAQ+C,KAAK,GAAG;YAC7CD,OAAOpG,KAAK;gBAAEpD,GAAGyiC,WAAWh5B;gBAAIxJ,GAAGwiC,WAAWh5B,IAAI;;AACnD;QAED,MAAMq5B,YAAY,IAAI7P,UAAU;YAC9BzpB;YACA9N,MAAMA,QAAQ;YACdgP,OAAOA,SAAShR,KAAKy8B;YACrB/iB,OAAOA,SAAS1Z,KAAK6iC,aAAalK;YAClCv4B;;QAGF,MAAMkO,MAAM86B,UAAU5P;QACtBx5B,KAAKojC,YAAYriB,IAAIzS;QACrB,OAAOA;AACR;IAEO,eAAA05B,CAAgB3lB,KAAqB+oB,QAAgBC,QAAgB1kC,OAAe+0B;QAC1F,KAAK17B,KAAK4nC,eAAe;YACvB5nC,KAAK8nC,gBAAgBzlB;YACrBriB,KAAK+nC,kBAAkBphC;YACvB3G,KAAK4nC,gBAAgB1yB,SAASC,cAAc;YAC5CnV,KAAK4nC,cAAc/uB,MAAM6B,SAAS;YAClC1a,KAAK4nC,cAAc/uB,MAAMtN,WAAW;YACpCvL,KAAK4nC,cAAc/uB,MAAMwB,UAAU;YACnCra,KAAK4nC,cAAc/uB,MAAM0B,MAAM8wB,SAAS;YACxCrrC,KAAK4nC,cAAc/uB,MAAM2B,OAAO4wB,SAAS;YACzCprC,KAAK4nC,cAAc0D,YAAap+B;gBAC9B,IAAIA,MAAM9L,QAAQ,SAAS;oBACzB8L,MAAMgf;oBACNlsB,KAAK6nC,QAAQ7nC,KAAK4nC,cAAczmC,OAAOnB,KAAK8nC,eAAe9nC,KAAK+nC;AACjE;gBACD,IAAI76B,MAAM9L,QAAQ,UAAU;oBAC1B8L,MAAMgf;oBACNlsB,KAAKwhC;AACN;AAAA;YAEH,IAAI9F,MAAM17B,KAAK4nC,cAAczmC,QAAQu6B;YACrCxmB,SAAS4I,KAAKzI,YAAYrV,KAAK4nC;YAE/Brb,YAAW;gBACTvsB,KAAK4nC,cAAciB;AAAO,gBACzB;AACJ,eAAM;YACL7oC,KAAKwhC;AACN;AACF;IAEO,eAAAA;;SACNn5B,KAAArI,KAAK4nC,mBAAe,QAAAv/B,YAAA,SAAA,IAAAA,GAAA2V;QACpBhe,KAAK4nC,gBAAgB;QACrB5nC,KAAK8nC,gBAAgB;QACrB9nC,KAAK+nC,kBAAkB;AACxB;IAEO,OAAAF,CACN0D,eACAhgC,UACA5E,OACA+S,OACA2vB,UACAzN,UACAx7B;QAEA,IAAImrC,eAAe;YACjB,MAAM7B,MAAM;YAGZ,IAAIL,YAAYA,WAAWK,SAAS9N,YAAYA,WAAW8N,MAAM;gBAC/D,MAAMrxB,OAAO;gBACb,IAAIpS,QAAQ;gBAEZ,MAAMsjC,WAAWvpC,KAAKwiC,QAAQp7B,YAAY6D,WAAWu+B;gBACrD,MAAMC,aAAaF,SAASxoC,IAAI,GAAG;gBAEnC,IAAI0oC,aAAaC,OAAOD,cAAcC,KAAK;oBACzCzjC,QAAQ,IAAIwjC;AACb;gBACD7N,WAAWyN,YAAYpjC,QAAQoS,QAAQ;AACxC;YAED,MAAMmzB,YAAY,IAAIhQ,UAAU;gBAC9BjwB,UAAU;oBAAEjF,GAAGiF,SAASjF;oBAAGC,GAAGgF,SAAShF;;gBACvCm1B,MAAM6P;gBACNvjC,UAAUrB;gBACVi1B;gBACAliB,OAAOA,SAAS1Z,KAAK6iC,aAAalK;gBAClCv4B;;YAGFJ,KAAKojC,YAAYriB,IAAIyqB,UAAUhS;AAChC;QAED,MAAMsP,UAAU9oC,KAAK6hC,kBAAkBC;QACvC,IAAIgH,QAAQ97B,SAAS,GAAG;YAEtB87B,QAAQ,GAAGhO;YACX96B,KAAK6hC,kBAAkBC,MAAM;AAC9B;QAED9hC,KAAKwhC;QAEL;AACD;IAEO,YAAAgG,CACNj8B,UACAyF,OACAC,QACAwrB,WACA/iB,OACAtZ;QAEA,KAAKmL,UAAU;QAEf,MAAMkgC,iBAAiB,IAAIlP,eAAe;YACxChxB;YACAyF;YACAC;YACAwrB,WAAWA,aAAaz8B,KAAKy8B;YAC7B/iB,OAAOA,SAAS1Z,KAAK6iC,aAAalK;YAClCv4B;;QAGF,MAAMkO,MAAMm9B,eAAejS;QAC3Bx5B,KAAKojC,YAAYriB,IAAIzS;QACrB,OAAOA;AACR;IAEO,UAAAm5B,CACNl8B,UACA6xB,QACAX,WACA/iB,OACAtZ;QAEA,KAAKmL,UAAU;QAEf,MAAMmgC,eAAe,IAAIzO,aAAa;YACpC1xB;YACA6xB;YACAX;YACA/iB,OAAOA,SAAS1Z,KAAK6iC,aAAalK;YAClCv4B;;QAGF,MAAMkO,MAAMo9B,aAAalS;QACzBx5B,KAAKojC,YAAYriB,IAAIzS;QACrB,OAAOA;AACR;IAEO,QAAAo5B,CACNn1B,OACAM,KACA6G,OACAtZ;QAEA,KAAKmS,UAAUM,KAAK;QAEpB,MAAM84B,aAAa,IAAIjO,WAAW;YAChCnrB;YACAM;YACA6G,OAAOA,SAAS1Z,KAAK6iC,aAAalK;YAClCv4B;;QAGF,MAAMkO,MAAMq9B,WAAWnS;QACvBx5B,KAAKojC,YAAYriB,IAAIzS;QACrB,OAAOA;AACR;IAEO,QAAAq5B,CACNp8B,UACAyF,OACAC,QACAwrB,WACA/iB,OACAtZ;QAEA,KAAKmL,aAAayF,UAAUC,QAAQ;QAEpC,MAAM26B,aAAa,IAAItN,WAAW;YAChC/yB;YACAyF;YACAC;YACAyI,OAAOA,SAAS1Z,KAAK6iC,aAAalK;YAClC8D,WAAWA,aAAaz8B,KAAKy8B;YAC7Br8B;;QAGF,MAAMkO,MAAMs9B,WAAWpS;QACvBx5B,KAAKojC,YAAYriB,IAAIzS;QACrB,OAAOA;AACR;IAEO,QAAAu8B,CACNt/B,UACAumB,KACA9gB,OACAC,QACA7Q;QAEA,KAAKmL,aAAayF,UAAUC,QAAQ;QAEpC,MAAM46B,aAAa,IAAI/N,WAAW;YAChCvyB;YACAumB;YACA9gB;YACAC;YACA7Q;;QAGF,MAAMkO,MAAMu9B,WAAWrS;QACvBx5B,KAAKojC,YAAYriB,IAAIzS;QACrB,OAAOA;AACR;;;AC7lCI,MAAMw9B,qBAAqB;;AAE5B,MAAOC,uBAAuBv7B;IAKlC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QACNzQ,KAAK4c,QAAQ;AACd;IAEQ,OAAAlL;QACPhB,MAAMgB;QACN1R,KAAK6S;QACL7S,KAAK8P,SAAS;QACd9P,KAAKgsC,aAAa;AACnB;IAEQ,KAAAz5B,CAAMjM,GAAWC;QACxB,MAAMoI,QAAQ3O,KAAKqH,YAAYuI,cAActJ,GAAGC;QAChDvG,KAAKgsC,aAAa,EAACr9B,MAAM,IAAIA,MAAM,IAAIA,MAAM;AAC9C;IAEQ,IAAAuE,CAAK5M,GAAWC;QACvB,IAAIvG,KAAKsS,YAAY;YACnB,MAAM3D,QAAQ3O,KAAKqH,YAAYuI,cAActJ,GAAGC;YAChDvG,KAAKgsC,WAAWtiC,KAAKiF,MAAM,IAAIA,MAAM,IAAIA,MAAM;YAC/C3O,KAAKisC;AACN;AACF;IAEQ,GAAAp5B;QACP,IAAI7S,KAAKgU,QAAQ;YACfhU,KAAKgU,OAAO5L;YACZpI,KAAKgsC,aAAa;YAClBhsC,KAAKgU,SAAS;AACf;AACF;IAEO,YAAAi4B;QACN,IAAIjsC,KAAKgU,QAAQ;YACf,MAAMhN,QAAQhH,KAAKqH,YAAYoH;YAC/BzH,MAAM6Z,aAAa7gB,KAAKgU;YACxBhN,MAAMoB;YACNpI,KAAKgU,OAAO5L;AACb;QAEDpI,KAAKgU,SAAShU,KAAKqU,sBAAsBy3B;QAEzC,MAAM3hC,YAAYnK,KAAKgU,OAAO3J;QAC9BF,UAAU+hC,eAAelsC,KAAKgsC,YAAY5jC;QAC1C+B,UAAU/B;AACX;;;ACpDI,MAAM+jC,qBAAqB;;AAE5B,MAAOC,uBAAuB57B;IAMlC,WAAAzQ,CAAY0Q;QACVC,MAAMD;QAHWzQ,KAAiBqsC,oBAAG;QAIrCrsC,KAAK4c,QAAQ;AACd;IAEQ,OAAAlL;;QACPhB,MAAMgB;SACNrJ,KAAArI,KAAKssC,aAAS,QAAAjkC,YAAA,SAAA,IAAAA,GAAA2V;QACdhe,KAAKssC,UAAU;AAChB;IAEO,YAAAC;;QACN,IAAIvsC,KAAKssC,WAAWtsC,KAAKssC,QAAQnrC,MAAMqrC,YAAY;YACjDxsC,KAAKisC;AACN;SACD5jC,KAAArI,KAAKssC,aAAS,QAAAjkC,YAAA,SAAA,IAAAA,GAAA2V;QACdhe,KAAKssC,UAAU;AAChB;IAEQ,KAAA/5B,CAAMjM,GAAWC,GAAW4N,WAAmBC;QACtD,KAAKpU,KAAKssC,SAAS;YACjBtsC,KAAKssC,UAAUp3B,SAASC,cAAc;YACtCnV,KAAKssC,QAAQzzB,MAAM6B,SAAS;YAC5B1a,KAAKssC,QAAQzzB,MAAMtN,WAAW;YAC9BvL,KAAKssC,QAAQzzB,MAAMwB,UAAU;YAC7Bra,KAAKssC,QAAQzzB,MAAM0B,MAAMnG,YAAY;YACrCpU,KAAKssC,QAAQzzB,MAAM2B,OAAOrG,YAAY;YACtCnU,KAAKssC,QAAQG,aAAcv/B;gBACzB,IAAIA,MAAM9L,QAAQ,SAAS;oBACzB8L,MAAMgf;oBACNlsB,KAAKusC;AACN;AAAA;YAEHr3B,SAAS4I,KAAKzI,YAAYrV,KAAKssC;YAE/BtsC,KAAK4c,QAAQ;YACb5c,KAAK2kB,WAAW3kB,KAAK4P,cAActJ,GAAGC,IAAIvG,KAAKqsC;YAC/CrsC,KAAKkR,gBAAgB;AACtB,eAAM;YACLlR,KAAKusC;AACN;AACF;IAEO,YAAAN;QACNjsC,KAAKgU,SAAShU,KAAKqU,sBAAsB83B;QACzC,MAAMhiC,YAAYnK,KAAKgU,OAAO3J;QAE9B,MAAMgE,OAAOrO,KAAKqH,YAAY4D;QAC9B,MAAMoX,MAAMriB,KAAK0P,QAAQrB,KAAKE;QAC9B,MAAMR,SAAS/N,KAAK0P,QAAQrB,KAAKG;QAEjC,MAAMk+B,aAAar+B,KAAK6e;QACxB,MAAMyf,SAAStqB,IAAIe,IAAIrV,QAAQuV;QAE/B,MAAMspB,OAAO5sC,KAAKoP,SAAS,EAAC,GAAK,GAAK;QACtC,MAAM+S,YAAYyqB,KAAK72B,YAAY22B;QAEnC,MAAMG,OAAO7sC,KAAKiP;QAClB49B,KAAKC,kBAAkB9sC,KAAKuP,WAAWo9B;QACvCxqB,UAAUpM,YAAY82B;QAEtB,MAAME,SAASx5B,KAAKy5B,OAAO7qB,UAAU5b,GAAG4b,UAAU7b;QAElD,MAAM+iC,WAAW;QACjB,IAAIC,YAAY;QAEhB,MAAMC,WAAWl7B,KAAKm7B;QACtB,MAAMC,aAAaF,SAASxoC,IAAI,GAAG;QACnC,MAAM2oC,MAAM;QACZ,MAAMD,aAAaC,OAAOD,cAAcC,MAAM;YAC5CJ,YAAY,IAAIG;AACjB;QAED,MAAMwD,WAAW9iC,UAAU+iC,WAAWltC,KAAKyP,UAAUzP,KAAK2kB,WAAW3kB,KAAKssC,QAAQnrC,MAAMqrC;QACxF,MAAMW,UAAUF,SAASG;QAEzBD,QAAQE,UAAUrtC,KAAKuP,WAAWo9B;QAClCQ,QAAQzS,YAAYqS;QACpBI,QAAQG,YAAYjE,WAAWC;QAC/B6D,QAAQ/kC;QACR6kC,SAAS7kC;QACT+B,UAAU/B;AACX;;;MC3GUmlC;IAAb,WAAAxtC;QAEYC,KAAA6iC,eAAe;YAAEx/B,GAAG;YAAKC,GAAG;YAAGC,GAAG;;QAErCvD,KAASy8B,YAAG;AAuNpB;IArNC,UAAAlrB,CAAW5Q,QAAgBkI,QAA2ByI;QACpDtR,KAAKwiC,UAAU7hC;AAChB;IAED,OAAA+Q,IAAkB;IAElB,WAAAsxB;QACE,OAAO,IAAI9iC,IAAkC,EAC3C,EAACu4B,WAAWmB,MAAMmS,kBAClB,EAACtT,WAAWkD,MAAMyQ;AAErB;IAED,YAAA3jC;QACE,KAAKzI,KAAKwiC,QAAQv7B,aAAa;QAE/B,MAAMG,YAAYpH,KAAKwiC,QAAQp7B;QAC/B,MAAMJ,QAAQI,UAAUqH;QACxBzH,MAAMwmC;QACNxmC,MAAMoB;QAENpI,KAAKwiC,QAAQh6B;AACd;IAED,cAAAy6B;QACE,OAAOjjC,KAAK6iC;AACb;IAED,cAAAp3B,CAAepI,GAAWC,GAAWC;QACnC,MAAMmW,QAAQ;YAAErW;YAAGC;YAAGC;;QACtBvD,KAAK6iC,eAAenpB;AACrB;IAED,iBAAAwpB,CAAkB7/B,IAAI,KAAKC,IAAI,GAAGC,IAAI;QACpC,KAAKvD,KAAKwiC,QAAQv7B,aAAa;QAE/B,MAAMG,YAAYpH,KAAKwiC,QAAQp7B;QAC/B,MAAMJ,QAAQI,UAAUqH;QACxB,MAAM1E,MAAM/C,MAAMymC;QAClB,OAAQ1jC,IAAIvC,QAAQuC,IAAItC,QAAQ;YAC9B,MAAMwC,WAAWF,IAAIG;YACrB,MAAMC,YAAYF,SAASI;YAC3B,MAAMiK,aAAanK,UAAUV;YAE7B,IAAI6K,eAAew3B,sBAAsBx3B,eAAe63B,oBAAoB;gBAC1EhiC,UAAUuc,SAASrjB,GAAGC,GAAGC;AAC1B;YAED4G,UAAU/B;AACX;QACD2B,IAAI3B;QAEJpI,KAAKwiC,QAAQh6B;AACd;IAED,YAAA66B,CAAaC;QACX,SAASoK,yBAAyBC;YAChC,OAAO,EAACA,QAAQrnC,GAAGqnC,QAAQpnC,GAAGonC,QAAQnnC;AACvC;QAED,SAASonC,WAAWpgC,QAAQmC;YAC1B,OAAOnC,OAAOqB,QAAQS,gBAAgBK;AACvC;QAED,KAAK3P,KAAKwiC,QAAQv7B,aAAa;QAE/B,MAAME,SAASnH,KAAKwiC,QAAQr7B;QAC5B,MAAMC,YAAYD,OAAOE;QACzB,MAAM4D,aAAa7D,UAAU6D;QAE7BjL,KAAKwiC,QAAQ/tB;QAEb,MAAM8uB,cAAcD,UAAUE,cAAcC,gBAAgB;YAAEpgC,GAAG;YAAKC,GAAG;YAAGC,GAAG;;QAC/EvD,KAAKyL,eAAe83B,YAAYlgC,GAAGkgC,YAAYjgC,GAAGigC,YAAYhgC;QAE9D,IAAI+/B,UAAUM,OAAO;YACnB,KAAK,MAAMgB,QAAQtB,UAAUM,OAAO;gBAClC,MAAM35B,WAAWjK,KAAKwiC,QAAQjuB,gBAAgBu3B;gBAC9C,MAAM3hC,YAAYF,SAASI;gBAE3B,MAAMwjC,aAAa;gBACnB,KAAK,MAAMl/B,SAASi2B,KAAK90B,QAAQ;oBAC/B+9B,WAAWnkC,KAAKiF,MAAMrI,GAAGqI,MAAMpI,GAAGoI,MAAMnI;AACzC;gBACD,MAAMymC,WAAW9iC,UAAU+hC,eAAe2B;gBAE1CZ,SAAS7kC;gBACT+B,UAAU/B;AACX;AACF;QAED,IAAIk7B,UAAUO,OAAO;YACnB,MAAMxhB,MAAMurB,WAAWzmC,QAAQ8D,WAAWsD;YAC1C,MAAMR,SAAS6/B,WAAWzmC,QAAQ8D,WAAWuD;YAC7C,MAAMs/B,SAASzrB,IAAIe,IAAIrV,QAAQuV;YAE/B,KAAK,MAAMoY,QAAQ4H,UAAUO,OAAO;gBAClC,MAAM55B,WAAWjK,KAAKwiC,QAAQjuB,gBAAgB43B;gBAC9C,MAAMhiC,YAAYF,SAASI;gBAE3B,MAAM4iC,WAAW9iC,UAAU+iC,WAAWQ,yBAAyBhS,KAAKnwB,WAAWmwB,KAAKA;gBAEpF,MAAMyR,UAAUF,SAASG;gBACzBD,QAAQE,UAAUK,yBAAyBI;gBAC3CX,QAAQzS,YAAYgB,KAAK/0B;gBACzBwmC,QAAQG,YAAY5R,KAAKiO;gBAEzBwD,QAAQ/kC;gBACR6kC,SAAS7kC;gBACT+B,UAAU/B;AACX;AACF;QAEDpI,KAAKwiC,QAAQh6B;AACd;IAED,YAAAm7B;QACE,SAASoK,2BAA2BxI;YAClC,OAAO;gBAAEj/B,GAAGi/B,MAAM;gBAAIh/B,GAAGg/B,MAAM;gBAAI/+B,GAAG++B,MAAM;;AAC7C;QAED,KAAKvlC,KAAKwiC,QAAQv7B,aAAa,OAAO;QAEtC,MAAME,SAASnH,KAAKwiC,QAAQr7B;QAC5B,MAAMC,YAAYD,OAAOE;QAEzB,MAAMi8B,YAAwB;YAC5BM,OAAO;YACPC,OAAO;;QAGT,MAAM78B,QAAQI,UAAUqH;QACxB,MAAM1E,MAAM/C,MAAMymC;QAClB,OAAQ1jC,IAAIvC,QAAQuC,IAAItC,QAAQ;YAC9B,MAAMwC,WAAWF,IAAIG;YACrB,MAAMC,YAAYF,SAASI;YAC3B,MAAMiK,aAAanK,UAAUV;YAE7B,MAAMukC,UAAU7jC,UAAU8jC;YAC1B,IAAID,QAAQxmC,QAAQ;gBAClB2C,UAAU/B;gBACV;AACD;YAED,MAAM8lC,aAAaF,QAAQG;YAE3B,IAAI75B,eAAew3B,oBAAoB;gBACrC,MAAMsC,cAAcF,WAAWG;gBAC/B,MAAMv+B,SAASs+B,YAAYrT;gBAE3B,MAAM6J,OAAc;oBAClB90B,QAAQ;;gBAEV,KAAK,MAAMnB,SAASmB,QAAQ;oBAC1B80B,KAAK90B,OAAOpG,KAAKqkC,2BAA2Bp/B;AAC7C;gBAED20B,UAAUM,MAAMl6B,KAAKk7B;gBACrBwJ,YAAYhmC;AACb,mBAAM,IAAIkM,eAAe63B,oBAAoB;gBAC5C,MAAMgB,UAAUe,WAAWd;gBAC3B,MAAM7hC,WAAW4hC,QAAQhR;gBAEzB,MAAMT,OAAc;oBAClBnwB,UAAUwiC,2BAA2BxiC;oBACrCmwB,MAAMyR,QAAQmB;oBACd3nC,OAAOwmC,QAAQ1S;oBACfkP,WAAWwD,QAAQoB;;gBAGrBjL,UAAUO,MAAMn6B,KAAKgyB;gBACrByR,QAAQ/kC;AACT;YAED+B,UAAU/B;AACX;QACD2B,IAAI3B;QAEJk7B,UAAUa,WAAW;YACnBliC,MAAMkF,OAAO0B,OAAOC,UAAU,cAAc;;QAG9Cw6B,UAAUE,gBAAgB;YACxBC,cAAczjC,KAAKijC;;QAGrBK,UAAUhjC,eAAc,IAAIgkC,MAAOC;QACnC,OAAOjB;AACR;IAED,QAAAkL;QACE,MAAM,IAAItc,MAAM;AACjB;IAED,YAAAsS,CAAaxiC,MAAc0L;QACzB,MAAM,IAAIwkB,MAAM;AACjB;IAED,UAAAyS;QACE,MAAM,IAAIzS,MAAM;AACjB;IAED,kBAAA+S;QACE,MAAM,IAAI/S,MAAM;AACjB;IAED,aAAAiT,CAAczwB;QACZ,MAAM,IAAIwd,MAAM;AACjB;IAED,aAAAmT;QACE,MAAM,IAAInT,MAAM;AACjB;;;MC/NUuc;IACJ,mBAAOC,CAAaC;QACzB,IAAIC;QACJ,QAAQD;UACN,KAAKnW,WAAWmB;YACdiV,SAAS5uC,KAAK6uC;YACd;;UAEF,KAAKrW,WAAWsW;YACdF,SAAS5uC,KAAK+uC;YACd;;UAEF;YACE,MAAM,IAAI7c,MAAM;;QAIpB,OAAO0c;AACR;IAEO,kBAAOC;QACb,OAAO,IAAIhO;AACZ;IAEO,sBAAOkO;QACb,OAAO,IAAIxB;AACZ;;;AC2BH,MAAMyB,oBAAoB;;AAE1B,MAAMC,UAAW9tC,SAAUA,UAAUS,aAAaT,UAAU;;AAOtD,MAAO+tC,eAAexiC;IAyC1B,WAAA3M,CACEovC,QACAzhC,SAA2F;;QAE3FgD;QAnCQ1Q,KAAeovC,kBAAG;QAOpBpvC,KAAOqvC,UAAG;QA6BhBrvC,KAAKsvC,UAAU5hC;QAEf1N,KAAKuvC,WAAW,IAAInrC,QAAQpE;QAE5BA,KAAKmvC,SAASA;QAEdnvC,KAAKwvC,iBAAiB;QACtBxvC,KAAKyvC,oBAAoB;QACzBzvC,KAAK0vC,kBAAkB;QACvB1vC,KAAK2vC,cAAc;QAEnB3vC,KAAK4uC,SAASH,cAAcC,cAAarmC,KAAAqF,OAAOihC,gBAAc,QAAAtmC,YAAA,IAAAA,KAAAmwB,WAAWmB;QAEzE35B,KAAK4vC,iBAAiB,IAAI1vC;QAC1BF,KAAK6vC,gBAAgB,OAAO1kB;QAC5BnrB,KAAK6vC,gBAAgB,SAASzlB;QAC9BpqB,KAAK6vC,gBAAgB,QAAQrkB;QAC7BxrB,KAAK6vC,gBAAgB,cAAcziB;QACnCptB,KAAK6vC,gBAAgB,uBAAuBniB;QAC5C1tB,KAAK6vC,gBAAgB,eAAelzB;QACpC3c,KAAK6vC,gBAAgB,qBAAqBzoB;QAC1CpnB,KAAK6vC,gBAAgB,qBAAqBxoB;QAC1CrnB,KAAK6vC,gBAAgB,qBAAqBvoB;QAC1CtnB,KAAK6vC,gBAAgB,QAAQ1wB;QAE7B,MAAM2wB,iBAAiB9vC,KAAK4uC,OAAO5L;QACnC8M,mBAAA,QAAAA,wBAAA,SAAA,IAAAA,eAAgB5uC,SAAQ,CAACC,OAAOC;YAC9BpB,KAAK6vC,gBAAgBzuC,KAAKD;AAAM;QAGlCnB,KAAKsR,eAAezL;QACpB7F,KAAK+vC,sBAAuB7iC,SAAiBlN,KAAK+B,KAAKmL;QAEvDlN,KAAKgwC,qBAAoBjW,KAAArsB,OAAOuiC,sBAAoB,QAAAlW,YAAA,IAAAA,KAAA;QACpD/5B,KAAKkwC,gBAAgB;QACrBlwC,KAAKmwC,oBAAoB;QAEzBnwC,KAAKowC,SAASpwC,KAAKowC,OAAO5+B,KAAKxR;QAC/BA,KAAK+d,SAAS/d,KAAK+d,OAAOvM,KAAKxR;AAChC;IAKD,WAAImM;QACF,OAAOnM,KAAKuvC;AACb;IAOD,kBAAIc;QACF,OAAOrwC,KAAKovC;AACb;IASD,SAAAE,CAAU5hC;QACR1N,KAAKovC,kBAAkB1hC,OAAO2iC,kBAAkB;QAChD,OAAOrwC;AACR;IAuBD,gBAAMuR,CAAW1I,QAA2BynC;QAC1CtwC,KAAK4M,iBAAiB,kBAAkBM,SAAUlN,KAAK+zB,YAAY7mB,MAAMjL;QAEzE,IAAI4G,OAAOgQ,MAAM7H,UAAU,MAAMnI,OAAOgQ,MAAM5H,WAAW,IAAI;YAC3DpI,OAAOgQ,MAAM7H,QAAQ;YACrBnI,OAAOgQ,MAAM5H,SAAS;AACvB;QACDpI,OAAO+5B,cAAc/pB,MAAM03B,cAAc;QACzC1nC,OAAOgQ,MAAM03B,cAAc;QAE3B1nC,OAAOmI,QAAQnI,OAAOm5B,cAAcn9B,OAAOgN;QAC3ChJ,OAAOoI,SAASpI,OAAOo5B,eAAep9B,OAAOgN;QAE7C,MAAM5K,oBAAyBmrB,gBAAgBpyB,KAAKqwC,iBAAiBr+B;YACnE,OAAMw+B,QAAEA,QAAMC,WAAEA,WAASC,OAAEA,OAAKC,kBAAEA,oBAAqB3+B;YACvD,MAAM9E,QAAQ;gBAAEsjC;gBAAQC;gBAAWC;gBAAOC;gBAAkB3uC,MAAM;;YAClEsuC,uBAAAA,oBAAU,SAAA,IAAVA,WAAapjC;AAAM;QAGrBlN,KAAKiH,cAAcA;QACnBjH,KAAKiH,YAAY4B,SAASA;QAC1B7I,KAAKiH,YAAYioC,OAAO7W;QAExBr4B,KAAK6I,SAASA;QACd7I,KAAKsR,aAAapQ,SAASoF,KAAMuC,OAAO+D,iBAAiBtG,GAAGtG,KAAK+vC;QAEjE/vC,KAAK4uC,OAAOr9B,WAAWvR,MAAM6I,QAAQ7I,KAAKsR;QAE1CtR,KAAK4wC,kBAAkB,IAAIC,eAAe7wC,KAAK+d;QAC/C/d,KAAK4wC,gBAAgBE,QAAQjoC,OAAO+5B;QACpC5iC,KAAK+d;QAEL/d,KAAKyvC,oBAAoB,IAAI3jB,mBAAmB9rB;QAChDA,KAAKyvC,kBAAkB9b,OAAO;QAC9B3zB,KAAKyvC,kBAAkBl+B;QAEvBvR,KAAK0vC,kBAAkB,IAAIzgB,eAAejvB;QAC1CA,KAAK0vC,gBAAgBn+B;QAErBvR,KAAK8zB,yBAAyB;QAC9B9zB,KAAK+zB;QAEL/zB,KAAK2vC,cAAclb,YAAYC;QAC/B10B,KAAKowC,OAAOpwC,KAAK2vC;QAEjB,OAAO3vC;AACR;IAMD,OAAA0R;;QACE1R,KAAK+wC;QACL/wC,KAAKoL,UAAU;YAAEpJ,MAAM;;QAEvB,IAAIhC,KAAKqvC,SAASzuB,qBAAqB5gB,KAAKqvC;QAC5CrvC,KAAKqvC,UAAU;QAEfrvC,KAAKyB,iBAAiB;SAEtB4G,KAAArI,KAAKyvC,uBAAmB,QAAApnC,YAAA,SAAA,IAAAA,GAAAqJ;SACxBqoB,KAAA/5B,KAAK0vC,qBAAiB,QAAA3V,YAAA,SAAA,IAAAA,GAAAroB;QAEtB1R,KAAKiN;SAEL+uB,KAAAh8B,KAAK4wC,qBAAiB,QAAA5U,YAAA,SAAA,IAAAA,GAAAgV;QACtBhxC,KAAK4wC,kBAAkBhvC;QAEvB5B,KAAK4uC,OAAOl9B;QAEZ1R,KAAKsR,aAAapQ,SAASoF;YAAM,IAAA+B;YAAA,QAAAA,KAAArI,KAAK6I,YAAQ,QAAAR,YAAA,SAAA,IAAAA,GAAAyE,oBAAoBxG,GAAGtG,KAAK+vC;AAAoB;QAC9F/vC,KAAK6I,SAASjH;SAEd86B,KAAA18B,KAAKiH,iBAAW,QAAAy1B,YAAA,SAAA,IAAAA,GAAEr1B,YAAYuU;QAC9B5b,KAAKiH,cAAcrF;QAEnB,OAAO5B;AACR;IAKD,aAAAixC;QACE,SAASjxC,KAAKiH;AACf;IAIO,MAAAmpC,CAAOjd;;QACbnzB,KAAKqvC,UAAUpuB,sBAAsBjhB,KAAKowC;QAE1C,KAAKpwC,KAAKiH,aAAa;QAEvB,IAAIjH,KAAKmwC,mBAAmB;QAE5B,MAAM/oC,YAAYpH,KAAKiH,YAAYI;QACnC,IAAID,UAAU8pC,wBAAwBlxC,KAAKkwC,eAAe;YACxD9oC,UAAUoB;aACVH,KAAArI,KAAKwvC,oBAAgB,QAAAnnC,YAAA,SAAA,IAAAA,GAAAsM;YACrB3U,KAAKkwC,iBAAiB9oC,UAAU0J,kBAAkBqgC;YAElD,MAAMC,aAAaje,OAAOnzB,KAAK2vC,eAAe;YAC9C3vC,KAAK2vC,cAAcxc;YACnBnzB,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAUmxB;gBAAMie;;AACxC;AACF;IAEM,MAAArzB;QACL,KAAK/d,KAAKiH,aAAa,OAAOjH;QAE9B,OAAMgiC,aAAEA,aAAWC,cAAEA,gBAAiBjiC,KAAK6I;QAC3C7I,KAAK6I,OAAOmI,QAAQgxB,cAAcn9B,OAAOgN;QACzC7R,KAAK6I,OAAOoI,SAASgxB,eAAep9B,OAAOgN;QAE3C,MAAMzK,YAAYpH,KAAKiH,YAAYI;QACnCD,UAAU2W,OAAO,GAAG/d,KAAK6I,OAAOmI,OAAOhR,KAAK6I,OAAOoI,QAAQ;QAE3DjR,KAAKwI,OAAO;QACZxI,KAAKoL,UAAU;YAAEpJ,MAAM;YAAUgP,OAAOgxB;YAAa/wB,QAAQgxB;;QAE7D,OAAOjiC;AACR;IAaD,MAAAwI,CAAOyD,QAAQ;;QACb,IAAIjM,KAAKgwC,mBAAmB;YAC1B,IAAI/jC,OAAO;iBACT5D,KAAArI,KAAKoH,iBAAa,QAAAiB,YAAA,SAAA,IAAAA,GAAAG;iBAClBuxB,KAAA/5B,KAAK0oB,qBAAiB,QAAAqR,YAAA,SAAA,IAAAA,GAAAplB;AACvB,mBAAM;gBACL3U,KAAKkwC,gBAAgB;AACtB;AACF;QACDlwC,KAAKoL,UAAU;YAAEpJ,MAAM;YAAUC,MAAMgK;;AACxC;IAWO,mBAAAolC,CAAoBC,4BAA4B;QACtD,OAAO,IAAI5f,SAAc,CAACC,SAASC;YACjCrF,YAAW;;gBACT;qBACElkB,KAAArI,KAAKoH,qDAAaoB,OAAO8oC;qBACzBvX,KAAA/5B,KAAK0oB,qBAAiB,QAAAqR,YAAA,SAAA,IAAAA,GAAAplB;oBACtBgd;AACD,kBAAC,OAAOqO;oBACPt+B,QAAQwD,MAAM86B;oBACdpO;AACD;AAAA,gBACA;AAAE;AAER;IAED,iBAAM2f,CAAYD,4BAA4B,IAAIE,yBAAyB;QACzExxC,KAAKmwC,oBAAoB;QACzB,MAAMt/B,SAAS7Q,KAAKoH,YAAY0J;QAChC;YACE,KAAK,IAAI2gC,iBAAiB,IAAI5gC,OAAOsgC,aAAaM,iBAAiBD,wBAAwBC,kBAAkB;sBACrGzxC,KAAKqxC,oBAAoBC;AAChC;kBACKtxC,KAAKqxC,oBAAoBC;AAChC,UAAC,OAAOtR;YACPt+B,QAAQwD,MAAM86B;AACf,UAAS;YACRhgC,KAAKmwC,oBAAoB;AAC1B;AACF;IAMD,MAAAhpC;QACE,OAAOnH,KAAKiH;AACb;IAMD,SAAAG;;QACE,aAAOpH,KAAKiH,iBAAa,QAAAoB,YAAA,SAAA,IAAAA,GAAAhB;AAC1B;IAID,wBAAAysB,CAAyB4d;QACvB,KAAK1xC,KAAKiH,aAAa,OAAOjH;QAE9B,MAAMmH,SAASnH,KAAKmH;QACpB,MAAMC,YAAYD,OAAOE;QAEzB,MAAMwJ,SAASzJ,UAAU0J;QACzB,IAAID,OAAOhH,UAAU,OAAO7J;QAE5B,MAAMqO,OAAOwC,OAAO8gC;QAGpBtjC,KAAKujC,sBAAsB,MAAMzqC,OAAO0qC,oBAAoBC;QAC5DzjC,KAAK0jC,4BAA4B;QAEjC,IAAIC;QACJ;YACEA,gBAAgB5qC,UAAU6qC,gBAAgB;AAC3C,UAAC,OAAOjS;YAIPgS,gBAAgB5qC,UAAU8qC,kBAAkB;YAE5C,MAAM3rB,WAAW,IAAIpf,OAAOqf,aAAa,IAAI,IAAI;YACjD,MAAM2rB,aAAa/qC,UAAU6qC,gBAAgB;YAE7C,MAAMG,iBAAiBJ,cAAc3nC;YACrC+nC,eAAeC,SAASF;YACxBC,eAAeE,eAAenrC,OAAOorC,mBAAmBC,gBAAgB,GAAGrrC,OAAOsrC,sBAAsBC;YAExGN,eAAeE,eAAenrC,OAAOorC,mBAAmBI,YAAY,GAAGxrC,OAAOsrC,sBAAsBC;YACpGN,eAAeQ,gBAAgBzrC,OAAOorC,mBAAmBM,kBAAkB,IAAI1rC,OAAOsrC,sBAAsBC;YAC5GN,eAAeE,eAAenrC,OAAOorC,mBAAmBO,aAAa,GAAG3rC,OAAOsrC,sBAAsBC;YACrGN,eAAeE,eAAenrC,OAAOorC,mBAAmBQ,gBAAgB,GAAG5rC,OAAOsrC,sBAAsBC;YACxGN,eAAeY,eACb7rC,OAAOorC,mBAAmBU,iBAC1B1sB,UACApf,OAAOsrC,sBAAsBC;YAE/BN,eAAehqC;AAChB;QAEDiG,KAAK6kC,cAAclB;QAEnB3jC,KAAKjG;QACLyI,OAAOzI;QAEP,OAAOpI;AACR;IAED,WAAA+zB,CAAY5nB,UAAoBnM,KAAKmM;QACnC,KAAKnM,KAAKiH,aAAa,OAAOjH;QAE9B,MAAMmH,SAASnH,KAAKmH;QACpB,MAAMC,YAAYD,OAAOE;QAEzB,MAAMwJ,SAASzJ,UAAU0J;QACzB,IAAID,OAAOhH,UAAU,OAAO7J;QAE5B,IAAImM,QAAQ9J,YAAY+E,UAAU2Y,gBAAgB;YAChD3Y,UAAU4Y,aAAa7T,QAAQ9J;AAChC;QACD,IAAI8J,QAAQ7J,oBAAoB8E,UAAUiF,sBAAsB;YAC9DjF,UAAUkF,mBAAmBH,QAAQ7J;AACtC;QACD,IAAI6J,QAAQ5J,iBAAiB6E,UAAU+rC,oBAAoB;YACzD/rC,UAAU+rC,qBAAqBhnC,QAAQ5J;YACvC6E,UAAUgsC,cAAc;AACzB;QAED,IAAIjnC,QAAQ1J,YAAY2E,UAAU3E,SAAS;YACzC2E,UAAU3E,UAAU0J,QAAQ1J;YAE5B,MAAMoG,SAAS1B,OAAO0B;YACtBgI,OAAOE,WAAW,EAAC,GAAGlI,OAAOm5B,aAAan5B,OAAOo5B,cAAc;AAChE;QAED,IAAI91B,QAAQ3J,iBAAiB4E,UAAU5E,cAAc;YACnD4E,UAAU5E,eAAe2J,QAAQ3J;AAClC;QAED,IAAI2J,QAAQvJ,qBAAqBiO,OAAOwiC,cAAclsC,OAAOmsC,cAAcC,cAAc;YACvF1iC,OAAO2iC,cAAcrsC,OAAOmsC,cAAcC,aAAapnC,QAAQvJ;YAC/DiO,OAAO2iC,cAAcrsC,OAAOmsC,cAAcG,oBAAoB;YAC9D5iC,OAAO+hC,gBAAgBzrC,OAAOmsC,cAAcI,aAAa;YACzD7iC,OAAOyhC,eAAenrC,OAAOmsC,cAAcK,YAAY;YACvD9iC,OAAO+hC,gBAAgBzrC,OAAOmsC,cAAcM,YAAY;YACxD/iC,OAAOyhC,eAAenrC,OAAOmsC,cAAcO,iBAAiB;YAE5D,MAAM5oC,aAAa7D,UAAU6D;YAC7BA,WAAW6oC,eAAe3nC,QAAQvJ;YAClCqI,WAAW7C;AACZ;QAED,IAAI6mC,QAAQ9iC,QAAQpI,YAAY;YAC9B,MAAMkH,aAAa4F,OAAO8gC;YAE1B,MAAMK,gBAAgB5qC,UAAU6qC,gBAAgB;YAChD,MAAMG,iBAAiBJ,cAAc3nC;YAErC+nC,eAAeE,eACbnrC,OAAOorC,mBAAmBI,YAC1BxmC,QAAQpI,YAAY,IAAI,GACxBoD,OAAOsrC,sBAAsBC;YAG/BznC,WAAWioC,cAAclB;YAEzBI,eAAehqC;YACf4pC,cAAc5pC;YACd6C,WAAW7C;AACZ;QAEDyI,OAAOzI;QAEPpI,KAAK+zC,wBAAwB5nC;QAC7BnM,KAAKwI;QAEL,OAAOxI;AACR;IAED,uBAAA+zC,CAAwB5nC,UAAoBnM,KAAKmM;QAC/C,KAAKnM,KAAKiH,aAAa,OAAOjH;QAE9B,MAAM0N,SAASvB,QAAQtI,wBAAwBsI,UAAU/H,QAAQK;QAEjE,MAAM0C,SAASnH,KAAKmH;QACpB,MAAMC,YAAYD,OAAOE;QACzB,OAAM2sC,OAAEA,OAAKC,iBAAEA,mBAAoB9sC;QAEnC,MAAM+sC,mBAAmB9sC,UAAU+sC,mBAAmB;QACtD,MAAMC,oBAAoBF,iBAAiB7pC;QAE3C,IAAI4kC,QAAQvhC,OAAOlK,aAAa;YAC9B,MAAMkW,QAAQ,IAAIu6B,gBAAgBvmC,OAAOlK,WAAWH,GAAGqK,OAAOlK,WAAWF,GAAGoK,OAAOlK,WAAWD;YAC9F6wC,kBAAkBC,cAAcL,MAAMM,IAAInzC,QAAQ6yC,MAAMO,OAAOpzC,OAAOuY;YACtEA,MAAMtR;AACP;QAED,IAAI6mC,QAAQvhC,OAAO/J,eAAe;YAChCywC,kBAAkBI,mBAAmBR,MAAMO,OAAOpzC,OAAOuM,OAAO/J;AACjE;QACD,IAAIsrC,QAAQvhC,OAAO9J,oBAAoB;YACrCwwC,kBAAkBK,qBAAqBT,MAAMM,IAAInzC,QAAQ6yC,MAAMO,OAAOpzC,OAAOuM,OAAO9J;AACrF;QAED,IAAIqrC,QAAQvhC,OAAOtK,aAAa;YAC9B,MAAMsW,QAAQ,IAAIu6B,gBAAgBvmC,OAAOtK,WAAWC,GAAGqK,OAAOtK,WAAWE,GAAGoK,OAAOtK,WAAWG;YAC9F6wC,kBAAkBM,cAChBV,MAAMO,OAAOpzC,QAAQ6yC,MAAMM,IAAInzC,QAAQ6yC,MAAMW,IAAIxzC,QAAQ6yC,MAAMY,OAAOzzC,OACtEuY;YAEFA,MAAMtR;AACP;QAED,IAAI6mC,QAAQvhC,OAAOjK,kBAAkB;YACnC2wC,kBAAkBS,mBAChBb,MAAMW,IAAIxzC,QAAQ6yC,MAAMY,OAAOzzC,QAAQ6yC,MAAMO,OAAOpzC,QAAQ6yC,MAAMM,IAAInzC,OACtEuM,OAAOjK;AAEV;QACD,IAAIwrC,QAAQvhC,OAAOhK,eAAe;YAChC,MAAMoxC,cAAc7F,QAAQvhC,OAAOjK,mBAAmB,OAAOiK,OAAOjK;YACpE2wC,kBAAkBS,mBAAmBb,MAAMY,OAAOzzC,QAAQ6yC,MAAMO,OAAOpzC,OAAOuM,OAAOhK,gBAAgBoxC;AACtG;QAED,MAAMjkC,SAASzJ,UAAU0J;QACzB,KAAKD,OAAOhH,UAAU;YACpB,MAAMhB,SAAS1B,OAAO0B;YAEtBgI,OAAOE,WAAW,EAAC,GAAGlI,OAAOm5B,aAAan5B,OAAOo5B,cAAc;YAC/DpxB,OAAOzI;AACR;QAED,OAAOpI;AACR;IAoBD,YAAIuB;QACF,OAAO,KAAIvB,KAAK4vC,eAAevmC;AAChC;IAQM,eAAAwmC,CAAgBlc,MAActoB;QACnCrL,KAAK4vC,eAAepvC,IAAImzB,MAAMtoB;AAC/B;IAKD,aAAAqd;QACE,OAAO1oB,KAAKwvC;AACb;IAaD,gBAAA/tC,CAAiBkyB;;QACf,WAAI3zB,KAAKwvC,oBAAgB,QAAAnnC,YAAA,SAAA,IAAAA,GAAAsrB,UAASA,MAAM;YACtC,IAAI3zB,KAAKwvC,gBAAgB;gBACvBxvC,KAAKwvC,eAAe99B;gBACpB1R,KAAKwvC,iBAAiB;AACvB;YACD,MAAMuF,cAAc/0C,KAAK4vC,eAAe7uC,IAAI4yB;YAC5C,IAAIohB,aAAa;gBACf/0C,KAAKwvC,iBAAiB,IAAIuF,YAAY/0C;gBACtCA,KAAKwvC,eAAe7b,OAAOA;gBAC3B3zB,KAAKwvC,eAAej+B;AACrB;YACD,MAAM1I,SAAS7I,KAAK6I;YACpB,IAAIA,QAAQ;gBACVA,OAAOk3B,YAAYl3B,OAAOk3B,UACvBzH,MAAM,KACNhvB,QAAQhD,MAAOA,EAAE+6B,WAAW,iBAC5B/3B,QAAQhD,KAAMA,IACdyxB,OAAO,cAAcpE,KAAK2N,iBAC1BC,KAAK;AACT;YACDvhC,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAuBC,MAAM0xB;;AACrD;QACD,OAAO3zB,KAAKwvC;AACb;IAKD,kBAAAwF;QACE,MAAM3pC,UAAUrL,KAAKwvC;QACrB,IAAInkC,SAAS;YACXrL,KAAKyB,iBAAiB;YACtBzB,KAAKyB,iBAAiB4J,QAAQsoB;AAC/B;AACF;IAKD,WAAAjrB;QACE,KAAK1I,KAAKiH,aAAa;QAEvB,MAAMG,YAAYpH,KAAKoH;QACvB,MAAM6D,aAAa7D,UAAU6D;QAC7BA,WAAWgqC;QACXhqC,WAAW7C;QAEXpI,KAAKwI;AACN;IAKD,YAAAC;QACEzI,KAAK4uC,OAAOnmC;AACb;IAKD,WAAAgM;QACE,KAAKzU,KAAKiH,aAAa;QAEvB,MAAMG,YAAYpH,KAAKoH;QACvB,MAAM6D,aAAa7D,UAAU6D;QAE7B,IAAIiqC,cAAc9tC,UAAU+tC,cAAcnG;QAC1C,KAAKkG,aAAa;YAChB,MAAME,eAAehuC,UAAUqH;YAC/B,MAAM4mC,UAAUjuC,UAAU0J;YAE1BokC,cAAcG,QAAQC,WAAWtG,mBAAmB;YACpDkG,YAAYK,SAASH;YAErBnqC,WAAWuqC,WAAWN;YACtBG,QAAQI,QAAQP;AACjB;QAEDA,YAAY3mC,eAAetD,WAAWsD;QACtC2mC,YAAY1mC,aAAavD,WAAWuD;QACpC0mC,YAAYlnC,WAAW/C,WAAW+C;QAClCknC,YAAYjnC,iBAAiBhD,WAAWgD;QACxCinC,YAAYhnC,kBAAkBjD,WAAWiD;QAEzC,MAAMwnC,WAAWR,YAAYS;QAC7BT,YAAYU,YAAYF,SAASr3B,WAAWq3B,SAASn3B;QACrD22B,YAAYjtB,YAAYhd,WAAWgd;QAEnCjoB,KAAKwI;QAEL,OAAO0sC;AACR;IAKD,IAAAW;QACE,KAAK71C,KAAKiH,aAAa,OAAO;QAE9B,MAAMG,YAAYpH,KAAKoH;QACvB,MAAM6I,MAAM7I,UAAU8I;QACtB,MAAMC,MAAMF,IAAIE;QAChB,MAAMC,MAAMH,IAAIG;QAChB,MAAM0lC,YAAY1lC,IAAI,KAAKD,IAAI;QAC/B,OAAO2lC,cAAc;AAGtB;IAKD,WAAAnsC;QACE,OAAO3J,KAAKa,eAAe;AAC5B;IAaD,WAAAsK,CAAY3B;QACVxJ,KAAKa,eAAe,eAAe2I;AACpC;IAUD,oBAAMusC,CAAe/uC;;QACnB,KAAKhH,KAAKiH,aAAa,OAAOjH;QAC9B,KAAKA,KAAKmvC,QAAQ,OAAOnvC;QAEzB,MAAM6yB,kBAAkB,IAAIC;SAC5BzqB,KAAArI,KAAKg2C,mCAA+B,QAAA3tC,YAAA,SAAA,IAAAA,GAAA6uB;QACpCl3B,KAAKg2C,gCAAgCnjB;QAErC,IAAIojB,aAAoB;cAClBjvC,MACHkvC,cAAcrjB,gBAAgBY,QAC9BnB,MAAMrwB,QAAUg0C,aAAah0C,KAAKg0C,aAClC9d,OAAO6H,KAAMt+B,QAAQwD,MAAM,iCAAiC86B;QAE/D,KAAK,MAAMtI,QAAQue,YAAY;kBACvBj2C,KAAKmvC,OACRgH,aAAaze,KAAKt3B,IAAIwB,WAAWixB,gBAAgBY,QACjDnB,MAAMiB;gBAAe,IAAAlrB;gBAAC,QAAAA,KAAArI,KAAKiH,iBAAW,QAAAoB,YAAA,SAAA,IAAAA,GAAEhB,YAAY+uC,gBAAgB1e,KAAK/D,MAAM,IAAIE,WAAWN;AAAa,gBAC3G4E,OAAO6H,KAAMt+B,QAAQwD,MAAM,8BAA8BwyB,KAAK/D,SAASqM;AAC3E;QAED,OAAOhgC;AACR;IAID,yBAAAq2C,CAA0BrvC;QACxBhH,KAAKa,eAAe,uBAAuBmG;AAC5C;IAED,uBAAAsvC,CAAwBnqC,UAAUnM,KAAKmM;QACrC,KAAKnM,KAAKiH,aAAa;QAEvB,MAAME,SAASnH,KAAKmH;QACpB,MAAMC,YAAYD,OAAOE;QAEzB,MAAMwJ,SAASzJ,UAAU0J;QACzB,IAAIm+B,QAAQ9iC,QAAQrI,aAAa;YAC/B+M,OAAO2iC,cAAcrsC,OAAOmsC,cAAciD,uBAAuBpqC,QAAQrI;AAC1E;QAID+M,OAAOzI;QAEPpI,KAAKwI;AACN;IAwBD,UAAMguC,CAAK9e;QACT,KAAK13B,KAAKiH,aAAa,OAAOjH;QAE9BA,KAAK+wC;QACL/wC,KAAK4b;QAEL5b,KAAKoL,UAAU;YAAEpJ,MAAM;YAAQ01B;YAAM1wB,OAAO0wB;;QAE5C,IAAI1wB,QAA2BpF;QAC/B,IAAI81B,MAAM;YACR,MAAM+e,eAAgB/e,KAAKnuB,eAAgB;YAC3CvC,QAAQyvC,OAAOhQ,MAAMz/B,SAAiBA,MAAM0vC,aAAYD,OAAO;AAChE;QACD,KAAKzvC,OAAO,MAAM,IAAIkrB,MAAM;QAE5B,MAAMykB,kBAAkB,IAAIvyC;QAC5BuyC,gBAAgB10C,OAAOjC,KAAKmM,QAAQlK;QACpC,IAAIy1B,KAAK11B,SAAS,WAAW20C,gBAAgB7zC,mBAAmB;YAC9DpB,QAAQk1C,IAAI;YACZD,gBAAgB7zC,oBAAoB;AACrC;QAED,MAAM+zC,gBAAgB,IAAIze;QAC1B,MAAM0e,SAASD,cAAcxe,OAAOr4B,MAAMgH,OAAO2vC;cAE3C32C,KAAK+1C,eAAe/uC;cACpB8vC,OAAOnkB;QAEb,IAAI3yB,KAAKiH,aAAa;YACpBjH,KAAKq2C,0BAA0BrvC;YAC/BhH,KAAKs2C;AACN;QAED,OAAOt2C;AACR;IAgBD,WAAA+2C,CAAYC;QACV,KAAKh3C,KAAKiH,aAAa,OAAOjH;QAE9BA,KAAK+wC;QACL/wC,KAAK4b;QAEL5b,KAAKoL,UAAU;YAAEpJ,MAAM;YAAQg1C;;QAE/B;YACEh3C,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAiBg1C;;YAExC,MAAM7vC,SAASnH,KAAKmH;YACpB,MAAMC,YAAYD,OAAOE;YAEzB,MAAMpF,OAAO+0C,kBAAkBnjB,aAAamjB,SAAS,IAAInjB,WAAWmjB;YACpE5vC,UAAU6vC,UAAUh1C;YAEpBjC,KAAK8zB,yBAAyB;YAC9B9zB,KAAK+zB;YACL/zB,KAAK+d;YAEL/d,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAoBC,MAAM;gBAAG+0C;;YACpDh3C,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAiBC;gBAAM+0C;;YAC9Ch3C,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAeg1C;;AACvC,UAAC,OAAO9xC;YACPlF,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAiBC,MAAMiD;gBAAO8xC;;YACrD,MAAM9xC;AACP;QAED,OAAOlF;AACR;IAgBD,YAAAk3C,CAAaF;QACX,KAAKh3C,KAAKiH,aAAa,OAAOjH;QAE9BA,KAAK+wC;QACL/wC,KAAK4b;QAEL5b,KAAKoL,UAAU;YAAEpJ,MAAM;YAAQg1C;;QAE/B;YACEh3C,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAiBg1C;;YAExC,MAAM7vC,SAASnH,KAAKmH;YACpB,MAAMC,YAAYD,OAAOE;YAEzB,MAAMpF,OAAO+0C,kBAAkBnjB,aAAamjB,SAAS,IAAInjB,WAAWmjB;YACpE5vC,UAAU8sB,UAAUjyB;YAEpBjC,KAAK8zB,yBAAyB;YAC9B9zB,KAAK+zB;YACL/zB,KAAK+d;YAEL/d,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAoBC,MAAM;gBAAG+0C;;YACpDh3C,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAiBC;gBAAM+0C;;YAC9Ch3C,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAeg1C;;AACvC,UAAC,OAAO9xC;YACPlF,KAAKoL,UAAU;gBAAEpJ,MAAM;gBAAiBC,MAAMiD;gBAAO8xC;;YACrD,MAAM9xC;AACP;QAED,OAAOlF;AACR;IAKD,MAAA+wC;;SACE1oC,KAAArI,KAAKg2C,mCAA+B,QAAA3tC,YAAA,SAAA,IAAAA,GAAA6uB;QACpCl3B,KAAKg2C,gCAAgCp0C;SAErCm4B,KAAA/5B,KAAKkzB,sBAAkB,QAAA6G,YAAA,SAAA,IAAAA,GAAA7C;QACvBl3B,KAAKkzB,mBAAmBtxB;SAExBo6B,KAAAh8B,KAAKk2B,mCAA+B,QAAA8F,YAAA,SAAA,IAAAA,GAAA96B,SAASi2C,cAAeA,WAAWjgB;QACvEl3B,KAAKk2B,gCAAgCt0B;QAErC5B,KAAKoL,UAAU;YAAEpJ,MAAM;;QAEvB,OAAOhC;AACR;IAKD,KAAA4b;QACE,KAAK5b,KAAKiH,aAAa,OAAOjH;QAE9B,MAAMmH,SAASnH,KAAKmH;QACpB,MAAMC,YAAYD,OAAOE;QAEzBrH,KAAKyI;QAELrB,UAAUwU;QACVxU,UAAUgwC;QAEVp3C,KAAK8zB,yBAAyB;QAC9B9zB,KAAK+zB;QACL/zB,KAAK+d;QAEL/d,KAAKoL,UAAU;YAAEpJ,MAAM;;QAEvB,OAAOhC;AACR;IAOD,cAAAijC;QACE,OAAOjjC,KAAK4uC,OAAO3L;AACpB;IASD,cAAAx3B,CAAepI,IAAI,KAAKC,IAAI,GAAGC,IAAI;QACjCvD,KAAK4uC,OAAOnjC,eAAepI,GAAGC,GAAGC;QACjC,MAAMmW,QAAQ;YAAErW;YAAGC;YAAGC;;QACtBvD,KAAKoL,UAAU;YAAEpJ,MAAM;YAAqBC,MAAMyX;;AACnD;IASD,iBAAAwpB,CAAkB7/B,IAAI,KAAKC,IAAI,GAAGC,IAAI;QACpCvD,KAAK4uC,OAAO1L,kBAAkB7/B,GAAGC,GAAGC;AACrC;IAKD,eAAAgR,CAAgBD;QACd,KAAKtU,KAAKiH,aAAa,OAAO;QAE9BjH,KAAKyU;QAEL,MAAMrN,YAAYpH,KAAKoH;QACvB,MAAMJ,QAAQI,UAAUqH;QACxB,MAAMxE,WAAWjD,MAAM4E,aAAa0I;QACpC,MAAMnK,YAAYF,SAASI;QAE3B,MAAMqP,QAAQ1Z,KAAKijC;QACnB94B,UAAUuc,SAAShN,MAAMrW,GAAGqW,MAAMpW,GAAGoW,MAAMnW;QAC3C4G,UAAU0c,cAAc;QACxB1c,UAAU/B;QAEVpI,KAAKwI;QAEL,OAAOyB;AACR;IASD,aAAAotC,CAAc/T;QACZtjC,KAAKs3C,4BAA4BhU,UAAUiU;QAC3Cv3C,KAAKw3C,kBAAkBlU,UAAUmU;QACjCz3C,KAAK4uC,OAAOvL,aAAaC;AAC1B;IAOD,eAAAoU;QACE,MAAMC,KAAK33C,KAAK4uC,OAAOjL;QACvBgU,GAAGJ,oBAAoBv3C,KAAK43C;QAC5BD,GAAGF,kBAAkBz3C,KAAK63C;QAE1B,OAAOF;AACR;IAEO,mBAAArS,CAAoBC;QAC1B,OAAO;YAAEj/B,GAAGi/B,MAAM;YAAIh/B,GAAGg/B,MAAM;YAAI/+B,GAAG++B,MAAM;;AAC7C;IAEO,wBAAAmI,CAAyBC;QAC/B,OAAO,EAACA,QAAQrnC,GAAGqnC,QAAQpnC,GAAGonC,QAAQnnC;AACvC;IAEO,2BAAAoxC;QACN,MAAMxwC,YAAYpH,KAAKoH;QACvB,MAAM6D,aAAa7D,UAAU6D;QAE7B,OAAO;YACL6sC,YAAY93C,KAAKslC,oBAAoBr6B,WAAWsD;YAChD4T,WAAWniB,KAAKslC,oBAAoBr6B,WAAWuD;YAC/CupC,WAAW/3C,KAAKslC,oBAAoBr6B,WAAW+C;YAC/CgqC,aAAa/sC,WAAWgD;YACxBgqC,cAAchtC,WAAWiD;;AAE5B;IAEO,2BAAAopC,CAA4BY;QAClC,MAAM9wC,YAAYpH,KAAKoH;QACvB,MAAM6D,aAAa7D,UAAU6D;QAE7BjL,KAAKg1C;QACLh1C,KAAK0I;QACL1I,KAAKyI;QAEL,IAAIyvC,UAAU;YACZjtC,WAAW6C,QACT9N,KAAK0tC,yBAAyBwK,SAASJ,aACvC93C,KAAK0tC,yBAAyBwK,SAAS/1B,YACvCniB,KAAK0tC,yBAAyBwK,SAASH,YACvCG,SAASF,aACTE,SAASD,cACT;AAEH;QAEDj4C,KAAKyU;AACN;IAEO,iBAAAojC;QACN,MAAMzwC,YAAYpH,KAAKoH;QACvB,MAAM6D,aAAa7D,UAAU6D;QAE7B,MAAMwsC,kBAAkB;QACxB,KAAK,IAAI1nC,IAAI,GAAGA,IAAI9E,WAAW+Z,oBAAoBjV,KAAK;YACtD,MAAMooC,eAAeltC,WAAWmtC,gBAAgBroC;YAEhD,MAAM+U,QAAQ;gBACZuzB,UAAUr4C,KAAKslC,oBAAoB6S,aAAaG;gBAChDn2B,WAAWniB,KAAKslC,oBAAoB6S,aAAarK;;YAGnD2J,gBAAgB/tC,KAAKob;AACtB;QAED,OAAO2yB;AACR;IAEO,iBAAAD,CAAkBe;QACxB,IAAIA,gBAAgB;YAClB,MAAMnxC,YAAYpH,KAAKoH;YACvB,MAAM6D,aAAa7D,UAAU6D;YAE7B,KAAK,MAAM6Z,SAASyzB,gBAAgB;gBAClC,MAAMJ,eAAe,KAAKn4C,KAAKmH,SAAkB;gBACjDgxC,aAAa33C,IAAIR,KAAK0tC,yBAAyB5oB,MAAMuzB,WAAWr4C,KAAK0tC,yBAAyB5oB,MAAM3C;gBAEpGlX,WAAW8Z,gBAAgBozB;gBAC3BltC,WAAWga,0BAA0B,MAAM,KAAM,KAAM;AACxD;AACF;AACF;IASD,cAAApkB,CAAeT,OAAeQ;QAC5B,OAAOsB,SAAS,eAAerB,eAAeT,IAAIJ,SAASY;AAC5D;;;"}
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","../../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/Markup/IMarkup.ts","../src/Viewer/Markup/Impl/Konva/MarkupColor.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaLine.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaText.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaRectangle.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaEllipse.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaArrow.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaImage.ts","../src/Viewer/Markup/Api/Impl/Konva/KonvaCloud.ts","../src/Viewer/Markup/Impl/Konva/KonvaMarkup.ts","../src/Viewer/Draggers/OdaLineDragger.ts","../src/Viewer/Draggers/OdaTextDragger.ts","../src/Viewer/Markup/Impl/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\nexport { CANVAS_EVENTS, CanvasEvents, Options, commands, defaultOptions };\n//# sourceMappingURL=viewer-core.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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 = (translate, rotate, scale, modelCenter, matrix) => {\n const translateMatrix = matrix.setTranslation([translate.x, translate.y, translate.z]);\n const rotateMatrix = matrix.setToRotation(rotate.angle, [rotate.x, rotate.y, rotate.z], modelCenter);\n const scaleMatrix = matrix.setToScaling(scale, modelCenter);\n return translateMatrix.postMultBy(rotateMatrix).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 const matrix = composeMatrixFromTransform(\n transform.translate,\n transform.rotation,\n transform.scale,\n extents.center(),\n new visLib.Matrix3d()\n );\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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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-2023, 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-2021 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.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToExtents\", zoomToExtents);\ncommands(\"VisualizeJS\").registerCommandAlias(\"zoomToExtents\", \"zoomExtents\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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.update();\n viewer.emitEvent({ type: \"zoom\" });\n\n selectionSet.delete();\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToObjects\", zoomToObjects);\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n\ncommands(\"VisualizeJS\").registerCommand(\"zoomToSelected\", zoomToSelected);\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(event, ...args) {\n if (typeof event === \"string\") return this.emitEvent({\n type: event,\n args: args\n }); else if (typeof event === \"object\") return this.emitEvent(event); else return false;\n }\n}\n\nexport { EventEmitter2 };\n//# sourceMappingURL=eventemitter2.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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-2021, 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-2021 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\n/**\n * A [Viewer]{@link Viewer} event that fires when the viewer needs to be updated.\n *\n * @property {string} type - `update`\n * @event update\n */\n\n/**\n * A [Viewer]{@link Viewer} event that fires when the user selects an entity with the mouse.\n *\n * @property {string} type - `select`\n * @property {OdTvSelectionSet} data - The set of selected entities. For more information, see\n * [OdTvSelectionSet](https://cloud.opendesign.com/docs/index.html#/vis/OdTvSelectionSet?id=odtvselectionset).\n * @event select\n */\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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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.activeDragger()?.updatePreview();\n this._subject.emitEvent({\n type: \"zoomat\",\n data: zoomFactor,\n });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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) {\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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2023, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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-2021, 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-2021 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\n .downloadResource(this.model.database, chunkLoadHandler, abortController.signal)\n .catch((error) => {\n if (!servicePartAborted) throw error;\n });\n\n this.viewer.emitEvent({ type: \"geometryend\", model: this.model });\n } catch (error: any) {\n if (pendingRequestsTimerId) {\n window.clearTimeout(pendingRequestsTimerId);\n pendingRequestsTimerId = 0;\n }\n\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, model: this.model });\n throw error;\n }\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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","import { IViewpoint } from \"@inweb/viewer-core\";\n\nimport { OdBaseDragger } from \"../Draggers/Common/OdBaseDragger\";\nimport { Viewer } from \"../Viewer\";\nimport { IMarkupObject } from \"./Api/IMarkupObject\";\n\nexport enum MarkupType {\n Unknown,\n Konva = \"Konva\",\n Visualize = \"Visualize\",\n}\n\nexport enum MarkupMode {\n Line = \"Line\",\n Text = \"Text\",\n Rectangle = \"Rectangle\",\n Ellipse = \"Ellipse\",\n Arrow = \"Arrow\",\n Image = \"Image\",\n Cloud = \"Cloud\",\n}\n\nexport interface IMarkup {\n lineWidth: number;\n\n initialize(viewer: Viewer, canvas: HTMLCanvasElement, canvasEvents: string[]): void;\n dispose(): void;\n\n getDraggers(): Map<string, typeof OdBaseDragger>;\n clearOverlay(): void;\n setMarkupColor(r: number, g: number, b: number): void;\n getMarkupColor(): { r: number; g: number; b: number };\n colorizeAllMarkup(r: number, g: number, b: number): void;\n setViewpoint(viewpoint: IViewpoint): void;\n getViewpoint(): IViewpoint;\n\n createObject(type: string, params: any): IMarkupObject;\n getObjects(): IMarkupObject[];\n getSelectedObjects(): IMarkupObject[];\n selectObjects(objects: IMarkupObject[]): void;\n clearSelected(): void;\n}\n","export class MarkupColor {\n public R: number;\n public G: number;\n public B: number;\n\n private _hex: string;\n\n /**\n * Color in #000000 format\n */\n get HexColor(): string {\n return \"#\" + this._hex;\n }\n\n get RGB(): { r: number; g: number; b: number } {\n return { r: this.R, g: this.G, b: this.B };\n }\n\n constructor(r: number, g: number, b: number) {\n this.setColor(r, g, b);\n }\n\n public setColor(r: number, g: number, b: number): void {\n this.R = r;\n this.G = g;\n this.B = b;\n\n this._hex = this.rgbToHex(r, g, b);\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n const valueToHex = (c) => {\n const hex = c.toString(16);\n return hex === \"0\" ? \"00\" : hex;\n };\n\n return valueToHex(r) + valueToHex(g) + valueToHex(b);\n }\n}\n","import Konva from \"konva\";\nimport { LineType } from \"@inweb/viewer-core\";\nimport { IMarkupLine } from \"../../IMarkupLine\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nconst LineTypeSpecs = new Map<string, number[]>([\n [\"solid\", []],\n [\"dot\", [30, 30, 0.001, 30]],\n [\"dash\", [30, 30]],\n]);\n\nexport class KonvaLine implements IMarkupLine, IMarkupColorable {\n private _ref: Konva.Line;\n\n constructor(\n params: { points: { x: number; y: number }[]; type?: LineType; width?: number; color?: string; id?: string },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.points) return;\n\n const konvaPoints = [];\n params.points.forEach((point) => konvaPoints.push(point.x, point.y));\n\n this._ref = new Konva.Line({\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.width ?? 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\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"line\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPoints(): number[] {\n return this._ref.points();\n }\n\n setLineWidth(size: number) {\n this._ref.strokeWidth(size);\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n\n getLineType(): string {\n const typeSpecs = this._ref.dash() || [];\n let type: LineType;\n switch (typeSpecs) {\n case LineTypeSpecs.get(\"dot\"):\n type = \"dot\";\n break;\n case LineTypeSpecs.get(\"dash\"):\n type = \"dash\";\n break;\n default:\n type = \"solid\";\n break;\n }\n return type;\n }\n\n setLineType(type: string) {\n const specs = LineTypeSpecs.get(type);\n if (specs) this._ref.dash(specs);\n }\n\n addPoints(points: [{ x: number; y: number }]) {\n let newPoints = this._ref.points();\n points.forEach((point) => {\n newPoints = newPoints.concat([point.x, point.y]);\n });\n\n this._ref.points(newPoints);\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupText } from \"../../IMarkupText\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaText implements IMarkupText, IMarkupColorable {\n private _ref: Konva.Text;\n private readonly TEXT_FONT_FAMILY = \"Calibri\";\n\n constructor(\n params: {\n position: { x: number; y: number };\n text: string;\n rotation?: number;\n fontSize?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params || !params.text) return;\n\n this._ref = new Konva.Text({\n x: params.position.x,\n y: params.position.y,\n text: params.text,\n fontSize: params.fontSize ?? 34,\n fontFamily: this.TEXT_FONT_FAMILY,\n fill: params.color ?? \"#ff0000\",\n align: \"left\",\n draggable: true,\n rotation: params.rotation ?? 0,\n });\n\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"text\";\n }\n\n getColor(): string {\n return this._ref.fill();\n }\n\n setColor(hex: string) {\n this._ref.fill(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getText(): string {\n return this._ref.text();\n }\n\n setText(text: string): void {\n this._ref.text(text);\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.getPosition();\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n\n getFontSize() {\n return this._ref.fontSize();\n }\n\n setFontSize(size: number) {\n this._ref.fontSize(size);\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupRectangle } from \"../../IMarkupRectangle\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaRectangle implements IMarkupRectangle, IMarkupColorable {\n private _ref: Konva.Rect;\n\n constructor(\n params: {\n position: { x: number; y: number };\n width?: number;\n height?: number;\n lineWidth?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.position) return;\n\n this._ref = new Konva.Rect({\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.lineWidth ?? 4,\n globalCompositeOperation: \"source-over\",\n lineCap: \"round\",\n lineJoin: \"round\",\n x: params.position.x,\n y: params.position.y,\n width: params.width ?? 200,\n height: params.height ?? 200,\n draggable: true,\n strokeScaleEnabled: false,\n });\n\n this._ref.id(this._ref._id.toString());\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.position();\n }\n\n getWidth(): number {\n return this._ref.width();\n }\n\n getHeigth(): number {\n return this._ref.height();\n }\n\n setWidth(w: number) {\n this._ref.width(w);\n }\n\n setHeight(h: number) {\n this._ref.height(h);\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean): void {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"rectangle\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string): void {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete(): void {\n this._ref.destroy();\n this._ref = null;\n }\n\n setLineWidth(size: number): void {\n this._ref.strokeWidth(size);\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupEllipse } from \"../../IMarkupEllipse\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaEllipse implements IMarkupEllipse, IMarkupColorable {\n private _ref: Konva.Ellipse;\n\n constructor(\n params: {\n position: { x: number; y: number };\n radius: { x: number; y: number };\n lineWidth?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.position) return;\n\n this._ref = new Konva.Ellipse({\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.lineWidth ?? 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\n this._ref.id(this._ref._id.toString());\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.position();\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n\n getRadiusX(): number {\n return this._ref.radiusX();\n }\n\n setRadiusX(r: number) {\n this._ref.radius({ x: r, y: this._ref.radiusY() });\n }\n\n getRadiusY(): number {\n return this._ref.radiusY();\n }\n\n setRadiusY(r: number) {\n this._ref.radius({ x: this._ref.radiusX(), y: r });\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n\n setLineWidth(size: number) {\n this._ref.strokeWidth(size);\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"ellipse\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupArrow } from \"../../IMarkupArrow\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\n\nexport class KonvaArrow implements IMarkupArrow, IMarkupColorable {\n private _ref: Konva.Arrow;\n\n constructor(\n params: {\n start: { x: number; y: number };\n end: { x: number; y: number };\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.start || !params.end) return;\n\n this._ref = new Konva.Arrow({\n stroke: params.color ?? \"#ff0000\",\n fill: params.color ?? \"#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\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"arrow\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPoints(): { x: number; y: number }[] {\n const points = this._ref.points();\n return [\n { x: points[0], y: points[1] },\n { x: points[2], y: points[3] },\n ];\n }\n\n setPoints(points: { x: number; y: number }[]) {\n if (points.length === 2) {\n this._ref.points([points[0].x, points[0].y, points[1].x, points[1].y]);\n }\n }\n\n getStartPoint(): { x: number; y: number } {\n const points = this._ref.points();\n return { x: points[0], y: points[1] };\n }\n\n setStartPoint(x: number, y: number) {\n const points = this._ref.points();\n this._ref.points([x, y, points[2], points[3]]);\n }\n\n getEndPoint(): { x: number; y: number } {\n const points = this._ref.points();\n return { x: points[2], y: points[3] };\n }\n\n setEndPoint(x: number, y: number) {\n const points = this._ref.points();\n this._ref.points([points[0], points[1], x, y]);\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupImage } from \"../../IMarkupImage\";\n\nexport class KonvaImage implements IMarkupImage {\n private _ref: Konva.Image;\n private _canvasImage: HTMLImageElement;\n private _ratio = 1;\n\n constructor(\n params: { position: { x: number; y: number }; src: string; width: number; height: number; id?: string },\n ref = null\n ) {\n if (ref) {\n if (ref.height() === 0 || ref.width() === 0) return;\n\n this._ref = ref;\n this._canvasImage = ref.image();\n this._ratio = this._ref.height() / this._ref.width();\n return;\n }\n\n if (!params.position || !params.src) return;\n this._canvasImage = new Image();\n\n this._ref = new Konva.Image({\n x: params.position.x,\n y: params.position.y,\n image: this._canvasImage,\n width: params.width,\n height: params.height,\n draggable: true,\n });\n\n this._canvasImage.onload = () => {\n this._ref.image(this._canvasImage);\n this._ratio = this._ref.height() === 0 || this._ref.width() === 0 ? 1 : this._ref.height() / this._ref.width();\n };\n\n this._canvasImage.src = params.src;\n\n this._ref.id(this._ref._id.toString());\n }\n\n getSrc(): string {\n return this._canvasImage.src;\n }\n\n setSrc(src: any) {\n this._canvasImage.src = src;\n }\n\n getWidth(): number {\n return this._ref.width();\n }\n\n setWidth(w: number) {\n this._ref.width(w);\n this._ref.height(w * this._ratio);\n }\n\n getHeight(): number {\n return this._ref.height();\n }\n\n setHeight(h: number) {\n this._ref.height(h);\n this._ref.width(h / this._ratio);\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"image\";\n }\n\n // we can break Liskov Substitution Principle, need to use separate IColorable\n // getColor(): string {\n // return this._ref.fill();\n // }\n\n // setColor(hex: string) {\n // this._ref.fill(hex);\n // }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPosition(): { x: number; y: number } {\n return this._ref.getPosition();\n }\n\n setPosition(x: number, y: number) {\n this._ref.setPosition({ x, y });\n }\n}\n","import Konva from \"konva\";\nimport { IMarkupColorable } from \"../../IMarkupColorable\";\nimport { IMarkupCloud } from \"../../IMarkupCloud\";\n\nexport class KonvaCloud implements IMarkupCloud, IMarkupColorable {\n private _ref: Konva.Shape;\n\n constructor(\n params: {\n position: { x: number; y: number };\n width?: number;\n height?: number;\n lineWidth?: number;\n color?: string;\n id?: string;\n },\n ref = null\n ) {\n if (ref) {\n this._ref = ref;\n return;\n }\n\n if (!params.position || !params.width || !params.height) return;\n\n const arcRadius = 16;\n\n this._ref = new Konva.Shape({\n x: params.position.x,\n y: params.position.y,\n width: params.width ?? 200,\n height: params.height ?? 200,\n stroke: params.color ?? \"#ff0000\",\n strokeWidth: params.lineWidth ?? 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 { x: midX, y: midY };\n }\n\n const points = [\n { x: 0, y: 0 },\n { x: 0 + this._ref.width(), y: 0 },\n { x: 0 + this._ref.width(), y: 0 + this._ref.height() },\n { x: 0, y: 0 + this._ref.height() },\n { x: 0, y: 0 },\n ];\n\n const midPoint = calculateMidpoint({ x: 0, y: 0 }, this._ref.width(), this._ref.height());\n\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\n const arcCount = Math.floor(length / approxArcLength);\n const lengthMod = length % approxArcLength;\n approxArcLength = baseArcLength + arcCount / lengthMod;\n\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\n pX += dx / arcCount;\n pY += dy / arcCount;\n }\n }\n\n context.closePath();\n // (!) Konva specific method, it is very important\n // it will apply are required styles\n context.fillStrokeShape(shape);\n },\n });\n\n this._ref.className = \"Cloud\";\n\n this._ref.on(\"transform\", (e) => {\n const attrs = e.target.attrs;\n\n const minWidth = 100;\n const minHeight = 100;\n\n const newWidth = this._ref.width() * attrs.scaleX;\n const newHeight = this._ref.height() * attrs.scaleY;\n\n if (newWidth < minWidth || newHeight < minHeight) {\n this._ref.scale({ x: 1, y: 1 });\n return;\n }\n\n if (Math.abs(attrs.scaleX - 1) > 10e-6) {\n this._ref.width(newWidth);\n }\n\n if (Math.abs(attrs.scaleY - 1) > 10e-6) {\n this._ref.height(newHeight);\n }\n\n this._ref.scale({ x: 1, y: 1 });\n });\n\n this._ref.getSelfRect = () => {\n return {\n x: 0 - arcRadius,\n y: 0 - arcRadius,\n width: this._ref.width() + 2 * arcRadius,\n height: this._ref.height() + 2 * arcRadius,\n };\n };\n\n this._ref.id(this._ref._id.toString());\n }\n\n ref() {\n return this._ref;\n }\n\n id(): string {\n return this._ref.id();\n }\n\n enableMouseEditing(value: boolean) {\n this._ref.draggable(value);\n }\n\n type(): string {\n return \"cloud\";\n }\n\n getColor(): string {\n return this._ref.stroke();\n }\n\n setColor(hex: string) {\n this._ref.stroke(hex);\n }\n\n getRotation(): number {\n return this._ref.rotation();\n }\n\n setRotation(degrees: number): void {\n this._ref.rotation(degrees);\n }\n\n getZIndex(): number {\n return this._ref.zIndex();\n }\n\n setZIndex(zIndex: number): void {\n this._ref.zIndex(zIndex);\n }\n\n delete() {\n this._ref.destroy();\n this._ref = null;\n }\n\n getPosition() {\n return this._ref.position();\n }\n\n setPosition(x: number, y: number) {\n this._ref.position({ x, y });\n }\n\n getWidth(): number {\n return this._ref.width();\n }\n\n setWidth(w: number) {\n this._ref.width(w);\n }\n\n getHeigth(): number {\n return this._ref.height();\n }\n\n setHeight(h: number) {\n this._ref.height(h);\n }\n\n getLineWidth(): number {\n return this._ref.strokeWidth();\n }\n\n setLineWidth(size: number) {\n this._ref.strokeWidth(size);\n }\n}\n","import Konva from \"konva\";\nimport { ChangeActiveDraggerEvent, IViewpoint, LineType, PanEvent } from \"@inweb/viewer-core\";\n\nimport { IMarkup, MarkupMode } from \"../../IMarkup\";\nimport { Viewer } from \"../../../Viewer\";\nimport { MarkupColor } from \"./MarkupColor\";\nimport * as utils from \"../../../Draggers/MeasureLineDragger/MeasureUtils\";\nimport { OdBaseDragger } from \"../../../Draggers/Common/OdBaseDragger\";\nimport { IMarkupObject } from \"../../Api/IMarkupObject\";\nimport { KonvaLine } from \"../../Api/Impl/Konva/KonvaLine\";\nimport { KonvaText } from \"../../Api/Impl/Konva/KonvaText\";\nimport { KonvaRectangle } from \"../../Api/Impl/Konva/KonvaRectangle\";\nimport { KonvaEllipse } from \"../../Api/Impl/Konva/KonvaEllipse\";\nimport { KonvaArrow } from \"../../Api/Impl/Konva/KonvaArrow\";\nimport { KonvaImage } from \"../../Api/Impl/Konva/KonvaImage\";\nimport { KonvaCloud } from \"../../Api/Impl/Konva/KonvaCloud\";\n\nclass KonvaShape {\n name: string;\n initializer: (ref: any) => any;\n}\n\n// move to separate class and create factory with enum?\nconst MarkupMode2Konva = new Map<MarkupMode, KonvaShape>([\n [\n MarkupMode.Line,\n {\n name: \"Line\",\n initializer: (ref) => {\n return new KonvaLine(null, ref);\n },\n },\n ],\n [\n MarkupMode.Text,\n {\n name: \"Text\",\n initializer: (ref) => {\n return new KonvaText(null, ref);\n },\n },\n ],\n [\n MarkupMode.Rectangle,\n {\n name: \"Rect\",\n initializer: (ref) => {\n return new KonvaRectangle(null, ref);\n },\n },\n ],\n [\n MarkupMode.Ellipse,\n {\n name: \"Ellipse\",\n initializer: (ref) => {\n return new KonvaEllipse(null, ref);\n },\n },\n ],\n [\n MarkupMode.Arrow,\n {\n name: \"Arrow\",\n initializer: (ref) => {\n return new KonvaArrow(null, ref);\n },\n },\n ],\n [\n MarkupMode.Image,\n {\n name: \"Image\",\n initializer: (ref) => {\n return new KonvaImage(null, ref);\n },\n },\n ],\n [\n MarkupMode.Cloud,\n {\n name: \"Cloud\",\n initializer: (ref) => {\n return new KonvaCloud(null, ref);\n },\n },\n ],\n]);\n\nexport class KonvaMarkup implements IMarkup {\n private _isInitialized = false;\n private _viewer: Viewer;\n private _canvasOriginal: HTMLCanvasElement;\n private _canvasEvents: string[];\n private _markupIsActive: boolean;\n private _markupMode: MarkupMode;\n private _markupColor: MarkupColor;\n private _konvaStage: Konva.Stage;\n private _konvaLayer: Konva.Layer;\n private _konvaTransformer: Konva.Transformer;\n\n private _textInputRef: HTMLTextAreaElement;\n private _textInputPos: Konva.Vector2d;\n private _textInputAngle: number;\n private _markupContainer: HTMLDivElement;\n private _zIndex = 1;\n\n private readonly _markupContainerName = \"markupContainer\";\n\n public lineWidth = 4;\n\n initialize(viewer: Viewer, canvas: HTMLCanvasElement, canvasEvents: string[] = []): void {\n if (!Konva)\n throw new Error(\n 'Konva Markup: Error during Markup Initialization. Konva is not initialized. Update node_modules or add to your page <script src=\"https://unpkg.com/konva@9/konva.min.js\"></script>'\n );\n\n this._viewer = viewer;\n\n this._canvasOriginal = canvas;\n this._canvasEvents = canvasEvents;\n\n this._markupContainer = document.createElement(\"div\");\n this._markupContainer.id = this._markupContainerName;\n this._markupContainer.style.position = \"absolute\";\n this._markupContainer.style.top = \"0px\";\n this._markupContainer.style.left = \"0px\";\n // to eliminate grey box during delete elements\n this._markupContainer.style.outline = \"0px\";\n\n const parentDiv = this._canvasOriginal.parentElement;\n parentDiv.appendChild(this._markupContainer);\n\n this._markupColor = new MarkupColor(255, 0, 0);\n this._markupIsActive = false;\n\n this.initializeKonva();\n this.resize();\n\n this._canvasEvents.forEach((x) => this._markupContainer.addEventListener(x, this.redirectToViewer));\n\n this._viewer.addEventListener(\"resize\", this.resize);\n this._viewer.addEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._viewer.addEventListener(\"pan\", this.pan);\n\n this._isInitialized = true;\n }\n\n dispose(): void {\n if (!this._isInitialized) return;\n\n this._canvasEvents.forEach((x) => this._markupContainer.removeEventListener(x, this.redirectToViewer));\n\n this._viewer.removeEventListener(\"pan\", this.pan);\n this._viewer.removeEventListener(\"changeactivedragger\", this.changeActiveDragger);\n this._viewer.removeEventListener(\"resize\", this.resize);\n\n this.destroyKonva();\n\n this._markupContainer.remove();\n\n this._markupContainer = undefined;\n this._canvasOriginal = undefined;\n this._viewer = undefined;\n\n this._isInitialized = false;\n }\n\n changeActiveDragger = (event: ChangeActiveDraggerEvent) => {\n const draggerName = event.data;\n\n this._markupContainer.className = this._canvasOriginal.className\n .split(\" \")\n .filter((x) => !x.startsWith(\"oda-cursor-\"))\n .filter((x) => x)\n .concat(`oda-cursor-${draggerName.toLowerCase()}`)\n .join(\" \");\n\n this.removeTextInput();\n\n const markupMode = MarkupMode[draggerName];\n const konvaMode = MarkupMode2Konva.get(markupMode);\n if (konvaMode) {\n this._markupMode = markupMode;\n this._markupIsActive = true;\n } else {\n this._markupIsActive = false;\n this._konvaTransformer.nodes([]);\n }\n };\n\n resize = () => {\n this._konvaStage?.width(this._canvasOriginal.clientWidth);\n this._konvaStage?.height(this._canvasOriginal.clientHeight);\n };\n\n pan = (event: PanEvent) => {\n const dX = event.dX / window.devicePixelRatio;\n const dY = event.dY / window.devicePixelRatio;\n\n Object.values(MarkupMode).forEach((mode) => this.konvaLayerFind(mode).forEach((x) => x.move({ x: dX, y: dY })));\n };\n\n redirectToViewer = (event) => {\n this._viewer.emit(event);\n };\n\n getDraggers(): Map<string, typeof OdBaseDragger> {\n return null;\n }\n\n clearOverlay(): void {\n this.removeTextInput();\n this._konvaTransformer.nodes([]);\n Object.values(MarkupMode).forEach((mode) => this.konvaLayerFind(mode).forEach((x) => x.destroy()));\n }\n\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markupColor.RGB;\n }\n\n setMarkupColor(r: number, g: number, b: number): void {\n this._markupColor.setColor(r, g, b);\n }\n\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n const hex = new MarkupColor(r, g, b).HexColor;\n Object.values(MarkupMode).forEach((mode) => {\n this.konvaLayerFind(mode).forEach((x) => {\n const konvaObj = MarkupMode2Konva.get(mode).initializer(x);\n if (konvaObj.setColor) konvaObj.setColor(hex);\n });\n });\n\n this._konvaLayer.draw();\n }\n\n setViewpoint(viewpoint: IViewpoint): void {\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 this.loadMarkup(viewpoint);\n }\n\n getViewpoint(): IViewpoint {\n // TODO: at the current 25.2 state we need VisualizeJS here and below. In the future we need to use it as an external interface.\n if (!this._viewer.visualizeJs) return {};\n\n const viewpoint: IViewpoint = {\n lines: [],\n texts: [],\n arrows: [],\n clouds: [],\n ellipses: [],\n images: [],\n rectangles: [],\n };\n\n viewpoint.snapshot = {\n data: this.combineMarkupWithDrawing(),\n };\n\n viewpoint.custom_fields = {\n markup_color: this.getMarkupColor(),\n };\n\n this.fillViewpointShapes(viewpoint);\n\n viewpoint.description = new Date().toDateString();\n return viewpoint;\n }\n\n createObject(type: string, params: any): IMarkupObject {\n let object;\n let zIndex = this._zIndex;\n\n // TODO: factory?\n switch (type) {\n case \"line\":\n object = new KonvaLine(params);\n zIndex = 1;\n break;\n case \"text\":\n object = new KonvaText(params);\n break;\n case \"rectangle\":\n object = new KonvaRectangle(params);\n zIndex = 1;\n break;\n case \"ellipse\":\n object = new KonvaEllipse(params);\n zIndex = 1;\n break;\n case \"arrow\":\n object = new KonvaArrow(params);\n break;\n case \"image\":\n object = new KonvaImage(params);\n zIndex = 0;\n break;\n case \"cloud\":\n object = new KonvaCloud(params);\n zIndex = 1;\n break;\n default:\n throw new Error(\"Markup CreateObject - unsupported type has been detected.\");\n }\n\n this.addObject(object);\n\n // Set zIndex only when shape has been added to Layer else we will get \"Konva warning: Node has no parent. zIndex parameter is ignored.\"\n object.setZIndex(zIndex);\n this._zIndex++;\n return object;\n }\n\n getObjects(): IMarkupObject[] {\n const objects = [];\n this.konvaLayerFind(MarkupMode.Line).forEach((line) => {\n objects.push(new KonvaLine(null, line));\n });\n\n this.konvaLayerFind(MarkupMode.Text).forEach((text) => {\n objects.push(new KonvaText(null, text));\n });\n\n this.konvaLayerFind(MarkupMode.Rectangle).forEach((rectangle) => {\n objects.push(new KonvaRectangle(null, rectangle));\n });\n\n this.konvaLayerFind(MarkupMode.Ellipse).forEach((ellipse) => {\n objects.push(new KonvaEllipse(null, ellipse));\n });\n\n this.konvaLayerFind(MarkupMode.Arrow).forEach((arrow) => {\n objects.push(new KonvaArrow(null, arrow));\n });\n\n this.konvaLayerFind(MarkupMode.Image).forEach((image) => {\n objects.push(new KonvaImage(null, image));\n });\n\n this.konvaLayerFind(MarkupMode.Cloud).forEach((cloud) => {\n objects.push(new KonvaCloud(null, cloud));\n });\n\n return objects;\n }\n\n getSelectedObjects(): IMarkupObject[] {\n const objects = [];\n\n this._konvaTransformer.nodes().forEach((obj) => {\n const konvaShapeName = obj.className;\n switch (konvaShapeName) {\n case \"Line\":\n objects.push(new KonvaLine(null, obj));\n break;\n case \"Text\":\n objects.push(new KonvaText(null, obj));\n break;\n case \"Rect\":\n objects.push(new KonvaRectangle(null, obj));\n break;\n case \"Ellipse\":\n objects.push(new KonvaEllipse(null, obj));\n break;\n case \"Arrow\":\n objects.push(new KonvaArrow(null, obj));\n break;\n case \"Image\":\n objects.push(new KonvaImage(null, obj));\n break;\n case \"Cloud\":\n objects.push(new KonvaCloud(null, obj));\n break;\n default:\n break;\n }\n });\n\n return objects;\n }\n\n selectObjects(objects: IMarkupObject[]) {\n const selectedObjs = this._konvaTransformer.nodes().concat(objects.map((x) => x.ref()));\n this._konvaTransformer.nodes(selectedObjs);\n }\n\n clearSelected(): void {\n this._konvaTransformer.nodes([]);\n }\n\n private getPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n private fillViewpointShapes(viewpoint) {\n const markupLines = this.getMarkupLines();\n if (markupLines && markupLines.length > 0) {\n markupLines?.forEach((line) => {\n viewpoint.lines.push(line);\n });\n }\n\n const markupTexts = this.getMarkupTexts();\n if (markupTexts && markupTexts.length > 0) {\n markupTexts?.forEach((text) => {\n viewpoint.texts.push(text);\n });\n }\n\n const markupRectangles = this.getMarkupRectangles();\n if (markupRectangles && markupRectangles.length > 0) {\n markupRectangles?.forEach((rectangle) => {\n viewpoint.rectangles.push(rectangle);\n });\n }\n\n const markupEllipses = this.getMarkupEllipses();\n if (markupEllipses && markupEllipses.length > 0) {\n markupEllipses?.forEach((ellipse) => {\n viewpoint.ellipses.push(ellipse);\n });\n }\n\n const markupArrows = this.getMarkupArrows();\n if (markupArrows && markupArrows.length > 0) {\n markupArrows?.forEach((arrow) => {\n viewpoint.arrows.push(arrow);\n });\n }\n\n const markupImages = this.getMarkupImages();\n if (markupImages && markupImages.length > 0) {\n markupImages?.forEach((image) => {\n viewpoint.images.push(image);\n });\n }\n\n const markupClouds = this.getMarkupClouds();\n if (markupClouds && markupClouds.length > 0) {\n markupClouds?.forEach((cloud) => {\n viewpoint.clouds.push(cloud);\n });\n }\n }\n\n private addObject(object: IMarkupObject): void {\n this._konvaLayer.add(object.ref());\n }\n\n private konvaLayerFind(markupShape: MarkupMode): any {\n const konvaShape = MarkupMode2Konva.get(markupShape);\n if (konvaShape) {\n // for \"draggable\" Konva uses Rectangles in Transformer. We need only Shapes from Layer.\n const konvaShapes = this._konvaLayer.find(konvaShape.name).filter((x) => x.parent instanceof Konva.Layer);\n return konvaShapes;\n }\n }\n\n private initializeKonva(): any {\n // first we need Konva core things: stage and layer\n this._konvaStage = new Konva.Stage({\n container: this._markupContainerName,\n width: this._canvasOriginal.clientWidth,\n height: this._canvasOriginal.clientHeight,\n });\n const stage = this._konvaStage;\n const layer = new Konva.Layer({ pixelRation: window.devicePixelRatio });\n stage.add(layer);\n this._konvaLayer = layer;\n\n const transformer = new Konva.Transformer({\n shouldOverdrawWholeArea: false,\n });\n\n this._konvaTransformer = transformer;\n layer.add(transformer);\n\n let isPaint = false;\n let lastLine;\n\n stage.on(\"mousedown touchstart\", (e) => {\n // do nothing if we mousedown on any shape\n if (!this._markupIsActive || e.target !== stage || this._markupMode === MarkupMode.Text) return;\n\n if (e.target === stage && transformer.nodes().length > 0) {\n transformer.nodes([]);\n return;\n }\n\n const pos = stage.getPointerPosition();\n\n if (this._markupMode === MarkupMode.Line) {\n // add point twice, so we have some drawings even on a simple click\n lastLine = this.addLine([pos.x, pos.y, pos.x, pos.y]);\n\n isPaint = true;\n }\n // 25.2 - currently only for debug purposes:\n else if (this._markupMode === MarkupMode.Rectangle) {\n this.addRectangle({ x: pos.x, y: pos.y }, 50, 50);\n } else if (this._markupMode === MarkupMode.Ellipse) {\n this.addEllipse({ x: pos.x, y: pos.y }, { x: 50, y: 50 });\n } else if (this._markupMode === MarkupMode.Arrow) {\n this.addArrow({ x: pos.x, y: pos.y }, { x: pos.x + 50, y: pos.y + 50 });\n } else if (this._markupMode === MarkupMode.Cloud) {\n this.addCloud({ x: pos.x, y: pos.y }, 200, 400);\n }\n });\n\n stage.on(\"mouseup touchend\", (e) => {\n if (!this._markupIsActive) return;\n isPaint = false;\n });\n\n stage.on(\"mousemove touchmove\", (e) => {\n if (!this._markupIsActive) return;\n if (!isPaint) {\n return;\n }\n\n // prevent scrolling on touch devices\n //e.evt.preventDefault();\n\n const pos = stage.getPointerPosition();\n const newPoints = lastLine.points().concat([pos.x, pos.y]);\n lastLine.points(newPoints);\n });\n\n // clicks should select/deselect shapes\n stage.on(\"click tap\", (e) => {\n if (!this._markupIsActive) return;\n\n // if click on empty area - remove all selections\n if (e.target === stage) {\n if (this._markupMode === MarkupMode.Text) {\n if (this._textInputRef) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle);\n 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 }\n transformer.nodes([]);\n return;\n }\n\n if (e.target.className === \"Text\" && transformer.nodes().length === 1 && transformer.nodes()[0] === e.target) {\n if (this._textInputRef) this.addText(this._textInputRef.value, this._textInputPos, this._textInputAngle);\n else\n this.createTextInput(\n { x: e.target.attrs.x, y: e.target.attrs.y },\n e.evt.pageX,\n e.evt.pageY,\n e.target.attrs.rotation,\n e.target.attrs.text\n );\n return;\n } else {\n this.removeTextInput();\n }\n\n if (transformer.nodes().filter((x) => x.className === \"Cloud\").length > 0 || e.target.className === \"Cloud\") {\n transformer.rotateEnabled(false);\n } else {\n transformer.rotateEnabled(true);\n }\n\n // do we pressed shift or ctrl?\n const metaPressed = e.evt.shiftKey || e.evt.ctrlKey || e.evt.metaKey;\n const isSelected = transformer.nodes().indexOf(e.target) >= 0;\n\n if (!metaPressed && !isSelected) {\n // if no key pressed and the node is not selected\n // select just one\n transformer.nodes([e.target]);\n } else if (metaPressed && isSelected) {\n // if we pressed keys and node was selected\n // we need to remove it from selection:\n const nodes = transformer.nodes().slice(); // use slice to have new copy of array\n // remove node from array\n nodes.splice(nodes.indexOf(e.target), 1);\n transformer.nodes(nodes);\n } else if (metaPressed && !isSelected) {\n // add the node into selection\n const nodes = transformer.nodes().concat([e.target]);\n transformer.nodes(nodes);\n }\n });\n\n const container = stage.container();\n container.tabIndex = 1;\n // focus it\n // also stage will be in focus on its click\n container.focus();\n\n container.addEventListener(\"keydown\", (e) => {\n if (!this._markupIsActive) return;\n if (e.code === \"Delete\") {\n const trNodes = this._konvaTransformer.nodes();\n if (trNodes.length > 0) {\n this._konvaTransformer.nodes().forEach((x) => x.destroy());\n this._konvaTransformer.nodes([]);\n }\n layer.draw();\n return;\n }\n e.preventDefault();\n });\n }\n\n private destroyKonva() {\n this.clearOverlay();\n\n this._konvaStage.destroy();\n\n this._konvaLayer = undefined;\n this._konvaTransformer = undefined;\n this._konvaStage = undefined;\n }\n\n private getMarkupLines() {\n const lines = [];\n this.konvaLayerFind(MarkupMode.Line).forEach((line) => {\n const linePoints = line.points();\n if (!linePoints) return;\n const worldPoints = [];\n const absoluteTransform = line.getAbsoluteTransform();\n for (let i = 0; i < linePoints.length; i += 2) {\n // we need getAbsoluteTransform because inside Konva position starts from {0, 0}\n // https://stackoverflow.com/a/57641487 - check answer's comments\n const atPoint = absoluteTransform.point({ x: linePoints[i], y: linePoints[i + 1] });\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(atPoint.x * window.devicePixelRatio, atPoint.y * window.devicePixelRatio);\n worldPoints.push(worldPoint);\n }\n\n const konvaLine = new KonvaLine(null, line);\n lines.push({\n id: konvaLine.id(),\n points: worldPoints.map((p) => this.getPoint3dFromArray(p)),\n color: konvaLine.getColor() || \"ff0000\",\n type: konvaLine.getLineType() || \"solid\",\n width: konvaLine.getLineWidth() || 3,\n });\n });\n\n return lines;\n }\n\n private getMarkupTexts() {\n const texts = [];\n\n const textSize = 0.02;\n let textScale = 1.0;\n\n const projMtrx = this._viewer.visViewer().activeView.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 this.konvaLayerFind(MarkupMode.Text).forEach((text) => {\n if (!text) return;\n\n const position = this._viewer\n .visViewer()\n .screenToWorld(text.x() * window.devicePixelRatio, text.y() * window.devicePixelRatio);\n\n const shape = new KonvaText(null, text);\n texts.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(position),\n text: shape.getText(),\n text_size: textSize * textScale,\n angle: shape.getRotation(),\n color: shape.getColor(),\n font_size: shape.getFontSize(),\n });\n });\n\n return texts;\n }\n\n private getMarkupRectangles() {\n const rectangles = [];\n this.konvaLayerFind(MarkupMode.Rectangle).forEach((rect) => {\n const position = rect.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaRectangle(null, rect);\n rectangles.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor(),\n });\n });\n\n return rectangles;\n }\n\n private getMarkupEllipses() {\n const ellipses = [];\n this.konvaLayerFind(MarkupMode.Ellipse).forEach((ellipse) => {\n const position = ellipse.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaEllipse(null, ellipse);\n ellipses.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n radius: { x: ellipse.getRadiusX(), y: ellipse.getRadiusY() },\n line_width: shape.getLineWidth(),\n color: shape.getColor(),\n });\n });\n\n return ellipses;\n }\n\n private getMarkupArrows() {\n const arrows = [];\n this.konvaLayerFind(MarkupMode.Arrow).forEach((arrow) => {\n // we need getAbsoluteTransform because inside Konva position starts from {0, 0}\n const absoluteTransform = arrow.getAbsoluteTransform();\n\n const atStartPoint = absoluteTransform.point({ x: arrow.points()[0], y: arrow.points()[1] });\n const worldStartPoint = this._viewer\n .visViewer()\n .screenToWorld(atStartPoint.x * window.devicePixelRatio, atStartPoint.y * window.devicePixelRatio);\n\n const atEndPoint = absoluteTransform.point({ x: arrow.points()[2], y: arrow.points()[3] });\n const worldEndPoint = this._viewer\n .visViewer()\n .screenToWorld(atEndPoint.x * window.devicePixelRatio, atEndPoint.y * window.devicePixelRatio);\n\n const shape = new KonvaArrow(null, arrow);\n arrows.push({\n id: shape.id(),\n start: this.getPoint3dFromArray(worldStartPoint),\n end: this.getPoint3dFromArray(worldEndPoint),\n color: shape.getColor(),\n });\n });\n\n return arrows;\n }\n\n private getMarkupImages() {\n const images = [];\n this.konvaLayerFind(MarkupMode.Image).forEach((image) => {\n const position = image.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaImage(null, image);\n images.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n src: shape.getSrc(),\n width: shape.getWidth(),\n height: shape.getHeight(),\n });\n });\n\n return images;\n }\n\n private getMarkupClouds() {\n const clouds = [];\n this.konvaLayerFind(MarkupMode.Cloud).forEach((cloud) => {\n const position = cloud.position();\n const worldPoint = this._viewer\n .visViewer()\n .screenToWorld(position.x * window.devicePixelRatio, position.y * window.devicePixelRatio);\n\n const shape = new KonvaCloud(null, cloud);\n clouds.push({\n id: shape.id(),\n position: this.getPoint3dFromArray(worldPoint),\n width: shape.getWidth(),\n height: shape.getHeigth(),\n line_width: shape.getLineWidth(),\n color: shape.getColor(),\n });\n });\n\n return clouds;\n }\n\n private loadMarkup(viewpoint: IViewpoint) {\n viewpoint.lines?.forEach((vpLine) => {\n const linePoints = [];\n vpLine.points.forEach((point) => {\n const screenPoint = utils.worldToScreen(\n [point.x, point.y, point.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n linePoints.push(screenPoint.x);\n linePoints.push(screenPoint.y);\n });\n\n this.addLine(linePoints, vpLine.color, vpLine.type, vpLine.width, vpLine.id);\n });\n\n viewpoint.texts?.forEach((vpText) => {\n const screenPoint = utils.worldToScreen(\n [vpText.position.x, vpText.position.y, vpText.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n this.addText(vpText.text, screenPoint, vpText.angle, vpText.color, vpText.text_size, vpText.font_size, vpText.id);\n });\n\n viewpoint.rectangles?.forEach((vpRect) => {\n const screenPoint = utils.worldToScreen(\n [vpRect.position.x, vpRect.position.y, vpRect.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addRectangle(\n { x: screenPoint.x, y: screenPoint.y },\n vpRect.width,\n vpRect.height,\n vpRect.line_width,\n vpRect.color,\n vpRect.id\n );\n });\n\n viewpoint.ellipses?.forEach((vpEllipse) => {\n const screenPoint = utils.worldToScreen(\n [vpEllipse.position.x, vpEllipse.position.y, vpEllipse.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addEllipse(\n { x: screenPoint.x, y: screenPoint.y },\n { x: vpEllipse.radius.x, y: vpEllipse.radius.y },\n vpEllipse.line_width,\n vpEllipse.color,\n vpEllipse.id\n );\n });\n\n viewpoint.arrows?.forEach((vpArrow) => {\n const startPoint = utils.worldToScreen(\n [vpArrow.start.x, vpArrow.start.y, vpArrow.start.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n const endPoint = utils.worldToScreen(\n [vpArrow.end.x, vpArrow.end.y, vpArrow.end.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addArrow({ x: startPoint.x, y: startPoint.y }, { x: endPoint.x, y: endPoint.y }, vpArrow.color, vpArrow.id);\n });\n\n viewpoint.clouds?.forEach((vpCloud) => {\n const screenPoint = utils.worldToScreen(\n [vpCloud.position.x, vpCloud.position.y, vpCloud.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addCloud(\n { x: screenPoint.x, y: screenPoint.y },\n vpCloud.width,\n vpCloud.height,\n vpCloud.line_width,\n vpCloud.color,\n vpCloud.id\n );\n });\n\n viewpoint.images?.forEach((vpImage) => {\n const screenPoint = utils.worldToScreen(\n [vpImage.position.x, vpImage.position.y, vpImage.position.z],\n this._viewer.visualizeJs,\n this._viewer.visViewer()\n );\n\n this.addImage({ x: screenPoint.x, y: screenPoint.y }, vpImage.src, vpImage.width, vpImage.height, vpImage.id);\n });\n }\n\n private combineMarkupWithDrawing() {\n const trNodes = this._konvaTransformer.nodes();\n if (trNodes.length > 0) {\n this._konvaTransformer.nodes([]);\n }\n\n const tempCanvas = document.createElement(\"canvas\");\n tempCanvas.height = this._canvasOriginal.height;\n tempCanvas.width = this._canvasOriginal.width;\n const ctx = tempCanvas.getContext(\"2d\");\n ctx.drawImage(this._canvasOriginal, 0, 0);\n ctx.drawImage(this._konvaStage.toCanvas({ pixelRatio: window.devicePixelRatio }), 0, 0);\n return tempCanvas.toDataURL(\"image/jpeg\", 0.25);\n }\n\n private addLine(\n linePoints: number[],\n color?: string,\n type?: LineType,\n width?: number,\n id?: string\n ): Konva.Line | void {\n if (!linePoints || linePoints.length === 0) return;\n const points: { x: number; y: number }[] = [];\n for (let i = 0; i < linePoints.length; i += 2) {\n points.push({ x: linePoints[i], y: linePoints[i + 1] });\n }\n\n const konvaLine = new KonvaLine({\n points,\n type: type || \"solid\",\n width: width || this.lineWidth,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaLine.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private createTextInput(pos: Konva.Vector2d, inputX: number, inputY: number, angle: number, text: string): void {\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.onkeydown = (event) => {\n if (event.key === \"Enter\") {\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\n setTimeout(() => {\n this._textInputRef.focus();\n }, 50);\n } else {\n this.removeTextInput();\n }\n }\n\n private removeTextInput(): void {\n this._textInputRef?.remove();\n this._textInputRef = null;\n this._textInputPos = null;\n this._textInputAngle = 0;\n }\n\n private addText(\n specifiedText: string,\n position: Konva.Vector2d,\n angle?: number,\n color?: string,\n textSize?: number,\n fontSize?: number,\n id?: string\n ): void {\n if (specifiedText) {\n const tol = 1.0e-6;\n\n // in case we have old viewpoint without font_size\n if (textSize && textSize > tol && (!fontSize || fontSize < tol)) {\n const size = 0.02;\n let scale = 1.0;\n\n const projMtrx = this._viewer.visViewer().activeView.projectionMatrix;\n const mtrxNumber = projMtrx.get(1, 1);\n\n if (mtrxNumber > tol || mtrxNumber < -tol) {\n scale = 1 / mtrxNumber;\n }\n fontSize = textSize / (scale / size) / 34;\n }\n\n const konvaText = new KonvaText({\n position: { x: position.x, y: position.y },\n text: specifiedText,\n rotation: angle,\n fontSize,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n this._konvaLayer.add(konvaText.ref());\n }\n\n const trNodes = this._konvaTransformer.nodes();\n if (trNodes.length > 0) {\n // in case of edit - remove old Konva.Text object\n trNodes[0].destroy();\n this._konvaTransformer.nodes([]);\n }\n\n this.removeTextInput();\n\n return;\n }\n\n private addRectangle(\n position: Konva.Vector2d,\n width: number,\n height: number,\n lineWidth?: number,\n color?: string,\n id?: string\n ): Konva.Rect | void {\n if (!position) return;\n\n const konvaRectangle = new KonvaRectangle({\n position,\n width,\n height,\n lineWidth: lineWidth || this.lineWidth,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaRectangle.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addEllipse(\n position: { x: number; y: number },\n radius: { x: number; y: number },\n lineWidth?: number,\n color?: string,\n id?: string\n ): Konva.Ellipse | void {\n if (!position) return;\n\n const konvaEllipse = new KonvaEllipse({\n position,\n radius,\n lineWidth,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaEllipse.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addArrow(\n start: { x: number; y: number },\n end: { x: number; y: number },\n color?: string,\n id?: string\n ): Konva.Arrow | void {\n if (!start || !end) return;\n\n const konvaArrow = new KonvaArrow({\n start,\n end,\n color: color || this._markupColor.HexColor,\n id,\n });\n\n const obj = konvaArrow.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addCloud(\n position: { x: number; y: number },\n width: number,\n height: number,\n lineWidth?: number,\n color?: string,\n id?: string\n ): Konva.Shape | void {\n if (!position || !width || !height) return;\n\n const konvaCloud = new KonvaCloud({\n position,\n width,\n height,\n color: color || this._markupColor.HexColor,\n lineWidth: lineWidth || this.lineWidth,\n id,\n });\n\n const obj = konvaCloud.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n\n private addImage(\n position: { x: number; y: number },\n src: string,\n width: number,\n height: number,\n id?: string\n ): Konva.Image | void {\n if (!position || !width || !height) return;\n\n const konvaImage = new KonvaImage({\n position,\n src,\n width,\n height,\n id,\n });\n\n const obj = konvaImage.ref();\n this._konvaLayer.add(obj);\n return obj;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2021, 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-2021 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-2021, 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-2021 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 { ILine, IText, IViewpoint } from \"@inweb/viewer-core\";\n\nimport { IMarkup, MarkupMode } from \"../../IMarkup\";\nimport { Viewer } from \"../../../Viewer\";\nimport { OdBaseDragger } from \"../../../Draggers/Common/OdBaseDragger\";\nimport { MARKUP_ENTITY_LINE, OdaLineDragger } from \"../../../Draggers/OdaLineDragger\";\nimport { MARKUP_ENTITY_TEXT, OdaTextDragger } from \"../../../Draggers/OdaTextDragger\";\nimport { IMarkupObject } from \"../../Api/IMarkupObject\";\n\nexport class VisualizeMarkup implements IMarkup {\n private _viewer: Viewer;\n protected _markupColor = { r: 255, g: 0, b: 0 };\n\n public lineWidth = 0;\n\n initialize(viewer: Viewer, canvas: HTMLCanvasElement, canvasEvents: string[]): void {\n this._viewer = viewer;\n }\n\n dispose(): void {}\n\n getDraggers(): Map<string, typeof OdBaseDragger> {\n return new Map<string, typeof OdBaseDragger>([\n [MarkupMode.Line, OdaLineDragger],\n [MarkupMode.Text, OdaTextDragger],\n ]);\n }\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 this._viewer.update();\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 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 getLayer(): any {\n throw new Error(\"Not implemented yet\");\n }\n\n createObject(type: string, params: any): IMarkupObject {\n throw new Error(\"Not implemented yet\");\n }\n\n getObjects(): IMarkupObject[] {\n throw new Error(\"Not implemented yet\");\n }\n\n getSelectedObjects(): IMarkupObject[] {\n throw new Error(\"Not implemented yet\");\n }\n\n selectObjects(objects: IMarkupObject[]): void {\n throw new Error(\"Not implemented yet\");\n }\n\n clearSelected(): void {\n throw new Error(\"Not implemented yet\");\n }\n}\n","import { IMarkup, MarkupType } from \"./IMarkup\";\nimport { KonvaMarkup } from \"./Impl/Konva/KonvaMarkup\";\nimport { VisualizeMarkup } from \"./Impl/Visualize/VisualizeMarkup\";\n\nexport class MarkupFactory {\n public static createMarkup(markupType: MarkupType): IMarkup {\n let markup;\n switch (markupType) {\n case MarkupType.Konva:\n markup = this.createKonva();\n break;\n\n case MarkupType.Visualize:\n markup = this.createVisualize();\n break;\n\n default:\n throw new Error(\"Error during Markup Initialization. Markup Type is unknown.\");\n break;\n }\n\n return markup;\n }\n\n private static createKonva(): IMarkup {\n return new KonvaMarkup();\n }\n\n private static createVisualize(): IMarkup {\n return new VisualizeMarkup();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, 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-2021 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 commands,\n IClippingPlane,\n IOptions,\n IOrthogonalCamera,\n IViewpoint,\n IViewer,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\n\nimport { OdBaseDragger } from \"./Draggers/Common/OdBaseDragger\";\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 } from \"./Markup/MarkupFactory\";\nimport { IMarkup, MarkupType } from \"./Markup/IMarkup\";\n\nconst OVERLAY_VIEW_NAME = \"$OVERLAY_VIEW_NAME\";\n\nconst isExist = (value) => value !== undefined && value !== null;\n\n/**\n * The `Client.js` library class that provides methods to integrate with the\n * [VisualizeJS](https://cloud.opendesign.com/docs/index.html#/visualizejs) library.\n */\n\nexport class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> implements IViewer {\n private _activeDragger: OdBaseDragger | 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 _abortControllerForReferences: AbortController | undefined;\n\n private canvaseventlistener: (event: Event) => void;\n\n public draggerFactory: Map<string, typeof OdBaseDragger>;\n public canvasEvents: string[];\n private frameId = 0;\n private _resizeObserver: ResizeObserver | undefined;\n public canvas: HTMLCanvasElement | undefined;\n public markup: IMarkup;\n\n public visualizeJs: any;\n public _abortController: AbortController | undefined;\n public _abortControllerForRequestMap: Map<string, AbortController> | undefined;\n public client: Client | undefined;\n\n /**\n * @param client - The `Client` instance that provides access to a server. Do not specify\n * `Client` if you need a standalone viewer instance without access to server models.\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 leave it undefined or blank to use the default URL defined by\n * `Client.js` you are using.\n *\n * _Note: Your own `VisualizeJS` library version must match the version of the `Client.js`\n * 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 update the `VisualizeJS` viewer and the active\n * dragger manually using the `update` event. Default is `true`.\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.markup = MarkupFactory.createMarkup(params.markupType ?? MarkupType.Konva);\n\n this.draggerFactory = new Map<string, typeof OdBaseDragger>();\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 const markupDraggers = this.markup.getDraggers();\n markupDraggers?.forEach((value, key) => {\n this.registerDragger(key, value);\n });\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\n /**\n * `VisualizeJS` parameters.\n */\n get options(): Options {\n return this._options;\n }\n\n /**\n * `VisualizeJS` library URL. Use {@link Viewer#configure | configure()} to change library URL.\n *\n * @readonly\n */\n get visualizeJsUrl(): string {\n return this._visualizeJsUrl;\n }\n\n /**\n * Change the viewer configuration parameters.\n *\n * @param params - An object containing new configuration parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own\n * library instance or leave it blank to use the default URL defined by `Client.js`.\n */\n configure(params: { visualizeJsUrl?: string }): this {\n this._visualizeJsUrl = params.visualizeJsUrl || \"VISUALIZE_JS_URL\";\n return this;\n }\n\n /**\n * A [Viewer]{@link Viewer} event measuring progress of loading a `VisualizeJS` library.\n *\n * @property {string} type - `visualizeprogress`\n * @property {number} loaded - A 64-bit unsigned integer value indicating the amount of work\n * already performed by the underlying process. The ratio of work done can be calculated by\n * dividing total by the value of this property.\n * @property {number} total - A 64-bit unsigned integer representing the total amount of work\n * that the underlying process is in the progress of performing.\n * @event visualizeprogress\n */\n\n /**\n * Load `VisualizeJS` module and initialize it with the specified canvas. Call\n * {@link Viewer#dispose | dispose()} to release allocated resources.\n *\n * @async\n * @param canvas - HTML `<canvas>` element for `VisualizeJS`.\n * @param onProgress - A callback function that handles events measuring progress of loading\n * of the `VisualizeJS` library. Retrieves {@link event:visualizeprogress | visualizeprogress} event.\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 const visualizeJs: any = await loadVisualizeJs(this.visualizeJsUrl, (ev) => {\n const { loaded, timeStamp, total, lengthComputable } = ev;\n const event = { loaded, timeStamp, total, lengthComputable, type: \"visualizeprogress\" } as ProgressEvent;\n onProgress?.(event);\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);\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 return this;\n }\n\n /**\n * Releases all resources allocated by this `Viewer` instance. Call this method before\n * release 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\n this._zoomWheelDragger?.dispose();\n this._gestureManager?.dispose();\n\n this.removeAllListeners();\n\n this._resizeObserver?.disconnect();\n this._resizeObserver = undefined;\n\n this.markup.dispose();\n\n this.canvasEvents.forEach((x) => this.canvas?.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n\n this.visualizeJs?.getViewer().clear();\n this.visualizeJs = undefined;\n\n return this;\n }\n\n /**\n * Returns `true` if `VisualizeJS` module has been loaded andinitialized.\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. Do nothing if the auto-update mode is disabled in the constructor (use\n * the `update` event to update viewer 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 /**\n * Update with internal schedule, need after change operation when have long update for\n * update without lock UI\n *\n * @param maxScheduleUpdateTimeInMs - Maximum time for one update, by default 30 ms\n * @param maxScheduleUpdateCount - Maximum count of schedule update\n * @returns return void Promise\n */\n\n private scheduleUpdateAsync(maxScheduleUpdateTimeInMs = 50): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => {\n try {\n this.visViewer()?.update(maxScheduleUpdateTimeInMs);\n this.activeDragger()?.updatePreview();\n resolve();\n } catch (e) {\n console.error(e);\n reject();\n }\n }, 0);\n });\n }\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 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 available draggers:\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 * Register dragger on draggerFactory.\n *\n * @param name - Dragger name.\n * @param dragger - Dragger class.\n */\n public registerDragger(name: string, dragger: typeof OdBaseDragger): 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(): any | null {\n return this._activeDragger;\n }\n\n /**\n * Set active dragger. `Viewer` must be {@link Viewer#initialize | initialized} before enable\n * dragger or exception is thrown.\n *\n * Fires:\n *\n * - {@link ChangeActiveDragger | changeactivedragger}\n *\n * @param name - Dragger name. Can be one of the {@link Viewer#draggers | draggers} list.\n * @returns Returns active dragger instance or `null` if there is no dragger with the given name.\n */\n setActiveDragger(name: string): OdBaseDragger | null {\n if (this._activeDragger?.name !== name) {\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\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 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 * Reset 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 * Remove 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 * Remove markup overlay.\n */\n clearOverlay(): void {\n this.markup.clearOverlay();\n }\n\n /**\n * Synchronize markup overlay.\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 overlayModel = visViewer.getMarkupModel();\n const pDevice = visViewer.getActiveDevice();\n\n overlayView = pDevice.createView(OVERLAY_VIEW_NAME, false);\n overlayView.addModel(overlayModel);\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.update();\n\n return overlayView;\n }\n\n /**\n * Returns `true` if current drawing is 3D drawing.\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 /**\n * Returns a list of original handles for the selected entities.\n */\n getSelected(): string[] {\n return this.executeCommand(\"getSelected\");\n }\n\n /**\n * Select model entities by original handles that are obtained using\n * {@link File.getProperties | File.getProperties()} or\n * {@link File.searchProperties | File.searchProperties()} methods.\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 /**\n * Load model references into the viewer. References are images, fonts, or any other files to\n * correct rendering of the model.\n *\n * @async\n * @param model - Instance of model with references. If a `File` instance is specified\n * instead of a model, the file references will be loaded.\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 // Internal loading routines\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 model of a file or assembly into the viewer.\n *\n * This method requires a [Client]{@link Client | Client} instance to work. For standalone\n * viewer instance use {@link Viewer#openVsfFile | openVsfFile()} or\n * {@link Viewer#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 * @async\n * @param file - File or Assembly or Model instance to load. If a `File` instance with\n * multiple models is specified, the default model will be loaded. If there is no default\n * model, 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 Viewer#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.\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 * Get markup color.\n *\n * @returns Color with `RGB` values.\n */\n getMarkupColor(): { r: number; g: number; b: number } {\n return this.markup.getMarkupColor();\n }\n\n /**\n * Set markup 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 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 * Colorize all markup entities 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 colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n this.markup.colorizeAllMarkup(r, g, b);\n }\n\n /**\n * Add an empty 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 * Draw a viewpoint. To get a list of available model viewpoints, use the\n * {@link Model#getViewpoints | Model.getViewpoints()} or\n * {@link File#getViewpoints | File.getViewpoints()}.\n *\n * @param viewpoint - Viewpoint.\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 * Create a viewpoint. To add a viewpoint to the list of model viewpoints, use the\n * {@link Model#saveViewpoint | Model.saveViewpoint()} or\n * {@link File#saveViewpoint | 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"],"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","composeMatrixFromTransform","translate","rotate","scale","modelCenter","matrix","translateMatrix","setTranslation","x","y","z","rotateMatrix","setToRotation","angle","scaleMatrix","setToScaling","postMultBy","applyModelTransform","model","visualizeJs","getModelTransformMatrix","visLib","visViewer","getViewer","modelItr","getModelIterator","done","step","modelPtr","getModel","transform","getDatabaseHandle","extents","getExtents","rotation","center","Matrix3d","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","zoomToObjects","zoomToSelected","EventEmitter2","_listeners","addEventListener","listener","removeEventListener","listeners","length","removeAllListeners","event","invoke","slice","on","off","OdaGeAction","module","setViewParams","params","extView","m_module","getActiveTvExtendedView","setView","target","upVector","viewFieldWidth","viewFieldHeight","perspective","getViewParams","view","obj","viewPosition","viewTarget","getMarkupModel","copyPoint","point","p","Point3d","createVector3d","Vector3d","createPoint3d","createMatrix3d","createPlane","OdTvPlane","toVector","geVector","createFromArray","toGeVector","v","toGePoint","toPoint","gePoint","screenToWorld","toDoubleArray","points","i","correctCameraTarget","ext","getActiveExtents","min","max","contains","CLICK_DELTA","INTERACTIVITY_FPS","OdBaseDragger","subject","super","beginInteractivity","endInteractivity","device","getActiveDevice","invalidate","width","height","needInputText","mouseDownPosition","autoSelect","onmessage","canvasEvents","initialize","bind","setEnableAutoSelect","dispose","relativeCoords","offsetX","devicePixelRatio","offsetY","pointerdown","ev","isPrimary","isGestureActive","setPointerCapture","pointerId","relCoord","isDragging","start","clientX","clientY","pointerup","needSkipPointerUp","releasePointerCapture","end","pointercancel","dispatchEvent","PointerEvent","pointermove","drag","movementX","movementY","click","isNotDragging","Math","abs","getEnableAutoSelect","select","dblclick","clickView","viewAt","active","pSelected","entity","zoomToEntity","deleteAll","absoluteX","absoluteY","getActiveMarkupEntity","entityName","addMarkupEntity","syncOverlayView","syncOverlay","objects","updatePreview","_isGestureActive","_needSkipPointerUp","createHtmlElementIfNeed","element","targetElement","dataTestId","document","createElement","setAttribute","appendChild","destroyHtmlElement","removeChild","worldToScreen","moduleInstance","worldPoint","avp","mtx","worldToDeviceMatrix","devicePoint","transformBy","res","getDistance","gePoint1","gePoint2","tvPoint1","tvPoint2","distance","distanceTo","toFixed","normalizeFloat","ceil","floor","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","dx","dy","atan","PI","size","sqrt","pow","onSetCallback","cb","onclick","onSetSelectivity","enable","style","pointerEvents","MeasureLineItem","htmlElemStartPoint","htmlElemEndPoint","htmlElemLine","htmlElemTitle","startPoint","endPoint","unit","lineThickness","border","background","color","boxShadow","utils.createHtmlElementIfNeed","isFinishDraw","drawMeasureLine","pointSize","rect","getBoundingClientRect","pScreenStart","utils.worldToScreen","utils.isInsideRect","display","cursor","top","left","borderRadius","zIndex","pScreenEnd","point1","point2","utils.getDataForDrawLineWithFixed","transformOrigin","pX","pY","widthTitle","font","padding","textAlign","innerHTML","utils.getDistance","setStartPoint","setEndPoint","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","body","resize","remove","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","code","add","timestamp","requestAnimationFrame","deltaTS","currentDelta","keyCode","moveForward","moveBackward","moveLeft","moveRight","moveUp","moveDown","dltX","dltY","turnLeft","turnDown","pCamera","camera","openObjectAsCamera","dir","direction","up","pos","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","setColor","kFaces","kEdges","setLineWeight","setTransparency","appendPolygon","polygonPtr","openAsPolygon","setFilled","setPoints","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","dX","dY","OdPanDragger","_panAction","ZoomAction","zoomFactor","zoomAt","OdZoomDragger","_zoomAction","pressX","pressY","ZOOM_SPEED","INTERACTIVITY_TIME_OUT","OdZoomWheelDragger","_endInteractivityTimeOutId","_isEnableInteractivityMode","wheel","preventDefault","zoomReverse","zoomSpeed","deltaY","clearTimeout","setTimeout","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","Promise","resolve","reject","script","src","async","onload","onerror","Error","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","name","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","file","pendingRanges","requestNumber","pendingRequest","number","concat","request","once","attachPartialResolver","catch","LoaderFactory","create","split","pop","MarkupType","MarkupMode","MarkupColor","HexColor","_hex","RGB","R","G","B","rgbToHex","valueToHex","c","hex","toString","LineTypeSpecs","KonvaLine","ref","_ref","konvaPoints","Konva","Line","stroke","strokeWidth","_b","globalCompositeOperation","lineCap","lineJoin","draggable","strokeScaleEnabled","dash","_id","enableMouseEditing","getColor","getRotation","setRotation","degrees","getZIndex","setZIndex","destroy","getPoints","setLineWidth","getLineWidth","getLineType","typeSpecs","setLineType","specs","addPoints","newPoints","KonvaText","TEXT_FONT_FAMILY","text","Text","fontSize","fontFamily","fill","align","_c","getText","setText","getPosition","setPosition","getFontSize","setFontSize","KonvaRectangle","Rect","lineWidth","_d","getWidth","getHeigth","setWidth","w","setHeight","h","KonvaEllipse","Ellipse","radiusX","radius","radiusY","getRadiusX","setRadiusX","getRadiusY","setRadiusY","KonvaArrow","Arrow","getStartPoint","getEndPoint","KonvaImage","_ratio","_canvasImage","image","Image","getSrc","setSrc","getHeight","KonvaCloud","arcRadius","Shape","sceneFunc","context","shape","calculateMidpoint","midX","midY","midPoint","baseArcLength","beginPath","iPoint","approxArcLength","arcCount","lengthMod","pEndX","pEndY","endAngle","startAngle","counterClockwise","iArc","arc","closePath","fillStrokeShape","className","e","attrs","minWidth","minHeight","newWidth","scaleX","newHeight","scaleY","getSelfRect","MarkupMode2Konva","initializer","Rectangle","Cloud","KonvaMarkup","_isInitialized","_zIndex","_markupContainerName","changeActiveDragger","draggerName","_markupContainer","_canvasOriginal","startsWith","toLowerCase","join","removeTextInput","markupMode","konvaMode","_markupMode","_markupIsActive","_konvaTransformer","nodes","_konvaStage","clientWidth","clientHeight","pan","values","mode","konvaLayerFind","move","redirectToViewer","_viewer","_canvasEvents","outline","parentDiv","parentElement","_markupColor","initializeKonva","destroyKonva","getDraggers","getMarkupColor","colorizeAllMarkup","konvaObj","_konvaLayer","setViewpoint","viewpoint","markupColor","custom_fields","markup_color","loadMarkup","getViewpoint","lines","texts","arrows","clouds","ellipses","images","rectangles","snapshot","combineMarkupWithDrawing","fillViewpointShapes","Date","toDateString","createObject","object","addObject","getObjects","line","rectangle","ellipse","arrow","cloud","getSelectedObjects","konvaShapeName","selectObjects","selectedObjs","clearSelected","getPoint3dFromArray","array","markupLines","getMarkupLines","markupTexts","getMarkupTexts","markupRectangles","getMarkupRectangles","markupEllipses","getMarkupEllipses","markupArrows","getMarkupArrows","markupImages","getMarkupImages","markupClouds","getMarkupClouds","markupShape","konvaShape","konvaShapes","find","parent","Layer","Stage","container","stage","layer","pixelRation","transformer","Transformer","shouldOverdrawWholeArea","isPaint","lastLine","getPointerPosition","addLine","addRectangle","addEllipse","addArrow","addCloud","_textInputRef","addText","_textInputPos","_textInputAngle","createTextInput","evt","pageX","pageY","rotateEnabled","metaPressed","shiftKey","ctrlKey","metaKey","isSelected","indexOf","splice","tabIndex","focus","trNodes","linePoints","worldPoints","absoluteTransform","getAbsoluteTransform","atPoint","konvaLine","textSize","textScale","projMtrx","projectionMatrix","mtrxNumber","tol","text_size","font_size","line_width","atStartPoint","worldStartPoint","atEndPoint","worldEndPoint","vpLine","screenPoint","vpText","vpRect","vpEllipse","_e","vpArrow","_f","vpCloud","_g","vpImage","addImage","tempCanvas","ctx","getContext","drawImage","toCanvas","pixelRatio","inputX","inputY","onkeydown","specifiedText","konvaText","konvaRectangle","konvaEllipse","konvaArrow","konvaCloud","konvaImage","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","geomData","appendText","textPtr","openAsText","setNormal","setTextSize","VisualizeMarkup","clearEntities","getEntitiesIterator","getLogicalPoint3dAsArray","point3d","getPoint3d","entityData","normal","getLogicalPoint3dFromArray","geomItr","getGeometryDataIterator","geometryId","getGeometryData","polylinePtr","openAsPolyline","getString","getTextSize","getLayer","MarkupFactory","createMarkup","markupType","markup","createKonva","Visualize","createVisualize","OVERLAY_VIEW_NAME","isExist","Viewer","client","_visualizeJsUrl","frameId","configure","_options","_activeDragger","_zoomWheelDragger","_gestureManager","_renderTime","draggerFactory","registerDragger","markupDraggers","canvaseventlistener","_enableAutoUpdate","enableAutoUpdate","_isNeedRender","_isRunAsyncUpdate","render","visualizeJsUrl","onProgress","touchAction","loaded","timeStamp","total","lengthComputable","_resizeObserver","ResizeObserver","observe","cancel","disconnect","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","overlayModel","pDevice","createView","addModel","addSibling","addView","viewPort","getViewport","setViewport","is3D","extHeight","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","view_point","up_vector","field_width","field_height","settings","cuttingPlane","getCuttingPlane","location","getOrigin","clippingPlanes"],"mappings":"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"}