@inweb/viewer-visualize 26.12.7 → 27.1.1

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":["../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/OdJoyStickDragger.ts","../src/Viewer/Draggers/OdaWalkDragger.ts","../src/Viewer/Draggers/OdaFlyDragger.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/index.ts","../src/Viewer/Commands/ApplyModelTransform.ts","../src/Viewer/Commands/ClearMarkup.ts","../src/Viewer/Commands/ClearSelected.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/GetSelected2.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/SetSelected2.ts","../src/Viewer/Commands/ShowAll.ts","../src/Viewer/Commands/ZoomToExtents.ts","../src/Viewer/Commands/ZoomToObjects.ts","../src/Viewer/Commands/ZoomToSelected.ts","../src/Viewer/Commands/AutoTransformAllModelsToCentralPoint.ts","../src/Viewer/Commands/index.ts","../src/Viewer/Components/CameraComponent.ts","../src/Viewer/Components/RenderLoopComponent.ts","../src/Viewer/Components/ResizeCanvasComponent.ts","../src/Viewer/Components/ZoomWheelComponent.ts","../src/Viewer/Draggers/Common/GestureManager.ts","../src/Viewer/Components/GestureManagerComponent.ts","../src/Viewer/Components/ResetComponent.ts","../src/Viewer/Components/index.ts","../src/Viewer/Models/ModelImpl.ts","../src/Viewer/Loaders/FileLoader.ts","../src/Viewer/Loaders/VSFFileLoader.ts","../src/Viewer/Loaders/VSFCloudLoader.ts","../src/Viewer/Loaders/VSFXFileLoader.ts","../src/Viewer/Loaders/VSFXCloudLoader.ts","../src/Viewer/Loaders/UpdateController.ts","../src/Viewer/Loaders/VSFXCloudStreamingLoader.ts","../src/Viewer/Loaders/VSFXCloudPartialLoader.ts","../src/Viewer/Loaders/index.ts","../src/Viewer/utils.ts","../src/Viewer/Draggers/OdaLineDragger.ts","../src/Viewer/Draggers/OdaTextDragger.ts","../src/Viewer/Markup/Visualize/VisualizeMarkup.ts","../src/Viewer/Markup/MarkupFactory.ts","../src/Viewer/Viewer.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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-2025, 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-2025 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 { CANVAS_EVENTS } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../../Viewer\";\nimport { Point2d } from \"./Geometry\";\nimport { OdaGeAction } from \"./OdaGeAction\";\n\nconst CLICK_DELTA = 5;\n\nconst INTERACTIVITY_FPS = 24;\n\nexport class OdBaseDragger extends OdaGeAction {\n protected subject: Viewer;\n protected needInputText: boolean;\n protected mouseDownPosition: Point2d;\n protected autoSelect: boolean;\n protected onmessage: (event: any) => boolean;\n protected canvasEvents: string[];\n protected isDragging: boolean;\n protected press: boolean;\n\n public name: string;\n\n constructor(subject: Viewer) {\n super(subject.visualizeJs);\n this.subject = subject;\n this.needInputText = false;\n this.mouseDownPosition = { x: 0, y: 0 };\n this.autoSelect = false;\n\n this.onmessage = (event) => this.subject.emitEvent(event);\n this.canvasEvents = CANVAS_EVENTS;\n }\n\n public initialize(): void {\n this.canvasEvents = this.canvasEvents.filter((x) => typeof this[x] === \"function\");\n this.canvasEvents.forEach((x) => (this[x] = this[x].bind(this)));\n this.canvasEvents.forEach((x) => this.subject.on(x, this[x]));\n\n this.getViewer().setEnableAutoSelect(!!this.autoSelect);\n }\n\n public dispose(): void {\n this.canvasEvents.forEach((x) => this.subject.off(x, this[x]));\n }\n\n protected relativeCoords(event: MouseEvent): Point2d {\n return { x: event.offsetX * window.devicePixelRatio, y: event.offsetY * window.devicePixelRatio };\n }\n\n protected pointerdown(ev: PointerEvent): void {\n if (!ev.isPrimary || OdBaseDragger.isGestureActive) {\n return;\n }\n\n (ev.target as HTMLElement).setPointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.isDragging = true;\n this.mouseDownPosition = { x: relCoord.x, y: relCoord.y };\n this.start(relCoord.x, relCoord.y, ev.clientX, ev.clientY);\n this.subject.update();\n }\n\n protected pointerup(ev: PointerEvent): void {\n if (OdBaseDragger.needSkipPointerUp) {\n return;\n }\n\n if (!ev.isPrimary) {\n return;\n }\n\n (ev.target as HTMLElement).releasePointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.end(relCoord.x, relCoord.y, ev.clientX, ev.clientY);\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.clientX, ev.clientY);\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\n this.onmessage({ type: \"select\", data: selectionSet, handles: this.subject.getSelected() });\n this.onmessage({ type: \"select2\", data: selectionSet, handles: this.subject.getSelected2() });\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, absoluteX = 0, absoluteY = 0): 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-2025, 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-2025 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-2025, 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-2025 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 * 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 scale: number;\n protected unit: string;\n protected precision: any;\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.scale = 1.0;\n this.unit = \"\";\n this.precision = 2;\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();\n\n const pX = p1.x + dx / 2;\n const pY = p1.y + dy / 2;\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}px`;\n this.htmlElemTitle.style.transform = \"translate(-50%, -50%)\";\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 = this.formatDistance(distance);\n } else {\n this.htmlElemLine.style.display = \"none\";\n this.htmlElemTitle.style.display = \"none\";\n }\n }\n }\n\n getDistance(): number {\n let distance = utils.getDistance(this.startPoint, this.endPoint, this.moduleInstance);\n if (Math.abs(this.scale) > 1e-10) distance /= this.scale;\n return distance;\n }\n\n calculatePrecision(value: number) {\n const distance = Math.abs(value);\n\n if (distance >= 1000) return 0;\n if (distance >= 10) return 1;\n if (distance >= 0.1) return 2;\n if (distance >= 0.001) return 3;\n\n return distance > 0 ? Math.floor(-Math.log10(distance)) + 1 : 2;\n }\n\n formatDistance(distance: number): string {\n let digits: number;\n\n if (this.precision === \"Auto\") digits = this.calculatePrecision(distance);\n else if (Number.isFinite(this.precision)) digits = this.precision;\n else digits = parseFloat(this.precision);\n\n if (!Number.isFinite(digits)) digits = 2;\n else if (digits < 0) digits = 0;\n else if (digits > 10) digits = 10;\n\n let result = distance.toFixed(digits);\n if (this.precision === \"Auto\") result = result.replace(/\\.0+$/, \"\").replace(/\\.$/, \"\");\n if (+result !== distance) result = \"~ \" + result;\n\n return `${result} ${this.unit}`;\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 setPrecision(precision: any): void {\n this.precision = precision;\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-2025, 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-2025 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\";\nimport { IOptions } from \"@inweb/viewer-core\";\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 items: MeasureLineItem[];\n protected m_overlayElement: HTMLElement;\n protected previewMeasureLine: MeasureLineItem;\n protected conversionFactor: number;\n protected rulerUnitTable: any;\n protected rulerUnit: string;\n protected rulerPrecision: any;\n\n constructor(subject: Viewer) {\n super(subject);\n\n this.lineThickness = 2;\n this.press = false;\n this.gripingRadius = 5.0;\n this.firstPoint = null;\n this.secondPoint = null;\n\n this.rulerUnitTable = {\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 Mils: \"mil\",\n MicroInches: \"µin\",\n Default: \"unit\",\n };\n\n this.rulerUnit = subject.options.rulerUnit ?? \"Default\";\n this.rulerPrecision = subject.options.rulerPrecision ?? \"Default\";\n\n this.items = [];\n this.canvasEvents.push(\"resize\", \"optionsChange\");\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 this.subject.addEventListener(\"optionschange\", this.optionsChange);\n\n this.resize();\n }\n\n override dispose(): void {\n super.dispose();\n this.m_overlayElement.remove();\n this.subject.removeEventListener(\"optionschange\", this.optionsChange);\n }\n\n override updatePreview(): void {\n this.items.forEach((item) => item.update());\n }\n\n resize(): void {\n const rect = this.m_module.canvas.getBoundingClientRect();\n\n this.m_overlayElement.style.top = `${rect.top}px`;\n this.m_overlayElement.style.left = `${rect.left}px`;\n this.m_overlayElement.style.width = `${rect.width}px`;\n this.m_overlayElement.style.height = `${rect.height}px`;\n }\n\n getSnapPointRadius(): number {\n const view = this.getViewer().activeView;\n const corners = view.viewDcCorners();\n\n const pt1 = corners.lowerLeft;\n const pt2 = corners.upperRight;\n\n pt2[0] -= pt1[0];\n pt2[1] -= pt1[1];\n\n return Math.min(pt2[0], pt2[1]) / 120;\n }\n\n override start(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (point) {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n }\n\n override drag(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (this.isDragging) {\n if (point) {\n if (this.firstPoint) {\n this.secondPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.secondPoint, true);\n } else {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n } else {\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.getViewer().screenToWorld(x, y), false);\n }\n } else {\n if (point) {\n this.previewMeasureLine.setStartPoint(point);\n } else {\n this.previewMeasureLine.clear();\n }\n }\n }\n\n override end(): void {\n if (this.firstPoint && this.secondPoint) {\n const newLineMeasure = this.createMeasureLine();\n newLineMeasure.setStartPoint(this.firstPoint);\n newLineMeasure.setEndPoint(this.secondPoint, true);\n }\n this.firstPoint = null;\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n }\n\n createNewMeasureIfNeed(): void {\n if (!this.previewMeasureLine) {\n this.previewMeasureLine = this.createMeasureLine();\n }\n }\n\n createMeasureLine(): MeasureLineItem {\n const viewer = this.m_module.getViewer();\n const item = new MeasureLineItem(this.m_overlayElement, viewer, this.m_module);\n\n item.lineThickness = this.lineThickness || item.lineThickness;\n\n const isDefaultUnit = this.rulerUnit === \"Default\";\n const isDefaultPrecision = this.rulerPrecision === \"Default\";\n\n item.setUnit(renameUnit(this.rulerUnitTable, isDefaultUnit ? viewer.getUnit() : this.rulerUnit));\n\n if (!isDefaultUnit) {\n const fromUnit = this.getKUnitByName(viewer.getUnit());\n const toUnit = this.getKUnitByName(this.subject.options.rulerUnit);\n const multiplier = viewer.getUnitsConversionCoef(fromUnit, toUnit);\n this.conversionFactor = 1 / multiplier;\n item.setConversionFactor(this.conversionFactor);\n } else {\n item.setConversionFactor(1.0);\n }\n\n if (!isDefaultPrecision) {\n item.setPrecision(this.rulerPrecision);\n } else {\n item.setPrecision(2);\n }\n\n this.items.push(item);\n return item;\n }\n\n optionsChange(event): void {\n const options: IOptions = event.data;\n const toUnitName = options.rulerUnit ?? \"Default\";\n const toPrecision = options.rulerPrecision ?? \"Default\";\n\n const unitChanged = this.rulerUnit !== toUnitName;\n const precisionChanged = this.rulerPrecision !== toPrecision;\n\n if (!unitChanged && !precisionChanged) return;\n\n this.rulerUnit = toUnitName;\n this.rulerPrecision = toPrecision;\n\n const drawingUnit = this.m_module.getViewer().getUnit();\n const eToUnit = this.getKUnitByName(toUnitName);\n const eFromUnit = this.getKUnitByName(drawingUnit);\n\n this.items.forEach((item) => {\n if (unitChanged) {\n if (toUnitName === \"Default\") {\n item.setUnit(renameUnit(this.rulerUnitTable, drawingUnit));\n item.setConversionFactor(1.0);\n } else {\n item.setUnit(renameUnit(this.rulerUnitTable, toUnitName));\n const multiplier = this.m_module.getViewer().getUnitsConversionCoef(eFromUnit, eToUnit);\n this.conversionFactor = 1 / multiplier;\n item.setConversionFactor(this.conversionFactor);\n }\n }\n if (precisionChanged) {\n if (toPrecision === \"Default\") {\n item.setPrecision(2);\n } else {\n item.setPrecision(toPrecision);\n }\n }\n });\n }\n\n getKUnitByName(unitName: string): any {\n let eUnit = this.m_module.Units.kUserDefined;\n switch (unitName) {\n case \"Millimeters\":\n eUnit = this.m_module.Units.kMillimeters;\n break;\n case \"Centimeters\":\n eUnit = this.m_module.Units.kCentimeters;\n break;\n case \"Meters\":\n eUnit = this.m_module.Units.kMeters;\n break;\n case \"Feet\":\n eUnit = this.m_module.Units.kFeet;\n break;\n case \"Inches\":\n eUnit = this.m_module.Units.kInches;\n break;\n case \"Yards\":\n eUnit = this.m_module.Units.kYards;\n break;\n case \"Kilometers\":\n eUnit = this.m_module.Units.kKilometers;\n break;\n case \"Miles\":\n eUnit = this.m_module.Units.kMiles;\n break;\n case \"Micrometers\":\n eUnit = this.m_module.Units.kMicrometers;\n break;\n case \"Mils\":\n eUnit = this.m_module.Units.kMils;\n break;\n case \"MicroInches\":\n eUnit = this.m_module.Units.kMicroInches;\n break;\n default:\n break;\n }\n return eUnit;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\n// ===================== AI-CODE-FILE ======================\n// Source: Claude Sonnet 4.5\n// Date: 2025-10-07\n// Reviewer: vitaly.ivanov@opendesign.com\n// Issue: CLOUD-5851\n// Notes: Originally AI-generated, modified manually\n// =========================================================\n\ninterface JoyStickStatus {\n x: number;\n y: number;\n global: any;\n}\n\nexport class OdJoyStickDragger {\n private onMouseDown: (event?: any) => void;\n private onMouseMove: (event: any) => void;\n private onMouseUp: (event?: any) => void;\n private drawExternal: () => void;\n private drawInternal: () => void;\n private canvas: HTMLCanvasElement;\n private onResize: () => void;\n private hasEventListeners: boolean = false;\n private container: HTMLElement;\n\n constructor(\n global: any,\n container: HTMLElement,\n callback: (status: JoyStickStatus) => void,\n canvasElement?: HTMLCanvasElement\n ) {\n const internalLineWidth = 2;\n const internalStrokeColor = \"#003300\";\n const externalLineWidth = 2;\n const externalStrokeColor = \"#35436E\";\n\n this.container = container;\n this.container.style.touchAction = \"none\";\n\n this.canvas = document.createElement(\"canvas\");\n this.canvas.id = \"odJoyStickCanvas\";\n this.canvas.width = 200;\n this.canvas.height = 200;\n this.container.appendChild(this.canvas);\n const context = this.canvas.getContext(\"2d\")!;\n\n let pressed = 0;\n const circumference = 2 * Math.PI;\n const internalRadius = (this.canvas.width - (this.canvas.width / 2 + 10)) / 2;\n const maxMoveStick = internalRadius + 5;\n const externalRadius = internalRadius + 30;\n const centerX = this.canvas.width / 2;\n const centerY = this.canvas.height / 2;\n let movedX = centerX;\n let movedY = centerY;\n\n this.onMouseDown = () => {\n event.preventDefault();\n pressed = 1;\n };\n\n this.onMouseMove = (event) => {\n event.preventDefault();\n if (pressed === 1) {\n movedX = event.pageX;\n movedY = event.pageY;\n if (this.canvas.offsetParent && (this.canvas.offsetParent as HTMLElement).tagName.toUpperCase() === \"BODY\") {\n movedX -= this.canvas.offsetLeft;\n movedY -= this.canvas.offsetTop;\n } else if (this.canvas.offsetParent) {\n movedX -= (this.canvas.offsetParent as HTMLElement).offsetLeft;\n movedY -= (this.canvas.offsetParent as HTMLElement).offsetTop;\n }\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.drawExternal();\n this.drawInternal();\n callback({\n x: 100 * ((movedX - centerX) / maxMoveStick),\n y: 100 * ((movedY - centerY) / maxMoveStick) * -1,\n global,\n });\n }\n };\n\n this.onMouseUp = () => {\n event.preventDefault();\n pressed = 0;\n movedX = centerX;\n movedY = centerY;\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.drawExternal();\n this.drawInternal();\n callback({\n x: 100 * ((movedX - centerX) / maxMoveStick),\n y: 100 * ((movedY - centerY) / maxMoveStick) * -1,\n global,\n });\n };\n\n this.drawExternal = () => {\n context.beginPath();\n context.arc(centerX, centerY, externalRadius, 0, circumference, false);\n context.lineWidth = externalLineWidth;\n context.strokeStyle = externalStrokeColor;\n context.globalAlpha = 0.5;\n context.stroke();\n };\n\n this.drawInternal = () => {\n context.beginPath();\n if (movedX < internalRadius) {\n movedX = maxMoveStick;\n }\n if (movedX + internalRadius > this.canvas.width) {\n movedX = this.canvas.width - maxMoveStick;\n }\n if (movedY < internalRadius) {\n movedY = maxMoveStick;\n }\n if (movedY + internalRadius > this.canvas.height) {\n movedY = this.canvas.height - maxMoveStick;\n }\n context.arc(movedX, movedY, internalRadius, 0, circumference, false);\n context.fillStyle = externalStrokeColor;\n context.lineWidth = internalLineWidth;\n context.strokeStyle = internalStrokeColor;\n context.globalAlpha = 0.5;\n context.fill();\n context.stroke();\n };\n\n const addEventListeners = () => {\n if (!this.hasEventListeners) {\n this.canvas.addEventListener(\"pointerdown\", this.onMouseDown, false);\n document.addEventListener(\"pointermove\", this.onMouseMove, false);\n document.addEventListener(\"pointerup\", this.onMouseUp, false);\n this.hasEventListeners = true;\n }\n };\n\n const removeEventListeners = () => {\n if (this.hasEventListeners) {\n this.canvas.removeEventListener(\"pointerdown\", this.onMouseDown, false);\n document.removeEventListener(\"pointermove\", this.onMouseMove, false);\n document.removeEventListener(\"pointerup\", this.onMouseUp, false);\n this.hasEventListeners = false;\n }\n };\n\n const updateContainerPosition = () => {\n if (canvasElement) {\n const rect = canvasElement.getBoundingClientRect();\n this.container.style.top = `${rect.height - 200}px`;\n this.container.style.left = `${rect.left}px`;\n this.container.style.width = `200px`;\n this.container.style.height = `200px`;\n }\n };\n\n const updateVisibility = () => {\n const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n const isNarrowScreen = window.innerWidth < 1024;\n const shouldShow = isMobile || isNarrowScreen;\n\n if (shouldShow) {\n this.container.style.display = \"block\";\n addEventListeners();\n } else {\n this.container.style.display = \"none\";\n removeEventListeners();\n }\n };\n\n this.onResize = () => {\n updateVisibility();\n setTimeout(updateContainerPosition, 500);\n };\n\n updateVisibility();\n updateContainerPosition();\n window.addEventListener(\"resize\", this.onResize, false);\n\n this.drawExternal();\n this.drawInternal();\n }\n\n cleanup(): void {\n window.removeEventListener(\"resize\", this.onResize, false);\n\n if (this.hasEventListeners) {\n this.canvas.removeEventListener(\"pointerdown\", this.onMouseDown, false);\n document.removeEventListener(\"pointermove\", this.onMouseMove, false);\n document.removeEventListener(\"pointerup\", this.onMouseUp, false);\n this.hasEventListeners = false;\n }\n\n this.canvas.remove();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\";\nimport { OdJoyStickDragger } from \"./OdJoyStickDragger\";\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 baseSpeed: 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 lastFrameJoyStickTS: number;\n protected animationId: any;\n protected deltaAngle: number;\n protected enableZoomWheelPreviousValue: boolean;\n protected dragPosition: Point2d;\n protected joyStickOverlayElement: HTMLDivElement;\n protected joyStickDragger: OdJoyStickDragger;\n protected isJoyStickMoving: boolean;\n protected lastJoyStickCoord: Point2d;\n\n constructor(subject: Viewer) {\n super(subject);\n this.viewer = undefined;\n\n this.multiplier = 5;\n this.baseSpeed = 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.lastFrameJoyStickTS = 0;\n this.animationId = undefined;\n this.processMovement = this.processMovement.bind(this);\n this.processJoyStickMovement = this.processJoyStickMovement.bind(this);\n\n this.deltaAngle = Math.PI / 3600;\n this.autoSelect = true;\n\n this.isJoyStickMoving = false;\n this.addJoyStickDragger(subject.canvas.parentElement);\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.baseSpeed = 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 // CLOUD-5359 Demo Viewer crashes after the Walk Mode\n this.subject.update(true);\n this.subject.options.enableZoomWheel = this.enableZoomWheelPreviousValue;\n\n this.joyStickOverlayElement.remove();\n this.joyStickDragger.cleanup();\n }\n\n keydown(ev: KeyboardEvent) {\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: KeyboardEvent) {\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: number) {\n this.animationId = requestAnimationFrame(this.processMovement);\n\n if (this.lastFrameTS !== 0) {\n const deltaTS = timestamp - this.lastFrameTS;\n if (deltaTS > 0) {\n const currentDelta = this.multiplier * deltaTS * this.baseSpeed;\n\n Array.from(this.keyPressMap).forEach((keyCode) => {\n switch (keyCode) {\n case \"KeyW\":\n this.moveForward(currentDelta);\n break;\n case \"KeyS\":\n this.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\n this.proceedChangeCamera();\n }\n }\n\n this.lastFrameTS = timestamp;\n }\n\n override start(x: number, y: number): void {\n this.dragPosition = { x, y };\n }\n\n override drag(x: number, y: number) {\n if (this.cameraId && this.isDragging) {\n const dltX = x - this.dragPosition.x;\n const dltY = y - this.dragPosition.y;\n this.dragPosition = { x, y };\n\n if (dltX !== 0.0) this.turnLeft(-dltX * this.deltaAngle);\n if (dltY !== 0.0) this.cameraWalker.turnDown(dltY * this.deltaAngle);\n\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n }\n\n moveForward(currentDelta: number) {\n const { Vector3d } = this.m_module;\n\n const camera = this.cameraWalker.camera().openObjectAsCamera();\n const target = Vector3d.createFromArray(camera.target());\n const dir = Vector3d.createFromArray(camera.direction());\n const up = Vector3d.createFromArray(camera.upVector());\n const pos = Vector3d.createFromArray(camera.position());\n let move = Vector3d.createFromArray([dir.x, dir.y, 0]);\n if (Math.abs(dir.x) > 0.001 && Math.abs(dir.y) > 0.001) {\n move.setToProduct(move.normalize(), currentDelta);\n } else {\n move = Vector3d.createFromArray([0, currentDelta, 0]);\n }\n\n const newPos = pos.add(move);\n const newTarget = target.add(move);\n\n camera.setupCamera(newPos.toArray(), newTarget.toArray(), up.toArray());\n }\n\n moveBackward(currentDelta: number) {\n this.moveForward(-currentDelta);\n }\n\n turnLeft(angle: number) {\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: any) {\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: any) {\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 addJoyStickDragger(parentElement: HTMLElement) {\n this.joyStickOverlayElement = document.createElement(\"div\");\n this.joyStickOverlayElement.id = \"joyStickDiv\";\n this.joyStickOverlayElement.style.background = \"rgba(0,0,0,0)\";\n this.joyStickOverlayElement.style.position = \"fixed\";\n this.joyStickOverlayElement.style.zIndex = \"0\";\n parentElement.appendChild(this.joyStickOverlayElement);\n\n this.joyStickDragger = new OdJoyStickDragger(\n this,\n this.joyStickOverlayElement,\n (stickData) => {\n if (Math.sqrt(stickData.x * stickData.x + stickData.y * stickData.y) > 20) {\n this.lastJoyStickCoord = { x: stickData.x, y: stickData.y };\n if (!this.animationId && !this.isJoyStickMoving) {\n this.isJoyStickMoving = true;\n this.processJoyStickMovement(0);\n }\n } else {\n this.isJoyStickMoving = false;\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n this.lastFrameJoyStickTS = 0;\n }\n },\n this.m_module.canvas\n );\n }\n\n processJoyStickMovement(timestamp: number) {\n if (!this.isJoyStickMoving) return;\n this.animationId = requestAnimationFrame(this.processJoyStickMovement);\n\n if (this.lastFrameJoyStickTS !== 0) {\n const deltaTS = timestamp - this.lastFrameJoyStickTS;\n if (deltaTS > 0) {\n const maxJoystickDistance = 100;\n const forward = this.lastJoyStickCoord.y / maxJoystickDistance;\n const right = this.lastJoyStickCoord.x / maxJoystickDistance;\n\n const currentDelta = this.multiplier * deltaTS * this.baseSpeed;\n this.moveTotal(currentDelta, forward, right);\n }\n }\n\n this.lastFrameJoyStickTS = timestamp;\n }\n\n moveTotal(currentDelta: number, forward: number, right: number): void {\n if (forward !== 0) {\n this.moveForward(currentDelta * forward);\n }\n if (right !== 0) {\n this.cameraWalker.moveRight(currentDelta * right);\n }\n this.proceedChangeCamera();\n }\n\n proceedChangeCamera() {\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\";\nimport { OdJoyStickDragger } from \"./OdJoyStickDragger\";\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 OdaFlyDragger 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 cameraFlyer: 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 protected dragPosition: Point2d;\n protected lastJoyStickCoord: Point2d;\n protected lastFrameJoyStickTS: number;\n protected isJoyStickMoving: boolean;\n protected joyStickOverlayElement: HTMLDivElement;\n protected joyStickDragger: OdJoyStickDragger;\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.lastFrameJoyStickTS = 0;\n this.animationId = undefined;\n this.processMovement = this.processMovement.bind(this);\n this.processJoyStickMovement = this.processJoyStickMovement.bind(this);\n\n this.deltaAngle = Math.PI / 3600;\n this.autoSelect = true;\n\n this.isJoyStickMoving = false;\n this.addJoyStickDragger(subject.canvas.parentElement);\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: \"flystart\" });\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.cameraFlyer = new this.m_module.OdTvCameraWalker();\n this.cameraFlyer.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.cameraFlyer?.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 // CLOUD-5359 Demo Viewer crashes after the Fly Mode\n this.subject.update(true);\n this.subject.options.enableZoomWheel = this.enableZoomWheelPreviousValue;\n\n this.joyStickOverlayElement.remove();\n this.joyStickDragger.cleanup();\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: \"flyspeedchange\", 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: \"flyspeedchange\", 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.cameraFlyer.moveForward(currentDelta);\n break;\n case \"KeyS\":\n this.cameraFlyer.moveBackward(currentDelta);\n break;\n case \"KeyA\":\n this.cameraFlyer.moveLeft(currentDelta);\n break;\n case \"KeyD\":\n this.cameraFlyer.moveRight(currentDelta);\n break;\n case \"KeyQ\":\n this.cameraFlyer.moveUp(currentDelta);\n break;\n case \"KeyE\":\n this.cameraFlyer.moveDown(currentDelta);\n break;\n }\n }\n\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n\n this.lastFrameTS = timestamp;\n }\n\n override start(x: number, y: number): void {\n this.dragPosition = { x, y };\n }\n\n override drag(x: number, y: number) {\n if (this.cameraId && this.isDragging) {\n const dltX = x - this.dragPosition.x;\n const dltY = y - this.dragPosition.y;\n this.dragPosition = { x, y };\n\n if (dltX !== 0.0) this.turnLeft(-dltX * this.deltaAngle);\n if (dltY !== 0.0) this.cameraFlyer.turnDown(dltY * this.deltaAngle);\n\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n }\n\n turnLeft(angle) {\n //TODO: migrate to VisualizeJS\n const pCamera = this.cameraFlyer.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 addJoyStickDragger(parentElement: HTMLElement) {\n this.joyStickOverlayElement = document.createElement(\"div\");\n this.joyStickOverlayElement.id = \"joyStickDiv\";\n this.joyStickOverlayElement.style.background = \"rgba(0,0,0,0)\";\n this.joyStickOverlayElement.style.position = \"fixed\";\n this.joyStickOverlayElement.style.zIndex = \"0\";\n parentElement.appendChild(this.joyStickOverlayElement);\n\n this.joyStickDragger = new OdJoyStickDragger(\n this,\n this.joyStickOverlayElement,\n (stickData) => {\n if (Math.sqrt(stickData.x * stickData.x + stickData.y * stickData.y) > 20) {\n this.lastJoyStickCoord = { x: stickData.x, y: stickData.y };\n if (!this.animationId && !this.isJoyStickMoving) {\n this.isJoyStickMoving = true;\n this.processJoyStickMovement(0);\n }\n } else {\n this.isJoyStickMoving = false;\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n this.lastFrameJoyStickTS = 0;\n }\n },\n this.m_module.canvas\n );\n }\n\n processJoyStickMovement(timestamp: number) {\n if (!this.isJoyStickMoving) return;\n this.animationId = requestAnimationFrame(this.processJoyStickMovement);\n\n if (this.lastFrameJoyStickTS !== 0) {\n const deltaTS = timestamp - this.lastFrameJoyStickTS;\n if (deltaTS > 0) {\n const maxJoystickDistance = 100;\n const forward = this.lastJoyStickCoord.y / maxJoystickDistance;\n const right = this.lastJoyStickCoord.x / maxJoystickDistance;\n\n const currentDelta = this.multiplier * deltaTS * this.speed;\n this.moveTotal(currentDelta, forward, right);\n }\n }\n\n this.lastFrameJoyStickTS = timestamp;\n }\n\n moveTotal(currentDelta: number, forward: number, right: number): void {\n if (forward !== 0) {\n if (forward > 0) {\n this.cameraFlyer.moveForward(currentDelta * forward);\n } else {\n this.cameraFlyer.moveBackward(currentDelta * Math.abs(forward));\n }\n }\n if (right !== 0) {\n this.cameraFlyer.moveRight(currentDelta * right);\n }\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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-2025, 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-2025 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-2025, 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-2025 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-2025, 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-2025 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-2025, 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-2025 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 this._subject.emitEvent({\n type: \"orbit\",\n });\n this._subject.emitEvent({\n type: \"changecamera\",\n });\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 // Protect against zero or near-zero vector when pTarget and pPosition are the same\n if (vDirect.length() < 1e-10) {\n // Return a default side vector (X axis) when direction is degenerate\n const defaultSide = this.toVector(this._m_module.Vector3d.kXAxis);\n this.deleteAll([direct, pUpV, pTarget, pPosition, vDirect]);\n return defaultSide;\n }\n\n const vCross = pUpV.crossProduct(vDirect);\n\n // Also protect against zero cross product (parallel vectors)\n if (vCross.length() < 1e-10) {\n // Return a default side vector when up and direction are parallel\n const defaultSide = this.toVector(this._m_module.Vector3d.kXAxis);\n this.deleteAll([direct, pUpV, pTarget, pPosition, vDirect, vCross]);\n return defaultSide;\n }\n\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\n const pUp = pTarget.sub(pPoint);\n const vUp = pUp.asVector();\n\n // Protect against zero or near-zero vector when pPoint and pTarget are the same\n if (vUp.length() < 1e-10) {\n // Skip up vector calculation if points are too close\n this.deleteAll([pPoint, pTarget, pUp, vUp]);\n return;\n }\n\n const crossProduct = vUp.crossProduct(sideVector);\n\n // Protect against zero cross product (parallel vectors)\n if (crossProduct.length() < 1e-10) {\n // Keep current up vector if cross product is degenerate\n this.deleteAll([pPoint, pTarget, pUp, vUp, crossProduct]);\n return;\n }\n\n const crossProductNormal = crossProduct.normalize();\n\n viewParams.upVector = crossProductNormal.toArray();\n\n this.deleteAll([pPoint, pTarget, 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 // Protect against zero or near-zero vector when pPoint and pTarget are the same\n if (vUp.length() < 1e-10) {\n // Skip up vector calculation if points are too close\n this.deleteAll([zAxis, pTarget, pPoint, side, pUp, vUp]);\n return;\n }\n\n const cross = vUp.crossProduct(side);\n\n // Protect against zero cross product (parallel vectors)\n if (cross.length() < 1e-10) {\n // Keep current up vector if cross product is degenerate\n this.deleteAll([zAxis, pTarget, pPoint, side, pUp, vUp, cross]);\n return;\n }\n\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-2025, 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-2025 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 { 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): 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-2025, 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-2025 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, absoluteX: number, absoluteY: number) {\n this._m_start = this.screenToWorld(x, y);\n this._deltaScreenPosition = { x: absoluteX, y: absoluteY };\n this._beginInteractivity();\n }\n\n public action(x: number, y: number, absoluteX: number, absoluteY: 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: absoluteX,\n y: absoluteY,\n dX: absoluteX - this._deltaScreenPosition.x,\n dY: absoluteY - this._deltaScreenPosition.y,\n });\n this._subject.emitEvent({\n type: \"changecamera\",\n });\n\n this._deltaScreenPosition = { x: absoluteX, y: absoluteY };\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-2025, 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-2025 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 { 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, absoluteX: number, absoluteY: number): void {\n this.press = true;\n this._panAction.beginAction(x, y, absoluteX, absoluteY);\n }\n\n override drag(x: number, y: number, absoluteX: number, absoluteY: number): void {\n if (this.press) {\n this._panAction.action(x, y, absoluteX, absoluteY);\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-2025, 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-2025 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, absoluteX: number, absoluteY: number) {\n const viewer = this._m_module.getViewer();\n viewer.zoomAt(zoomFactor, x, y);\n\n this._subject.deviceAutoRegeneration();\n\n this._subject.activeDragger()?.updatePreview?.();\n this._subject.emitEvent({\n type: \"zoomat\",\n data: zoomFactor,\n x: absoluteX,\n y: absoluteY,\n });\n this._subject.emitEvent({\n type: \"changecamera\",\n });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { 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 protected absoluteX: number;\n protected absoluteY: number;\n protected prevY: 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, absoluteX = 0, absoluteY = 0): void {\n this.press = true;\n this.pressX = x;\n this.pressY = y;\n this.absoluteX = absoluteX;\n this.absoluteY = absoluteY;\n this.prevY = y;\n this.beginInteractivity();\n }\n\n override drag(x: number, y: number): void {\n const dltY = y - this.prevY;\n this.prevY = y;\n\n if (this.press && Math.abs(dltY) >= 10e-6) {\n const ZOOM_SPEED = 0.975;\n const zoomFactor = dltY > 0 ? 1 / ZOOM_SPEED : ZOOM_SPEED;\n this._zoomAction.action(this.pressX, this.pressY, zoomFactor, this.absoluteX, this.absoluteY);\n }\n }\n\n override end(): void {\n this.press = false;\n this.endInteractivity();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 zoomIn = this.subject.options.reverseZoomWheel ? 0.925 : 1 / 0.925;\n const zoomOut = this.subject.options.reverseZoomWheel ? 1 / 0.925 : 0.925;\n\n const viewer = this.getViewer();\n if (viewer) {\n const zoomFactor = event.deltaY > 0 ? zoomIn : zoomOut;\n\n this._zoomAction.action(\n event.offsetX * window.devicePixelRatio,\n event.offsetY * window.devicePixelRatio,\n zoomFactor,\n event.offsetX,\n event.offsetY\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-2025, 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-2025 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-2025, 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-2025 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 { 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): 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-2025, 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-2025 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 { 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): 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-2025, 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-2025 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 { IDraggersRegistry, draggersRegistry } from \"@inweb/viewer-core\";\n\nimport { MeasureLineDragger } from \"./MeasureLineDragger\";\nimport { OdaWalkDragger } from \"./OdaWalkDragger\";\nimport { OdaFlyDragger } from \"./OdaFlyDragger\";\nimport { OdCuttingPlaneXAxisDragger } from \"./OdCuttingPlaneXAxisDragger\";\nimport { OdCuttingPlaneYAxisDragger } from \"./OdCuttingPlaneYAxisDragger\";\nimport { OdCuttingPlaneZAxisDragger } from \"./OdCuttingPlaneZAxisDragger\";\nimport { OdOrbitDragger } from \"./OdOrbitDragger\";\nimport { OdPanDragger } from \"./OdPanDragger\";\nimport { OdZoomDragger } from \"./OdZoomDragger\";\nimport { OdZoomWheelDragger } from \"./OdZoomWheelDragger\";\nimport { OdZoomWindowDragger } from \"./OdZoomWindowDragger\";\nimport { OrbitAroundBuildingDragger } from \"./OrbitAroundBuildingDragger\";\n\n/**\n * A draggers registry. Use this registry to register custom draggers.\n *\n * To implement custom dragger:\n *\n * 1. Define a dragger class implements {@link IDragger}.\n * 2. Define a constructor with a `viewer` parameter and add mouse event listeners for the specified viewer.\n * 3. Define the dragger logic in the event listeners. For example, listen for the `mousemove` event and\n * zoom in/out when the left mouse button is pressed.\n * 4. Override {@link IDragger.dispose} and remove mouse event listeners from the viewer.\n * 5. Register dragger provider in the draggers registry by calling the {@link draggers.registerDragger}.\n *\n * @example Implementing a custom dragger.\n *\n * ```javascript\n * import { IDragger, draggers, Viewer } from \"@inweb/viewer-visualize\";\n *\n * class MyDragger implements IDragger {\n * protected viewer: Viewer;\n *\n * constructor(viewer: Viewer) {\n * this.viewer = viewer;\n * this.viewer.addEventListener(\"pointermove\", this.onPointerMove);\n * }\n *\n * override dispose() {\n * this.viewer.removeEventListener(\"pointermove\", this.onPointerMove);\n * }\n *\n * onPointerMove = (event: PointerEvent) => {\n * // place custom logic here\n * };\n * }\n *\n * draggers.registerDragger(\"MyDragger\", (viewer): IDragger => new MyDragger(viewer));\n * ```\n *\n * @example Activating a custom dragger.\n *\n * ```javascript\n * viewer.setActiveDragger(\"MyDragger\");\n * ```\n */\nexport const draggers: IDraggersRegistry = draggersRegistry(\"visualizejs\");\n\n// build-in draggers\n\ndraggers.registerDragger(\"Pan\", (viewer) => new OdPanDragger(viewer));\ndraggers.registerDragger(\"Orbit\", (viewer) => new OdOrbitDragger(viewer));\ndraggers.registerDragger(\"Zoom\", (viewer) => new OdZoomDragger(viewer));\ndraggers.registerDragger(\"ZoomWindow\", (viewer) => new OdZoomWindowDragger(viewer));\ndraggers.registerDragger(\"ZoomWheel\", (viewer) => new OdZoomWheelDragger(viewer));\ndraggers.registerDragger(\"OrbitAroundBuilding\", (viewer) => new OrbitAroundBuildingDragger(viewer));\ndraggers.registerDragger(\"MeasureLine\", (viewer) => new MeasureLineDragger(viewer));\ndraggers.registerDragger(\"CuttingPlaneXAxis\", (viewer) => new OdCuttingPlaneXAxisDragger(viewer));\ndraggers.registerDragger(\"CuttingPlaneYAxis\", (viewer) => new OdCuttingPlaneYAxisDragger(viewer));\ndraggers.registerDragger(\"CuttingPlaneZAxis\", (viewer) => new OdCuttingPlaneZAxisDragger(viewer));\ndraggers.registerDragger(\"Walk\", (viewer) => new OdaWalkDragger(viewer));\ndraggers.registerDragger(\"Fly\", (viewer) => new OdaFlyDragger(viewer));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Viewer } from \"../Viewer\";\n\nexport const composeMatrixFromTransform = (transform, modelCenter, visLib) => {\n const { translate, scale, rotation } = transform;\n\n const translateMatrix = new visLib.Matrix3d();\n translateMatrix.setTranslation([translate.x, translate.y, translate.z]);\n\n const rotateMatrix = new visLib.Matrix3d();\n rotateMatrix.setToRotation(rotation.angle, [rotation.x, rotation.y, rotation.z], modelCenter);\n\n const scaleMatrix = new visLib.Matrix3d();\n scaleMatrix.setToScaling(scale, modelCenter);\n\n return rotateMatrix.postMultBy(translateMatrix).postMultBy(scaleMatrix);\n};\n\nexport function 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 = viewer.visViewer();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n const transform = model.getModelTransformMatrix(modelPtr.getDatabaseHandle());\n if (transform) {\n const extents = modelPtr.getExtents();\n extents.transformBy(modelPtr.getUnitsMatrix());\n\n const matrix = composeMatrixFromTransform(transform, extents.center(), visLib);\n\n modelPtr.setModelingMatrix(matrix, true);\n }\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function clearMarkup(viewer: Viewer) {\n viewer.clearOverlay();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function clearSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.unselect();\n\n viewer.update();\n\n viewer.emitEvent({ type: \"select\", handles: [] });\n viewer.emitEvent({ type: \"select2\", handles: [] });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function clearSlices(viewer: Viewer) {\n viewer.clearSlices();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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.emitEvent({ type: \"explode\", data: index });\n}\n\nexport function collect(viewer: Viewer) {\n explode(viewer, 0);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function getSelected2(viewer: Viewer): string[] {\n const handles = viewer.executeCommand(\"getSelected\");\n\n const model = viewer.models[0];\n const handles2 = handles.map((handle) => `${model.id}:${handle}`);\n\n return handles2;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function hideSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.hideSelectedObjects(false);\n\n viewer.update();\n\n viewer.emitEvent({ type: \"hide\" });\n viewer.emitEvent({ type: \"select\", handles: [] });\n viewer.emitEvent({ type: \"select2\", handles: [] });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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.emitEvent({ type: \"isolate\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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(\"clearSelected\");\n viewer.executeCommand(\"showAll\");\n viewer.executeCommand(\"explode\", 0);\n viewer.executeCommand(\"zoomToExtents\", true);\n\n viewer.emit({ type: \"resetview\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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 visViewer.setSelected(selectionSet);\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", handles: viewer.getSelected() });\n viewer.emitEvent({ type: \"select2\", handles: viewer.getSelected2() });\n\n selectionSet.delete();\n break;\n }\n }\n modelItr.delete();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setActiveDragger(viewer: Viewer, dragger = \"\") {\n viewer.setActiveDragger(dragger);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setMarkupColor(viewer: Viewer, r = 255, g = 0, b = 0) {\n viewer.markup.setMarkupColor(r, g, b);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setSelected(viewer: Viewer, handles2: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const handles = handles2.map((handle) => handle.slice(handle.indexOf(\":\") + 1));\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.setSelected(selectionSet);\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: selectionSet, handles });\n viewer.emitEvent({ type: \"select2\", data: selectionSet, handles: handles2 });\n\n selectionSet.delete();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setSelected2(viewer: Viewer, handles2: string[] = []): void {\n const handles = [];\n\n handles2.forEach((handle) => {\n if (!handle.includes(\":\")) {\n handles.push(handle);\n } else\n viewer.models.forEach((model) => {\n if (handle.split(\":\", 1)[0] === model.id + \"\") handles.push(handle);\n });\n });\n\n return viewer.executeCommand(\"setSelected\", handles);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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.emitEvent({ type: \"showall\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function zoomToExtents(viewer: Viewer, force = false, animate = viewer.options.cameraAnimation): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n const saveEnableAmination = visViewer.getEnableAnimation();\n\n visViewer.setEnableAnimation(animate);\n visViewer.zoomExtents(force);\n visViewer.update();\n visViewer.setEnableAnimation(saveEnableAmination);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function zoomToObjects(viewer: Viewer, handles: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const selectionSet = new visLib.OdTvSelectionSet();\n handles.forEach((handle) => {\n const entityId = visViewer.getEntityByOriginalHandle(handle + \"\");\n if (!entityId.isNull()) selectionSet.appendEntity(entityId);\n });\n\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n\n selectionSet.delete();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function zoomToSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n\n const selectionSet = visViewer.getSelected();\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Viewer } from \"../Viewer\";\nimport { composeMatrixFromTransform } from \"./ApplyModelTransform\";\n\nfunction isTemplateModel(modelPtr) {\n return modelPtr.getName()[0] === \"$\";\n}\n\nexport async function autoTransformAllModelsToCentralPoint(\n viewer: Viewer,\n model: Model | File | Assembly\n): Promise<void> {\n if (!viewer.visualizeJs) return;\n if (!model.getModelTransformMatrix) return; // Model.getModelTransformMatrix() since 24.3.14\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const viewExt = visViewer.getActiveExtents();\n const centralPoint = viewExt.center();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n if (!isTemplateModel(modelPtr)) {\n const ext = modelPtr.getExtents();\n\n const unitsMatrix = modelPtr.getUnitsMatrix();\n ext.transformBy(modelPtr.getUnitsMatrix()); // ext in wcs\n\n const unitsMatrixInvert = modelPtr.getUnitsMatrix().invert();\n\n const center = ext.center();\n const scale = 1.0;\n\n const scaleMatrix = new visLib.Matrix3d();\n const translateMatrix = new visLib.Matrix3d();\n\n translateMatrix.setTranslation([\n centralPoint[0] - center[0],\n centralPoint[1] - center[1],\n centralPoint[2] - center[2],\n ]);\n scaleMatrix.setToScaling(scale, centralPoint);\n\n const resMatrixWithUnits = unitsMatrixInvert\n .postMultBy(scaleMatrix)\n .postMultBy(translateMatrix)\n .postMultBy(unitsMatrix);\n\n const resScale = resMatrixWithUnits.scale();\n const transform = {\n translate: {\n x: resMatrixWithUnits.get(0, 3) - (1 - resScale) * center[0],\n y: resMatrixWithUnits.get(1, 3) - (1 - resScale) * center[1],\n z: resMatrixWithUnits.get(2, 3) - (1 - resScale) * center[2],\n },\n rotation: { x: 0, y: 0, z: 1, angle: 0.0 },\n scale: resScale,\n };\n\n const matrix = composeMatrixFromTransform(transform, center, visLib);\n modelPtr.setModelingMatrix(matrix, true);\n\n centralPoint[0] += Math.abs(ext.max()[0] - ext.min()[0]) * resScale;\n\n await model.setModelTransformMatrix(modelPtr.getDatabaseHandle(), transform);\n }\n\n modelPtr.delete();\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { ICommandsRegistry, commandsRegistry } from \"@inweb/viewer-core\";\n\nimport { applyModelTransform } from \"./ApplyModelTransform\";\nimport { clearMarkup } from \"./ClearMarkup\";\nimport { clearSelected } from \"./ClearSelected\";\nimport { clearSlices } from \"./ClearSlices\";\nimport { createPreview } from \"./CreatePreview\";\nimport { explode, collect } from \"./Explode\";\nimport { getDefaultViewPositions } from \"./GetDefaultViewPositions\";\nimport { getModels } from \"./GetModels\";\nimport { getSelected } from \"./GetSelected\";\nimport { getSelected2 } from \"./GetSelected2\";\nimport { hideSelected } from \"./HideSelected\";\nimport { isolateSelected } from \"./IsolateSelected\";\nimport { regenerateAll } from \"./RegenerateAll\";\nimport { resetView } from \"./ResetView\";\nimport { selectModel } from \"./SelectModel\";\nimport { setActiveDragger } from \"./SetActiveDragger\";\nimport { setDefaultViewPosition } from \"./SetDefaultViewPosition\";\nimport { setMarkupColor } from \"./SetMarkupColor\";\nimport { setSelected } from \"./SetSelected\";\nimport { setSelected2 } from \"./SetSelected2\";\nimport { showAll } from \"./ShowAll\";\nimport { zoomToExtents } from \"./ZoomToExtents\";\nimport { zoomToObjects } from \"./ZoomToObjects\";\nimport { zoomToSelected } from \"./ZoomToSelected\";\nimport { autoTransformAllModelsToCentralPoint } from \"./AutoTransformAllModelsToCentralPoint\";\n\n/**\n * Viewer commands registry. Use this registry to register custom commands.\n *\n * To implement custom command:\n *\n * 1. Define a command handler with a first `viewer` parameter.\n * 2. Register command handler in the commands registry by calling the {@link commands.registerCommand}.\n *\n * @example Implementing a custom command.\n *\n * ```javascript\n * import { commands, Viewer } from \"@inweb/viewer-visualize\";\n *\n * function commandHandler(viewer: Viewer, name = \"world\"): void {\n * console.log(`Hello ${name}!!!`);\n * }\n *\n * commands.registerCommand(\"sayHello\", commandHandler);\n * ```\n *\n * @example Calling a custom command.\n *\n * ```javascript\n * viewer.executeCommand(\"sayHello\", \"user\");\n * ```\n */\nexport const commands: ICommandsRegistry = commandsRegistry(\"visualizejs\");\n\n// build-in commands\n\ncommands.registerCommand(\"applyModelTransform\", applyModelTransform);\ncommands.registerCommand(\"clearMarkup\", clearMarkup);\ncommands.registerCommand(\"clearSelected\", clearSelected);\ncommands.registerCommand(\"clearSlices\", clearSlices);\ncommands.registerCommand(\"createPreview\", createPreview);\ncommands.registerCommand(\"explode\", explode);\ncommands.registerCommand(\"collect\", collect);\ncommands.registerCommand(\"getDefaultViewPositions\", getDefaultViewPositions);\ncommands.registerCommand(\"getModels\", getModels);\ncommands.registerCommand(\"getSelected\", getSelected);\ncommands.registerCommand(\"getSelected2\", getSelected2);\ncommands.registerCommand(\"hideSelected\", hideSelected);\ncommands.registerCommand(\"isolateSelected\", isolateSelected);\ncommands.registerCommand(\"regenerateAll\", regenerateAll);\ncommands.registerCommand(\"resetView\", resetView);\ncommands.registerCommand(\"selectModel\", selectModel);\ncommands.registerCommand(\"setActiveDragger\", setActiveDragger);\ncommands.registerCommand(\"setDefaultViewPosition\", setDefaultViewPosition);\ncommands.registerCommand(\"setMarkupColor\", setMarkupColor);\ncommands.registerCommand(\"setSelected\", setSelected);\ncommands.registerCommand(\"setSelected2\", setSelected2);\ncommands.registerCommand(\"showAll\", showAll);\ncommands.registerCommand(\"zoomToExtents\", zoomToExtents);\ncommands.registerCommand(\"zoomToObjects\", zoomToObjects);\ncommands.registerCommand(\"zoomToSelected\", zoomToSelected);\ncommands.registerCommand(\"autoTransformAllModelsToCentralPoint\", autoTransformAllModelsToCentralPoint);\n\ncommands.registerCommand(\"k3DViewTop\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewTop\"));\ncommands.registerCommand(\"k3DViewBottom\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBottom\"));\ncommands.registerCommand(\"k3DViewLeft\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewLeft\"));\ncommands.registerCommand(\"k3DViewRight\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewRight\"));\ncommands.registerCommand(\"k3DViewFront\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewFront\"));\ncommands.registerCommand(\"k3DViewBack\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBack\"));\ncommands.registerCommand(\"k3DViewSE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSE\"));\ncommands.registerCommand(\"k3DViewSW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSW\"));\ncommands.registerCommand(\"k3DViewNE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNE\"));\ncommands.registerCommand(\"k3DViewNW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNW\"));\n\ncommands.registerCommandAlias(\"clearMarkup\", \"clearOverlay\");\ncommands.registerCommandAlias(\"clearSelected\", \"unselect\");\ncommands.registerCommandAlias(\"zoomToExtents\", \"zoomExtents\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { CameraMode, IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class CameraComponent implements IComponent {\n protected viewer: Viewer;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.viewer.addEventListener(\"databasechunk\", this.geometryEnd);\n this.viewer.addEventListener(\"clear\", this.geometryEnd);\n this.viewer.addEventListener(\"optionschange\", this.optionsChange);\n this.viewer.addEventListener(\"initialize\", this.optionsChange);\n }\n\n dispose() {\n this.viewer.removeEventListener(\"databasechunk\", this.geometryEnd);\n this.viewer.removeEventListener(\"clear\", this.geometryEnd);\n this.viewer.removeEventListener(\"optionschange\", this.optionsChange);\n this.viewer.removeEventListener(\"initialize\", this.optionsChange);\n }\n\n getCameraMode(view: any): CameraMode {\n return view.perspective ? \"perspective\" : \"orthographic\";\n }\n\n switchCameraMode(mode: CameraMode) {\n if (!mode) return;\n\n const activeView = this.viewer.visViewer().activeView;\n\n if (mode !== this.getCameraMode(activeView)) {\n activeView.perspective = !activeView.perspective;\n\n this.viewer.update();\n this.viewer.emitEvent({ type: \"changecameramode\", mode });\n }\n\n activeView.delete();\n }\n\n optionsChange = () => {\n this.switchCameraMode(this.viewer.options.cameraMode);\n };\n\n geometryEnd = () => {\n const activeView = this.viewer.visViewer().activeView;\n\n const mode = this.getCameraMode(activeView);\n\n this.viewer.options.cameraMode = mode;\n this.viewer.emitEvent({ type: \"changecameramode\", mode });\n\n activeView.delete();\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class RenderLoopComponent implements IComponent {\n protected viewer: Viewer;\n protected requestId: number;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.animate();\n }\n\n dispose() {\n cancelAnimationFrame(this.requestId);\n }\n\n animate = (time = 0) => {\n this.requestId = requestAnimationFrame(this.animate);\n\n this.viewer.render(time);\n this.viewer.emitEvent({ type: \"animate\", time });\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ResizeCanvasComponent implements IComponent {\n protected viewer: Viewer;\n protected resizeObserver: ResizeObserver;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.resizeObserver = new ResizeObserver(this.resizeViewer);\n this.resizeObserver.observe(viewer.canvas.parentElement);\n }\n\n dispose() {\n this.resizeObserver.disconnect();\n }\n\n resizeViewer = (entries: ResizeObserverEntry[]) => {\n const { width, height } = entries[0].contentRect;\n\n if (!width || !height) return; // <- invisible viewer, or viewer with parent removed\n\n this.viewer.setSize(width, height);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\nimport { OdZoomWheelDragger } from \"../Draggers/OdZoomWheelDragger\";\n\nexport class ZoomWheelComponent implements IComponent {\n protected viewer: Viewer;\n private zoomWheelDragger: OdZoomWheelDragger;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.zoomWheelDragger = new OdZoomWheelDragger(viewer);\n this.zoomWheelDragger.name = \"ZoomWheel\";\n this.zoomWheelDragger.initialize();\n }\n\n dispose() {\n this.zoomWheelDragger.dispose();\n this.zoomWheelDragger = undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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, middlePoint.x, middlePoint.y);\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, currentPoint.x, currentPoint.y);\n }\n\n this._panAction.action(currentPoint.x, currentPoint.y, 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-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\nimport { GestureManager } from \"../Draggers/Common/GestureManager\";\n\nexport class GestureManagerComponent implements IComponent {\n protected viewer: Viewer;\n private gestureManager: GestureManager;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.gestureManager = new GestureManager(viewer);\n this.gestureManager.initialize();\n }\n\n dispose() {\n this.gestureManager.dispose();\n this.gestureManager = undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\n// ===================== AI-CODE-FILE ======================\n// Source: Claude Sonnet 4\n// Date: 2025-09-10\n// Reviewer: vitaly.ivanov@opendesign.com\n// Issue: CLOUD-5835\n// Notes: Originally AI-generated, modified manually 2025-09-11\n// =========================================================\n\nimport { IComponent, IOrthogonalCamera, IPoint } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ResetComponent implements IComponent {\n private viewer: Viewer;\n private savedCameraSettings: IOrthogonalCamera | null = null;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.viewer.addEventListener(\"databasechunk\", this.onDatabaseChunk);\n this.viewer.on(\"resetview\", this.resetCameraPosition);\n }\n\n dispose() {\n this.viewer.off(\"resetview\", this.resetCameraPosition);\n this.viewer.removeEventListener(\"databasechunk\", this.onDatabaseChunk);\n }\n\n onDatabaseChunk = () => {\n if (!this.viewer.visualizeJs) return;\n\n this.savedCameraSettings = this.getOrthogonalCameraSettings();\n };\n\n resetCameraPosition() {\n if (this.savedCameraSettings && this.viewer.visualizeJs) {\n this.setOrthogonalCameraSettings(this.savedCameraSettings);\n }\n }\n\n getOrthogonalCameraSettings(): IOrthogonalCamera {\n const visViewer = this.viewer.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 view_to_world_scale: 1,\n };\n }\n\n setOrthogonalCameraSettings(settings: IOrthogonalCamera) {\n const visViewer = this.viewer.visViewer();\n const activeView = visViewer.activeView;\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\n getPoint3dFromArray(array: number[]) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n getLogicalPoint3dAsArray(point3d: IPoint) {\n return [point3d.x, point3d.y, point3d.z];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponentsRegistry, componentsRegistry } from \"@inweb/viewer-core\";\n\nimport { CameraComponent } from \"./CameraComponent\";\nimport { RenderLoopComponent } from \"./RenderLoopComponent\";\nimport { ResizeCanvasComponent } from \"./ResizeCanvasComponent\";\nimport { ZoomWheelComponent } from \"./ZoomWheelComponent\";\nimport { GestureManagerComponent } from \"./GestureManagerComponent\";\nimport { ResetComponent } from \"./ResetComponent\";\n\n/**\n * Viewer components registry. Use this registry to register custom components.\n *\n * To implement custom component:\n *\n * 1. Define a component class implements {@link IComponent}.\n * 2. Define a constructor with a `viewer` parameter and add mouse event listeners for the specified viewer.\n * 3. Define the component logic in the event listeners. For example, listen for the `geometryend` event and\n * implement post-processing logic for the model.\n * 4. Override {@link IComponent.dispose} and remove mouse event listeners from the viewer.\n * 5. Register component provider in the components registry by calling the\n * {@link components.registerComponent}.\n *\n * @example Implementing a custom component.\n *\n * ```javascript\n * import { IComponent, components, Viewer } from \"@inweb/viewer-visualize\";\n *\n * class MyComponent implements IComponent {\n * protected viewer: Viewer;\n *\n * constructor(viewer: Viewer) {\n * this.viewer = viewer;\n * this.viewer.addEventListener(\"geometryend\", this.onGeometryEnd);\n * }\n *\n * override dispose() {\n * this.viewer.removeEventListener(\"geometryend\", this.onGeometryEnd);\n * }\n *\n * onGeometryEnd = (event: MouseEvent) => {\n * this.viewer.executeCommand(\"zoomToExtents\");\n * };\n *\n * }\n *\n * components.registerComponent( \"MyComponent\", (viewer): IComponent => new MyComponent(viewer));\n * ```\n */\nexport const components: IComponentsRegistry = componentsRegistry(\"visualizejs\");\n\n// build-in components\n\ncomponents.registerComponent(\"CameraComponent\", (viewer) => new CameraComponent(viewer));\ncomponents.registerComponent(\"ResizeCanvasComponent\", (viewer) => new ResizeCanvasComponent(viewer));\ncomponents.registerComponent(\"RenderLoopComponent\", (viewer) => new RenderLoopComponent(viewer));\ncomponents.registerComponent(\"ZoomWheelComponent\", (viewer) => new ZoomWheelComponent(viewer));\ncomponents.registerComponent(\"GestureManagerComponent\", (viewer) => new GestureManagerComponent(viewer));\ncomponents.registerComponent(\"ResetComponent\", (viewer) => new ResetComponent(viewer));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IModelImpl } from \"./IModelImpl\";\n\n// Basic model implementation.\n\nexport class ModelImpl implements IModelImpl {\n public id: string;\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 class FileLoader {\n private requestHeader: HeadersInit;\n private withCredentials: boolean;\n private abortSignal: AbortSignal;\n\n constructor() {\n this.requestHeader = {};\n this.withCredentials = false;\n this.abortSignal = undefined;\n }\n\n setRequestHeader(requestHeader: HeadersInit) {\n this.requestHeader = requestHeader;\n }\n\n setWithCredentials(withCredentials: boolean) {\n this.withCredentials = withCredentials;\n }\n\n setAbortSignal(abortSignal: AbortSignal) {\n this.abortSignal = abortSignal;\n }\n\n load(file: any, onProgress?: (event) => void): Promise<ArrayBuffer> {\n if (typeof file === \"string\") {\n const request = new Request(file, {\n headers: new Headers(this.requestHeader),\n credentials: this.withCredentials ? \"include\" : \"same-origin\",\n signal: this.abortSignal,\n });\n\n return fetch(request)\n .then((response) => {\n if (!response.ok) throw new Error(`Failed to fetch \"${response.url}\", status ${response.status}`);\n\n const contentLength = response.headers.get(\"X-File-Size\") || response.headers.get(\"Content-Length\");\n const total = parseInt(contentLength || \"\", 10) || 0;\n const lengthComputable = total > 0;\n\n const stream = new ReadableStream({\n async start(controller) {\n const reader = response.body.getReader();\n let loaded = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (onProgress) {\n loaded += value.byteLength;\n onProgress(new ProgressEvent(\"progress\", { lengthComputable, loaded, total }));\n }\n controller.enqueue(value);\n }\n controller.close();\n } catch (e) {\n controller.error(e);\n }\n },\n });\n\n return new Response(stream);\n })\n .then((response) => response.arrayBuffer());\n }\n\n if (file instanceof globalThis.File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as any);\n reader.onerror = () => reject(reader.error);\n reader.onprogress = onProgress;\n reader.readAsArrayBuffer(new Blob([file]));\n });\n }\n\n if (onProgress) {\n const total = (file as ArrayBuffer).byteLength;\n const lengthComputable = total > 0;\n const loaded = total;\n onProgress(new ProgressEvent(\"progress\", { lengthComputable, loaded, total }));\n }\n\n return Promise.resolve(file);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader, LoadParams } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\nimport { FileLoader } from \"./FileLoader\";\n\nexport class VSFFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /vsf$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params: LoadParams = {}): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const loader = new FileLoader();\n loader.setRequestHeader(params.requestHeader);\n loader.setWithCredentials(params.withCredentials);\n loader.setAbortSignal(this.abortController.signal);\n\n const arrayBuffer = await loader.load(file, progress);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseFile(data);\n } catch (error: any) {\n console.error(\"VSF parse error.\", error);\n throw error;\n }\n\n const modelImpl = new ModelImpl();\n modelImpl.id = params.modelId || this.extractFileName(file);\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update(true);\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\n\nexport class VSFCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.data$/i.test(file.database)\n );\n }\n\n override async load(model: any, format?: string): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n const filesToDownload = [model.database, ...model.geometry];\n\n console.time(\"File load time\");\n\n for (let i = 0; i < filesToDownload.length; i++) {\n const dataId = filesToDownload[i];\n\n const progress = (progress: number) => {\n const data = (i + progress) / filesToDownload.length;\n this.viewer.emitEvent({ type: \"geometryprogress\", data, file: model.file, model });\n };\n\n const arrayBuffer = await model.downloadResource(dataId, progress, this.abortController.signal);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseStream(data);\n } catch (error: any) {\n console.error(\"VSF parse error.\", error);\n throw error;\n }\n\n if (i === 0) {\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update(true);\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file: model.file, model });\n } else {\n this.viewer.update();\n this.viewer.emitEvent({ type: \"geometrychunk\", data, file: model.file, model });\n }\n }\n\n console.timeEnd(\"File load time\");\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader, LoadParams } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\nimport { FileLoader } from \"./FileLoader\";\n\nexport class VSFXFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /vsfx$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params: LoadParams = {}): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const loader = new FileLoader();\n loader.setRequestHeader(params.requestHeader);\n loader.setWithCredentials(params.withCredentials);\n loader.setAbortSignal(this.abortController.signal);\n\n const arrayBuffer = await loader.load(file, progress);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseVsfx(data);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n const modelImpl = new ModelImpl();\n modelImpl.id = params.modelId || this.extractFileName(file);\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update(true);\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\n\nexport class VSFXCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.vsfx$/i.test(file.database) &&\n this.viewer.options.enableStreamingMode === false\n );\n }\n\n override async load(model: any): Promise<this> {\n if (!this.viewer.visualizeJs) return Promise.resolve(this);\n\n const visViewer = this.viewer.visViewer();\n\n const progress = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n };\n\n console.time(\"File load time\");\n\n const arrayBuffer = await model.downloadResource(model.database, progress, this.abortController.signal);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseVsfx(data);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update(true);\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file: model.file, model });\n\n console.timeEnd(\"File load time\");\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\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 UpdateController {\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-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\nimport { UpdateController, UpdateType } from \"./UpdateController\";\n\nexport class VSFXCloudStreamingLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.vsfx$/i.test(file.database) &&\n this.viewer.options.enableStreamingMode === true &&\n this.viewer.options.enablePartialMode === false &&\n !/.rcs$/i.test(file.name)\n );\n }\n\n override async load(model: any): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visLib = this.viewer.visLib();\n const visViewer = this.viewer.visViewer();\n\n const updateController = new UpdateController();\n updateController.initialize(this.viewer);\n\n let isFireDatabaseChunk = false;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array) => {\n if (!this.viewer.visualizeJs) return;\n\n let status: any;\n try {\n status = visViewer.parseVsfx(chunk);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n\n let isDatabaseChunk = false;\n if (\n status === visLib.DatabaseStreamStatus.ReadyServiceData ||\n (status === visLib.DatabaseStreamStatus.Complete && !isFireDatabaseChunk)\n ) {\n isFireDatabaseChunk = true;\n isDatabaseChunk = true;\n }\n\n if (isDatabaseChunk) {\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n updateController.update(UpdateType.kForce);\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, file: model.file, model });\n } else {\n updateController.update(UpdateType.kDelay);\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, file: model.file, model });\n }\n };\n\n console.time(\"File load time\");\n\n await model.downloadResource(model.database, chunkLoadHandler, this.abortController.signal);\n updateController.update(UpdateType.kNormal);\n\n console.timeEnd(\"File load time\");\n\n return Promise.resolve(this);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\nimport { UpdateController, UpdateType } from \"./UpdateController\";\n\nconst PENDING_REQUESTS_SIZE = 50;\nconst PENDING_REQUESTS_TIMEOUT = 250;\n\nexport class VSFXCloudPartialLoader extends Loader {\n public viewer: Viewer;\n public abortControllerForRequestMap: Map<number, AbortController>;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n this.abortControllerForRequestMap = new Map();\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n typeof file.downloadResourceRange === \"function\" &&\n /.vsfx$/i.test(file.database) &&\n (this.viewer.options.enablePartialMode === true || /.rcs$/i.test(file.name))\n );\n }\n\n override async load(model: any): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\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 this.abortControllerForRequestMap.set(0, pendingRequestsAbortController);\n\n const updateController = new UpdateController();\n updateController.initialize(this.viewer);\n\n visViewer.memoryLimit = this.viewer.options.memoryLimit;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array, requestId = 0) => {\n if (!this.viewer.visualizeJs) return;\n\n let isDatabaseChunk: boolean;\n try {\n isDatabaseChunk = visViewer.parseVsfxInPartialMode(requestId, chunk);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n\n if (isDatabaseChunk) {\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n updateController.update(UpdateType.kForce);\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, file: model.file, model });\n } else {\n updateController.update(UpdateType.kDelay);\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, file: model.file, model });\n }\n };\n\n const downloadResourceRange = async (dataId: string, requestId: number, ranges: any) => {\n const abortCtrl = new AbortController();\n this.abortControllerForRequestMap.set(requestId, abortCtrl);\n try {\n await model.downloadResourceRange(dataId, requestId, ranges, chunkLoadHandler, abortCtrl.signal);\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, file: model.file, model });\n } finally {\n ranges.forEach((range) => visViewer.onRequestResponseComplete(range.requestId));\n this.abortControllerForRequestMap.delete(requestId);\n updateController.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) - 1, // <- Visualize fix\n });\n record.delete();\n }\n return ranges;\n };\n\n const objectHandler = {\n onServicePartReceived: (bHasIndex: boolean) => {\n if (bHasIndex) {\n servicePartAborted = true;\n this.abortController.abort();\n }\n },\n\n onRequest: (requestId: number, records: any) => {\n const ranges = requestRecordsToRanges(requestId, records);\n downloadResourceRange(model.database, requestId, ranges);\n },\n\n onFullLoaded: () => {\n updateController.update(UpdateType.kNormal);\n },\n\n onRequestResponseParsed: (requestId: number) => {\n this.abortControllerForRequestMap.delete(requestId);\n updateController.update(UpdateType.kNormal);\n },\n\n onRequestAborted: (requestId: number) => {\n const abortCtrl = this.abortControllerForRequestMap.get(requestId);\n if (abortCtrl) abortCtrl.abort();\n },\n\n onRequestResourceFile: (requestId: number, _: string, records: any) => {\n const dataId = `${model.fileId}${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 await model.downloadResource(model.database, chunkLoadHandler, this.abortController.signal);\n } catch (error) {\n window.clearTimeout(pendingRequestsTimerId);\n if (!servicePartAborted) throw error;\n }\n\n return this;\n }\n\n override cancel(): void {\n super.cancel();\n this.abortControllerForRequestMap.forEach((controller) => controller.abort());\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { ILoadersRegistry, loadersRegistry } from \"@inweb/viewer-core\";\n\nimport { VSFFileLoader } from \"./VSFFileLoader\";\nimport { VSFCloudLoader } from \"./VSFCloudLoader\";\n\nimport { VSFXFileLoader } from \"./VSFXFileLoader\";\nimport { VSFXCloudLoader } from \"./VSFXCloudLoader\";\nimport { VSFXCloudStreamingLoader } from \"./VSFXCloudStreamingLoader\";\nimport { VSFXCloudPartialLoader } from \"./VSFXCloudPartialLoader\";\n\n/**\n * Viewer loaders registry. Use this registry to register custom loaders.\n *\n * To implement custom loader:\n *\n * 1. Define a loader class implements {@link ILoader}.\n * 2. Define a constructor with a `viewer` parameter.\n * 3. Override {@link ILoader.isSupport} and check if the loader can load the specified file.\n * 4. Override {@link ILoader.load} and define the logic for loading the model from the file.\n *\n * The loader should do:\n *\n * - Load model data from file into the buffer. The model data must be a `VSFX` format.\n * - Parse data buffer with the `VisualizeJS` viewer instance.\n * - Create `ModelImpl` instance with unique model ID add it to the viewer `models` list.\n * - Synchronize viewer styles, options and overlay.\n * - Update the viewer.\n *\n * The loader must emit events:\n *\n * - `geometryprogress` - during loading (or once at 100% when complete).\n * - `databasechunk` - when model is loaded and ready to render.\n * 5. Override {@link ILoader.dispose} and release loader resources, if required.\n * 6. Use `this.abortController` (defined in `Loader` class) to abort loading raw data.\n * 7. Register loader provider in the loaders registry by calling the {@link loaders.registerLoader}.\n *\n * @example Implementing a custom loader.\n *\n * ```javascript\n * import { Loader, loaders, Viewer } from \"@inweb/viewer-visualize\";\n *\n * class MyLoader extends Loader {\n * public viewer: Viewer;\n *\n * constructor(viewer: Viewer) {\n * super();\n * this.viewer = viewer;\n * }\n *\n * override isSupport(file, format): Boolean {\n * // check if this loader supports the file source and format\n * return type file === \"string\" && format === \"myformat\";\n * }\n *\n * override load(file, format, params): Promise<this> {\n * // load VSFX data from file (custom loading logic)\n * const data = await fetch(file).then((result) => result.arrayBuffer());\n *\n * const modelImpl = new ModelImpl();\n * modelImpl.id = params.modelId;\n *\n * this.viewer.visViewer().parseVsfx(new Uint8Array(data));\n * this.viewer.models.push(modelImpl);\n *\n * this.viewer.syncOptions();\n * this.viewer.syncOverlay();\n * this.viewer.update();\n *\n * this.viewer.emitEvent({ type: \"geometryprogress\", data: 1, file });\n * this.viewer.emitEvent({ type: \"databasechunk\", data, file });\n *\n * return Promise.resove(this);\n * };\n * }\n *\n * loaders.registerLoader(\"MyLoader\", (viewer) => new MyLoader(viewer));\n * ```\n */\nexport const loaders: ILoadersRegistry = loadersRegistry(\"visualizejs\");\n\n// build-in loaders\n\nloaders.registerLoader(\"vsf-file\", (viewer: any) => new VSFFileLoader(viewer));\nloaders.registerLoader(\"vsf-cloud\", (viewer: any) => new VSFCloudLoader(viewer));\n\nloaders.registerLoader(\"vsfx-file\", (viewer: any) => new VSFXFileLoader(viewer));\nloaders.registerLoader(\"vsfx-cloud\", (viewer: any) => new VSFXCloudLoader(viewer));\nloaders.registerLoader(\"vsfx-cloud-streaming\", (viewer: any) => new VSFXCloudStreamingLoader(viewer));\nloaders.registerLoader(\"vsfx-cloud-partial\", (viewer: any) => new VSFXCloudPartialLoader(viewer));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\ninterface LoadParams {\n crossOrigin?: string;\n}\n\nexport function loadScript(url: string, params: LoadParams = {}): Promise<HTMLScriptElement> {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = url;\n script.async = true;\n script.crossOrigin = params.crossOrigin;\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, params: LoadParams): 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, params);\n}\n\nexport const loadVisualizeJs = async (url: string, onprogress, params: LoadParams = {}): Promise<any> => {\n const script = await loadVisuazlizeJsScript(url, params);\n return await new Promise((resolve, reject) => {\n const options = {\n urlMemFile: url + \".wasm\",\n TOTAL_MEMORY: 134217728,\n onprogress,\n };\n const instance = window[\"getVisualizeLibInst\"](options);\n instance.loadWasmError = reject;\n instance.postRun.push(() => {\n window[\"getVisualizeLibInst\"].script = script;\n resolve(instance);\n });\n });\n};\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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-2025, 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-2025 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { ILine, IText, IViewpoint } from \"@inweb/viewer-core\";\nimport { IMarkup, IMarkupObject, IWorldTransform, MarkupMode } from \"@inweb/markup\";\nimport { Viewer } from \"../../Viewer\";\nimport { MARKUP_ENTITY_LINE, OdaLineDragger } from \"../../Draggers/OdaLineDragger\";\nimport { MARKUP_ENTITY_TEXT, OdaTextDragger } from \"../../Draggers/OdaTextDragger\";\n\nexport class VisualizeMarkup implements IMarkup {\n private _viewer: Viewer;\n protected _markupColor = { r: 255, g: 0, b: 0 };\n\n public lineWidth = 4;\n public lineType: \"solid\";\n public fontSize = 34;\n\n initialize(\n container: HTMLElement,\n containerEvents: string[],\n viewer?: IEventEmitter,\n worldTransformer?: IWorldTransform\n ): void {\n this._viewer = viewer as Viewer;\n this._viewer.registerDragger(\"Line\", OdaLineDragger);\n this._viewer.registerDragger(\"Text\", OdaTextDragger);\n }\n\n dispose(): void {}\n\n syncOverlay(): void {}\n\n clearOverlay(): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n model.clearEntities();\n model.delete();\n }\n\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markupColor;\n }\n\n setMarkupColor(r: number, g: number, b: number): void {\n const color = { r, g, b };\n this._markupColor = color;\n this._viewer.emitEvent({ type: \"changemarkupcolor\", data: color });\n }\n\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n const itr = model.getEntitiesIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n const entityPtr = entityId.openObject();\n const entityName = entityPtr.getName();\n\n if (entityName === MARKUP_ENTITY_LINE || entityName === MARKUP_ENTITY_TEXT) {\n entityPtr.setColor(r, g, b);\n }\n\n entityPtr.delete();\n }\n itr.delete();\n\n this._viewer.update();\n }\n\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n throw new Error(\"Not implemented yet\");\n }\n\n setViewpoint(viewpoint: IViewpoint): void {\n function getLogicalPoint3dAsArray(point3d) {\n return [point3d.x, point3d.y, point3d.z];\n }\n\n function getPoint3d(module, gePoint) {\n return module.Point3d.createFromArray(gePoint);\n }\n\n if (!this._viewer.visualizeJs) return;\n\n const visLib = this._viewer.visLib();\n const visViewer = this._viewer.visViewer();\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(viewpoint: IViewpoint): IViewpoint {\n if (!this._viewer.visualizeJs) return {};\n\n function getLogicalPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n const visLib = this._viewer.visLib();\n const visViewer = this._viewer.visViewer();\n\n if (!viewpoint) viewpoint = { custom_fields: {} };\n\n viewpoint.lines = [];\n viewpoint.texts = [];\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 = { data: visLib.canvas.toDataURL(\"image/jpeg\", 0.25) };\n viewpoint.custom_fields.markup_color = this.getMarkupColor();\n\n return viewpoint;\n }\n\n enableEditMode(mode: MarkupMode | false): this {\n return this;\n }\n\n createObject(type: string, params: any): IMarkupObject {\n return undefined;\n }\n\n getObjects(): IMarkupObject[] {\n return [];\n }\n\n getSelectedObjects(): IMarkupObject[] {\n return [];\n }\n\n selectObjects(objects: IMarkupObject[]): void {}\n\n clearSelected(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IMarkup, Markup as KonvaMarkup } from \"@inweb/markup\";\nimport { VisualizeMarkup } from \"./Visualize/VisualizeMarkup\";\n\n/**\n * Defines the type of the markup core.\n */\nexport type MarkupType = \"Konva\" | \"Visualize\";\n\nexport class MarkupFactory {\n public static createMarkup(markupType: MarkupType = \"Konva\"): IMarkup {\n let markup: IMarkup;\n\n switch (markupType) {\n case \"Konva\":\n markup = new KonvaMarkup();\n break;\n\n case \"Visualize\":\n markup = new VisualizeMarkup();\n break;\n\n default:\n throw new Error(`Unknown Markup type: ${markupType}`);\n }\n\n return markup;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { Assembly, Client, File, Model } from \"@inweb/client\";\nimport {\n CANVAS_EVENTS,\n CanvasEventMap,\n Dragger,\n FileSource,\n IClippingPlane,\n IComponent,\n IDragger,\n IEntity,\n IInfo,\n ILoader,\n Info,\n IOrthogonalCamera,\n IOptions,\n IPerspectiveCamera,\n IPoint,\n IViewer,\n IViewpoint,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\nimport { IMarkup, IWorldTransform } from \"@inweb/markup\";\n\nimport { draggers } from \"./Draggers\";\nimport { commands } from \"./Commands\";\nimport { components } from \"./Components\";\nimport { loaders } from \"./Loaders\";\nimport { IModelImpl } from \"./Models/IModelImpl\";\n\nimport { loadVisualizeJs } from \"./utils\";\nimport { MarkupFactory, MarkupType } from \"./Markup/MarkupFactory\";\n\nconst OVERLAY_VIEW_NAME = \"$OVERLAY_VIEW_NAME\";\n\nconst isExist = (value) => value !== undefined && value !== null;\n\n/**\n * 3D viewer powered by {@link https://cloud.opendesign.com/docs/index.html#/visualizejs | VisualizeJS}.\n */\nexport class Viewer\n extends EventEmitter2<ViewerEventMap & CanvasEventMap & OptionsEventMap>\n implements IViewer, IWorldTransform\n{\n public client: Client | undefined;\n public options: IOptions;\n public canvas: HTMLCanvasElement | undefined;\n public canvasEvents: string[];\n public loaders: ILoader[];\n public models: IModelImpl[];\n public info: IInfo;\n\n private canvaseventlistener: (event: Event) => void;\n\n private _visualizeJsUrl = \"\";\n private _visualizeJs: any;\n private _visualizeTimestamp: number;\n private _viewer: any;\n private _crossOrigin;\n\n private _activeDragger: IDragger | null;\n private _components: IComponent[];\n\n private _renderNeeded: boolean;\n private _renderTime: DOMHighResTimeStamp;\n private _enableAutoUpdate: boolean;\n private _isRunAsyncUpdate: boolean;\n\n public _abortControllerForReferences: AbortController | undefined;\n\n private _markup: IMarkup;\n\n /**\n * @param client - The `Client` instance that is used to load model reference files from the Open Cloud\n * Server. Do not specify `Client` if you need a standalone viewer instance to view `VSFX` files from\n * the web or from local computer.\n * @param params - An object containing viewer configuration parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own library\n * instance, or specify `undefined` or blank to use the default URL defined by `Viewer.visualize`\n * library you are using.\n * @param params.crossOrigin - The\n * {@link https://developer.mozilla.org/docs/Web/HTML/Attributes/crossorigin | crossorigin} content\n * attribute on `Visalize.js` script element. One of the following values: `\"\"`, `anonymous` or\n * `use-credentials`.\n * @param params.enableAutoUpdate - Enable auto-update of the viewer after any changes. If the\n * auto-update is disabled, you need to register an `update` event handler and update the\n * `VisualizeJS` viewer and active dragger manually. Default is `true`.\n * @param params.markupType - The type of the markup core: `Visualize` (deprecated) or `Konva`. Default\n * is `Konva`.\n */\n constructor(\n client?: Client,\n params: { visualizeJsUrl?: string; crossOrigin?: string; enableAutoUpdate?: boolean; markupType?: MarkupType } = {}\n ) {\n super();\n this.configure(params);\n\n this.client = client;\n this.options = new Options(this);\n this.loaders = [];\n this.models = [];\n this.info = new Info();\n\n this.canvasEvents = CANVAS_EVENTS.slice();\n this.canvaseventlistener = (event: Event) => this.emit(event);\n\n this._activeDragger = null;\n this._components = [];\n\n this._renderNeeded = false;\n this._renderTime = 0;\n this._enableAutoUpdate = params.enableAutoUpdate ?? true;\n this._isRunAsyncUpdate = false;\n\n this.render = this.render.bind(this);\n this.update = this.update.bind(this);\n\n this._markup = MarkupFactory.createMarkup(params.markupType);\n }\n\n /**\n * `VisualizeJS` library URL. Use {@link configure | configure()} to change library URL.\n *\n * @readonly\n */\n get visualizeJsUrl(): string {\n return this._visualizeJsUrl;\n }\n\n /**\n * Returns `VisualizeJS` {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module}\n * instance.\n */\n get visualizeJs(): any {\n return this._visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS` {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module}\n * instance.\n */\n visLib(): any {\n return this._visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS` {@link https://cloud.opendesign.com/docs/index.html#/vis/Viewer | Viewer}\n * instance.\n */\n visViewer(): any {\n return this._viewer;\n }\n\n /**\n * 2D markup core instance used to create markups.\n *\n * @readonly\n */\n get markup(): IMarkup {\n return this._markup;\n }\n\n /**\n * Changes the viewer parameters.\n *\n * @param params - An object containing new parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own library\n * instance or specify `undefined` or blank to use the default URL defined by `Viewer.visualize`\n * library you are using.\n * @param params.crossOrigin - The\n * {@link https://developer.mozilla.org/docs/Web/HTML/Attributes/crossorigin | crossorigin} content\n * attribute on `Visalize.js` script element. One of the following values: `\"\"`, `anonymous` or\n * `use-credentials`.\n */\n configure(params: { visualizeJsUrl?: string; crossOrigin?: string }): this {\n this._visualizeJsUrl = params.visualizeJsUrl || \"VISUALIZE_JS_URL\";\n this._crossOrigin = params.crossOrigin;\n return this;\n }\n\n // IViewer\n\n get draggers(): string[] {\n return [...draggers.getDraggers().keys()];\n }\n\n get components(): string[] {\n return [...components.getComponents().keys()];\n }\n\n /**\n * Loads the `VisualizeJS` module and initializes it with the specified canvas. Call\n * {@link dispose | dispose()} to release allocated resources.\n *\n * Fires:\n *\n * - {@link InitializeEvent | initialize}\n * - {@link InitializeProgressEvent | initializeprogress}\n *\n * @param canvas -\n * {@link https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement | HTMLCanvasElement} for\n * `VisualizeJS`.\n * @param onProgress - A callback function that handles events measuring progress of loading of the\n * `VisualizeJS` library.\n */\n async initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent) => void): Promise<this> {\n this.addEventListener(\"optionschange\", (event) => this.syncOptions(event.data));\n\n const pixelRatio = window.devicePixelRatio;\n const rect = canvas.parentElement.getBoundingClientRect();\n const width = rect.width || 1;\n const height = rect.height || 1;\n\n canvas.width = Math.round(width * pixelRatio);\n canvas.height = Math.round(height * pixelRatio);\n\n canvas.style.width = width + \"px\";\n canvas.style.height = height + \"px\";\n\n canvas.parentElement.style.touchAction = \"none\";\n canvas.style.touchAction = \"none\";\n\n this._visualizeTimestamp = Date.now();\n const visualizeTimestamp = this._visualizeTimestamp;\n\n const visualizeJs: any = await loadVisualizeJs(\n this.visualizeJsUrl,\n (event: ProgressEvent) => {\n const { loaded, total } = event;\n if (onProgress) onProgress(new ProgressEvent(\"progress\", { lengthComputable: true, loaded, total }));\n this.emitEvent({ type: \"initializeprogress\", data: loaded / total, loaded, total });\n },\n { crossOrigin: this._crossOrigin }\n );\n\n if (visualizeTimestamp !== this._visualizeTimestamp)\n throw new Error(\n \"Viewer error: dispose() was called before initialize() completed. Are you using React strict mode?\"\n );\n\n this._visualizeJs = visualizeJs;\n this._visualizeJs.canvas = canvas;\n\n this._viewer = visualizeJs.Viewer.create();\n this._viewer.resize(0, canvas.width, canvas.height, 0);\n\n this.canvas = canvas;\n this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));\n\n this._markup.initialize(this.canvas, this.canvasEvents, this, this);\n\n for (const name of components.getComponents().keys()) {\n this._components.push(components.createComponent(name, this));\n }\n\n this.syncOptions();\n this.syncOverlay();\n\n this._renderTime = performance.now();\n this.render(this._renderTime);\n\n this.emitEvent({ type: \"initialize\" });\n\n return this;\n }\n\n dispose(): this {\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"dispose\" });\n this.removeAllListeners();\n\n this.setActiveDragger();\n\n this._components.forEach((component: IComponent) => component.dispose());\n this._components = [];\n\n this._markup.dispose();\n\n if (this.canvas) {\n this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n }\n\n if (this._viewer) this._viewer.clear();\n\n this._visualizeJs = undefined;\n this._visualizeTimestamp = undefined;\n this._viewer = undefined;\n\n return this;\n }\n\n /**\n * Returns `true` if `VisualizeJS` module has been loaded and initialized.\n */\n isInitialized(): boolean {\n return !!this.visualizeJs;\n }\n\n setSize(width: number, height: number, updateStyle = true): void {\n if (!this.visualizeJs) return;\n\n this.canvas.width = Math.round(width * window.devicePixelRatio);\n this.canvas.height = Math.round(height * window.devicePixelRatio);\n\n if (updateStyle) {\n this.canvas.style.width = width + \"px\";\n this.canvas.style.height = height + \"px\";\n }\n\n this._viewer.resize(0, this.canvas.width, this.canvas.height, 0);\n\n this.update(true);\n this.emitEvent({ type: \"resize\", width, height });\n }\n\n resize(): this {\n console.warn(\n \"Viewer.resize() has been deprecated since 26.9 and will be removed in a future release, use Viewer.setSize() instead.\"\n );\n\n if (!this.visualizeJs) return this;\n if (!this.canvas.parentElement) return this;\n\n const { width, height } = this.canvas.parentElement.getBoundingClientRect();\n\n if (!width || !height) return this; // <- invisible viewer, or viewer with parent removed\n\n this.setSize(width, height);\n\n return this;\n }\n\n /**\n * Updates the viewer.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register an\n * `update` event handler and update the `Visualize` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param force - If `true` updates the viewer immidietly. Otherwise updates on next animation frame.\n * Default is `false`.\n */\n update(force = false) {\n if (this._enableAutoUpdate) {\n this._renderNeeded = true;\n if (force) this.render();\n }\n this.emitEvent({ type: \"update\", data: force });\n }\n\n // Internal render routines\n\n render(time?: DOMHighResTimeStamp) {\n if (!this.visualizeJs) return;\n if (this._isRunAsyncUpdate) return;\n\n const renderNeeded = this.visViewer().isRunningAnimation() || this._renderNeeded;\n if (!renderNeeded) return;\n\n if (!time) time = performance.now();\n const deltaTime = (time - this._renderTime) / 1000;\n\n this._renderTime = time;\n this._renderNeeded = !this.visViewer().getActiveDevice().isValid();\n\n this.visViewer().update();\n this._activeDragger?.updatePreview?.();\n\n this.emitEvent({ type: \"render\", time, deltaTime });\n }\n\n // Internal loading routines\n\n async loadReferences(model: Model | File | Assembly): Promise<this> {\n if (!this.visualizeJs) return this;\n if (!this.client) return this;\n if (!model.getReferences) return this;\n\n const abortController = new AbortController();\n\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = abortController;\n\n let references: any[] = [];\n await model\n .getReferences(abortController.signal)\n .then((data) => (references = data.references))\n .catch((e) => console.error(\"Cannot load model references.\", e));\n\n for (const file of references) {\n await this.client\n .downloadFile(file.id, undefined, abortController.signal)\n .then((arrayBuffer) => this.visualizeJs?.getViewer().addEmbeddedFile(file.name, new Uint8Array(arrayBuffer)))\n .catch((e) => console.error(`Cannot load reference file ${file.name}.`, e));\n }\n\n return this;\n }\n\n applyModelTransformMatrix(model: Model | Assembly) {\n this.executeCommand(\"applyModelTransform\", model);\n }\n\n applySceneGraphSettings(options = this.options) {\n if (!this.visualizeJs) return;\n\n const visLib = this.visLib();\n const visViewer = this.visViewer();\n\n const device = visViewer.getActiveDevice();\n if (isExist(options.sceneGraph)) {\n device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, !options.sceneGraph);\n }\n // if (options.enablePartialMode && visLib.HpTrc.Usd >= visViewer.memoryLimit) {\n // device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, true);\n // }\n device.delete();\n\n this.update();\n }\n\n /**\n * Loads a file into the viewer.\n *\n * The viewer must be {@link initialize | initialized} before opening the file. Otherwise, `open()` does\n * nothing.\n *\n * This method requires a `Client` instance to be specified to load file from the Open Cloud Server.\n * The file geometry data on the Open Cloud Server must be converted into a `vsfx` format, otherwise an\n * exception will be thrown.\n *\n * For files from Open Cloud Server, the default model will be loaded. If there is no default model,\n * first availiable model will be loaded. If no models are found in the file, an exception will be\n * thrown.\n *\n * For URLs, the file extension is used to determine the file format. For a `ArrayBuffer` and `Data\n * URL`, a file format must be specified using `params.format` parameter. If no appropriate loader is\n * found for the specified format, an exception will be thrown.\n *\n * If there was an active dragger before opening the file, it will be deactivated. After opening the\n * file, you must manually activate the required dragger.\n *\n * To open a large files, enable {@link IOptions.enablePartialMode | partial streaming} mode before\n * opening. Partial streaming is only supported when opening files from an Open Cloud Server, but not\n * local files and URLs. Example:\n *\n * ```javascript\n * viewer.options.enableStreamingMode = true;\n * viewer.options.enablePartialMode = true;\n * await viewer.open(file);\n * ```\n *\n * Fires:\n *\n * - {@link CancelEvent | cancel}\n * - {@link ClearEvent | clear}\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryChunkEvent | geometrychunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param file - File to load. Can be:\n *\n * - `File`, `Assembly` or `Model` instance from the Open Cloud Server\n * - `URL` string\n * - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string\n * - {@link https://developer.mozilla.org/docs/Web/API/File | Web API dFile} object\n * - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}\n * object\n *\n * @param params - Loading parameters.\n * @param params.format - File format. Can be one of `vsf` or `vsfx`. Required when loading a file as\n * `ArrayBuffer` or `Data URL`.\n * @param params.mode - Reserved for future use.\n * @param params.modelId - Reserved for future use.\n * @param params.requestHeader - The\n * {@link https://developer.mozilla.org/docs/Glossary/Request_header | request header} used in HTTP\n * request.\n * @param params.withCredentials - Whether the HTTP request uses credentials such as cookies,\n * authorization headers or TLS client certificates. See\n * {@link https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/withCredentials | XMLHttpRequest.withCredentials}\n * for more details.\n */\n async open(\n file: FileSource,\n params: {\n format?: string;\n mode?: string;\n modelId?: string;\n requestHeader?: HeadersInit;\n withCredentials?: boolean;\n } = {}\n ): Promise<this> {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", mode: \"file\", file });\n\n let model: any = file;\n if (model && typeof model.getModels === \"function\") {\n const models = await model.getModels();\n model = models.find((model: Model) => model.default) || models[0] || file;\n }\n if (model && typeof model.database === \"string\") {\n file = model.file;\n }\n if (!model) throw new Error(`Format not supported`);\n\n let format = params.format;\n if (!format && typeof file[\"type\"] === \"string\") format = file[\"type\"].split(\".\").pop();\n if (!format && typeof file === \"string\") format = file.split(\".\").pop();\n if (!format && file instanceof globalThis.File) format = file.name.split(\".\").pop();\n\n const loader = loaders.createLoader(this, model, format);\n if (!loader) throw new Error(`Format not supported`);\n this.loaders.push(loader);\n\n this.emitEvent({ type: \"geometrystart\", file, model });\n try {\n await this.loadReferences(model);\n await loader.load(model, format, params);\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, file, model });\n throw error;\n }\n this.emitEvent({ type: \"geometryend\", file, model });\n\n if (this.visualizeJs) {\n this.applyModelTransformMatrix(model);\n this.applySceneGraphSettings();\n }\n\n return this;\n }\n\n /**\n * Deprecated since `26.4`. Use {@link open | open()} instead.\n *\n * @deprecated\n */\n openVsfFile(buffer: Uint8Array | ArrayBuffer): this {\n console.warn(\n \"Viewer.openVsfFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead.\"\n );\n\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", mode: \"file\", file: \"\", buffer });\n\n const visViewer = this.visViewer();\n\n this.emitEvent({ type: \"geometrystart\", file: \"\", buffer });\n try {\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseFile(data);\n\n this.syncOptions();\n this.syncOverlay();\n this.update(true);\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, file: \"\", buffer });\n this.emitEvent({ type: \"databasechunk\", data, file: \"\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, file: \"\", buffer });\n throw error;\n }\n this.emitEvent({ type: \"geometryend\", file: \"\", buffer });\n\n return this;\n }\n\n /**\n * Deprecated since `26.4`. Use {@link open | open()} instead.\n *\n * @deprecated\n */\n openVsfxFile(buffer: Uint8Array | ArrayBuffer): this {\n console.warn(\n \"Viewer.openVsfxFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead.\"\n );\n\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", mode: \"file\", file: \"\", buffer });\n\n const visViewer = this.visViewer();\n\n this.emitEvent({ type: \"geometrystart\", file: \"\", buffer });\n try {\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseVsfx(data);\n\n this.syncOptions();\n this.syncOverlay();\n this.update(true);\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, file: \"\", buffer });\n this.emitEvent({ type: \"databasechunk\", data, file: \"\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, file: \"\", buffer });\n throw error;\n }\n this.emitEvent({ type: \"geometryend\", file: \"\", buffer });\n\n return this;\n }\n\n cancel(): this {\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = undefined;\n\n this.loaders.forEach((loader) => loader.cancel());\n\n this.emitEvent({ type: \"cancel\" });\n return this;\n }\n\n clear(): this {\n if (!this.visualizeJs) return this;\n\n const visViewer = this.visViewer();\n\n this.setActiveDragger();\n this.clearSlices();\n this.clearOverlay();\n this.clearSelected();\n\n this.loaders.forEach((loader) => loader.dispose());\n this.loaders = [];\n\n this.models.forEach((model) => model.dispose());\n this.models = [];\n\n visViewer.clear();\n visViewer.createLocalDatabase();\n\n this.syncOptions();\n this.syncOverlay();\n this.update(true);\n\n this.emitEvent({ type: \"clear\" });\n\n return this;\n }\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 syncOptions(options: IOptions = this.options): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = this.visViewer();\n\n const device = visViewer.getActiveDevice();\n if (device.isNull()) return this;\n\n // sync Open Cloud visual style\n\n const view = device.getActiveView();\n\n view.enableDefaultLighting(true, visLib.DefaultLightingType.kTwoLights);\n view.setDefaultLightingIntensity(1.25);\n\n let visualStyleId: any;\n try {\n visualStyleId = visViewer.findVisualStyle(\"OpenCloud\");\n } catch {\n // Visualize.js 25.11 and earlier threw an exception if the style did not exist.\n visualStyleId = undefined;\n }\n\n if (!visualStyleId || visualStyleId.isNull()) {\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, 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 // sync Visualize options\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\n const antialiasing = options.antialiasing === true || options.antialiasing === \"fxaa\";\n if (antialiasing !== visViewer.fxaaAntiAliasing3d) {\n visViewer.fxaaAntiAliasing3d = 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.width, canvas.height, 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 // sync highlighting options\n\n const params = options.enableCustomHighlight ? options : Options.defaults();\n\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 canvas = visLib.canvas;\n // device.invalidate([0, canvas.width, canvas.height, 0]);\n\n view.delete();\n device.delete();\n\n this.update();\n\n return this;\n }\n\n syncOverlay(): void {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n let overlayView = visViewer.getViewByName(OVERLAY_VIEW_NAME);\n if (!overlayView) {\n const markupModel = visViewer.getMarkupModel();\n const pDevice = visViewer.getActiveDevice();\n\n overlayView = pDevice.createView(OVERLAY_VIEW_NAME, false);\n overlayView.addModel(markupModel);\n\n activeView.addSibling(overlayView);\n pDevice.addView(overlayView);\n }\n\n overlayView.viewPosition = activeView.viewPosition;\n overlayView.viewTarget = activeView.viewTarget;\n overlayView.upVector = activeView.upVector;\n overlayView.viewFieldWidth = activeView.viewFieldWidth;\n overlayView.viewFieldHeight = activeView.viewFieldHeight;\n\n const viewPort = overlayView.getViewport();\n overlayView.setViewport(viewPort.lowerLeft, viewPort.upperRight);\n overlayView.vportRect = activeView.vportRect;\n\n this._markup.syncOverlay();\n this.update();\n }\n\n clearOverlay(): void {\n if (!this.visualizeJs) return;\n\n this._markup.clearOverlay();\n this.update();\n }\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 getSelected(): string[] {\n return this.executeCommand(\"getSelected\");\n }\n\n setSelected(handles?: string[]): void {\n this.executeCommand(\"setSelected\", handles);\n }\n\n getSelected2(): string[] {\n return this.executeCommand(\"getSelected2\");\n }\n\n setSelected2(handles?: string[]): void {\n this.executeCommand(\"setSelected2\", handles);\n }\n\n clearSelected(): void {\n this.executeCommand(\"clearSelected\");\n }\n\n hideSelected(): void {\n this.executeCommand(\"hideSelected\");\n }\n\n isolateSelected(): void {\n this.executeCommand(\"isolateSelected\");\n }\n\n showAll(): void {\n this.executeCommand(\"showAll\");\n }\n\n explode(index = 0): void {\n this.executeCommand(\"explode\", index);\n }\n\n collect(): void {\n this.executeCommand(\"collect\");\n }\n\n /**\n * Deprecated since `25.12`. Use {@link draggers.registerDragger} instead.\n */\n public registerDragger(name: string, dragger: typeof Dragger): void {\n console.warn(\n \"Viewer.registerDragger() has been deprecated since 25.12 and will be removed in a future release, use draggers('visualizejs').registerDragger() instead.\"\n );\n draggers.registerDragger(name, (viewer: IViewer) => new dragger(viewer));\n }\n\n activeDragger(): IDragger | null {\n return this._activeDragger;\n }\n\n setActiveDragger(name = \"\"): IDragger | null {\n if (!this._activeDragger || this._activeDragger.name !== name) {\n const oldDragger = this._activeDragger;\n let newDragger = null;\n\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\n if (this.visualizeJs) {\n newDragger = draggers.createDragger(name, this);\n if (newDragger) {\n this._activeDragger = newDragger;\n this._activeDragger.initialize?.();\n }\n }\n const canvas = this.canvas;\n if (canvas) {\n if (oldDragger) canvas.classList.remove(`oda-cursor-${oldDragger.name.toLowerCase()}`);\n if (newDragger) canvas.classList.add(`oda-cursor-${newDragger.name.toLowerCase()}`);\n }\n\n this.emitEvent({ type: \"changeactivedragger\", data: name });\n this.update();\n }\n return this._activeDragger;\n }\n\n resetActiveDragger(): void {\n const dragger = this._activeDragger;\n if (dragger) {\n this.setActiveDragger();\n this.setActiveDragger(dragger.name);\n }\n }\n\n getComponent(name: string): IComponent {\n return this._components.find((component) => component.name === name);\n }\n\n drawViewpoint(viewpoint: IViewpoint): void {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n const getPoint3dAsArray = (point3d: IPoint): number[] => {\n return [point3d.x, point3d.y, point3d.z];\n };\n\n const setOrthogonalCamera = (orthogonal_camera: IOrthogonalCamera) => {\n if (orthogonal_camera) {\n activeView.setView(\n getPoint3dAsArray(orthogonal_camera.view_point),\n getPoint3dAsArray(orthogonal_camera.direction),\n getPoint3dAsArray(orthogonal_camera.up_vector),\n orthogonal_camera.field_width,\n orthogonal_camera.field_height,\n true\n );\n\n this.options.cameraMode = \"orthographic\";\n this.emitEvent({ type: \"changecameramode\", mode: \"orthographic\" });\n }\n };\n\n const setPerspectiveCamera = (perspective_camera: IPerspectiveCamera) => {\n if (perspective_camera) {\n // ===================== AI-CODE-START ======================\n // Source: Claude Sonnet 4.5\n // Date: 2025-12-03\n // Reviewer: roman.mochalov@opendesign.com\n // Issue: CLOUD-5997\n // Notes: Originally AI-generated, modified manually\n\n const aspectRatio = this.canvas.width / this.canvas.height;\n\n const position = perspective_camera.view_point;\n const target = perspective_camera.direction;\n const fov = (perspective_camera.field_of_view * Math.PI) / 180;\n\n const dx = target.x - position.x;\n const dy = target.y - position.y;\n const dz = target.z - position.z;\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n const fieldHeight = 2 * distance * Math.tan(fov / 2);\n const fieldWidth = fieldHeight * aspectRatio;\n\n // ===================== AI-CODE-END ======================\n\n activeView.setView(\n getPoint3dAsArray(perspective_camera.view_point),\n getPoint3dAsArray(perspective_camera.direction),\n getPoint3dAsArray(perspective_camera.up_vector),\n fieldWidth,\n fieldHeight,\n false\n );\n\n this.options.cameraMode = \"perspective\";\n this.emitEvent({ type: \"changecameramode\", mode: \"perspective\" });\n }\n };\n\n const setClippingPlanes = (clipping_planes: IClippingPlane[]) => {\n if (clipping_planes) {\n for (const clipping_plane of clipping_planes) {\n const cuttingPlane = new (this.visLib().OdTvPlane)();\n cuttingPlane.set(getPoint3dAsArray(clipping_plane.location), getPoint3dAsArray(clipping_plane.direction));\n\n activeView.addCuttingPlane(cuttingPlane);\n activeView.setEnableCuttingPlaneFill(true, 0x66, 0x66, 0x66);\n }\n }\n };\n\n const setSelection = (selection: IEntity[]) => {\n if (selection) this.setSelected(selection.map((component) => component.handle));\n };\n\n const draggerName = this._activeDragger?.name;\n\n this.setActiveDragger();\n this.clearSlices();\n this.clearOverlay();\n\n this.clearSelected();\n this.showAll();\n this.explode();\n\n setOrthogonalCamera(viewpoint.orthogonal_camera);\n setPerspectiveCamera(viewpoint.perspective_camera);\n setClippingPlanes(viewpoint.clipping_planes);\n setSelection(viewpoint.custom_fields?.selection2 || viewpoint.selection);\n this._markup.setViewpoint(viewpoint);\n\n this.syncOverlay();\n\n this.setActiveDragger(draggerName);\n this.emitEvent({ type: \"drawviewpoint\", data: viewpoint });\n this.update();\n }\n\n createViewpoint(): IViewpoint {\n if (!this.visualizeJs) return {};\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n const getPoint3dFromArray = (array: number[]): IPoint => {\n return { x: array[0], y: array[1], z: array[2] };\n };\n\n const getOrthogonalCamera = (): IOrthogonalCamera => {\n if (!activeView.perspective)\n return {\n view_point: getPoint3dFromArray(activeView.viewPosition),\n direction: getPoint3dFromArray(activeView.viewTarget),\n up_vector: getPoint3dFromArray(activeView.upVector),\n field_width: activeView.viewFieldWidth,\n field_height: activeView.viewFieldHeight,\n view_to_world_scale: 1,\n };\n else return undefined;\n };\n\n const getPerspectiveCamera = (): IPerspectiveCamera => {\n if (activeView.perspective) {\n // ===================== AI-CODE-START ======================\n // Source: Claude Sonnet 4.5\n // Date: 2025-12-03\n // Reviewer: roman.mochalov@opendesign.com\n // Issue: CLOUD-5997\n // Notes: Originally AI-generated, modified manually\n\n const position = activeView.viewPosition;\n const target = activeView.viewTarget;\n const fieldHeight = activeView.viewFieldHeight;\n\n const dx = target[0] - position[0];\n const dy = target[1] - position[1];\n const dz = target[2] - position[2];\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n const fov = 2 * Math.atan(fieldHeight / (2 * distance));\n\n // ===================== AI-CODE-END ======================\n\n return {\n view_point: getPoint3dFromArray(activeView.viewPosition),\n direction: getPoint3dFromArray(activeView.viewTarget),\n up_vector: getPoint3dFromArray(activeView.upVector),\n field_of_view: (fov * 180) / Math.PI,\n };\n } else return undefined;\n };\n\n const getClippingPlanes = (): IClippingPlane[] => {\n const clipping_planes = [];\n for (let i = 0; i < activeView.numCuttingPlanes(); i++) {\n const cuttingPlane = activeView.getCuttingPlane(i);\n\n const clipping_plane = {\n location: getPoint3dFromArray(cuttingPlane.getOrigin()),\n direction: getPoint3dFromArray(cuttingPlane.normal()),\n };\n\n clipping_planes.push(clipping_plane);\n }\n\n return clipping_planes;\n };\n\n const getSelection = (): IEntity[] => {\n return this.getSelected().map((handle) => ({ handle }));\n };\n\n const getSelection2 = (): IEntity[] => {\n return this.getSelected2().map((handle) => ({ handle }));\n };\n\n const viewpoint: IViewpoint = { custom_fields: {} };\n\n viewpoint.orthogonal_camera = getOrthogonalCamera();\n viewpoint.perspective_camera = getPerspectiveCamera();\n viewpoint.clipping_planes = getClippingPlanes();\n viewpoint.selection = getSelection();\n viewpoint.description = new Date().toDateString();\n this._markup.getViewpoint(viewpoint);\n\n viewpoint.custom_fields.selection2 = getSelection2();\n\n this.emitEvent({ type: \"createviewpoint\", data: viewpoint });\n\n return viewpoint;\n }\n\n // IWorldTransform\n\n screenToWorld(position: { x: number; y: number }): { x: number; y: number; z: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y, z: 0 };\n\n const activeView = this.visViewer().activeView;\n const worldPoint = activeView.transformScreenToWorld(\n position.x * window.devicePixelRatio,\n position.y * window.devicePixelRatio\n );\n\n const result = { x: worldPoint[0], y: worldPoint[1], z: worldPoint[2] };\n\n activeView.delete();\n\n return result;\n }\n\n worldToScreen(position: { x: number; y: number; z: number }): { x: number; y: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y };\n\n const activeView = this.visViewer().activeView;\n const devicePoint = activeView.transformWorldToScreen(position.x, position.y, position.z);\n\n const result = { x: devicePoint[0] / window.devicePixelRatio, y: devicePoint[1] / window.devicePixelRatio };\n\n activeView.delete();\n\n return result;\n }\n\n getScale(): { x: number; y: number; z: number } {\n const result = { x: 1.0, y: 1.0, z: 1.0 };\n\n const projMatrix = this.visViewer().activeView.projectionMatrix;\n const tolerance = 1.0e-6;\n\n const x = projMatrix.get(0, 0);\n if (x > tolerance || x < -tolerance) result.x = 1 / x;\n\n const y = projMatrix.get(1, 1);\n if (y > tolerance || y < -tolerance) result.y = 1 / y;\n\n const z = projMatrix.get(2, 2);\n if (z > tolerance || z < -tolerance) result.z = 1 / z;\n\n return result;\n }\n\n // ICommandService\n\n /**\n * Executes the command denoted by the given command. If the command is not found, tries to set active\n * dragger with the specified name.\n *\n * The following commands are available by default:\n *\n * - `applyModelTransform`\n * - `autoTransformAllModelsToCentralPoint`\n * - `clearMarkup`\n * - `clearSelected`\n * - `clearSlices`\n * - `createPreview`\n * - `explode`\n * - `getDefaultViewPositions`\n * - `getModels`\n * - `getSelected`\n * - `hideSelected`\n * - `isolateSelected`\n * - `regenerateAll`\n * - `resetView`\n * - `selectModel`\n * - `setActiveDragger`\n * - `setDefaultViewPosition`\n * - `setMarkupColor`\n * - `setSelected`\n * - `showAll`\n * - `zoomToExtents`\n * - `zoomToObjects`\n * - `zoomToSelected`\n *\n * To register custom command use the {@link commands.registerCommand}.\n *\n * @param id - Command ID or dragger name.\n * @param args - Parameters passed to the command handler function.\n * @returns Returns the result of the command handler function or new active dragger instance. Returns\n * `undefined` if neither the command nor the dragger exists.\n */\n executeCommand(id: string, ...args: any[]): any {\n return commands.executeCommand(id, this, ...args);\n }\n\n // VisualizeJS viewer specific\n\n /**\n * Adds an empty `Visualize` markup entity to the VisualizeJS 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 * Deprecated since `25.11`. Use {@link IMarkup.getMarkupColor | markup.getMarkupColor()} instead.\n */\n getMarkupColor(): { r: number; g: number; b: number } {\n console.warn(\n \"Viewer.getMarkupColor() has been deprecated since 25.11 and will be removed in a future release, use Viewer.markup.getMarkupColor() instead.\"\n );\n return this._markup.getMarkupColor();\n }\n\n /**\n * Deprecated since `25.11`. Use {@link IMarkup.setMarkupColor | markup.setMarkupColor()} instead.\n */\n setMarkupColor(r = 255, g = 0, b = 0): void {\n console.warn(\n \"Viewer.setMarkupColor() has been deprecated since 25.11 and will be removed in a future release, use Viewer.markup.setMarkupColor() instead.\"\n );\n this._markup.setMarkupColor(r, g, b);\n }\n\n /**\n * Deprecated since `25.11`. Use {@link IMarkup.colorizeAllMarkup | markup.colorizeAllMarkup()} instead.\n */\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n console.warn(\n \"Viewer.colorizeAllMarkup() has been deprecated since 25.11 and will be removed in a future release, use Viewer.markup.colorizeAllMarkup() instead.\"\n );\n this._markup.colorizeAllMarkup(r, g, b);\n }\n\n /**\n * Deprecated since `25.11`. Use\n * {@link IMarkup.colorizeSelectedMarkups | markup.colorizeSelectedMarkups()} instead.\n */\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n this._markup.colorizeSelectedMarkups(r, g, b);\n }\n\n private scheduleUpdateAsync(maxScheduleUpdateTimeInMs = 50): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => {\n try {\n if (this._enableAutoUpdate) {\n this.visViewer()?.update(maxScheduleUpdateTimeInMs);\n this._activeDragger?.updatePreview?.();\n }\n this.emitEvent({ type: \"update\", data: false });\n resolve();\n } catch (e) {\n console.error(e);\n reject();\n }\n }, 0);\n });\n }\n\n /**\n * Updates the viewer asynchronously without locking the user interface. Used to update the viewer\n * after changes that require a long rendering time.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register an\n * `update` event handler and update the `VisualizeJS` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param maxScheduleUpdateTimeInMs - Maximum time for one update, default 30 ms.\n * @param maxScheduleUpdateCount - Maximum count of scheduled updates.\n */\n async updateAsync(maxScheduleUpdateTimeInMs = 50, maxScheduleUpdateCount = 50): Promise<void> {\n if (!this.visualizeJs) return;\n\n this._isRunAsyncUpdate = true;\n try {\n const device = this.visViewer().getActiveDevice();\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 public deviceAutoRegeneration() {\n const visViewer = this.visViewer();\n const device = visViewer.getActiveDevice();\n\n const coef = device.getOptionDouble(this.visLib().DeviceOptions.kRegenCoef);\n if (coef > 1.0) {\n visViewer.regenAll();\n this.update();\n }\n }\n}\n"],"names":["utils.createHtmlElementIfNeed","utils.worldToScreen","utils.isInsideRect","utils.getDataForDrawLineWithFixed","utils.getDistance","utils.destroyHtmlElement","utils.onSetCallback","utils.onSetSelectivity","FocalLengthConst","calcFocalLength","KonvaMarkup"],"mappings":"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"}
1
+ {"version":3,"file":"viewer-visualize.module.js","sources":["../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/OdJoyStickDragger.ts","../src/Viewer/Draggers/OdaWalkDragger.ts","../src/Viewer/Draggers/OdaFlyDragger.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/index.ts","../src/Viewer/Commands/ApplyModelTransform.ts","../src/Viewer/Commands/ClearMarkup.ts","../src/Viewer/Commands/ClearSelected.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/GetSelected2.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/SetSelected2.ts","../src/Viewer/Commands/ShowAll.ts","../src/Viewer/Commands/ZoomToExtents.ts","../src/Viewer/Commands/ZoomToObjects.ts","../src/Viewer/Commands/ZoomToSelected.ts","../src/Viewer/Commands/AutoTransformAllModelsToCentralPoint.ts","../src/Viewer/Commands/index.ts","../src/Viewer/Components/CameraComponent.ts","../src/Viewer/Components/InfoComponent.ts","../src/Viewer/Components/RenderLoopComponent.ts","../src/Viewer/Components/ResizeCanvasComponent.ts","../src/Viewer/Components/ZoomWheelComponent.ts","../src/Viewer/Draggers/Common/GestureManager.ts","../src/Viewer/Components/GestureManagerComponent.ts","../src/Viewer/Components/ResetComponent.ts","../src/Viewer/Components/index.ts","../src/Viewer/Models/ModelImpl.ts","../src/Viewer/Loaders/FileLoader.ts","../src/Viewer/Loaders/VSFFileLoader.ts","../src/Viewer/Loaders/VSFCloudLoader.ts","../src/Viewer/Loaders/VSFXFileLoader.ts","../src/Viewer/Loaders/VSFXCloudLoader.ts","../src/Viewer/Loaders/VSFXCloudStreamingLoader.ts","../src/Viewer/Loaders/VSFXCloudPartialLoader.ts","../src/Viewer/Loaders/index.ts","../src/Viewer/utils.ts","../src/Viewer/Draggers/OdaLineDragger.ts","../src/Viewer/Draggers/OdaTextDragger.ts","../src/Viewer/Markup/Visualize/VisualizeMarkup.ts","../src/Viewer/Markup/MarkupFactory.ts","../src/Viewer/Viewer.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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-2025, 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-2025 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 { CANVAS_EVENTS } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../../Viewer\";\nimport { Point2d } from \"./Geometry\";\nimport { OdaGeAction } from \"./OdaGeAction\";\n\nconst CLICK_DELTA = 5;\n\nconst INTERACTIVITY_FPS = 24;\n\nexport class OdBaseDragger extends OdaGeAction {\n protected subject: Viewer;\n protected needInputText: boolean;\n protected mouseDownPosition: Point2d;\n protected autoSelect: boolean;\n protected onmessage: (event: any) => boolean;\n protected canvasEvents: string[];\n protected isDragging: boolean;\n protected press: boolean;\n\n public name: string;\n\n constructor(subject: Viewer) {\n super(subject.visualizeJs);\n this.subject = subject;\n this.needInputText = false;\n this.mouseDownPosition = { x: 0, y: 0 };\n this.autoSelect = false;\n\n this.onmessage = (event) => this.subject.emitEvent(event);\n this.canvasEvents = CANVAS_EVENTS;\n }\n\n public initialize(): void {\n this.canvasEvents = this.canvasEvents.filter((x) => typeof this[x] === \"function\");\n this.canvasEvents.forEach((x) => (this[x] = this[x].bind(this)));\n this.canvasEvents.forEach((x) => this.subject.on(x, this[x]));\n\n this.getViewer().setEnableAutoSelect(!!this.autoSelect);\n }\n\n public dispose(): void {\n this.canvasEvents.forEach((x) => this.subject.off(x, this[x]));\n }\n\n protected relativeCoords(event: MouseEvent): Point2d {\n return { x: event.offsetX * window.devicePixelRatio, y: event.offsetY * window.devicePixelRatio };\n }\n\n protected pointerdown(ev: PointerEvent): void {\n if (!ev.isPrimary || OdBaseDragger.isGestureActive) {\n return;\n }\n\n (ev.target as HTMLElement).setPointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.isDragging = true;\n this.mouseDownPosition = { x: relCoord.x, y: relCoord.y };\n this.start(relCoord.x, relCoord.y, ev.clientX, ev.clientY);\n this.subject.update();\n }\n\n protected pointerup(ev: PointerEvent): void {\n if (OdBaseDragger.needSkipPointerUp) {\n return;\n }\n\n if (!ev.isPrimary) {\n return;\n }\n\n (ev.target as HTMLElement).releasePointerCapture(ev.pointerId);\n\n const relCoord = this.relativeCoords(ev);\n this.end(relCoord.x, relCoord.y, ev.clientX, ev.clientY);\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.clientX, ev.clientY);\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\n this.onmessage({ type: \"select\", data: selectionSet, handles: this.subject.getSelected() });\n this.onmessage({ type: \"select2\", data: selectionSet, handles: this.subject.getSelected2() });\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, absoluteX = 0, absoluteY = 0): 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-2025, 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-2025 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-2025, 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-2025 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 * 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 scale: number;\n protected unit: string;\n protected precision: any;\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.scale = 1.0;\n this.unit = \"\";\n this.precision = 2;\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();\n\n const pX = p1.x + dx / 2;\n const pY = p1.y + dy / 2;\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}px`;\n this.htmlElemTitle.style.transform = \"translate(-50%, -50%)\";\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 = this.formatDistance(distance);\n } else {\n this.htmlElemLine.style.display = \"none\";\n this.htmlElemTitle.style.display = \"none\";\n }\n }\n }\n\n getDistance(): number {\n let distance = utils.getDistance(this.startPoint, this.endPoint, this.moduleInstance);\n if (Math.abs(this.scale) > 1e-10) distance /= this.scale;\n return distance;\n }\n\n calculatePrecision(value: number) {\n const distance = Math.abs(value);\n\n if (distance >= 1000) return 0;\n if (distance >= 10) return 1;\n if (distance >= 0.1) return 2;\n if (distance >= 0.001) return 3;\n\n return distance > 0 ? Math.floor(-Math.log10(distance)) + 1 : 2;\n }\n\n formatDistance(distance: number): string {\n let digits: number;\n\n if (this.precision === \"Auto\") digits = this.calculatePrecision(distance);\n else if (Number.isFinite(this.precision)) digits = this.precision;\n else digits = parseFloat(this.precision);\n\n if (!Number.isFinite(digits)) digits = 2;\n else if (digits < 0) digits = 0;\n else if (digits > 10) digits = 10;\n\n let result = distance.toFixed(digits);\n if (this.precision === \"Auto\") result = result.replace(/\\.0+$/, \"\").replace(/\\.$/, \"\");\n if (+result !== distance) result = \"~ \" + result;\n\n return `${result} ${this.unit}`;\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 setPrecision(precision: any): void {\n this.precision = precision;\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-2025, 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-2025 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\";\nimport { IOptions } from \"@inweb/viewer-core\";\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 items: MeasureLineItem[];\n protected m_overlayElement: HTMLElement;\n protected previewMeasureLine: MeasureLineItem;\n protected conversionFactor: number;\n protected rulerUnitTable: any;\n protected rulerUnit: string;\n protected rulerPrecision: any;\n\n constructor(subject: Viewer) {\n super(subject);\n\n this.lineThickness = 2;\n this.press = false;\n this.gripingRadius = 5.0;\n this.firstPoint = null;\n this.secondPoint = null;\n\n this.rulerUnitTable = {\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 Mils: \"mil\",\n MicroInches: \"µin\",\n Default: \"unit\",\n };\n\n this.rulerUnit = subject.options.rulerUnit ?? \"Default\";\n this.rulerPrecision = subject.options.rulerPrecision ?? \"Default\";\n\n this.items = [];\n this.canvasEvents.push(\"resize\", \"optionsChange\");\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 this.subject.addEventListener(\"optionschange\", this.optionsChange);\n\n this.resize();\n }\n\n override dispose(): void {\n super.dispose();\n this.m_overlayElement.remove();\n this.subject.removeEventListener(\"optionschange\", this.optionsChange);\n }\n\n override updatePreview(): void {\n this.items.forEach((item) => item.update());\n }\n\n resize(): void {\n const rect = this.m_module.canvas.getBoundingClientRect();\n\n this.m_overlayElement.style.top = `${rect.top}px`;\n this.m_overlayElement.style.left = `${rect.left}px`;\n this.m_overlayElement.style.width = `${rect.width}px`;\n this.m_overlayElement.style.height = `${rect.height}px`;\n }\n\n getSnapPointRadius(): number {\n const view = this.getViewer().activeView;\n const corners = view.viewDcCorners();\n\n const pt1 = corners.lowerLeft;\n const pt2 = corners.upperRight;\n\n pt2[0] -= pt1[0];\n pt2[1] -= pt1[1];\n\n return Math.min(pt2[0], pt2[1]) / 120;\n }\n\n override start(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (point) {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n }\n\n override drag(x: number, y: number): void {\n this.createNewMeasureIfNeed();\n const point = this.getViewer().getSnapPoint(x, y, this.gripingRadius);\n\n if (this.isDragging) {\n if (point) {\n if (this.firstPoint) {\n this.secondPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.secondPoint, true);\n } else {\n this.firstPoint = point;\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n }\n } else {\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n this.previewMeasureLine.setStartPoint(this.firstPoint);\n this.previewMeasureLine.setEndPoint(this.getViewer().screenToWorld(x, y), false);\n }\n } else {\n if (point) {\n this.previewMeasureLine.setStartPoint(point);\n } else {\n this.previewMeasureLine.clear();\n }\n }\n }\n\n override end(): void {\n if (this.firstPoint && this.secondPoint) {\n const newLineMeasure = this.createMeasureLine();\n newLineMeasure.setStartPoint(this.firstPoint);\n newLineMeasure.setEndPoint(this.secondPoint, true);\n }\n this.firstPoint = null;\n this.secondPoint = null;\n this.previewMeasureLine.clear();\n }\n\n createNewMeasureIfNeed(): void {\n if (!this.previewMeasureLine) {\n this.previewMeasureLine = this.createMeasureLine();\n }\n }\n\n createMeasureLine(): MeasureLineItem {\n const viewer = this.m_module.getViewer();\n const item = new MeasureLineItem(this.m_overlayElement, viewer, this.m_module);\n\n item.lineThickness = this.lineThickness || item.lineThickness;\n\n const isDefaultUnit = this.rulerUnit === \"Default\";\n const isDefaultPrecision = this.rulerPrecision === \"Default\";\n\n item.setUnit(renameUnit(this.rulerUnitTable, isDefaultUnit ? viewer.getUnit() : this.rulerUnit));\n\n if (!isDefaultUnit) {\n const fromUnit = this.getKUnitByName(viewer.getUnit());\n const toUnit = this.getKUnitByName(this.subject.options.rulerUnit);\n const multiplier = viewer.getUnitsConversionCoef(fromUnit, toUnit);\n this.conversionFactor = 1 / multiplier;\n item.setConversionFactor(this.conversionFactor);\n } else {\n item.setConversionFactor(1.0);\n }\n\n if (!isDefaultPrecision) {\n item.setPrecision(this.rulerPrecision);\n } else {\n item.setPrecision(2);\n }\n\n this.items.push(item);\n return item;\n }\n\n optionsChange(event): void {\n const options: IOptions = event.data;\n const toUnitName = options.rulerUnit ?? \"Default\";\n const toPrecision = options.rulerPrecision ?? \"Default\";\n\n const unitChanged = this.rulerUnit !== toUnitName;\n const precisionChanged = this.rulerPrecision !== toPrecision;\n\n if (!unitChanged && !precisionChanged) return;\n\n this.rulerUnit = toUnitName;\n this.rulerPrecision = toPrecision;\n\n const drawingUnit = this.m_module.getViewer().getUnit();\n const eToUnit = this.getKUnitByName(toUnitName);\n const eFromUnit = this.getKUnitByName(drawingUnit);\n\n this.items.forEach((item) => {\n if (unitChanged) {\n if (toUnitName === \"Default\") {\n item.setUnit(renameUnit(this.rulerUnitTable, drawingUnit));\n item.setConversionFactor(1.0);\n } else {\n item.setUnit(renameUnit(this.rulerUnitTable, toUnitName));\n const multiplier = this.m_module.getViewer().getUnitsConversionCoef(eFromUnit, eToUnit);\n this.conversionFactor = 1 / multiplier;\n item.setConversionFactor(this.conversionFactor);\n }\n }\n if (precisionChanged) {\n if (toPrecision === \"Default\") {\n item.setPrecision(2);\n } else {\n item.setPrecision(toPrecision);\n }\n }\n });\n }\n\n getKUnitByName(unitName: string): any {\n let eUnit = this.m_module.Units.kUserDefined;\n switch (unitName) {\n case \"Millimeters\":\n eUnit = this.m_module.Units.kMillimeters;\n break;\n case \"Centimeters\":\n eUnit = this.m_module.Units.kCentimeters;\n break;\n case \"Meters\":\n eUnit = this.m_module.Units.kMeters;\n break;\n case \"Feet\":\n eUnit = this.m_module.Units.kFeet;\n break;\n case \"Inches\":\n eUnit = this.m_module.Units.kInches;\n break;\n case \"Yards\":\n eUnit = this.m_module.Units.kYards;\n break;\n case \"Kilometers\":\n eUnit = this.m_module.Units.kKilometers;\n break;\n case \"Miles\":\n eUnit = this.m_module.Units.kMiles;\n break;\n case \"Micrometers\":\n eUnit = this.m_module.Units.kMicrometers;\n break;\n case \"Mils\":\n eUnit = this.m_module.Units.kMils;\n break;\n case \"MicroInches\":\n eUnit = this.m_module.Units.kMicroInches;\n break;\n default:\n break;\n }\n return eUnit;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\n// ===================== AI-CODE-FILE ======================\n// Source: Claude Sonnet 4.5\n// Date: 2025-10-07\n// Reviewer: vitaly.ivanov@opendesign.com\n// Issue: CLOUD-5851\n// Notes: Originally AI-generated, modified manually\n// =========================================================\n\ninterface JoyStickStatus {\n x: number;\n y: number;\n global: any;\n}\n\nexport class OdJoyStickDragger {\n private onMouseDown: (event?: any) => void;\n private onMouseMove: (event: any) => void;\n private onMouseUp: (event?: any) => void;\n private drawExternal: () => void;\n private drawInternal: () => void;\n private canvas: HTMLCanvasElement;\n private onResize: () => void;\n private hasEventListeners: boolean = false;\n private container: HTMLElement;\n\n constructor(\n global: any,\n container: HTMLElement,\n callback: (status: JoyStickStatus) => void,\n canvasElement?: HTMLCanvasElement\n ) {\n const internalLineWidth = 2;\n const internalStrokeColor = \"#003300\";\n const externalLineWidth = 2;\n const externalStrokeColor = \"#35436E\";\n\n this.container = container;\n this.container.style.touchAction = \"none\";\n\n this.canvas = document.createElement(\"canvas\");\n this.canvas.id = \"odJoyStickCanvas\";\n this.canvas.width = 200;\n this.canvas.height = 200;\n this.container.appendChild(this.canvas);\n const context = this.canvas.getContext(\"2d\")!;\n\n let pressed = 0;\n const circumference = 2 * Math.PI;\n const internalRadius = (this.canvas.width - (this.canvas.width / 2 + 10)) / 2;\n const maxMoveStick = internalRadius + 5;\n const externalRadius = internalRadius + 30;\n const centerX = this.canvas.width / 2;\n const centerY = this.canvas.height / 2;\n let movedX = centerX;\n let movedY = centerY;\n\n this.onMouseDown = () => {\n event.preventDefault();\n pressed = 1;\n };\n\n this.onMouseMove = (event) => {\n event.preventDefault();\n if (pressed === 1) {\n movedX = event.pageX;\n movedY = event.pageY;\n if (this.canvas.offsetParent && (this.canvas.offsetParent as HTMLElement).tagName.toUpperCase() === \"BODY\") {\n movedX -= this.canvas.offsetLeft;\n movedY -= this.canvas.offsetTop;\n } else if (this.canvas.offsetParent) {\n movedX -= (this.canvas.offsetParent as HTMLElement).offsetLeft;\n movedY -= (this.canvas.offsetParent as HTMLElement).offsetTop;\n }\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.drawExternal();\n this.drawInternal();\n callback({\n x: 100 * ((movedX - centerX) / maxMoveStick),\n y: 100 * ((movedY - centerY) / maxMoveStick) * -1,\n global,\n });\n }\n };\n\n this.onMouseUp = () => {\n event.preventDefault();\n pressed = 0;\n movedX = centerX;\n movedY = centerY;\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.drawExternal();\n this.drawInternal();\n callback({\n x: 100 * ((movedX - centerX) / maxMoveStick),\n y: 100 * ((movedY - centerY) / maxMoveStick) * -1,\n global,\n });\n };\n\n this.drawExternal = () => {\n context.beginPath();\n context.arc(centerX, centerY, externalRadius, 0, circumference, false);\n context.lineWidth = externalLineWidth;\n context.strokeStyle = externalStrokeColor;\n context.globalAlpha = 0.5;\n context.stroke();\n };\n\n this.drawInternal = () => {\n context.beginPath();\n if (movedX < internalRadius) {\n movedX = maxMoveStick;\n }\n if (movedX + internalRadius > this.canvas.width) {\n movedX = this.canvas.width - maxMoveStick;\n }\n if (movedY < internalRadius) {\n movedY = maxMoveStick;\n }\n if (movedY + internalRadius > this.canvas.height) {\n movedY = this.canvas.height - maxMoveStick;\n }\n context.arc(movedX, movedY, internalRadius, 0, circumference, false);\n context.fillStyle = externalStrokeColor;\n context.lineWidth = internalLineWidth;\n context.strokeStyle = internalStrokeColor;\n context.globalAlpha = 0.5;\n context.fill();\n context.stroke();\n };\n\n const addEventListeners = () => {\n if (!this.hasEventListeners) {\n this.canvas.addEventListener(\"pointerdown\", this.onMouseDown, false);\n document.addEventListener(\"pointermove\", this.onMouseMove, false);\n document.addEventListener(\"pointerup\", this.onMouseUp, false);\n this.hasEventListeners = true;\n }\n };\n\n const removeEventListeners = () => {\n if (this.hasEventListeners) {\n this.canvas.removeEventListener(\"pointerdown\", this.onMouseDown, false);\n document.removeEventListener(\"pointermove\", this.onMouseMove, false);\n document.removeEventListener(\"pointerup\", this.onMouseUp, false);\n this.hasEventListeners = false;\n }\n };\n\n const updateContainerPosition = () => {\n if (canvasElement) {\n const rect = canvasElement.getBoundingClientRect();\n this.container.style.top = `${rect.height - 200}px`;\n this.container.style.left = `${rect.left}px`;\n this.container.style.width = `200px`;\n this.container.style.height = `200px`;\n }\n };\n\n const updateVisibility = () => {\n const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n const isNarrowScreen = window.innerWidth < 1024;\n const shouldShow = isMobile || isNarrowScreen;\n\n if (shouldShow) {\n this.container.style.display = \"block\";\n addEventListeners();\n } else {\n this.container.style.display = \"none\";\n removeEventListeners();\n }\n };\n\n this.onResize = () => {\n updateVisibility();\n setTimeout(updateContainerPosition, 500);\n };\n\n updateVisibility();\n updateContainerPosition();\n window.addEventListener(\"resize\", this.onResize, false);\n\n this.drawExternal();\n this.drawInternal();\n }\n\n cleanup(): void {\n window.removeEventListener(\"resize\", this.onResize, false);\n\n if (this.hasEventListeners) {\n this.canvas.removeEventListener(\"pointerdown\", this.onMouseDown, false);\n document.removeEventListener(\"pointermove\", this.onMouseMove, false);\n document.removeEventListener(\"pointerup\", this.onMouseUp, false);\n this.hasEventListeners = false;\n }\n\n this.canvas.remove();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\";\nimport { OdJoyStickDragger } from \"./OdJoyStickDragger\";\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 baseSpeed: 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 lastFrameJoyStickTS: number;\n protected animationId: any;\n protected deltaAngle: number;\n protected enableZoomWheelPreviousValue: boolean;\n protected dragPosition: Point2d;\n protected joyStickOverlayElement: HTMLDivElement;\n protected joyStickDragger: OdJoyStickDragger;\n protected isJoyStickMoving: boolean;\n protected lastJoyStickCoord: Point2d;\n\n constructor(subject: Viewer) {\n super(subject);\n this.viewer = undefined;\n\n this.multiplier = 5;\n this.baseSpeed = 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.lastFrameJoyStickTS = 0;\n this.animationId = undefined;\n this.processMovement = this.processMovement.bind(this);\n this.processJoyStickMovement = this.processJoyStickMovement.bind(this);\n\n this.deltaAngle = Math.PI / 3600;\n this.autoSelect = true;\n\n this.isJoyStickMoving = false;\n this.addJoyStickDragger(subject.canvas.parentElement);\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.baseSpeed = 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 // CLOUD-5359 Demo Viewer crashes after the Walk Mode\n this.subject.update(true);\n this.subject.options.enableZoomWheel = this.enableZoomWheelPreviousValue;\n\n this.joyStickOverlayElement.remove();\n this.joyStickDragger.cleanup();\n }\n\n keydown(ev: KeyboardEvent) {\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: KeyboardEvent) {\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: number) {\n this.animationId = requestAnimationFrame(this.processMovement);\n\n if (this.lastFrameTS !== 0) {\n const deltaTS = timestamp - this.lastFrameTS;\n if (deltaTS > 0) {\n const currentDelta = this.multiplier * deltaTS * this.baseSpeed;\n\n Array.from(this.keyPressMap).forEach((keyCode) => {\n switch (keyCode) {\n case \"KeyW\":\n this.moveForward(currentDelta);\n break;\n case \"KeyS\":\n this.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\n this.proceedChangeCamera();\n }\n }\n\n this.lastFrameTS = timestamp;\n }\n\n override start(x: number, y: number): void {\n this.dragPosition = { x, y };\n }\n\n override drag(x: number, y: number) {\n if (this.cameraId && this.isDragging) {\n const dltX = x - this.dragPosition.x;\n const dltY = y - this.dragPosition.y;\n this.dragPosition = { x, y };\n\n if (dltX !== 0.0) this.turnLeft(-dltX * this.deltaAngle);\n if (dltY !== 0.0) this.cameraWalker.turnDown(dltY * this.deltaAngle);\n\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n }\n\n moveForward(currentDelta: number) {\n const { Vector3d } = this.m_module;\n\n const camera = this.cameraWalker.camera().openObjectAsCamera();\n const target = Vector3d.createFromArray(camera.target());\n const dir = Vector3d.createFromArray(camera.direction());\n const up = Vector3d.createFromArray(camera.upVector());\n const pos = Vector3d.createFromArray(camera.position());\n let move = Vector3d.createFromArray([dir.x, dir.y, 0]);\n if (Math.abs(dir.x) > 0.001 && Math.abs(dir.y) > 0.001) {\n move.setToProduct(move.normalize(), currentDelta);\n } else {\n move = Vector3d.createFromArray([0, currentDelta, 0]);\n }\n\n const newPos = pos.add(move);\n const newTarget = target.add(move);\n\n camera.setupCamera(newPos.toArray(), newTarget.toArray(), up.toArray());\n }\n\n moveBackward(currentDelta: number) {\n this.moveForward(-currentDelta);\n }\n\n turnLeft(angle: number) {\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: any) {\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: any) {\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 addJoyStickDragger(parentElement: HTMLElement) {\n this.joyStickOverlayElement = document.createElement(\"div\");\n this.joyStickOverlayElement.id = \"joyStickDiv\";\n this.joyStickOverlayElement.style.background = \"rgba(0,0,0,0)\";\n this.joyStickOverlayElement.style.position = \"fixed\";\n this.joyStickOverlayElement.style.zIndex = \"0\";\n parentElement.appendChild(this.joyStickOverlayElement);\n\n this.joyStickDragger = new OdJoyStickDragger(\n this,\n this.joyStickOverlayElement,\n (stickData) => {\n if (Math.sqrt(stickData.x * stickData.x + stickData.y * stickData.y) > 20) {\n this.lastJoyStickCoord = { x: stickData.x, y: stickData.y };\n if (!this.animationId && !this.isJoyStickMoving) {\n this.isJoyStickMoving = true;\n this.processJoyStickMovement(0);\n }\n } else {\n this.isJoyStickMoving = false;\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n this.lastFrameJoyStickTS = 0;\n }\n },\n this.m_module.canvas\n );\n }\n\n processJoyStickMovement(timestamp: number) {\n if (!this.isJoyStickMoving) return;\n this.animationId = requestAnimationFrame(this.processJoyStickMovement);\n\n if (this.lastFrameJoyStickTS !== 0) {\n const deltaTS = timestamp - this.lastFrameJoyStickTS;\n if (deltaTS > 0) {\n const maxJoystickDistance = 100;\n const forward = this.lastJoyStickCoord.y / maxJoystickDistance;\n const right = this.lastJoyStickCoord.x / maxJoystickDistance;\n\n const currentDelta = this.multiplier * deltaTS * this.baseSpeed;\n this.moveTotal(currentDelta, forward, right);\n }\n }\n\n this.lastFrameJoyStickTS = timestamp;\n }\n\n moveTotal(currentDelta: number, forward: number, right: number): void {\n if (forward !== 0) {\n this.moveForward(currentDelta * forward);\n }\n if (right !== 0) {\n this.cameraWalker.moveRight(currentDelta * right);\n }\n this.proceedChangeCamera();\n }\n\n proceedChangeCamera() {\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\";\nimport { OdJoyStickDragger } from \"./OdJoyStickDragger\";\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 OdaFlyDragger 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 cameraFlyer: 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 protected dragPosition: Point2d;\n protected lastJoyStickCoord: Point2d;\n protected lastFrameJoyStickTS: number;\n protected isJoyStickMoving: boolean;\n protected joyStickOverlayElement: HTMLDivElement;\n protected joyStickDragger: OdJoyStickDragger;\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.lastFrameJoyStickTS = 0;\n this.animationId = undefined;\n this.processMovement = this.processMovement.bind(this);\n this.processJoyStickMovement = this.processJoyStickMovement.bind(this);\n\n this.deltaAngle = Math.PI / 3600;\n this.autoSelect = true;\n\n this.isJoyStickMoving = false;\n this.addJoyStickDragger(subject.canvas.parentElement);\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: \"flystart\" });\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.cameraFlyer = new this.m_module.OdTvCameraWalker();\n this.cameraFlyer.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.cameraFlyer?.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 // CLOUD-5359 Demo Viewer crashes after the Fly Mode\n this.subject.update(true);\n this.subject.options.enableZoomWheel = this.enableZoomWheelPreviousValue;\n\n this.joyStickOverlayElement.remove();\n this.joyStickDragger.cleanup();\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: \"flyspeedchange\", 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: \"flyspeedchange\", 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.cameraFlyer.moveForward(currentDelta);\n break;\n case \"KeyS\":\n this.cameraFlyer.moveBackward(currentDelta);\n break;\n case \"KeyA\":\n this.cameraFlyer.moveLeft(currentDelta);\n break;\n case \"KeyD\":\n this.cameraFlyer.moveRight(currentDelta);\n break;\n case \"KeyQ\":\n this.cameraFlyer.moveUp(currentDelta);\n break;\n case \"KeyE\":\n this.cameraFlyer.moveDown(currentDelta);\n break;\n }\n }\n\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n\n this.lastFrameTS = timestamp;\n }\n\n override start(x: number, y: number): void {\n this.dragPosition = { x, y };\n }\n\n override drag(x: number, y: number) {\n if (this.cameraId && this.isDragging) {\n const dltX = x - this.dragPosition.x;\n const dltY = y - this.dragPosition.y;\n this.dragPosition = { x, y };\n\n if (dltX !== 0.0) this.turnLeft(-dltX * this.deltaAngle);\n if (dltY !== 0.0) this.cameraFlyer.turnDown(dltY * this.deltaAngle);\n\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n }\n\n turnLeft(angle) {\n //TODO: migrate to VisualizeJS\n const pCamera = this.cameraFlyer.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 addJoyStickDragger(parentElement: HTMLElement) {\n this.joyStickOverlayElement = document.createElement(\"div\");\n this.joyStickOverlayElement.id = \"joyStickDiv\";\n this.joyStickOverlayElement.style.background = \"rgba(0,0,0,0)\";\n this.joyStickOverlayElement.style.position = \"fixed\";\n this.joyStickOverlayElement.style.zIndex = \"0\";\n parentElement.appendChild(this.joyStickOverlayElement);\n\n this.joyStickDragger = new OdJoyStickDragger(\n this,\n this.joyStickOverlayElement,\n (stickData) => {\n if (Math.sqrt(stickData.x * stickData.x + stickData.y * stickData.y) > 20) {\n this.lastJoyStickCoord = { x: stickData.x, y: stickData.y };\n if (!this.animationId && !this.isJoyStickMoving) {\n this.isJoyStickMoving = true;\n this.processJoyStickMovement(0);\n }\n } else {\n this.isJoyStickMoving = false;\n window.cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n this.lastFrameJoyStickTS = 0;\n }\n },\n this.m_module.canvas\n );\n }\n\n processJoyStickMovement(timestamp: number) {\n if (!this.isJoyStickMoving) return;\n this.animationId = requestAnimationFrame(this.processJoyStickMovement);\n\n if (this.lastFrameJoyStickTS !== 0) {\n const deltaTS = timestamp - this.lastFrameJoyStickTS;\n if (deltaTS > 0) {\n const maxJoystickDistance = 100;\n const forward = this.lastJoyStickCoord.y / maxJoystickDistance;\n const right = this.lastJoyStickCoord.x / maxJoystickDistance;\n\n const currentDelta = this.multiplier * deltaTS * this.speed;\n this.moveTotal(currentDelta, forward, right);\n }\n }\n\n this.lastFrameJoyStickTS = timestamp;\n }\n\n moveTotal(currentDelta: number, forward: number, right: number): void {\n if (forward !== 0) {\n if (forward > 0) {\n this.cameraFlyer.moveForward(currentDelta * forward);\n } else {\n this.cameraFlyer.moveBackward(currentDelta * Math.abs(forward));\n }\n }\n if (right !== 0) {\n this.cameraFlyer.moveRight(currentDelta * right);\n }\n this.subject.update();\n this.subject.emitEvent({ type: \"changecamera\" });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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-2025, 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-2025 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-2025, 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-2025 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-2025, 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-2025 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-2025, 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-2025 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 this._subject.emitEvent({\n type: \"orbit\",\n });\n this._subject.emitEvent({\n type: \"changecamera\",\n });\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 // Protect against zero or near-zero vector when pTarget and pPosition are the same\n if (vDirect.length() < 1e-10) {\n // Return a default side vector (X axis) when direction is degenerate\n const defaultSide = this.toVector(this._m_module.Vector3d.kXAxis);\n this.deleteAll([direct, pUpV, pTarget, pPosition, vDirect]);\n return defaultSide;\n }\n\n const vCross = pUpV.crossProduct(vDirect);\n\n // Also protect against zero cross product (parallel vectors)\n if (vCross.length() < 1e-10) {\n // Return a default side vector when up and direction are parallel\n const defaultSide = this.toVector(this._m_module.Vector3d.kXAxis);\n this.deleteAll([direct, pUpV, pTarget, pPosition, vDirect, vCross]);\n return defaultSide;\n }\n\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\n const pUp = pTarget.sub(pPoint);\n const vUp = pUp.asVector();\n\n // Protect against zero or near-zero vector when pPoint and pTarget are the same\n if (vUp.length() < 1e-10) {\n // Skip up vector calculation if points are too close\n this.deleteAll([pPoint, pTarget, pUp, vUp]);\n return;\n }\n\n const crossProduct = vUp.crossProduct(sideVector);\n\n // Protect against zero cross product (parallel vectors)\n if (crossProduct.length() < 1e-10) {\n // Keep current up vector if cross product is degenerate\n this.deleteAll([pPoint, pTarget, pUp, vUp, crossProduct]);\n return;\n }\n\n const crossProductNormal = crossProduct.normalize();\n\n viewParams.upVector = crossProductNormal.toArray();\n\n this.deleteAll([pPoint, pTarget, 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 // Protect against zero or near-zero vector when pPoint and pTarget are the same\n if (vUp.length() < 1e-10) {\n // Skip up vector calculation if points are too close\n this.deleteAll([zAxis, pTarget, pPoint, side, pUp, vUp]);\n return;\n }\n\n const cross = vUp.crossProduct(side);\n\n // Protect against zero cross product (parallel vectors)\n if (cross.length() < 1e-10) {\n // Keep current up vector if cross product is degenerate\n this.deleteAll([zAxis, pTarget, pPoint, side, pUp, vUp, cross]);\n return;\n }\n\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-2025, 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-2025 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 { 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): 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-2025, 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-2025 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, absoluteX: number, absoluteY: number) {\n this._m_start = this.screenToWorld(x, y);\n this._deltaScreenPosition = { x: absoluteX, y: absoluteY };\n this._beginInteractivity();\n }\n\n public action(x: number, y: number, absoluteX: number, absoluteY: 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: absoluteX,\n y: absoluteY,\n dX: absoluteX - this._deltaScreenPosition.x,\n dY: absoluteY - this._deltaScreenPosition.y,\n });\n this._subject.emitEvent({\n type: \"changecamera\",\n });\n\n this._deltaScreenPosition = { x: absoluteX, y: absoluteY };\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-2025, 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-2025 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 { 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, absoluteX: number, absoluteY: number): void {\n this.press = true;\n this._panAction.beginAction(x, y, absoluteX, absoluteY);\n }\n\n override drag(x: number, y: number, absoluteX: number, absoluteY: number): void {\n if (this.press) {\n this._panAction.action(x, y, absoluteX, absoluteY);\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-2025, 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-2025 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, absoluteX: number, absoluteY: number) {\n const viewer = this._m_module.getViewer();\n viewer.zoomAt(zoomFactor, x, y);\n\n this._subject.deviceAutoRegeneration();\n\n this._subject.activeDragger()?.updatePreview?.();\n this._subject.emitEvent({\n type: \"zoomat\",\n data: zoomFactor,\n x: absoluteX,\n y: absoluteY,\n });\n this._subject.emitEvent({\n type: \"changecamera\",\n });\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { 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 protected absoluteX: number;\n protected absoluteY: number;\n protected prevY: 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, absoluteX = 0, absoluteY = 0): void {\n this.press = true;\n this.pressX = x;\n this.pressY = y;\n this.absoluteX = absoluteX;\n this.absoluteY = absoluteY;\n this.prevY = y;\n this.beginInteractivity();\n }\n\n override drag(x: number, y: number): void {\n const dltY = y - this.prevY;\n this.prevY = y;\n\n if (this.press && Math.abs(dltY) >= 10e-6) {\n const ZOOM_SPEED = 0.975;\n const zoomFactor = dltY > 0 ? 1 / ZOOM_SPEED : ZOOM_SPEED;\n this._zoomAction.action(this.pressX, this.pressY, zoomFactor, this.absoluteX, this.absoluteY);\n }\n }\n\n override end(): void {\n this.press = false;\n this.endInteractivity();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 zoomIn = this.subject.options.reverseZoomWheel ? 0.925 : 1 / 0.925;\n const zoomOut = this.subject.options.reverseZoomWheel ? 1 / 0.925 : 0.925;\n\n const viewer = this.getViewer();\n if (viewer) {\n const zoomFactor = event.deltaY > 0 ? zoomIn : zoomOut;\n\n this._zoomAction.action(\n event.offsetX * window.devicePixelRatio,\n event.offsetY * window.devicePixelRatio,\n zoomFactor,\n event.offsetX,\n event.offsetY\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-2025, 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-2025 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-2025, 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-2025 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 { 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): 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-2025, 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-2025 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 { 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): 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-2025, 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-2025 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 { IDraggersRegistry, draggersRegistry } from \"@inweb/viewer-core\";\n\nimport { MeasureLineDragger } from \"./MeasureLineDragger\";\nimport { OdaWalkDragger } from \"./OdaWalkDragger\";\nimport { OdaFlyDragger } from \"./OdaFlyDragger\";\nimport { OdCuttingPlaneXAxisDragger } from \"./OdCuttingPlaneXAxisDragger\";\nimport { OdCuttingPlaneYAxisDragger } from \"./OdCuttingPlaneYAxisDragger\";\nimport { OdCuttingPlaneZAxisDragger } from \"./OdCuttingPlaneZAxisDragger\";\nimport { OdOrbitDragger } from \"./OdOrbitDragger\";\nimport { OdPanDragger } from \"./OdPanDragger\";\nimport { OdZoomDragger } from \"./OdZoomDragger\";\nimport { OdZoomWheelDragger } from \"./OdZoomWheelDragger\";\nimport { OdZoomWindowDragger } from \"./OdZoomWindowDragger\";\nimport { OrbitAroundBuildingDragger } from \"./OrbitAroundBuildingDragger\";\n\n/**\n * A draggers registry. Use this registry to register custom draggers.\n *\n * To implement custom dragger:\n *\n * 1. Define a dragger class implements {@link IDragger}.\n * 2. Define a constructor with a `viewer` parameter and add mouse event listeners for the specified viewer.\n * 3. Define the dragger logic in the event listeners. For example, listen for the `mousemove` event and\n * zoom in/out when the left mouse button is pressed.\n * 4. Override {@link IDragger.dispose} and remove mouse event listeners from the viewer.\n * 5. Register dragger provider in the draggers registry by calling the {@link draggers.registerDragger}.\n *\n * @example Implementing a custom dragger.\n *\n * ```javascript\n * import { IDragger, draggers, Viewer } from \"@inweb/viewer-visualize\";\n *\n * class MyDragger implements IDragger {\n * protected viewer: Viewer;\n *\n * constructor(viewer: Viewer) {\n * this.viewer = viewer;\n * this.viewer.addEventListener(\"pointermove\", this.onPointerMove);\n * }\n *\n * override dispose() {\n * this.viewer.removeEventListener(\"pointermove\", this.onPointerMove);\n * }\n *\n * onPointerMove = (event: PointerEvent) => {\n * // place custom logic here\n * };\n * }\n *\n * draggers.registerDragger(\"MyDragger\", (viewer): IDragger => new MyDragger(viewer));\n * ```\n *\n * @example Activating a custom dragger.\n *\n * ```javascript\n * viewer.setActiveDragger(\"MyDragger\");\n * ```\n */\nexport const draggers: IDraggersRegistry = draggersRegistry(\"visualizejs\");\n\n// build-in draggers\n\ndraggers.registerDragger(\"Pan\", (viewer) => new OdPanDragger(viewer));\ndraggers.registerDragger(\"Orbit\", (viewer) => new OdOrbitDragger(viewer));\ndraggers.registerDragger(\"Zoom\", (viewer) => new OdZoomDragger(viewer));\ndraggers.registerDragger(\"ZoomWindow\", (viewer) => new OdZoomWindowDragger(viewer));\ndraggers.registerDragger(\"ZoomWheel\", (viewer) => new OdZoomWheelDragger(viewer));\ndraggers.registerDragger(\"OrbitAroundBuilding\", (viewer) => new OrbitAroundBuildingDragger(viewer));\ndraggers.registerDragger(\"MeasureLine\", (viewer) => new MeasureLineDragger(viewer));\ndraggers.registerDragger(\"CuttingPlaneXAxis\", (viewer) => new OdCuttingPlaneXAxisDragger(viewer));\ndraggers.registerDragger(\"CuttingPlaneYAxis\", (viewer) => new OdCuttingPlaneYAxisDragger(viewer));\ndraggers.registerDragger(\"CuttingPlaneZAxis\", (viewer) => new OdCuttingPlaneZAxisDragger(viewer));\ndraggers.registerDragger(\"Walk\", (viewer) => new OdaWalkDragger(viewer));\ndraggers.registerDragger(\"Fly\", (viewer) => new OdaFlyDragger(viewer));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Viewer } from \"../Viewer\";\n\nexport const composeMatrixFromTransform = (transform, modelCenter, visLib) => {\n const { translate, scale, rotation } = transform;\n\n const translateMatrix = new visLib.Matrix3d();\n translateMatrix.setTranslation([translate.x, translate.y, translate.z]);\n\n const rotateMatrix = new visLib.Matrix3d();\n rotateMatrix.setToRotation(rotation.angle, [rotation.x, rotation.y, rotation.z], modelCenter);\n\n const scaleMatrix = new visLib.Matrix3d();\n scaleMatrix.setToScaling(scale, modelCenter);\n\n return rotateMatrix.postMultBy(translateMatrix).postMultBy(scaleMatrix);\n};\n\nexport function 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 = viewer.visViewer();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n const transform = model.getModelTransformMatrix(modelPtr.getDatabaseHandle());\n if (transform) {\n const extents = modelPtr.getExtents();\n extents.transformBy(modelPtr.getUnitsMatrix());\n\n const matrix = composeMatrixFromTransform(transform, extents.center(), visLib);\n\n modelPtr.setModelingMatrix(matrix, true);\n }\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function clearMarkup(viewer: Viewer) {\n viewer.clearOverlay();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function clearSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.unselect();\n\n viewer.update();\n\n viewer.emitEvent({ type: \"select\", handles: [] });\n viewer.emitEvent({ type: \"select2\", handles: [] });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function clearSlices(viewer: Viewer) {\n viewer.clearSlices();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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.emitEvent({ type: \"explode\", data: index });\n}\n\nexport function collect(viewer: Viewer) {\n explode(viewer, 0);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function getSelected2(viewer: Viewer): string[] {\n const handles = viewer.executeCommand(\"getSelected\");\n\n const model = viewer.models[0];\n const handles2 = handles.map((handle) => `${model.id}:${handle}`);\n\n return handles2;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function hideSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n visViewer.hideSelectedObjects(false);\n\n viewer.update();\n\n viewer.emitEvent({ type: \"hide\" });\n viewer.emitEvent({ type: \"select\", handles: [] });\n viewer.emitEvent({ type: \"select2\", handles: [] });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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.emitEvent({ type: \"isolate\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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(\"clearSelected\");\n viewer.executeCommand(\"showAll\");\n viewer.executeCommand(\"explode\", 0);\n viewer.executeCommand(\"zoomToExtents\", true);\n\n viewer.emit({ type: \"resetview\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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 visViewer.setSelected(selectionSet);\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", handles: viewer.getSelected() });\n viewer.emitEvent({ type: \"select2\", handles: viewer.getSelected2() });\n\n selectionSet.delete();\n break;\n }\n }\n modelItr.delete();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setActiveDragger(viewer: Viewer, dragger = \"\") {\n viewer.setActiveDragger(dragger);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setMarkupColor(viewer: Viewer, r = 255, g = 0, b = 0) {\n viewer.markup.setMarkupColor(r, g, b);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setSelected(viewer: Viewer, handles2: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const handles = handles2.map((handle) => handle.slice(handle.indexOf(\":\") + 1));\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.setSelected(selectionSet);\n\n viewer.update();\n viewer.emitEvent({ type: \"select\", data: selectionSet, handles });\n viewer.emitEvent({ type: \"select2\", data: selectionSet, handles: handles2 });\n\n selectionSet.delete();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function setSelected2(viewer: Viewer, handles2: string[] = []): void {\n const handles = [];\n\n handles2.forEach((handle) => {\n if (!handle.includes(\":\")) {\n handles.push(handle);\n } else\n viewer.models.forEach((model) => {\n if (handle.split(\":\", 1)[0] === model.id + \"\") handles.push(handle);\n });\n });\n\n return viewer.executeCommand(\"setSelected\", handles);\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function 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.emitEvent({ type: \"showall\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function zoomToExtents(viewer: Viewer, force = false, animate = viewer.options.cameraAnimation): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n const saveEnableAmination = visViewer.getEnableAnimation();\n\n visViewer.setEnableAnimation(animate);\n visViewer.zoomExtents(force);\n visViewer.update();\n visViewer.setEnableAnimation(saveEnableAmination);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function zoomToObjects(viewer: Viewer, handles: string[] = []): void {\n if (!viewer.visualizeJs) return;\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const selectionSet = new visLib.OdTvSelectionSet();\n handles.forEach((handle) => {\n const entityId = visViewer.getEntityByOriginalHandle(handle + \"\");\n if (!entityId.isNull()) selectionSet.appendEntity(entityId);\n });\n\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n\n selectionSet.delete();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 function zoomToSelected(viewer: Viewer): void {\n if (!viewer.visualizeJs) return;\n\n const visViewer = viewer.visViewer();\n\n const selectionSet = visViewer.getSelected();\n visViewer.zoomToObjects?.(selectionSet);\n\n viewer.deviceAutoRegeneration();\n viewer.update();\n viewer.emitEvent({ type: \"zoom\" });\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Viewer } from \"../Viewer\";\nimport { composeMatrixFromTransform } from \"./ApplyModelTransform\";\n\nfunction isTemplateModel(modelPtr) {\n return modelPtr.getName()[0] === \"$\";\n}\n\nexport async function autoTransformAllModelsToCentralPoint(\n viewer: Viewer,\n model: Model | File | Assembly\n): Promise<void> {\n if (!viewer.visualizeJs) return;\n if (!model.getModelTransformMatrix) return; // Model.getModelTransformMatrix() since 24.3.14\n\n const visLib = viewer.visLib();\n const visViewer = viewer.visViewer();\n\n const viewExt = visViewer.getActiveExtents();\n const centralPoint = viewExt.center();\n\n const modelItr = visViewer.getModelIterator();\n for (; !modelItr.done(); modelItr.step()) {\n const modelPtr = modelItr.getModel();\n\n if (!isTemplateModel(modelPtr)) {\n const ext = modelPtr.getExtents();\n\n const unitsMatrix = modelPtr.getUnitsMatrix();\n ext.transformBy(modelPtr.getUnitsMatrix()); // ext in wcs\n\n const unitsMatrixInvert = modelPtr.getUnitsMatrix().invert();\n\n const center = ext.center();\n const scale = 1.0;\n\n const scaleMatrix = new visLib.Matrix3d();\n const translateMatrix = new visLib.Matrix3d();\n\n translateMatrix.setTranslation([\n centralPoint[0] - center[0],\n centralPoint[1] - center[1],\n centralPoint[2] - center[2],\n ]);\n scaleMatrix.setToScaling(scale, centralPoint);\n\n const resMatrixWithUnits = unitsMatrixInvert\n .postMultBy(scaleMatrix)\n .postMultBy(translateMatrix)\n .postMultBy(unitsMatrix);\n\n const resScale = resMatrixWithUnits.scale();\n const transform = {\n translate: {\n x: resMatrixWithUnits.get(0, 3) - (1 - resScale) * center[0],\n y: resMatrixWithUnits.get(1, 3) - (1 - resScale) * center[1],\n z: resMatrixWithUnits.get(2, 3) - (1 - resScale) * center[2],\n },\n rotation: { x: 0, y: 0, z: 1, angle: 0.0 },\n scale: resScale,\n };\n\n const matrix = composeMatrixFromTransform(transform, center, visLib);\n modelPtr.setModelingMatrix(matrix, true);\n\n centralPoint[0] += Math.abs(ext.max()[0] - ext.min()[0]) * resScale;\n\n await model.setModelTransformMatrix(modelPtr.getDatabaseHandle(), transform);\n }\n\n modelPtr.delete();\n }\n modelItr.delete();\n\n visViewer.clearViewExtentsCache?.();\n\n viewer.update();\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { ICommandsRegistry, commandsRegistry } from \"@inweb/viewer-core\";\n\nimport { applyModelTransform } from \"./ApplyModelTransform\";\nimport { clearMarkup } from \"./ClearMarkup\";\nimport { clearSelected } from \"./ClearSelected\";\nimport { clearSlices } from \"./ClearSlices\";\nimport { createPreview } from \"./CreatePreview\";\nimport { explode, collect } from \"./Explode\";\nimport { getDefaultViewPositions } from \"./GetDefaultViewPositions\";\nimport { getModels } from \"./GetModels\";\nimport { getSelected } from \"./GetSelected\";\nimport { getSelected2 } from \"./GetSelected2\";\nimport { hideSelected } from \"./HideSelected\";\nimport { isolateSelected } from \"./IsolateSelected\";\nimport { regenerateAll } from \"./RegenerateAll\";\nimport { resetView } from \"./ResetView\";\nimport { selectModel } from \"./SelectModel\";\nimport { setActiveDragger } from \"./SetActiveDragger\";\nimport { setDefaultViewPosition } from \"./SetDefaultViewPosition\";\nimport { setMarkupColor } from \"./SetMarkupColor\";\nimport { setSelected } from \"./SetSelected\";\nimport { setSelected2 } from \"./SetSelected2\";\nimport { showAll } from \"./ShowAll\";\nimport { zoomToExtents } from \"./ZoomToExtents\";\nimport { zoomToObjects } from \"./ZoomToObjects\";\nimport { zoomToSelected } from \"./ZoomToSelected\";\nimport { autoTransformAllModelsToCentralPoint } from \"./AutoTransformAllModelsToCentralPoint\";\n\n/**\n * Viewer commands registry. Use this registry to register custom commands.\n *\n * To implement custom command:\n *\n * 1. Define a command handler with a first `viewer` parameter.\n * 2. Register command handler in the commands registry by calling the {@link commands.registerCommand}.\n *\n * @example Implementing a custom command.\n *\n * ```javascript\n * import { commands, Viewer } from \"@inweb/viewer-visualize\";\n *\n * function commandHandler(viewer: Viewer, name = \"world\"): void {\n * console.log(`Hello ${name}!!!`);\n * }\n *\n * commands.registerCommand(\"sayHello\", commandHandler);\n * ```\n *\n * @example Calling a custom command.\n *\n * ```javascript\n * viewer.executeCommand(\"sayHello\", \"user\");\n * ```\n */\nexport const commands: ICommandsRegistry = commandsRegistry(\"visualizejs\");\n\n// build-in commands\n\ncommands.registerCommand(\"applyModelTransform\", applyModelTransform);\ncommands.registerCommand(\"clearMarkup\", clearMarkup);\ncommands.registerCommand(\"clearSelected\", clearSelected);\ncommands.registerCommand(\"clearSlices\", clearSlices);\ncommands.registerCommand(\"createPreview\", createPreview);\ncommands.registerCommand(\"explode\", explode);\ncommands.registerCommand(\"collect\", collect);\ncommands.registerCommand(\"getDefaultViewPositions\", getDefaultViewPositions);\ncommands.registerCommand(\"getModels\", getModels);\ncommands.registerCommand(\"getSelected\", getSelected);\ncommands.registerCommand(\"getSelected2\", getSelected2);\ncommands.registerCommand(\"hideSelected\", hideSelected);\ncommands.registerCommand(\"isolateSelected\", isolateSelected);\ncommands.registerCommand(\"regenerateAll\", regenerateAll);\ncommands.registerCommand(\"resetView\", resetView);\ncommands.registerCommand(\"selectModel\", selectModel);\ncommands.registerCommand(\"setActiveDragger\", setActiveDragger);\ncommands.registerCommand(\"setDefaultViewPosition\", setDefaultViewPosition);\ncommands.registerCommand(\"setMarkupColor\", setMarkupColor);\ncommands.registerCommand(\"setSelected\", setSelected);\ncommands.registerCommand(\"setSelected2\", setSelected2);\ncommands.registerCommand(\"showAll\", showAll);\ncommands.registerCommand(\"zoomToExtents\", zoomToExtents);\ncommands.registerCommand(\"zoomToObjects\", zoomToObjects);\ncommands.registerCommand(\"zoomToSelected\", zoomToSelected);\ncommands.registerCommand(\"autoTransformAllModelsToCentralPoint\", autoTransformAllModelsToCentralPoint);\n\ncommands.registerCommand(\"k3DViewTop\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewTop\"));\ncommands.registerCommand(\"k3DViewBottom\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBottom\"));\ncommands.registerCommand(\"k3DViewLeft\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewLeft\"));\ncommands.registerCommand(\"k3DViewRight\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewRight\"));\ncommands.registerCommand(\"k3DViewFront\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewFront\"));\ncommands.registerCommand(\"k3DViewBack\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewBack\"));\ncommands.registerCommand(\"k3DViewSE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSE\"));\ncommands.registerCommand(\"k3DViewSW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewSW\"));\ncommands.registerCommand(\"k3DViewNE\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNE\"));\ncommands.registerCommand(\"k3DViewNW\", (viewer) => setDefaultViewPosition(viewer, \"k3DViewNW\"));\n\ncommands.registerCommandAlias(\"clearMarkup\", \"clearOverlay\");\ncommands.registerCommandAlias(\"clearSelected\", \"unselect\");\ncommands.registerCommandAlias(\"zoomToExtents\", \"zoomExtents\");\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { CameraMode, IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class CameraComponent implements IComponent {\n protected viewer: Viewer;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.viewer.addEventListener(\"databasechunk\", this.geometryEnd);\n this.viewer.addEventListener(\"clear\", this.geometryEnd);\n this.viewer.addEventListener(\"optionschange\", this.optionsChange);\n this.viewer.addEventListener(\"initialize\", this.optionsChange);\n }\n\n dispose() {\n this.viewer.removeEventListener(\"databasechunk\", this.geometryEnd);\n this.viewer.removeEventListener(\"clear\", this.geometryEnd);\n this.viewer.removeEventListener(\"optionschange\", this.optionsChange);\n this.viewer.removeEventListener(\"initialize\", this.optionsChange);\n }\n\n getCameraMode(view: any): CameraMode {\n return view.perspective ? \"perspective\" : \"orthographic\";\n }\n\n switchCameraMode(mode: CameraMode) {\n if (!mode) return;\n\n const activeView = this.viewer.visViewer().activeView;\n\n if (mode !== this.getCameraMode(activeView)) {\n activeView.perspective = !activeView.perspective;\n\n this.viewer.update();\n this.viewer.emitEvent({ type: \"changecameramode\", mode });\n }\n\n activeView.delete();\n }\n\n optionsChange = () => {\n this.switchCameraMode(this.viewer.options.cameraMode);\n };\n\n geometryEnd = () => {\n const activeView = this.viewer.visViewer().activeView;\n\n const mode = this.getCameraMode(activeView);\n\n this.viewer.options.cameraMode = mode;\n this.viewer.emitEvent({ type: \"changecameramode\", mode });\n\n activeView.delete();\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class InfoComponent implements IComponent {\n protected viewer: Viewer;\n private startTime: number;\n private beginTime: number;\n private prevTime: number;\n private frames: number;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.startTime = 0;\n this.beginTime = performance.now();\n this.prevTime = performance.now();\n this.frames = 0;\n this.viewer.addEventListener(\"initialize\", this.initialize);\n this.viewer.addEventListener(\"clear\", this.clear);\n this.viewer.addEventListener(\"optionschange\", this.optionsChange);\n this.viewer.addEventListener(\"geometrystart\", this.geometryStart);\n this.viewer.addEventListener(\"databasechunk\", this.databaseChunk);\n this.viewer.addEventListener(\"geometryend\", this.geometryEnd);\n this.viewer.addEventListener(\"resize\", this.resize);\n this.viewer.addEventListener(\"render\", this.render);\n this.viewer.addEventListener(\"animate\", this.animate);\n }\n\n dispose() {\n this.viewer.removeEventListener(\"initialize\", this.initialize);\n this.viewer.removeEventListener(\"clear\", this.clear);\n this.viewer.removeEventListener(\"optionschange\", this.optionsChange);\n this.viewer.removeEventListener(\"geometrystart\", this.geometryStart);\n this.viewer.removeEventListener(\"databasechunk\", this.databaseChunk);\n this.viewer.removeEventListener(\"geometryend\", this.geometryEnd);\n this.viewer.removeEventListener(\"resize\", this.resize);\n this.viewer.removeEventListener(\"render\", this.render);\n this.viewer.addEventListener(\"animate\", this.animate);\n }\n\n initialize = () => {\n this.resize();\n this.optionsChange({ data: this.viewer.options });\n };\n\n clear = () => {\n this.viewer.info.performance.timeToFirstRender = 0;\n this.viewer.info.performance.loadTime = 0;\n\n this.viewer.info.scene.objects = 0;\n this.viewer.info.scene.triangles = 0;\n this.viewer.info.scene.points = 0;\n this.viewer.info.scene.lines = 0;\n this.viewer.info.scene.edges = 0;\n\n this.viewer.info.optimizedScene.objects = 0;\n this.viewer.info.optimizedScene.triangles = 0;\n this.viewer.info.optimizedScene.points = 0;\n this.viewer.info.optimizedScene.lines = 0;\n this.viewer.info.optimizedScene.edges = 0;\n\n this.viewer.info.memory.geometries = 0;\n this.viewer.info.memory.geometryBytes = 0;\n this.viewer.info.memory.textures = 0;\n this.viewer.info.memory.textureBytes = 0;\n this.viewer.info.memory.materials = 0;\n this.viewer.info.memory.totalEstimatedGpuBytes = 0;\n this.viewer.info.memory.usedJSHeapSize = 0;\n };\n\n optionsChange = ({ data: options }) => {\n const antialiasing = options.antialiasing === true || options.antialiasing === \"fxaa\";\n if (antialiasing) this.viewer.info.render.antialiasing = \"fxaa\";\n else this.viewer.info.render.antialiasing = \"\";\n };\n\n geometryStart = () => {\n this.startTime = performance.now();\n };\n\n databaseChunk = () => {\n this.viewer.info.performance.timeToFirstRender += performance.now() - this.startTime;\n\n console.log(\"Time to first render:\", this.viewer.info.performance.timeToFirstRender, \"ms\");\n };\n\n geometryEnd = () => {\n const memory = performance[\"memory\"];\n if (memory) this.viewer.info.memory.usedJSHeapSize = memory.usedJSHeapSize;\n\n this.viewer.info.performance.loadTime += performance.now() - this.startTime;\n\n console.log(\"File load time:\", this.viewer.info.performance.loadTime, \"ms\");\n };\n\n resize = () => {\n const { width, height } = this.viewer.canvas;\n this.viewer.info.render.viewport.width = width;\n this.viewer.info.render.viewport.height = height;\n };\n\n render = () => {};\n\n animate = () => {\n const time = performance.now();\n\n this.viewer.info.performance.frameTime = Math.round(time - this.beginTime);\n this.beginTime = time;\n\n this.frames++;\n if (time - this.prevTime >= 1000) {\n this.viewer.info.performance.fps = Math.round((this.frames * 1000) / (time - this.prevTime));\n this.prevTime = time;\n this.frames = 0;\n }\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class RenderLoopComponent implements IComponent {\n protected viewer: Viewer;\n protected requestId: number;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.requestId = requestAnimationFrame(this.animate);\n }\n\n dispose() {\n cancelAnimationFrame(this.requestId);\n }\n\n animate = (time: number) => {\n this.requestId = requestAnimationFrame(this.animate);\n\n this.viewer.render(time);\n this.viewer.emitEvent({ type: \"animate\", time });\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ResizeCanvasComponent implements IComponent {\n protected viewer: Viewer;\n protected resizeObserver: ResizeObserver;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.resizeObserver = new ResizeObserver(this.resizeViewer);\n this.resizeObserver.observe(viewer.canvas.parentElement);\n }\n\n dispose() {\n this.resizeObserver.disconnect();\n }\n\n resizeViewer = (entries: ResizeObserverEntry[]) => {\n const { width, height } = entries[0].contentRect;\n\n if (!width || !height) return; // <- invisible viewer, or viewer with parent removed\n\n this.viewer.setSize(width, height);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\nimport { OdZoomWheelDragger } from \"../Draggers/OdZoomWheelDragger\";\n\nexport class ZoomWheelComponent implements IComponent {\n protected viewer: Viewer;\n private zoomWheelDragger: OdZoomWheelDragger;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.zoomWheelDragger = new OdZoomWheelDragger(viewer);\n this.zoomWheelDragger.name = \"ZoomWheel\";\n this.zoomWheelDragger.initialize();\n }\n\n dispose() {\n this.zoomWheelDragger.dispose();\n this.zoomWheelDragger = undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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, middlePoint.x, middlePoint.y);\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, currentPoint.x, currentPoint.y);\n }\n\n this._panAction.action(currentPoint.x, currentPoint.y, 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-2025, 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-2025 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 { IComponent } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\nimport { GestureManager } from \"../Draggers/Common/GestureManager\";\n\nexport class GestureManagerComponent implements IComponent {\n protected viewer: Viewer;\n private gestureManager: GestureManager;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.gestureManager = new GestureManager(viewer);\n this.gestureManager.initialize();\n }\n\n dispose() {\n this.gestureManager.dispose();\n this.gestureManager = undefined;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\n// ===================== AI-CODE-FILE ======================\n// Source: Claude Sonnet 4\n// Date: 2025-09-10\n// Reviewer: vitaly.ivanov@opendesign.com\n// Issue: CLOUD-5835\n// Notes: Originally AI-generated, modified manually 2025-09-11\n// =========================================================\n\nimport { IComponent, IOrthogonalCamera, IPoint } from \"@inweb/viewer-core\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ResetComponent implements IComponent {\n private viewer: Viewer;\n private savedCameraSettings: IOrthogonalCamera | null = null;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.viewer.addEventListener(\"databasechunk\", this.onDatabaseChunk);\n this.viewer.on(\"resetview\", this.resetCameraPosition);\n }\n\n dispose() {\n this.viewer.off(\"resetview\", this.resetCameraPosition);\n this.viewer.removeEventListener(\"databasechunk\", this.onDatabaseChunk);\n }\n\n onDatabaseChunk = () => {\n if (!this.viewer.visualizeJs) return;\n\n this.savedCameraSettings = this.getOrthogonalCameraSettings();\n };\n\n resetCameraPosition() {\n if (this.savedCameraSettings && this.viewer.visualizeJs) {\n this.setOrthogonalCameraSettings(this.savedCameraSettings);\n }\n }\n\n getOrthogonalCameraSettings(): IOrthogonalCamera {\n const visViewer = this.viewer.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 view_to_world_scale: 1,\n };\n }\n\n setOrthogonalCameraSettings(settings: IOrthogonalCamera) {\n const visViewer = this.viewer.visViewer();\n const activeView = visViewer.activeView;\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\n getPoint3dFromArray(array: number[]) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n getLogicalPoint3dAsArray(point3d: IPoint) {\n return [point3d.x, point3d.y, point3d.z];\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IComponentsRegistry, componentsRegistry } from \"@inweb/viewer-core\";\n\nimport { CameraComponent } from \"./CameraComponent\";\nimport { InfoComponent } from \"./InfoComponent\";\nimport { RenderLoopComponent } from \"./RenderLoopComponent\";\nimport { ResizeCanvasComponent } from \"./ResizeCanvasComponent\";\nimport { ZoomWheelComponent } from \"./ZoomWheelComponent\";\nimport { GestureManagerComponent } from \"./GestureManagerComponent\";\nimport { ResetComponent } from \"./ResetComponent\";\n\n/**\n * Viewer components registry. Use this registry to register custom components.\n *\n * To implement custom component:\n *\n * 1. Define a component class implements {@link IComponent}.\n * 2. Define a constructor with a `viewer` parameter and add mouse event listeners for the specified viewer.\n * 3. Define the component logic in the event listeners. For example, listen for the `geometryend` event and\n * implement post-processing logic for the model.\n * 4. Override {@link IComponent.dispose} and remove mouse event listeners from the viewer.\n * 5. Register component provider in the components registry by calling the\n * {@link components.registerComponent}.\n *\n * @example Implementing a custom component.\n *\n * ```javascript\n * import { IComponent, components, Viewer } from \"@inweb/viewer-visualize\";\n *\n * class MyComponent implements IComponent {\n * protected viewer: Viewer;\n *\n * constructor(viewer: Viewer) {\n * this.viewer = viewer;\n * this.viewer.addEventListener(\"geometryend\", this.onGeometryEnd);\n * }\n *\n * override dispose() {\n * this.viewer.removeEventListener(\"geometryend\", this.onGeometryEnd);\n * }\n *\n * onGeometryEnd = (event: MouseEvent) => {\n * this.viewer.executeCommand(\"zoomToExtents\");\n * };\n *\n * }\n *\n * components.registerComponent( \"MyComponent\", (viewer): IComponent => new MyComponent(viewer));\n * ```\n */\nexport const components: IComponentsRegistry = componentsRegistry(\"visualizejs\");\n\n// build-in components\n\ncomponents.registerComponent(\"CameraComponent\", (viewer) => new CameraComponent(viewer));\ncomponents.registerComponent(\"InfoComponent\", (viewer) => new InfoComponent(viewer));\ncomponents.registerComponent(\"ResizeCanvasComponent\", (viewer) => new ResizeCanvasComponent(viewer));\ncomponents.registerComponent(\"RenderLoopComponent\", (viewer) => new RenderLoopComponent(viewer));\ncomponents.registerComponent(\"ZoomWheelComponent\", (viewer) => new ZoomWheelComponent(viewer));\ncomponents.registerComponent(\"GestureManagerComponent\", (viewer) => new GestureManagerComponent(viewer));\ncomponents.registerComponent(\"ResetComponent\", (viewer) => new ResetComponent(viewer));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IModelImpl } from \"./IModelImpl\";\n\n// Basic model implementation.\n\nexport class ModelImpl implements IModelImpl {\n public id: string;\n\n dispose(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 class FileLoader {\n private requestHeader: HeadersInit;\n private withCredentials: boolean;\n private abortSignal: AbortSignal;\n\n constructor() {\n this.requestHeader = {};\n this.withCredentials = false;\n this.abortSignal = undefined;\n }\n\n setRequestHeader(requestHeader: HeadersInit) {\n this.requestHeader = requestHeader;\n }\n\n setWithCredentials(withCredentials: boolean) {\n this.withCredentials = withCredentials;\n }\n\n setAbortSignal(abortSignal: AbortSignal) {\n this.abortSignal = abortSignal;\n }\n\n load(file: any, onProgress?: (event) => void): Promise<ArrayBuffer> {\n if (typeof file === \"string\") {\n const request = new Request(file, {\n headers: new Headers(this.requestHeader),\n credentials: this.withCredentials ? \"include\" : \"same-origin\",\n signal: this.abortSignal,\n });\n\n return fetch(request)\n .then((response) => {\n if (!response.ok) throw new Error(`Failed to fetch \"${response.url}\", status ${response.status}`);\n\n const contentLength = response.headers.get(\"X-File-Size\") || response.headers.get(\"Content-Length\");\n const total = parseInt(contentLength || \"\", 10) || 0;\n const lengthComputable = total > 0;\n\n const stream = new ReadableStream({\n async start(controller) {\n const reader = response.body.getReader();\n let loaded = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (onProgress) {\n loaded += value.byteLength;\n onProgress(new ProgressEvent(\"progress\", { lengthComputable, loaded, total }));\n }\n controller.enqueue(value);\n }\n controller.close();\n } catch (e) {\n controller.error(e);\n }\n },\n });\n\n return new Response(stream);\n })\n .then((response) => response.arrayBuffer());\n }\n\n if (file instanceof globalThis.File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as any);\n reader.onerror = () => reject(reader.error);\n reader.onprogress = onProgress;\n reader.readAsArrayBuffer(new Blob([file]));\n });\n }\n\n if (onProgress) {\n const total = (file as ArrayBuffer).byteLength;\n const lengthComputable = total > 0;\n const loaded = total;\n onProgress(new ProgressEvent(\"progress\", { lengthComputable, loaded, total }));\n }\n\n return Promise.resolve(file);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader, LoadParams } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\nimport { FileLoader } from \"./FileLoader\";\n\nexport class VSFFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /vsf$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params: LoadParams = {}): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const loader = new FileLoader();\n loader.setRequestHeader(params.requestHeader);\n loader.setWithCredentials(params.withCredentials);\n loader.setAbortSignal(this.abortController.signal);\n\n const arrayBuffer = await loader.load(file, progress);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseFile(data);\n } catch (error: any) {\n console.error(\"VSF parse error.\", error);\n throw error;\n }\n\n const modelImpl = new ModelImpl();\n modelImpl.id = params.modelId || this.extractFileName(file);\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file });\n this.viewer.update(true);\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\n\nexport class VSFCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.data$/i.test(file.database)\n );\n }\n\n override async load(model: any, format?: string): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n const filesToDownload = [model.database, ...model.geometry];\n\n for (let i = 0; i < filesToDownload.length; i++) {\n const dataId = filesToDownload[i];\n\n const progress = (progress: number) => {\n const data = (i + progress) / filesToDownload.length;\n this.viewer.emitEvent({ type: \"geometryprogress\", data, file: model.file, model });\n };\n\n const arrayBuffer = await model.downloadResource(dataId, progress, this.abortController.signal);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseStream(data);\n } catch (error: any) {\n console.error(\"VSF parse error.\", error);\n throw error;\n }\n\n if (i === 0) {\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file: model.file, model });\n this.viewer.update(true);\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data, file: model.file, model });\n this.viewer.update();\n }\n }\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader, LoadParams } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\nimport { FileLoader } from \"./FileLoader\";\n\nexport class VSFXFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /vsfx$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params: LoadParams = {}): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const loader = new FileLoader();\n loader.setRequestHeader(params.requestHeader);\n loader.setWithCredentials(params.withCredentials);\n loader.setAbortSignal(this.abortController.signal);\n\n const arrayBuffer = await loader.load(file, progress);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseVsfx(data);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n const modelImpl = new ModelImpl();\n modelImpl.id = params.modelId || this.extractFileName(file);\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file });\n this.viewer.update(true);\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\n\nexport class VSFXCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.vsfx$/i.test(file.database) &&\n this.viewer.options.enableStreamingMode === false\n );\n }\n\n override async load(model: any): Promise<this> {\n if (!this.viewer.visualizeJs) return Promise.resolve(this);\n\n const visViewer = this.viewer.visViewer();\n\n const progress = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n };\n\n const arrayBuffer = await model.downloadResource(model.database, progress, this.abortController.signal);\n const data = new Uint8Array(arrayBuffer);\n\n if (!this.viewer.visualizeJs) return this;\n\n try {\n visViewer.parseVsfx(data);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data, file: model.file, model });\n this.viewer.update(true);\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\n\nexport class VSFXCloudStreamingLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.vsfx$/i.test(file.database) &&\n this.viewer.options.enableStreamingMode === true &&\n this.viewer.options.enablePartialMode === false &&\n !/.rcs$/i.test(file.name)\n );\n }\n\n override async load(model: any): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visLib = this.viewer.visLib();\n const visViewer = this.viewer.visViewer();\n\n let isServiceDataReady = false;\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array) => {\n if (!this.viewer.visualizeJs) return;\n\n let status: any;\n try {\n status = visViewer.parseVsfx(chunk);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n\n let isDatabaseChunk = false;\n if (\n status === visLib.DatabaseStreamStatus.ReadyServiceData ||\n (status === visLib.DatabaseStreamStatus.Complete && !isServiceDataReady)\n ) {\n isServiceDataReady = true;\n isDatabaseChunk = true;\n }\n\n if (isDatabaseChunk) {\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, file: model.file, model });\n this.viewer.update(true);\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, file: model.file, model });\n this.viewer.update();\n }\n };\n\n await model.downloadResource(model.database, chunkLoadHandler, this.abortController.signal);\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { Loader } from \"@inweb/viewer-core\";\nimport { Viewer } from \"../Viewer\";\nimport { ModelImpl } from \"../Models/ModelImpl\";\n\nconst PENDING_REQUESTS_SIZE = 50;\nconst PENDING_REQUESTS_TIMEOUT = 250;\n\nexport class VSFXCloudPartialLoader extends Loader {\n public viewer: Viewer;\n public abortControllerForRequestMap: Map<number, AbortController>;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n this.abortControllerForRequestMap = new Map();\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n typeof file.downloadResourceRange === \"function\" &&\n /.vsfx$/i.test(file.database) &&\n (this.viewer.options.enablePartialMode === true || /.rcs$/i.test(file.name))\n );\n }\n\n override async load(model: any): Promise<this> {\n if (!this.viewer.visualizeJs) return this;\n\n const visViewer = this.viewer.visViewer();\n visViewer.memoryLimit = this.viewer.options.memoryLimit;\n\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 this.abortControllerForRequestMap.set(0, pendingRequestsAbortController);\n\n const chunkLoadHandler = (progress: number, chunk: Uint8Array, requestId = 0) => {\n if (!this.viewer.visualizeJs) return;\n\n let isDatabaseChunk: boolean;\n try {\n isDatabaseChunk = visViewer.parseVsfxInPartialMode(requestId, chunk);\n } catch (error: any) {\n console.error(\"VSFX parse error.\", error);\n throw error;\n }\n\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n\n if (isDatabaseChunk) {\n const modelImpl = new ModelImpl();\n modelImpl.id = model.file.id;\n\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: chunk, file: model.file, model });\n this.viewer.update(true);\n } else {\n this.viewer.emitEvent({ type: \"geometrychunk\", data: chunk, file: model.file, model });\n this.viewer.update();\n }\n };\n\n const downloadResourceRange = async (dataId: string, requestId: number, ranges: any) => {\n const abortCtrl = new AbortController();\n this.abortControllerForRequestMap.set(requestId, abortCtrl);\n try {\n await model.downloadResourceRange(dataId, requestId, ranges, chunkLoadHandler, abortCtrl.signal);\n } catch (error: any) {\n this.viewer.emitEvent({ type: \"geometryerror\", data: error, file: model.file, model });\n } finally {\n ranges.forEach((range) => visViewer.onRequestResponseComplete(range.requestId));\n this.abortControllerForRequestMap.delete(requestId);\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) - 1, // <- Visualize fix\n });\n record.delete();\n }\n return ranges;\n };\n\n const objectHandler = {\n onServicePartReceived: (bHasIndex: boolean) => {\n if (bHasIndex) {\n servicePartAborted = true;\n this.abortController.abort();\n }\n },\n\n onRequest: (requestId: number, records: any) => {\n const ranges = requestRecordsToRanges(requestId, records);\n downloadResourceRange(model.database, requestId, ranges);\n },\n\n onFullLoaded: () => {\n this.viewer.update(true);\n },\n\n onRequestResponseParsed: (requestId: number) => {\n this.abortControllerForRequestMap.delete(requestId);\n },\n\n onRequestAborted: (requestId: number) => {\n const abortCtrl = this.abortControllerForRequestMap.get(requestId);\n if (abortCtrl) abortCtrl.abort();\n },\n\n onRequestResourceFile: (requestId: number, _: string, records: any) => {\n const dataId = `${model.fileId}${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\n // (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 await model.downloadResource(model.database, chunkLoadHandler, this.abortController.signal);\n } catch (error) {\n window.clearTimeout(pendingRequestsTimerId);\n if (!servicePartAborted) throw error;\n }\n\n return this;\n }\n\n override cancel(): void {\n super.cancel();\n this.abortControllerForRequestMap.forEach((controller) => controller.abort());\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { ILoadersRegistry, loadersRegistry } from \"@inweb/viewer-core\";\n\nimport { VSFFileLoader } from \"./VSFFileLoader\";\nimport { VSFCloudLoader } from \"./VSFCloudLoader\";\n\nimport { VSFXFileLoader } from \"./VSFXFileLoader\";\nimport { VSFXCloudLoader } from \"./VSFXCloudLoader\";\nimport { VSFXCloudStreamingLoader } from \"./VSFXCloudStreamingLoader\";\nimport { VSFXCloudPartialLoader } from \"./VSFXCloudPartialLoader\";\n\n/**\n * Viewer loaders registry. Use this registry to register custom loaders.\n *\n * To implement custom loader:\n *\n * 1. Define a loader class implements {@link ILoader}.\n * 2. Define a constructor with a `viewer` parameter.\n * 3. Override {@link ILoader.isSupport} and check if the loader can load the specified file.\n * 4. Override {@link ILoader.load} and define the logic for loading the model from the file.\n *\n * The loader should do:\n *\n * - Load model data from file into the buffer. The model data must be a `VSFX` format.\n * - Parse data buffer with the `VisualizeJS` viewer instance.\n * - Create `ModelImpl` instance with unique model ID add it to the viewer `models` list.\n * - Synchronize viewer styles, options and overlay.\n * - Update the viewer.\n *\n * The loader must emit events:\n *\n * - `geometryprogress` - during loading (or once at 100% when complete).\n * - `databasechunk` - when model is loaded and ready to render.\n * 5. Override {@link ILoader.dispose} and release loader resources, if required.\n * 6. Use `this.abortController` (defined in `Loader` class) to abort loading raw data.\n * 7. Register loader provider in the loaders registry by calling the {@link loaders.registerLoader}.\n *\n * @example Implementing a custom loader.\n *\n * ```javascript\n * import { Loader, loaders, Viewer } from \"@inweb/viewer-visualize\";\n *\n * class MyLoader extends Loader {\n * public viewer: Viewer;\n *\n * constructor(viewer: Viewer) {\n * super();\n * this.viewer = viewer;\n * }\n *\n * override isSupport(file, format): Boolean {\n * // check if this loader supports the file source and format\n * return type file === \"string\" && format === \"myformat\";\n * }\n *\n * override load(file, format, params): Promise<this> {\n * // load VSFX data from file (custom loading logic)\n * const data = await fetch(file).then((result) => result.arrayBuffer());\n *\n * const modelImpl = new ModelImpl();\n * modelImpl.id = params.modelId;\n *\n * this.viewer.visViewer().parseVsfx(new Uint8Array(data));\n * this.viewer.models.push(modelImpl);\n *\n * this.viewer.syncOptions();\n * this.viewer.syncOverlay();\n *\n * this.viewer.emitEvent({ type: \"geometryprogress\", data: 1, file });\n * this.viewer.emitEvent({ type: \"databasechunk\", data, file });\n *\n * this.viewer.update(true);\n *\n * return Promise.resove(this);\n * };\n * }\n *\n * loaders.registerLoader(\"MyLoader\", (viewer) => new MyLoader(viewer));\n * ```\n */\nexport const loaders: ILoadersRegistry = loadersRegistry(\"visualizejs\");\n\n// build-in loaders\n\nloaders.registerLoader(\"vsf-file\", (viewer: any) => new VSFFileLoader(viewer));\nloaders.registerLoader(\"vsf-cloud\", (viewer: any) => new VSFCloudLoader(viewer));\n\nloaders.registerLoader(\"vsfx-file\", (viewer: any) => new VSFXFileLoader(viewer));\nloaders.registerLoader(\"vsfx-cloud\", (viewer: any) => new VSFXCloudLoader(viewer));\nloaders.registerLoader(\"vsfx-cloud-streaming\", (viewer: any) => new VSFXCloudStreamingLoader(viewer));\nloaders.registerLoader(\"vsfx-cloud-partial\", (viewer: any) => new VSFXCloudPartialLoader(viewer));\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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\ninterface LoadParams {\n crossOrigin?: string;\n}\n\nexport function loadScript(url: string, params: LoadParams = {}): Promise<HTMLScriptElement> {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = url;\n script.async = true;\n script.crossOrigin = params.crossOrigin;\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, params: LoadParams): 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, params);\n}\n\nexport const loadVisualizeJs = async (url: string, onprogress, params: LoadParams = {}): Promise<any> => {\n const script = await loadVisuazlizeJsScript(url, params);\n return await new Promise((resolve, reject) => {\n const options = {\n urlMemFile: url + \".wasm\",\n TOTAL_MEMORY: 134217728,\n onprogress,\n };\n const instance = window[\"getVisualizeLibInst\"](options);\n instance.loadWasmError = reject;\n instance.postRun.push(() => {\n window[\"getVisualizeLibInst\"].script = script;\n resolve(instance);\n });\n });\n};\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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-2025, 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-2025 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","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 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 { IEventEmitter } from \"@inweb/eventemitter2\";\nimport { ILine, IText, IViewpoint } from \"@inweb/viewer-core\";\nimport { IMarkup, IMarkupObject, IWorldTransform, MarkupMode } from \"@inweb/markup\";\nimport { Viewer } from \"../../Viewer\";\nimport { MARKUP_ENTITY_LINE, OdaLineDragger } from \"../../Draggers/OdaLineDragger\";\nimport { MARKUP_ENTITY_TEXT, OdaTextDragger } from \"../../Draggers/OdaTextDragger\";\n\nexport class VisualizeMarkup implements IMarkup {\n private _viewer: Viewer;\n protected _markupColor = { r: 255, g: 0, b: 0 };\n\n public lineWidth = 4;\n public lineType: \"solid\";\n public fontSize = 34;\n\n initialize(\n container: HTMLElement,\n containerEvents: string[],\n viewer?: IEventEmitter,\n worldTransformer?: IWorldTransform\n ): void {\n this._viewer = viewer as Viewer;\n this._viewer.registerDragger(\"Line\", OdaLineDragger);\n this._viewer.registerDragger(\"Text\", OdaTextDragger);\n }\n\n dispose(): void {}\n\n syncOverlay(): void {}\n\n clearOverlay(): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n model.clearEntities();\n model.delete();\n }\n\n getMarkupColor(): { r: number; g: number; b: number } {\n return this._markupColor;\n }\n\n setMarkupColor(r: number, g: number, b: number): void {\n const color = { r, g, b };\n this._markupColor = color;\n this._viewer.emitEvent({ type: \"changemarkupcolor\", data: color });\n }\n\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n if (!this._viewer.visualizeJs) return;\n\n const visViewer = this._viewer.visViewer();\n const model = visViewer.getMarkupModel();\n const itr = model.getEntitiesIterator();\n for (; !itr.done(); itr.step()) {\n const entityId = itr.getEntity();\n const entityPtr = entityId.openObject();\n const entityName = entityPtr.getName();\n\n if (entityName === MARKUP_ENTITY_LINE || entityName === MARKUP_ENTITY_TEXT) {\n entityPtr.setColor(r, g, b);\n }\n\n entityPtr.delete();\n }\n itr.delete();\n\n this._viewer.update();\n }\n\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n throw new Error(\"Not implemented yet\");\n }\n\n setViewpoint(viewpoint: IViewpoint): void {\n function getLogicalPoint3dAsArray(point3d) {\n return [point3d.x, point3d.y, point3d.z];\n }\n\n function getPoint3d(module, gePoint) {\n return module.Point3d.createFromArray(gePoint);\n }\n\n if (!this._viewer.visualizeJs) return;\n\n const visLib = this._viewer.visLib();\n const visViewer = this._viewer.visViewer();\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(viewpoint: IViewpoint): IViewpoint {\n if (!this._viewer.visualizeJs) return {};\n\n function getLogicalPoint3dFromArray(array) {\n return { x: array[0], y: array[1], z: array[2] };\n }\n\n const visLib = this._viewer.visLib();\n const visViewer = this._viewer.visViewer();\n\n if (!viewpoint) viewpoint = { custom_fields: {} };\n\n viewpoint.lines = [];\n viewpoint.texts = [];\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 = { data: visLib.canvas.toDataURL(\"image/jpeg\", 0.25) };\n viewpoint.custom_fields.markup_color = this.getMarkupColor();\n\n return viewpoint;\n }\n\n enableEditMode(mode: MarkupMode | false): this {\n return this;\n }\n\n createObject(type: string, params: any): IMarkupObject {\n return undefined;\n }\n\n getObjects(): IMarkupObject[] {\n return [];\n }\n\n getSelectedObjects(): IMarkupObject[] {\n return [];\n }\n\n selectObjects(objects: IMarkupObject[]): void {}\n\n clearSelected(): void {}\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IMarkup, Markup as KonvaMarkup } from \"@inweb/markup\";\nimport { VisualizeMarkup } from \"./Visualize/VisualizeMarkup\";\n\n/**\n * Defines the type of the markup core.\n */\nexport type MarkupType = \"Konva\" | \"Visualize\";\n\nexport class MarkupFactory {\n public static createMarkup(markupType: MarkupType = \"Konva\"): IMarkup {\n let markup: IMarkup;\n\n switch (markupType) {\n case \"Konva\":\n markup = new KonvaMarkup();\n break;\n\n case \"Visualize\":\n markup = new VisualizeMarkup();\n break;\n\n default:\n throw new Error(`Unknown Markup type: ${markupType}`);\n }\n\n return markup;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, 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-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { Assembly, Client, File, Model } from \"@inweb/client\";\nimport {\n CANVAS_EVENTS,\n CanvasEventMap,\n Dragger,\n FileSource,\n IClippingPlane,\n IComponent,\n IDragger,\n IEntity,\n IInfo,\n ILoader,\n Info,\n IOrthogonalCamera,\n IOptions,\n IPerspectiveCamera,\n IPoint,\n IViewer,\n IViewpoint,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\nimport { IMarkup, IWorldTransform } from \"@inweb/markup\";\n\nimport { draggers } from \"./Draggers\";\nimport { commands } from \"./Commands\";\nimport { components } from \"./Components\";\nimport { loaders } from \"./Loaders\";\nimport { IModelImpl } from \"./Models/IModelImpl\";\n\nimport { loadVisualizeJs } from \"./utils\";\nimport { MarkupFactory, MarkupType } from \"./Markup/MarkupFactory\";\n\nconst OVERLAY_VIEW_NAME = \"$OVERLAY_VIEW_NAME\";\n\nconst isExist = (value) => value !== undefined && value !== null;\n\n/**\n * 3D viewer powered by {@link https://cloud.opendesign.com/docs/index.html#/visualizejs | VisualizeJS}.\n */\nexport class Viewer\n extends EventEmitter2<ViewerEventMap & CanvasEventMap & OptionsEventMap>\n implements IViewer, IWorldTransform\n{\n public client: Client | undefined;\n public options: IOptions;\n public canvas: HTMLCanvasElement | undefined;\n public canvasEvents: string[];\n public loaders: ILoader[];\n public models: IModelImpl[];\n public info: IInfo;\n\n private canvaseventlistener: (event: Event) => void;\n\n private _visualizeJsUrl = \"\";\n private _visualizeJs: any;\n private _visualizeTimestamp: number;\n private _viewer: any;\n private _crossOrigin;\n\n private _activeDragger: IDragger | null;\n private _components: IComponent[];\n\n private _updateDelay: number;\n private _renderNeeded: boolean;\n private _renderTime: DOMHighResTimeStamp;\n private _enableAutoUpdate: boolean;\n private _isRunAsyncUpdate: boolean;\n\n public _abortControllerForReferences: AbortController | undefined;\n\n private _markup: IMarkup;\n\n /**\n * @param client - The `Client` instance that is used to load model reference files from the Open Cloud\n * Server. Do not specify `Client` if you need a standalone viewer instance to view `VSFX` files from\n * the web or from local computer.\n * @param params - An object containing viewer configuration parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own library\n * instance, or specify `undefined` or blank to use the default URL defined by `Viewer.visualize`\n * library you are using.\n * @param params.crossOrigin - The\n * {@link https://developer.mozilla.org/docs/Web/HTML/Attributes/crossorigin | crossorigin} content\n * attribute on `Visalize.js` script element. One of the following values: `\"\"`, `anonymous` or\n * `use-credentials`.\n * @param params.enableAutoUpdate - Enable auto-update of the viewer after any changes. If the\n * auto-update is disabled, you need to register an `update` event handler and update the\n * `VisualizeJS` viewer and active dragger manually. Default is `true`.\n * @param params.markupType - The type of the markup core: `Visualize` (deprecated) or `Konva`. Default\n * is `Konva`.\n */\n constructor(\n client?: Client,\n params: { visualizeJsUrl?: string; crossOrigin?: string; enableAutoUpdate?: boolean; markupType?: MarkupType } = {}\n ) {\n super();\n this.configure(params);\n\n this.client = client;\n this.options = new Options(this);\n this.loaders = [];\n this.models = [];\n this.info = new Info();\n\n this.canvasEvents = CANVAS_EVENTS.slice();\n this.canvaseventlistener = (event: Event) => this.emit(event);\n\n this._activeDragger = null;\n this._components = [];\n\n this._updateDelay = 1000;\n this._renderNeeded = false;\n this._renderTime = 0;\n this._enableAutoUpdate = params.enableAutoUpdate ?? true;\n this._isRunAsyncUpdate = false;\n\n this.render = this.render.bind(this);\n this.update = this.update.bind(this);\n\n this._markup = MarkupFactory.createMarkup(params.markupType);\n }\n\n /**\n * `VisualizeJS` library URL. Use {@link configure | configure()} to change library URL.\n *\n * @readonly\n */\n get visualizeJsUrl(): string {\n return this._visualizeJsUrl;\n }\n\n /**\n * Returns `VisualizeJS` {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module}\n * instance.\n */\n get visualizeJs(): any {\n return this._visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS` {@link https://cloud.opendesign.com/docs/index.html#/visualizejs_api | module}\n * instance.\n */\n visLib(): any {\n return this._visualizeJs;\n }\n\n /**\n * Returns `VisualizeJS` {@link https://cloud.opendesign.com/docs/index.html#/vis/Viewer | Viewer}\n * instance.\n */\n visViewer(): any {\n return this._viewer;\n }\n\n /**\n * 2D markup core instance used to create markups.\n *\n * @readonly\n */\n get markup(): IMarkup {\n return this._markup;\n }\n\n /**\n * Changes the viewer parameters.\n *\n * @param params - An object containing new parameters.\n * @param params.visualizeJsUrl - `VisualizeJS` library URL. Set this URL to use your own library\n * instance or specify `undefined` or blank to use the default URL defined by `Viewer.visualize`\n * library you are using.\n * @param params.crossOrigin - The\n * {@link https://developer.mozilla.org/docs/Web/HTML/Attributes/crossorigin | crossorigin} content\n * attribute on `Visalize.js` script element. One of the following values: `\"\"`, `anonymous` or\n * `use-credentials`.\n */\n configure(params: { visualizeJsUrl?: string; crossOrigin?: string }): this {\n this._visualizeJsUrl = params.visualizeJsUrl || \"VISUALIZE_JS_URL\";\n this._crossOrigin = params.crossOrigin;\n return this;\n }\n\n // IViewer\n\n get draggers(): string[] {\n return [...draggers.getDraggers().keys()];\n }\n\n get components(): string[] {\n return [...components.getComponents().keys()];\n }\n\n /**\n * Loads the `VisualizeJS` module and initializes it with the specified canvas. Call\n * {@link dispose | dispose()} to release allocated resources.\n *\n * Fires:\n *\n * - {@link InitializeEvent | initialize}\n * - {@link InitializeProgressEvent | initializeprogress}\n *\n * @param canvas -\n * {@link https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement | HTMLCanvasElement} for\n * `VisualizeJS`.\n * @param onProgress - A callback function that handles events measuring progress of loading of the\n * `VisualizeJS` library.\n */\n async initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent) => void): Promise<this> {\n this.addEventListener(\"optionschange\", (event) => this.syncOptions(event.data));\n\n const pixelRatio = window.devicePixelRatio;\n const rect = canvas.parentElement.getBoundingClientRect();\n const width = rect.width || 1;\n const height = rect.height || 1;\n\n canvas.width = Math.round(width * pixelRatio);\n canvas.height = Math.round(height * pixelRatio);\n\n canvas.style.width = width + \"px\";\n canvas.style.height = height + \"px\";\n\n canvas.parentElement.style.touchAction = \"none\";\n canvas.style.touchAction = \"none\";\n\n this._visualizeTimestamp = Date.now();\n const visualizeTimestamp = this._visualizeTimestamp;\n\n const visualizeJs: any = await loadVisualizeJs(\n this.visualizeJsUrl,\n (event: ProgressEvent) => {\n const { loaded, total } = event;\n if (onProgress) onProgress(new ProgressEvent(\"progress\", { lengthComputable: true, loaded, total }));\n this.emitEvent({ type: \"initializeprogress\", data: loaded / total, loaded, total });\n },\n { crossOrigin: this._crossOrigin }\n );\n\n if (visualizeTimestamp !== this._visualizeTimestamp)\n throw new Error(\n \"Viewer error: dispose() was called before initialize() completed. Are you using React strict mode?\"\n );\n\n this._visualizeJs = visualizeJs;\n this._visualizeJs.canvas = canvas;\n\n this._viewer = visualizeJs.Viewer.create();\n this._viewer.resize(0, canvas.width, canvas.height, 0);\n\n this.canvas = canvas;\n this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));\n\n this._markup.initialize(this.canvas, this.canvasEvents, this, this);\n\n for (const name of components.getComponents().keys()) {\n this._components.push(components.createComponent(name, this));\n }\n\n this.syncOptions();\n this.syncOverlay();\n\n this._renderTime = performance.now();\n\n this.emitEvent({ type: \"initialize\" });\n this.update(true);\n\n return this;\n }\n\n dispose(): this {\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"dispose\" });\n this.removeAllListeners();\n\n this.setActiveDragger();\n\n this._components.forEach((component: IComponent) => component.dispose());\n this._components = [];\n\n this._markup.dispose();\n\n if (this.canvas) {\n this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n }\n\n if (this._viewer) this._viewer.clear();\n\n this._visualizeJs = undefined;\n this._visualizeTimestamp = undefined;\n this._viewer = undefined;\n\n return this;\n }\n\n /**\n * Returns `true` if `VisualizeJS` module has been loaded and initialized.\n */\n isInitialized(): boolean {\n return !!this.visualizeJs;\n }\n\n setSize(width: number, height: number, updateStyle = true): void {\n if (!this.visualizeJs) return;\n\n this.canvas.width = Math.round(width * window.devicePixelRatio);\n this.canvas.height = Math.round(height * window.devicePixelRatio);\n\n if (updateStyle) {\n this.canvas.style.width = width + \"px\";\n this.canvas.style.height = height + \"px\";\n }\n\n this._viewer.resize(0, this.canvas.width, this.canvas.height, 0);\n\n this.emitEvent({ type: \"resize\", width, height });\n this.update(true);\n }\n\n resize(): this {\n console.warn(\n \"Viewer.resize() has been deprecated since 26.9 and will be removed in a future release, use Viewer.setSize() instead.\"\n );\n\n if (!this.visualizeJs) return this;\n if (!this.canvas.parentElement) return this;\n\n const { width, height } = this.canvas.parentElement.getBoundingClientRect();\n\n if (!width || !height) return this; // <- invisible viewer, or viewer with parent removed\n\n this.setSize(width, height);\n\n return this;\n }\n\n /**\n * Updates the viewer.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register an\n * `update` event handler and update the `Visualize` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param force - If `true` updates the viewer immidietly. Otherwise updates on next animation frame.\n * Default is `false`.\n */\n update(force = false) {\n const time = performance.now();\n force = force || time - this._renderTime >= this._updateDelay;\n\n if (this._enableAutoUpdate) {\n this._renderNeeded = true;\n if (force) this.render(time);\n }\n\n this.emitEvent({ type: \"update\", force });\n }\n\n // Internal render routines\n\n render(time?: DOMHighResTimeStamp) {\n if (!this.visualizeJs) return;\n if (this._isRunAsyncUpdate) return;\n\n const renderNeeded = this.visViewer().isRunningAnimation() || this._renderNeeded;\n if (!renderNeeded) return;\n\n if (!time) time = performance.now();\n const deltaTime = (time - this._renderTime) / 1000;\n\n this._renderTime = time;\n this._renderNeeded = !this.visViewer().getActiveDevice().isValid();\n\n this.visViewer().update();\n this._activeDragger?.updatePreview?.();\n\n this.emitEvent({ type: \"render\", time, deltaTime });\n }\n\n // Internal loading routines\n\n async loadReferences(model: Model | File | Assembly): Promise<this> {\n if (!this.visualizeJs) return this;\n if (!this.client) return this;\n if (!model.getReferences) return this;\n\n const abortController = new AbortController();\n\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = abortController;\n\n let references: any[] = [];\n await model\n .getReferences(abortController.signal)\n .then((data) => (references = data.references))\n .catch((e) => console.error(\"Cannot load model references.\", e));\n\n for (const file of references) {\n await this.client\n .downloadFile(file.id, undefined, abortController.signal)\n .then((arrayBuffer) => this.visualizeJs?.getViewer().addEmbeddedFile(file.name, new Uint8Array(arrayBuffer)))\n .catch((e) => console.error(`Cannot load reference file ${file.name}.`, e));\n }\n\n return this;\n }\n\n applyModelTransformMatrix(model: Model | Assembly) {\n if (!this.visualizeJs) return;\n\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 = this.visViewer();\n\n const device = visViewer.getActiveDevice();\n if (isExist(options.sceneGraph)) {\n device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, !options.sceneGraph);\n }\n // if (options.enablePartialMode && visLib.HpTrc.Usd >= visViewer.memoryLimit) {\n // device.setOptionBool(visLib.DeviceOptions.kDelaySceneGraphProc, true);\n // }\n device.delete();\n\n this.update();\n }\n\n /**\n * Loads a file into the viewer.\n *\n * The viewer must be {@link initialize | initialized} before opening the file. Otherwise, `open()` does\n * nothing.\n *\n * This method requires a `Client` instance to be specified to load file from the Open Cloud Server.\n * The file geometry data on the Open Cloud Server must be converted into a `vsfx` format, otherwise an\n * exception will be thrown.\n *\n * For files from Open Cloud Server, the default model will be loaded. If there is no default model,\n * first availiable model will be loaded. If no models are found in the file, an exception will be\n * thrown.\n *\n * For URLs, the file extension is used to determine the file format. For a `ArrayBuffer` and `Data\n * URL`, a file format must be specified using `params.format` parameter. If no appropriate loader is\n * found for the specified format, an exception will be thrown.\n *\n * If there was an active dragger before opening the file, it will be deactivated. After opening the\n * file, you must manually activate the required dragger.\n *\n * To open a large files, enable {@link IOptions.enablePartialMode | partial streaming} mode before\n * opening. Partial streaming is only supported when opening files from an Open Cloud Server, but not\n * local files and URLs. Example:\n *\n * ```javascript\n * viewer.options.enableStreamingMode = true;\n * viewer.options.enablePartialMode = true;\n * await viewer.open(file);\n * ```\n *\n * Fires:\n *\n * - {@link CancelEvent | cancel}\n * - {@link ClearEvent | clear}\n * - {@link OpenEvent | open}\n * - {@link GeometryStartEvent | geometrystart}\n * - {@link GeometryProgressEvent | geometryprogress}\n * - {@link DatabaseChunkEvent | databasechunk}\n * - {@link GeometryChunkEvent | geometrychunk}\n * - {@link GeometryEndEvent | geometryend}\n * - {@link GeometryErrorEvent | geometryerror}\n *\n * @param file - File to load. Can be:\n *\n * - `File`, `Assembly` or `Model` instance from the Open Cloud Server\n * - `URL` string\n * - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string\n * - {@link https://developer.mozilla.org/docs/Web/API/File | Web API dFile} object\n * - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}\n * object\n *\n * @param params - Loading parameters.\n * @param params.format - File format. Can be one of `vsf` or `vsfx`. Required when loading a file as\n * `ArrayBuffer` or `Data URL`.\n * @param params.mode - Reserved for future use.\n * @param params.modelId - Reserved for future use.\n * @param params.requestHeader - The\n * {@link https://developer.mozilla.org/docs/Glossary/Request_header | request header} used in HTTP\n * request.\n * @param params.withCredentials - Whether the HTTP request uses credentials such as cookies,\n * authorization headers or TLS client certificates. See\n * {@link https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/withCredentials | XMLHttpRequest.withCredentials}\n * for more details.\n */\n async open(\n file: FileSource,\n params: {\n format?: string;\n mode?: string;\n modelId?: string;\n requestHeader?: HeadersInit;\n withCredentials?: boolean;\n } = {}\n ): Promise<this> {\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", mode: \"file\", file });\n\n let model: any = file;\n if (model && typeof model.getModels === \"function\") {\n const models = await model.getModels();\n model = models.find((model: Model) => model.default) || models[0] || file;\n }\n if (model && typeof model.database === \"string\") {\n file = model.file;\n }\n if (!model) throw new Error(`Format not supported`);\n\n let format = params.format;\n if (!format && typeof file[\"type\"] === \"string\") format = file[\"type\"].split(\".\").pop();\n if (!format && typeof file === \"string\") format = file.split(\".\").pop();\n if (!format && file instanceof globalThis.File) format = file.name.split(\".\").pop();\n\n const loader = loaders.createLoader(this, model, format);\n if (!loader) throw new Error(`Format not supported`);\n this.loaders.push(loader);\n\n this.emitEvent({ type: \"geometrystart\", file, model });\n try {\n await this.loadReferences(model);\n await loader.load(model, format, params);\n\n this.applyModelTransformMatrix(model);\n this.applySceneGraphSettings();\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, file, model });\n throw error;\n }\n this.emitEvent({ type: \"geometryend\", file, model });\n this.update(true);\n\n return this;\n }\n\n /**\n * Deprecated since `26.4`. Use {@link open | open()} instead.\n *\n * @deprecated\n */\n openVsfFile(buffer: Uint8Array | ArrayBuffer): this {\n console.warn(\n \"Viewer.openVsfFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead.\"\n );\n\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", mode: \"file\", file: \"\", buffer });\n\n const visViewer = this.visViewer();\n\n this.emitEvent({ type: \"geometrystart\", file: \"\", buffer });\n try {\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseFile(data);\n\n this.syncOptions();\n this.syncOverlay();\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, file: \"\", buffer });\n this.emitEvent({ type: \"databasechunk\", data, file: \"\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, file: \"\", buffer });\n throw error;\n }\n this.emitEvent({ type: \"geometryend\", file: \"\", buffer });\n this.update(true);\n\n return this;\n }\n\n /**\n * Deprecated since `26.4`. Use {@link open | open()} instead.\n *\n * @deprecated\n */\n openVsfxFile(buffer: Uint8Array | ArrayBuffer): this {\n console.warn(\n \"Viewer.openVsfxFile() has been deprecated since 26.4 and will be removed in a future release, use Viewer.open() instead.\"\n );\n\n if (!this.visualizeJs) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", mode: \"file\", file: \"\", buffer });\n\n const visViewer = this.visViewer();\n\n this.emitEvent({ type: \"geometrystart\", file: \"\", buffer });\n try {\n const data = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n visViewer.parseVsfx(data);\n\n this.syncOptions();\n this.syncOverlay();\n\n this.emitEvent({ type: \"geometryprogress\", data: 1, file: \"\", buffer });\n this.emitEvent({ type: \"databasechunk\", data, file: \"\", buffer });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error, file: \"\", buffer });\n throw error;\n }\n this.emitEvent({ type: \"geometryend\", file: \"\", buffer });\n this.update(true);\n\n return this;\n }\n\n cancel(): this {\n this._abortControllerForReferences?.abort();\n this._abortControllerForReferences = undefined;\n\n this.loaders.forEach((loader) => loader.cancel());\n\n this.emitEvent({ type: \"cancel\" });\n return this;\n }\n\n clear(): this {\n if (!this.visualizeJs) return this;\n\n const visViewer = this.visViewer();\n\n this.setActiveDragger();\n this.clearSlices();\n this.clearOverlay();\n this.clearSelected();\n\n this.loaders.forEach((loader) => loader.dispose());\n this.loaders = [];\n\n this.models.forEach((model) => model.dispose());\n this.models = [];\n\n visViewer.clear();\n visViewer.createLocalDatabase();\n\n this.syncOptions();\n this.syncOverlay();\n\n this.emitEvent({ type: \"clear\" });\n this.update(true);\n\n return this;\n }\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 syncOptions(options: IOptions = this.options): this {\n if (!this.visualizeJs) return this;\n\n const visLib = this.visLib();\n const visViewer = this.visViewer();\n\n const device = visViewer.getActiveDevice();\n if (device.isNull()) return this;\n\n // sync Open Cloud visual style\n\n const view = device.getActiveView();\n\n view.enableDefaultLighting(true, visLib.DefaultLightingType.kTwoLights);\n view.setDefaultLightingIntensity(1.25);\n\n let visualStyleId: any;\n try {\n visualStyleId = visViewer.findVisualStyle(\"OpenCloud\");\n } catch {\n // Visualize.js 25.11 and earlier threw an exception if the style did not exist.\n visualStyleId = undefined;\n }\n\n if (!visualStyleId || visualStyleId.isNull()) {\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, 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 // sync Visualize options\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\n const antialiasing = options.antialiasing === true || options.antialiasing === \"fxaa\";\n if (antialiasing !== visViewer.fxaaAntiAliasing3d) {\n visViewer.fxaaAntiAliasing3d = 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.width, canvas.height, 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 // sync highlighting options\n\n const params = options.enableCustomHighlight ? options : Options.defaults();\n\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 canvas = visLib.canvas;\n // device.invalidate([0, canvas.width, canvas.height, 0]);\n\n view.delete();\n device.delete();\n\n this.update();\n\n return this;\n }\n\n syncOverlay(): void {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n let overlayView = visViewer.getViewByName(OVERLAY_VIEW_NAME);\n if (!overlayView) {\n const markupModel = visViewer.getMarkupModel();\n const pDevice = visViewer.getActiveDevice();\n\n overlayView = pDevice.createView(OVERLAY_VIEW_NAME, false);\n overlayView.addModel(markupModel);\n\n activeView.addSibling(overlayView);\n pDevice.addView(overlayView);\n }\n\n overlayView.viewPosition = activeView.viewPosition;\n overlayView.viewTarget = activeView.viewTarget;\n overlayView.upVector = activeView.upVector;\n overlayView.viewFieldWidth = activeView.viewFieldWidth;\n overlayView.viewFieldHeight = activeView.viewFieldHeight;\n\n const viewPort = overlayView.getViewport();\n overlayView.setViewport(viewPort.lowerLeft, viewPort.upperRight);\n overlayView.vportRect = activeView.vportRect;\n\n this._markup.syncOverlay();\n this.update();\n }\n\n clearOverlay(): void {\n if (!this.visualizeJs) return;\n\n this._markup.clearOverlay();\n this.update();\n }\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 getSelected(): string[] {\n return this.executeCommand(\"getSelected\");\n }\n\n setSelected(handles?: string[]): void {\n this.executeCommand(\"setSelected\", handles);\n }\n\n getSelected2(): string[] {\n return this.executeCommand(\"getSelected2\");\n }\n\n setSelected2(handles?: string[]): void {\n this.executeCommand(\"setSelected2\", handles);\n }\n\n clearSelected(): void {\n this.executeCommand(\"clearSelected\");\n }\n\n hideSelected(): void {\n this.executeCommand(\"hideSelected\");\n }\n\n isolateSelected(): void {\n this.executeCommand(\"isolateSelected\");\n }\n\n showAll(): void {\n this.executeCommand(\"showAll\");\n }\n\n explode(index = 0): void {\n this.executeCommand(\"explode\", index);\n }\n\n collect(): void {\n this.executeCommand(\"collect\");\n }\n\n /**\n * Deprecated since `25.12`. Use {@link draggers.registerDragger} instead.\n */\n public registerDragger(name: string, dragger: typeof Dragger): void {\n console.warn(\n \"Viewer.registerDragger() has been deprecated since 25.12 and will be removed in a future release, use draggers('visualizejs').registerDragger() instead.\"\n );\n draggers.registerDragger(name, (viewer: IViewer) => new dragger(viewer));\n }\n\n activeDragger(): IDragger | null {\n return this._activeDragger;\n }\n\n setActiveDragger(name = \"\"): IDragger | null {\n if (!this._activeDragger || this._activeDragger.name !== name) {\n const oldDragger = this._activeDragger;\n let newDragger = null;\n\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\n if (this.visualizeJs) {\n newDragger = draggers.createDragger(name, this);\n if (newDragger) {\n this._activeDragger = newDragger;\n this._activeDragger.initialize?.();\n }\n }\n const canvas = this.canvas;\n if (canvas) {\n if (oldDragger) canvas.classList.remove(`oda-cursor-${oldDragger.name.toLowerCase()}`);\n if (newDragger) canvas.classList.add(`oda-cursor-${newDragger.name.toLowerCase()}`);\n }\n\n this.emitEvent({ type: \"changeactivedragger\", data: name });\n this.update();\n }\n return this._activeDragger;\n }\n\n resetActiveDragger(): void {\n const dragger = this._activeDragger;\n if (dragger) {\n this.setActiveDragger();\n this.setActiveDragger(dragger.name);\n }\n }\n\n getComponent(name: string): IComponent {\n return this._components.find((component) => component.name === name);\n }\n\n drawViewpoint(viewpoint: IViewpoint): void {\n if (!this.visualizeJs) return;\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n const getPoint3dAsArray = (point3d: IPoint): number[] => {\n return [point3d.x, point3d.y, point3d.z];\n };\n\n const setOrthogonalCamera = (orthogonal_camera: IOrthogonalCamera) => {\n if (orthogonal_camera) {\n activeView.setView(\n getPoint3dAsArray(orthogonal_camera.view_point),\n getPoint3dAsArray(orthogonal_camera.direction),\n getPoint3dAsArray(orthogonal_camera.up_vector),\n orthogonal_camera.field_width,\n orthogonal_camera.field_height,\n true\n );\n\n this.options.cameraMode = \"orthographic\";\n this.emitEvent({ type: \"changecameramode\", mode: \"orthographic\" });\n }\n };\n\n const setPerspectiveCamera = (perspective_camera: IPerspectiveCamera) => {\n if (perspective_camera) {\n // ===================== AI-CODE-START ======================\n // Source: Claude Sonnet 4.5\n // Date: 2025-12-03\n // Reviewer: roman.mochalov@opendesign.com\n // Issue: CLOUD-5997\n // Notes: Originally AI-generated, modified manually\n\n const aspectRatio = this.canvas.width / this.canvas.height;\n\n const position = perspective_camera.view_point;\n const target = perspective_camera.direction;\n const fov = (perspective_camera.field_of_view * Math.PI) / 180;\n\n const dx = target.x - position.x;\n const dy = target.y - position.y;\n const dz = target.z - position.z;\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n const fieldHeight = 2 * distance * Math.tan(fov / 2);\n const fieldWidth = fieldHeight * aspectRatio;\n\n // ===================== AI-CODE-END ======================\n\n activeView.setView(\n getPoint3dAsArray(perspective_camera.view_point),\n getPoint3dAsArray(perspective_camera.direction),\n getPoint3dAsArray(perspective_camera.up_vector),\n fieldWidth,\n fieldHeight,\n false\n );\n\n this.options.cameraMode = \"perspective\";\n this.emitEvent({ type: \"changecameramode\", mode: \"perspective\" });\n }\n };\n\n const setClippingPlanes = (clipping_planes: IClippingPlane[]) => {\n if (clipping_planes) {\n for (const clipping_plane of clipping_planes) {\n const cuttingPlane = new (this.visLib().OdTvPlane)();\n cuttingPlane.set(getPoint3dAsArray(clipping_plane.location), getPoint3dAsArray(clipping_plane.direction));\n\n activeView.addCuttingPlane(cuttingPlane);\n activeView.setEnableCuttingPlaneFill(true, 0x66, 0x66, 0x66);\n }\n }\n };\n\n const setSelection = (selection: IEntity[]) => {\n if (selection) this.setSelected(selection.map((component) => component.handle));\n };\n\n const draggerName = this._activeDragger?.name;\n\n this.setActiveDragger();\n this.clearSlices();\n this.clearOverlay();\n\n this.clearSelected();\n this.showAll();\n this.explode();\n\n setOrthogonalCamera(viewpoint.orthogonal_camera);\n setPerspectiveCamera(viewpoint.perspective_camera);\n setClippingPlanes(viewpoint.clipping_planes);\n setSelection(viewpoint.custom_fields?.selection2 || viewpoint.selection);\n this._markup.setViewpoint(viewpoint);\n\n this.syncOverlay();\n this.setActiveDragger(draggerName);\n\n this.emitEvent({ type: \"drawviewpoint\", data: viewpoint });\n this.update(true);\n }\n\n createViewpoint(): IViewpoint {\n if (!this.visualizeJs) return {};\n\n const visViewer = this.visViewer();\n const activeView = visViewer.activeView;\n\n const getPoint3dFromArray = (array: number[]): IPoint => {\n return { x: array[0], y: array[1], z: array[2] };\n };\n\n const getOrthogonalCamera = (): IOrthogonalCamera => {\n if (!activeView.perspective)\n return {\n view_point: getPoint3dFromArray(activeView.viewPosition),\n direction: getPoint3dFromArray(activeView.viewTarget),\n up_vector: getPoint3dFromArray(activeView.upVector),\n field_width: activeView.viewFieldWidth,\n field_height: activeView.viewFieldHeight,\n view_to_world_scale: 1,\n };\n else return undefined;\n };\n\n const getPerspectiveCamera = (): IPerspectiveCamera => {\n if (activeView.perspective) {\n // ===================== AI-CODE-START ======================\n // Source: Claude Sonnet 4.5\n // Date: 2025-12-03\n // Reviewer: roman.mochalov@opendesign.com\n // Issue: CLOUD-5997\n // Notes: Originally AI-generated, modified manually\n\n const position = activeView.viewPosition;\n const target = activeView.viewTarget;\n const fieldHeight = activeView.viewFieldHeight;\n\n const dx = target[0] - position[0];\n const dy = target[1] - position[1];\n const dz = target[2] - position[2];\n const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n const fov = 2 * Math.atan(fieldHeight / (2 * distance));\n\n // ===================== AI-CODE-END ======================\n\n return {\n view_point: getPoint3dFromArray(activeView.viewPosition),\n direction: getPoint3dFromArray(activeView.viewTarget),\n up_vector: getPoint3dFromArray(activeView.upVector),\n field_of_view: (fov * 180) / Math.PI,\n };\n } else return undefined;\n };\n\n const getClippingPlanes = (): IClippingPlane[] => {\n const clipping_planes = [];\n for (let i = 0; i < activeView.numCuttingPlanes(); i++) {\n const cuttingPlane = activeView.getCuttingPlane(i);\n\n const clipping_plane = {\n location: getPoint3dFromArray(cuttingPlane.getOrigin()),\n direction: getPoint3dFromArray(cuttingPlane.normal()),\n };\n\n clipping_planes.push(clipping_plane);\n }\n\n return clipping_planes;\n };\n\n const getSelection = (): IEntity[] => {\n return this.getSelected().map((handle) => ({ handle }));\n };\n\n const getSelection2 = (): IEntity[] => {\n return this.getSelected2().map((handle) => ({ handle }));\n };\n\n const viewpoint: IViewpoint = { custom_fields: {} };\n\n viewpoint.orthogonal_camera = getOrthogonalCamera();\n viewpoint.perspective_camera = getPerspectiveCamera();\n viewpoint.clipping_planes = getClippingPlanes();\n viewpoint.selection = getSelection();\n viewpoint.description = new Date().toDateString();\n this._markup.getViewpoint(viewpoint);\n\n viewpoint.custom_fields.selection2 = getSelection2();\n\n this.emitEvent({ type: \"createviewpoint\", data: viewpoint });\n\n return viewpoint;\n }\n\n // IWorldTransform\n\n screenToWorld(position: { x: number; y: number }): { x: number; y: number; z: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y, z: 0 };\n\n const activeView = this.visViewer().activeView;\n const worldPoint = activeView.transformScreenToWorld(\n position.x * window.devicePixelRatio,\n position.y * window.devicePixelRatio\n );\n\n const result = { x: worldPoint[0], y: worldPoint[1], z: worldPoint[2] };\n\n activeView.delete();\n\n return result;\n }\n\n worldToScreen(position: { x: number; y: number; z: number }): { x: number; y: number } {\n if (!this.visualizeJs) return { x: position.x, y: position.y };\n\n const activeView = this.visViewer().activeView;\n const devicePoint = activeView.transformWorldToScreen(position.x, position.y, position.z);\n\n const result = { x: devicePoint[0] / window.devicePixelRatio, y: devicePoint[1] / window.devicePixelRatio };\n\n activeView.delete();\n\n return result;\n }\n\n getScale(): { x: number; y: number; z: number } {\n const result = { x: 1.0, y: 1.0, z: 1.0 };\n\n const projMatrix = this.visViewer().activeView.projectionMatrix;\n const tolerance = 1.0e-6;\n\n const x = projMatrix.get(0, 0);\n if (x > tolerance || x < -tolerance) result.x = 1 / x;\n\n const y = projMatrix.get(1, 1);\n if (y > tolerance || y < -tolerance) result.y = 1 / y;\n\n const z = projMatrix.get(2, 2);\n if (z > tolerance || z < -tolerance) result.z = 1 / z;\n\n return result;\n }\n\n // ICommandService\n\n /**\n * Executes the command denoted by the given command. If the command is not found, tries to set active\n * dragger with the specified name.\n *\n * The following commands are available by default:\n *\n * - `applyModelTransform`\n * - `autoTransformAllModelsToCentralPoint`\n * - `clearMarkup`\n * - `clearSelected`\n * - `clearSlices`\n * - `createPreview`\n * - `explode`\n * - `getDefaultViewPositions`\n * - `getModels`\n * - `getSelected`\n * - `hideSelected`\n * - `isolateSelected`\n * - `regenerateAll`\n * - `resetView`\n * - `selectModel`\n * - `setActiveDragger`\n * - `setDefaultViewPosition`\n * - `setMarkupColor`\n * - `setSelected`\n * - `showAll`\n * - `zoomToExtents`\n * - `zoomToObjects`\n * - `zoomToSelected`\n *\n * To register custom command use the {@link commands.registerCommand}.\n *\n * @param id - Command ID or dragger name.\n * @param args - Parameters passed to the command handler function.\n * @returns Returns the result of the command handler function or new active dragger instance. Returns\n * `undefined` if neither the command nor the dragger exists.\n */\n executeCommand(id: string, ...args: any[]): any {\n return commands.executeCommand(id, this, ...args);\n }\n\n // VisualizeJS viewer specific\n\n /**\n * Adds an empty `Visualize` markup entity to the VisualizeJS 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 * Deprecated since `25.11`. Use {@link IMarkup.getMarkupColor | markup.getMarkupColor()} instead.\n */\n getMarkupColor(): { r: number; g: number; b: number } {\n console.warn(\n \"Viewer.getMarkupColor() has been deprecated since 25.11 and will be removed in a future release, use Viewer.markup.getMarkupColor() instead.\"\n );\n return this._markup.getMarkupColor();\n }\n\n /**\n * Deprecated since `25.11`. Use {@link IMarkup.setMarkupColor | markup.setMarkupColor()} instead.\n */\n setMarkupColor(r = 255, g = 0, b = 0): void {\n console.warn(\n \"Viewer.setMarkupColor() has been deprecated since 25.11 and will be removed in a future release, use Viewer.markup.setMarkupColor() instead.\"\n );\n this._markup.setMarkupColor(r, g, b);\n }\n\n /**\n * Deprecated since `25.11`. Use {@link IMarkup.colorizeAllMarkup | markup.colorizeAllMarkup()} instead.\n */\n colorizeAllMarkup(r = 255, g = 0, b = 0): void {\n console.warn(\n \"Viewer.colorizeAllMarkup() has been deprecated since 25.11 and will be removed in a future release, use Viewer.markup.colorizeAllMarkup() instead.\"\n );\n this._markup.colorizeAllMarkup(r, g, b);\n }\n\n /**\n * Deprecated since `25.11`. Use\n * {@link IMarkup.colorizeSelectedMarkups | markup.colorizeSelectedMarkups()} instead.\n */\n colorizeSelectedMarkups(r = 255, g = 0, b = 0): void {\n this._markup.colorizeSelectedMarkups(r, g, b);\n }\n\n private scheduleUpdateAsync(maxScheduleUpdateTimeInMs = 50): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => {\n try {\n if (this._enableAutoUpdate) {\n this.visViewer()?.update(maxScheduleUpdateTimeInMs);\n this._activeDragger?.updatePreview?.();\n }\n this.emitEvent({ type: \"update\", force: false });\n resolve();\n } catch (e) {\n console.error(e);\n reject();\n }\n }, 0);\n });\n }\n\n /**\n * Updates the viewer asynchronously without locking the user interface. Used to update the viewer\n * after changes that require a long rendering time.\n *\n * Do nothing if the auto-update mode is disabled in the constructor. In this case, register an\n * `update` event handler and update the `VisualizeJS` viewer and active dragger manually.\n *\n * Fires:\n *\n * - {@link UpdateEvent | update}\n *\n * @param maxScheduleUpdateTimeInMs - Maximum time for one update, default 30 ms.\n * @param maxScheduleUpdateCount - Maximum count of scheduled updates.\n */\n async updateAsync(maxScheduleUpdateTimeInMs = 50, maxScheduleUpdateCount = 50): Promise<void> {\n if (!this.visualizeJs) return;\n\n this._isRunAsyncUpdate = true;\n try {\n const device = this.visViewer().getActiveDevice();\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 public deviceAutoRegeneration() {\n const visViewer = this.visViewer();\n const device = visViewer.getActiveDevice();\n\n const coef = device.getOptionDouble(this.visLib().DeviceOptions.kRegenCoef);\n if (coef > 1.0) {\n visViewer.regenAll();\n this.update();\n }\n }\n}\n"],"names":["utils.createHtmlElementIfNeed","utils.worldToScreen","utils.isInsideRect","utils.getDataForDrawLineWithFixed","utils.getDistance","utils.destroyHtmlElement","utils.onSetCallback","utils.onSetSelectivity","FocalLengthConst","calcFocalLength","KonvaMarkup"],"mappings":"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"}