@vertexvis/viewer 1.0.2-canary.1 → 1.0.2-canary.2
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.
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/{multiElementInteractionHandler-DCKBIy58.js → multiElementInteractionHandler-BHvRKVIp.js} +20 -21
- package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -0
- package/dist/cjs/{queries-XG1IeRYE.js → queries-Da9I-xMf.js} +12 -12
- package/dist/cjs/queries-Da9I-xMf.js.map +1 -0
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +27 -18
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +18 -19
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApi.js +17 -8
- package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractions.js +8 -8
- package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
- package/dist/collection/lib/scenes/camera.js +10 -10
- package/dist/collection/lib/scenes/camera.js.map +1 -1
- package/dist/collection/lib/teleportation/interactions.js +1 -1
- package/dist/collection/lib/teleportation/interactions.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-BR7cFxzj.js → p-3DqRAYgO.js} +2 -2
- package/dist/components/p-3DqRAYgO.js.map +1 -0
- package/dist/components/{p-Bkhr6gno.js → p-BCOD9yfw.js} +2 -2
- package/dist/components/p-CAugdB_8.js +5 -0
- package/dist/components/p-CAugdB_8.js.map +1 -0
- package/dist/components/p-CGCJ5hbJ.js +5 -0
- package/dist/components/p-CGCJ5hbJ.js.map +1 -0
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-teleport-tool.js +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/{multiElementInteractionHandler-C3A6SPxu.js → multiElementInteractionHandler-DwjL-r55.js} +20 -21
- package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -0
- package/dist/esm/{queries-CsBLqW1v.js → queries-DEzCmbTD.js} +12 -12
- package/dist/esm/queries-DEzCmbTD.js.map +1 -0
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +27 -18
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/types/lib/interactions/baseInteractionHandler.d.ts +1 -1
- package/dist/types/lib/interactions/interactionApi.d.ts +2 -2
- package/dist/types/lib/interactions/mouseInteractions.d.ts +2 -2
- package/dist/types/lib/scenes/camera.d.ts +1 -0
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/p-07b99ac9.entry.js +5 -0
- package/dist/viewer/p-07b99ac9.entry.js.map +1 -0
- package/dist/viewer/{p-5ced98d5.entry.js → p-29d14611.entry.js} +2 -2
- package/dist/viewer/{p-72a0588f.entry.js → p-89544066.entry.js} +2 -2
- package/dist/viewer/p-89544066.entry.js.map +1 -0
- package/dist/viewer/p-D6eJC1q4.js +5 -0
- package/dist/viewer/p-D6eJC1q4.js.map +1 -0
- package/dist/viewer/{p-5U-3M0jx.js → p-EsKoKfmx.js} +2 -2
- package/dist/viewer/p-EsKoKfmx.js.map +1 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/cjs/multiElementInteractionHandler-DCKBIy58.js.map +0 -1
- package/dist/cjs/queries-XG1IeRYE.js.map +0 -1
- package/dist/components/p-BQrJ-Yrs.js +0 -5
- package/dist/components/p-BQrJ-Yrs.js.map +0 -1
- package/dist/components/p-BR7cFxzj.js.map +0 -1
- package/dist/components/p-DizXmW54.js +0 -5
- package/dist/components/p-DizXmW54.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-C3A6SPxu.js.map +0 -1
- package/dist/esm/queries-CsBLqW1v.js.map +0 -1
- package/dist/viewer/p-5U-3M0jx.js.map +0 -1
- package/dist/viewer/p-72a0588f.entry.js.map +0 -1
- package/dist/viewer/p-77a0c7b7.entry.js +0 -5
- package/dist/viewer/p-77a0c7b7.entry.js.map +0 -1
- package/dist/viewer/p-CxLXWk2n.js +0 -5
- package/dist/viewer/p-CxLXWk2n.js.map +0 -1
- /package/dist/components/{p-Bkhr6gno.js.map → p-BCOD9yfw.js.map} +0 -0
- /package/dist/viewer/{p-5ced98d5.entry.js.map → p-29d14611.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/camera.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport {\n BoundingBox,\n BoundingSphere,\n Matrix4,\n Quaternion,\n Ray,\n Vector3,\n} from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { FrameDecoder } from '../mappers';\nimport {\n constrainViewVector,\n updateLookAtRelativeToBoundingBoxCenter,\n} from '../rendering/vectors';\nimport { DEFAULT_TIMEOUT_IN_MS } from '../stream/dispatcher';\nimport {\n Animation,\n ClippingPlanes,\n FlyTo,\n FrameCamera,\n FrameCameraBase,\n FrameOrthographicCamera,\n FramePerspectiveCamera,\n StandardView,\n} from '../types';\nimport { withPositionAndViewVector } from '../types/frameCamera';\nimport { CameraRenderResult } from './cameraRenderResult';\nimport { buildFlyToOperation } from './mapper';\nimport ISceneItemQueryExpression = vertexvis.protobuf.stream.ISceneItemQueryExpression;\n\nexport interface CameraRenderOptions {\n animation?: Animation.Animation;\n}\n\nexport class TerminalFlyToExecutor {\n public constructor(private flyToOptions?: FlyTo.FlyToOptions) {}\n\n public build(): FlyTo.FlyToOptions | undefined {\n return this.flyToOptions;\n }\n}\n\nexport class FlyToExecutor {\n private flyToOptions?: FlyTo.FlyToOptions;\n\n public withItemId(id: string): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'internal',\n data: id,\n },\n });\n }\n\n public withSuppliedId(id: string): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'supplied',\n data: id,\n },\n });\n }\n\n public withCamera(camera: FrameCamera.FrameCamera): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'camera',\n data: camera,\n },\n });\n }\n\n public withBoundingBox(\n boundingBox: BoundingBox.BoundingBox\n ): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'bounding-box',\n data: boundingBox,\n },\n });\n }\n\n public build(): FlyTo.FlyToOptions | undefined {\n return this.flyToOptions;\n }\n}\n\nexport interface FlyToParams {\n itemId?: string;\n camera?: FrameCamera.FrameCamera;\n boundingBox?: BoundingBox.BoundingBox;\n itemSuppliedId?: string;\n sceneItemQueryExpression?: ISceneItemQueryExpression;\n}\n\n/**\n * The `Camera` class contains properties that reflect a world space position, a\n * view direction (lookAt), and normalized vector representing the up direction.\n *\n * It also provides utility methods to update orientation of the camera and\n * rerender the scene.\n *\n * This class in intended to be treated as an immutable type. Any mutations return\n * a new instance of the class with the updated properties.\n */\nexport abstract class Camera {\n public constructor(\n protected stream: StreamApi,\n protected aspect: number,\n private data: FrameCamera.FrameCamera,\n protected boundingBox: BoundingBox.BoundingBox,\n protected decodeFrame: FrameDecoder,\n protected flyToOptions?: FlyTo.FlyToOptions\n ) {}\n\n /**\n * Updates the position of the camera such that the given bounding box will\n * be contained within the camera's view.\n *\n * @param boundingBox The bounding box to position to.\n */\n public fitToBoundingBox(boundingBox: BoundingBox.BoundingBox): Camera {\n return this.flyTo({\n boundingBox,\n });\n }\n\n /**\n * Returns the distance from the camera's position to the center\n * of the provided bounding box (or the scene's visible bounding box if not provided).\n *\n * @param boundingBox - The bounding box to determine distance from.\n */\n public signedDistanceToBoundingBoxCenter(\n boundingBox?: BoundingBox.BoundingBox\n ): number {\n const { position, viewVector } = withPositionAndViewVector(this.data);\n\n const boundingBoxCenter = BoundingBox.center(\n boundingBox ?? this.boundingBox\n );\n const cameraToCenter = Vector3.subtract(boundingBoxCenter, position);\n\n return (\n Vector3.dot(viewVector, cameraToCenter) / Vector3.magnitude(viewVector)\n );\n }\n\n /**\n * Specifies that the next render of the camera will be repositioned to one of\n * the options specified in `options`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector(\"vertex-viewer\");\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Fly to and fit to a specific item by ID with an animation of 1 second\n * await camera\n * .flyTo({ itemId: \"item-id\" })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to and fit to a specific item by supplied ID with an animation of 1 second\n * await camera\n * .flyTo({ itemSuppliedId: \"item-supplied-id\" })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to and fit to the bounding box of the current set of selected items\n * // with an animation of 1 second\n * await camera\n * .flyTo({\n * boundingBox:\n * viewer.frame.scene.sceneViewSummary.selectedVisibleSummary.boundingBox,\n * })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to a specific camera\n * await camera\n * .flyTo({\n * camera: {\n * position: {\n * x: 1,\n * y: 2,\n * z: 3,\n * },\n * lookAt: {\n * x: 0,\n * y: 0,\n * z: 0,\n * },\n * up: {\n * x: 0,\n * y: 1,\n * z: 0,\n * },\n * },\n * })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to scene items specified by a query\n * await camera\n * .flyTo({\n * sceneItemQueryExpression: {\n * operand: {\n * metadata: {\n * valueFilter: 'WheelHub',\n * keys: ['ProductName'],\n * },\n * },\n * },\n * })\n * ```\n *\n * @param paramsOrQuery An object or query describing how the camera should\n * be positioned.\n */\n public flyTo(\n paramsOrQuery: FlyToParams | ((q: FlyToExecutor) => TerminalFlyToExecutor)\n ): Camera {\n if (typeof paramsOrQuery !== 'function') {\n return this.updateFlyToOptions({\n flyTo: this.buildFlyToType(paramsOrQuery),\n });\n } else {\n return this.updateFlyToOptions(\n paramsOrQuery(new FlyToExecutor()).build()\n );\n }\n }\n\n /**\n * Performs a `flyTo` operation with the current visible bounding box of\n * the scene.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Fit to the visible bounding box of the scene with an animation of 1 second\n * await camera.viewAll().render({ animation: { milliseconds: 1000 } });\n * ```\n */\n public viewAll(): Camera {\n return this.fitToBoundingBox(this.boundingBox);\n }\n\n /**\n * Queues the rendering for a new frame using this camera. The returned\n * promise will resolve when a frame is received that contains this camera.\n */\n public async render(\n renderOptions?: CameraRenderOptions\n ): Promise<CameraRenderResult> {\n if (this.flyToOptions == null && renderOptions != null) {\n this.flyToOptions = {\n flyTo: {\n type: 'camera',\n data: this.data,\n },\n };\n }\n\n try {\n const corrId = UUID.create();\n if (this.flyToOptions != null) {\n const payload = buildFlyToOperation(\n corrId,\n this.flyToOptions,\n renderOptions?.animation,\n this.toFrameCamera()\n );\n const flyToResponse = await this.stream.flyTo(payload, true);\n\n return new CameraRenderResult(\n this.stream,\n this.decodeFrame,\n {\n correlationId: corrId,\n animationId: flyToResponse.flyTo?.animationId?.hex || undefined,\n },\n renderOptions?.animation?.milliseconds != null\n ? renderOptions.animation.milliseconds + DEFAULT_TIMEOUT_IN_MS\n : undefined\n );\n } else {\n this.stream.replaceCamera({\n camera: FrameCamera.toProtobuf(this.data),\n frameCorrelationId: { value: corrId },\n });\n\n return new CameraRenderResult(this.stream, this.decodeFrame, {\n correlationId: corrId,\n });\n }\n } catch (e) {\n console.warn('Error when performing render: ', e);\n throw e;\n }\n }\n\n /**\n * Repositions the camera by rotating its current position around an axis placed\n * at the `lookAt` point. This method internally will call {@link Camera.rotateAroundAxisAtPoint}\n * with the `point` parameter set to the current `lookAt` point.\n *\n * @see {@link Camera.rotateAroundAxisAtPoint} for more information.\n *\n * @param angleInRadians The angle, in radians, to rotate.\n * @param axis A normalized vector to rotate around.\n */\n public rotateAroundAxis(\n angleInRadians: number,\n axis: Vector3.Vector3\n ): Camera {\n return this.rotateAroundAxisAtPoint(angleInRadians, this.data.lookAt, axis);\n }\n\n /**\n * Aligns the camera to the plane defined by the provided position and normal.\n * This will place the camera at the provided position, set the up vector to\n * the provided normal, and place the lookAt on the defined plane. The point\n * chosen for the lookAt will be determined using the current view vector.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector(\"vertex-viewer\");\n *\n * viewer.addEventListener(\"tap\", async (event) => {\n * const scene = await viewer.scene();\n * const raycaster = scene.raycaster();\n *\n * const [hit] = await raycaster.hitItems(event.detail.position);\n *\n * if (hit != null) {\n * const camera = scene.camera();\n *\n * // Align to the plane represented by the hit result with an animation of 1 second\n * await camera\n * .alignTo(hit.hitPoint, hit.hitNormal)\n * .render({ animation: { milliseconds: 1000 } });\n * }\n * });\n * ```\n *\n * @param position The position to place the camera at.\n * @param normal The normal of the plane to align to.\n */\n public alignTo(position: Vector3.Vector3, normal: Vector3.Vector3): Camera {\n const worldX = Vector3.normalize(\n Vector3.cross(this.up, Vector3.normalize(this.viewVector))\n );\n const positiveWorldY = Vector3.normalize(\n Vector3.cross(Vector3.normalize(this.viewVector), worldX)\n );\n\n // Invert the world y axis if the provided normal is more than 90 degrees from it\n // to compute a proper angle to rotate the view vector by\n const worldY =\n Vector3.angleTo(normal, positiveWorldY) > Math.PI / 2\n ? Vector3.negate(positiveWorldY)\n : positiveWorldY;\n const localX = Vector3.isEqual(worldY, normal)\n ? worldX\n : Vector3.normalize(Vector3.cross(worldY, normal));\n\n const transformedViewVector = Vector3.transformMatrix(\n this.viewVector,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(localX, Vector3.angleTo(normal, worldY))\n )\n );\n const lookAtRay = Ray.create({\n origin: position,\n direction: Vector3.normalize(transformedViewVector),\n });\n const lookAt = Ray.at(lookAtRay, Vector3.magnitude(this.viewVector));\n\n return this.update({\n position,\n lookAt,\n up: normal,\n });\n }\n\n /**\n * Updates the `position` and `up` vectors of the camera to the given standard\n * view, and sets the `lookAt` point to the origin.\n *\n * @see {@link StandardView} for the available standard views.\n *\n * @param standardView The standard view to apply.\n * @returns A new camera.\n */\n public standardView(standardView: StandardView): Camera {\n return this.update({\n position: standardView.position,\n viewVector: Vector3.subtract(Vector3.origin(), standardView.position),\n lookAt: Vector3.origin(),\n up: standardView.up,\n });\n }\n\n /**\n * Updates the `position` and `up` vectors of the camera to the given standard\n * view, maintaining the existing `lookAt` point.\n *\n * @see {@link StandardView} for the available standard views.\n *\n * @param standardView The standard view to apply.\n * @returns A new camera.\n */\n public standardViewFixedLookAt(standardView: StandardView): Camera {\n const standardViewRay = Ray.create({\n origin: this.lookAt,\n direction: Vector3.normalize(standardView.position),\n });\n const updatedPosition = Ray.at(\n standardViewRay,\n Vector3.magnitude(this.viewVector)\n );\n\n return this.update({\n up: standardView.up,\n position: updatedPosition,\n viewVector: Vector3.subtract(this.lookAt, updatedPosition),\n });\n }\n\n private buildFlyToType(options: FlyToParams): FlyTo.FlyToType {\n if (options.boundingBox != null) {\n return { type: 'bounding-box', data: options.boundingBox };\n } else if (options.camera != null) {\n return { type: 'camera', data: options.camera };\n } else if (options.itemId != null) {\n return { type: 'internal', data: options.itemId };\n } else if (options.itemSuppliedId != null) {\n return { type: 'supplied', data: options.itemSuppliedId };\n } else if (options.sceneItemQueryExpression != null) {\n return {\n type: 'scene-item-query',\n data: options.sceneItemQueryExpression,\n };\n } else {\n throw new Error('Fly to must specify at least one option.');\n }\n }\n\n protected computeClippingPlanes(\n camera: FrameCamera.FrameCamera\n ): ClippingPlanes.ClippingPlanes {\n return ClippingPlanes.fromBoundingBoxAndLookAtCamera(\n this.boundingBox,\n camera\n );\n }\n\n /**\n * Repositions the camera by rotating its current position around an axis\n * defined at a specific world point.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n *\n * viewer.addEventListener('tap', async (event) => {\n * const scene = await viewer.scene();\n * const raycaster = scene.raycaster();\n *\n * const [hit] = await raycaster.hitItems(event.detail.position);\n *\n * if (hit != null) {\n * const camera = scene.camera();\n *\n * // Using the current `up` vector of the camera, rotate 45 degrees\n * // about the hit position with an animation of 1 second\n * await camera.rotateAroundAxisAtPoint(\n * Angle.toRadians(45),\n * hit.hitPoint,\n * camera.up,\n * ).render({ animation: { milliseconds: 1000 } });\n * }\n * });\n * ```\n *\n * @param angleInRadians The angle, in radians, to rotate.\n * @param point The point in world space to place the axis at.\n * @param axis A normalized vector to rotate around.\n */\n public abstract rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera;\n\n public abstract get position(): Vector3.Vector3;\n public abstract get lookAt(): Vector3.Vector3;\n public abstract get up(): Vector3.Vector3;\n public abstract get near(): number;\n public abstract get far(): number;\n public abstract get aspectRatio(): number;\n public abstract get viewVector(): Vector3.Vector3;\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public abstract moveBy(delta: Vector3.Vector3): Camera;\n\n /**\n * Updates the `position`, `lookAt` and/or `up` vectors of the camera. Each\n * vector can be omitted in the payload, and the resulting camera will keep\n * the previous `position`, `lookAt`, or `up` vectors.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector(\"vertex-viewer\");\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Update the camera to place it at the origin\n * await camera\n * .update({\n * position: {\n * x: 0,\n * y: 0,\n * z: 0,\n * },\n * })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Update the camera to look at the origin\n * await camera\n * .update({\n * lookAt: {\n * x: 0,\n * y: 0,\n * z: 0,\n * },\n * })\n * .render({ animation: { milliseconds: 1000 } });\n * ```\n *\n * @param camera The values to update the camera to.\n */\n public abstract update(camera: Partial<FrameCamera.FrameCamera>): Camera;\n\n /**\n * Returns a `FrameCameraBase` representation.\n */\n public abstract toFrameCamera(): FrameCameraBase;\n\n protected abstract updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): Camera;\n}\n\nexport class PerspectiveCamera\n extends Camera\n implements FrameCamera.PerspectiveFrameCamera\n{\n public constructor(\n stream: StreamApi,\n aspect: number,\n private perspectiveData: FrameCamera.PerspectiveFrameCamera,\n boundingBox: BoundingBox.BoundingBox,\n decodeFrame: FrameDecoder,\n flyToOptions?: FlyTo.FlyToOptions\n ) {\n super(\n stream,\n aspect,\n perspectiveData,\n boundingBox,\n decodeFrame,\n flyToOptions\n );\n }\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public moveBy(delta: Vector3.Vector3): Camera {\n return this.update({\n position: Vector3.add(this.position, delta),\n lookAt: Vector3.add(this.lookAt, delta),\n });\n }\n\n public rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera {\n return this.update({\n position: Vector3.rotateAboutAxis(\n angleInRadians,\n this.position,\n axis,\n point\n ),\n lookAt: Vector3.rotateAboutAxis(angleInRadians, this.lookAt, axis, point),\n up: Vector3.rotateAboutAxis(\n angleInRadians,\n this.up,\n axis,\n Vector3.origin()\n ),\n });\n }\n\n public update(camera: Partial<FrameCamera.PerspectiveFrameCamera>): Camera {\n const fovY = camera.fovY ?? this.fovY;\n return new PerspectiveCamera(\n this.stream,\n this.aspect,\n { ...this.perspectiveData, ...camera, fovY },\n this.boundingBox,\n this.decodeFrame,\n this.flyToOptions\n );\n }\n\n public toFrameCamera(): FramePerspectiveCamera {\n return new FramePerspectiveCamera(\n this.position,\n this.lookAt,\n this.up,\n this.near,\n this.far,\n this.aspectRatio,\n this.fovY ?? 45\n );\n }\n\n public get viewVector(): Vector3.Vector3 {\n return Vector3.subtract(this.lookAt, this.position);\n }\n\n /**\n * The position vector for the camera, in world space coordinates.\n */\n public get position(): Vector3.Vector3 {\n return { ...this.perspectiveData.position };\n }\n\n /**\n * A normalized vector representing the up direction.\n */\n public get up(): Vector3.Vector3 {\n return { ...this.perspectiveData.up };\n }\n\n /**\n * A vector, in world space coordinates, of where the camera is pointed at.\n */\n public get lookAt(): Vector3.Vector3 {\n return { ...this.perspectiveData.lookAt };\n }\n\n /**\n * The camera's field of view.\n */\n public get fovY(): number | undefined {\n return this.perspectiveData.fovY;\n }\n\n /**\n * The aspect ratio of the camera.\n */\n public get aspectRatio(): number {\n return this.aspect;\n }\n\n /**\n * The camera's near clipping plane.\n */\n public get near(): number {\n const { near } = this.computeClippingPlanes(this.perspectiveData);\n return near;\n }\n\n /**\n * The camera's far clipping plane.\n */\n public get far(): number {\n const { far } = this.computeClippingPlanes(this.perspectiveData);\n return far;\n }\n\n protected updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): PerspectiveCamera {\n return new PerspectiveCamera(\n this.stream,\n this.aspect,\n this.perspectiveData,\n this.boundingBox,\n this.decodeFrame,\n flyToOptions\n );\n }\n}\n\nexport class OrthographicCamera\n extends Camera\n implements FrameCamera.OrthographicFrameCamera\n{\n public constructor(\n stream: StreamApi,\n aspect: number,\n private orthographicData: FrameCamera.OrthographicFrameCamera,\n boundingBox: BoundingBox.BoundingBox,\n decodeFrame: FrameDecoder,\n flyToOptions?: FlyTo.FlyToOptions\n ) {\n super(\n stream,\n aspect,\n orthographicData,\n boundingBox,\n decodeFrame,\n flyToOptions\n );\n }\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public moveBy(delta: Vector3.Vector3): Camera {\n // The rotation point should match the lookAt point when panning\n const updatedPoint = Vector3.add(this.lookAt, delta);\n return this.update({\n lookAt: updatedPoint,\n rotationPoint: updatedPoint,\n });\n }\n\n public rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera {\n const updatedLookAt = Vector3.rotateAboutAxis(\n angleInRadians,\n this.lookAt,\n axis,\n point\n );\n const updatedPosition = Vector3.rotateAboutAxis(\n angleInRadians,\n this.position,\n axis,\n point\n );\n const viewVector = constrainViewVector(\n Vector3.subtract(updatedLookAt, updatedPosition),\n BoundingSphere.create(this.boundingBox)\n );\n\n return this.update({\n viewVector: viewVector,\n lookAt: updatedLookAt,\n up: Vector3.rotateAboutAxis(\n angleInRadians,\n this.up,\n axis,\n Vector3.origin()\n ),\n });\n }\n\n public update(camera: Partial<FrameCamera.FrameCamera>): Camera {\n return new OrthographicCamera(\n this.stream,\n this.aspect,\n { ...this.orthographicData, ...camera },\n this.boundingBox,\n this.decodeFrame,\n this.flyToOptions\n );\n }\n\n public toFrameCamera(): FrameOrthographicCamera {\n const boundingSphere = BoundingSphere.create(this.boundingBox);\n const viewVector = constrainViewVector(this.viewVector, boundingSphere);\n const lookAt = updateLookAtRelativeToBoundingBoxCenter(\n this.lookAt,\n viewVector,\n boundingSphere.center\n );\n\n return new FrameOrthographicCamera(\n viewVector,\n lookAt,\n this.up,\n this.near,\n this.far,\n this.aspectRatio,\n this.fovHeight,\n this.rotationPoint\n );\n }\n\n public get viewVector(): Vector3.Vector3 {\n return { ...this.orthographicData.viewVector };\n }\n\n public get position(): Vector3.Vector3 {\n return Vector3.add(this.lookAt, Vector3.negate(this.viewVector));\n }\n\n /**\n * A vector, in world space coordinates, of where the camera should be rotated around.\n * Most interactions (like pan and zoom) will update lookAt and rotationPoint to be the same point.\n * However, rotation interactions will only update lookAt and not rotationPoint.\n */\n public get rotationPoint(): Vector3.Vector3 | undefined {\n const rotationPoint = this.orthographicData.rotationPoint;\n if (rotationPoint != null) {\n return rotationPoint;\n } else {\n return undefined;\n }\n }\n\n /**\n * A normalized vector representing the up direction.\n */\n public get up(): Vector3.Vector3 {\n return { ...this.orthographicData.up };\n }\n\n /**\n * A vector, in world space coordinates, of where the camera is pointed at.\n */\n public get lookAt(): Vector3.Vector3 {\n return { ...this.orthographicData.lookAt };\n }\n\n /**\n * The camera's field of view.\n */\n public get fovHeight(): number {\n return this.orthographicData.fovHeight;\n }\n\n /**\n * The aspect ratio of the camera.\n */\n public get aspectRatio(): number {\n return this.aspect;\n }\n\n /**\n * The camera's near clipping plane.\n */\n public get near(): number {\n const { near } = this.computeClippingPlanes(this.orthographicData);\n return near;\n }\n\n /**\n * The camera's far clipping plane.\n */\n public get far(): number {\n const { far } = this.computeClippingPlanes(this.orthographicData);\n return far;\n }\n\n protected updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): OrthographicCamera {\n return new OrthographicCamera(\n this.stream,\n this.aspect,\n this.orthographicData,\n this.boundingBox,\n this.decodeFrame,\n flyToOptions\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/camera.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport {\n BoundingBox,\n BoundingSphere,\n Matrix4,\n Quaternion,\n Ray,\n Vector3,\n} from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { FrameDecoder } from '../mappers';\nimport {\n constrainViewVector,\n updateLookAtRelativeToBoundingBoxCenter,\n} from '../rendering/vectors';\nimport { DEFAULT_TIMEOUT_IN_MS } from '../stream/dispatcher';\nimport {\n Animation,\n ClippingPlanes,\n FlyTo,\n FrameCamera,\n FrameCameraBase,\n FrameOrthographicCamera,\n FramePerspectiveCamera,\n StandardView,\n} from '../types';\nimport { withPositionAndViewVector } from '../types/frameCamera';\nimport { CameraRenderResult } from './cameraRenderResult';\nimport { buildFlyToOperation } from './mapper';\nimport ISceneItemQueryExpression = vertexvis.protobuf.stream.ISceneItemQueryExpression;\n\nexport interface CameraRenderOptions {\n correlationId?: string;\n animation?: Animation.Animation;\n}\n\nexport class TerminalFlyToExecutor {\n public constructor(private flyToOptions?: FlyTo.FlyToOptions) {}\n\n public build(): FlyTo.FlyToOptions | undefined {\n return this.flyToOptions;\n }\n}\n\nexport class FlyToExecutor {\n private flyToOptions?: FlyTo.FlyToOptions;\n\n public withItemId(id: string): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'internal',\n data: id,\n },\n });\n }\n\n public withSuppliedId(id: string): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'supplied',\n data: id,\n },\n });\n }\n\n public withCamera(camera: FrameCamera.FrameCamera): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'camera',\n data: camera,\n },\n });\n }\n\n public withBoundingBox(\n boundingBox: BoundingBox.BoundingBox\n ): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'bounding-box',\n data: boundingBox,\n },\n });\n }\n\n public build(): FlyTo.FlyToOptions | undefined {\n return this.flyToOptions;\n }\n}\n\nexport interface FlyToParams {\n itemId?: string;\n camera?: FrameCamera.FrameCamera;\n boundingBox?: BoundingBox.BoundingBox;\n itemSuppliedId?: string;\n sceneItemQueryExpression?: ISceneItemQueryExpression;\n}\n\n/**\n * The `Camera` class contains properties that reflect a world space position, a\n * view direction (lookAt), and normalized vector representing the up direction.\n *\n * It also provides utility methods to update orientation of the camera and\n * rerender the scene.\n *\n * This class in intended to be treated as an immutable type. Any mutations return\n * a new instance of the class with the updated properties.\n */\nexport abstract class Camera {\n public constructor(\n protected stream: StreamApi,\n protected aspect: number,\n private data: FrameCamera.FrameCamera,\n protected boundingBox: BoundingBox.BoundingBox,\n protected decodeFrame: FrameDecoder,\n protected flyToOptions?: FlyTo.FlyToOptions\n ) {}\n\n /**\n * Updates the position of the camera such that the given bounding box will\n * be contained within the camera's view.\n *\n * @param boundingBox The bounding box to position to.\n */\n public fitToBoundingBox(boundingBox: BoundingBox.BoundingBox): Camera {\n return this.flyTo({\n boundingBox,\n });\n }\n\n /**\n * Returns the distance from the camera's position to the center\n * of the provided bounding box (or the scene's visible bounding box if not provided).\n *\n * @param boundingBox - The bounding box to determine distance from.\n */\n public signedDistanceToBoundingBoxCenter(\n boundingBox?: BoundingBox.BoundingBox\n ): number {\n const { position, viewVector } = withPositionAndViewVector(this.data);\n\n const boundingBoxCenter = BoundingBox.center(\n boundingBox ?? this.boundingBox\n );\n const cameraToCenter = Vector3.subtract(boundingBoxCenter, position);\n\n return (\n Vector3.dot(viewVector, cameraToCenter) / Vector3.magnitude(viewVector)\n );\n }\n\n /**\n * Specifies that the next render of the camera will be repositioned to one of\n * the options specified in `options`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector(\"vertex-viewer\");\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Fly to and fit to a specific item by ID with an animation of 1 second\n * await camera\n * .flyTo({ itemId: \"item-id\" })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to and fit to a specific item by supplied ID with an animation of 1 second\n * await camera\n * .flyTo({ itemSuppliedId: \"item-supplied-id\" })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to and fit to the bounding box of the current set of selected items\n * // with an animation of 1 second\n * await camera\n * .flyTo({\n * boundingBox:\n * viewer.frame.scene.sceneViewSummary.selectedVisibleSummary.boundingBox,\n * })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to a specific camera\n * await camera\n * .flyTo({\n * camera: {\n * position: {\n * x: 1,\n * y: 2,\n * z: 3,\n * },\n * lookAt: {\n * x: 0,\n * y: 0,\n * z: 0,\n * },\n * up: {\n * x: 0,\n * y: 1,\n * z: 0,\n * },\n * },\n * })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Fly to scene items specified by a query\n * await camera\n * .flyTo({\n * sceneItemQueryExpression: {\n * operand: {\n * metadata: {\n * valueFilter: 'WheelHub',\n * keys: ['ProductName'],\n * },\n * },\n * },\n * })\n * ```\n *\n * @param paramsOrQuery An object or query describing how the camera should\n * be positioned.\n */\n public flyTo(\n paramsOrQuery: FlyToParams | ((q: FlyToExecutor) => TerminalFlyToExecutor)\n ): Camera {\n if (typeof paramsOrQuery !== 'function') {\n return this.updateFlyToOptions({\n flyTo: this.buildFlyToType(paramsOrQuery),\n });\n } else {\n return this.updateFlyToOptions(\n paramsOrQuery(new FlyToExecutor()).build()\n );\n }\n }\n\n /**\n * Performs a `flyTo` operation with the current visible bounding box of\n * the scene.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Fit to the visible bounding box of the scene with an animation of 1 second\n * await camera.viewAll().render({ animation: { milliseconds: 1000 } });\n * ```\n */\n public viewAll(): Camera {\n return this.fitToBoundingBox(this.boundingBox);\n }\n\n /**\n * Queues the rendering for a new frame using this camera. The returned\n * promise will resolve when a frame is received that contains this camera.\n */\n public async render(\n renderOptions: CameraRenderOptions = {}\n ): Promise<CameraRenderResult> {\n if (this.flyToOptions == null && renderOptions.animation) {\n this.flyToOptions = {\n flyTo: {\n type: 'camera',\n data: this.data,\n },\n };\n }\n\n try {\n renderOptions.correlationId ??= UUID.create();\n if (this.flyToOptions != null) {\n const payload = buildFlyToOperation(\n renderOptions.correlationId,\n this.flyToOptions,\n renderOptions.animation,\n this.toFrameCamera()\n );\n const flyToResponse = await this.stream.flyTo(payload, true);\n\n return new CameraRenderResult(\n this.stream,\n this.decodeFrame,\n {\n correlationId: renderOptions.correlationId,\n animationId: flyToResponse.flyTo?.animationId?.hex || undefined,\n },\n renderOptions.animation?.milliseconds != null\n ? renderOptions.animation.milliseconds + DEFAULT_TIMEOUT_IN_MS\n : undefined\n );\n } else {\n this.stream.replaceCamera({\n camera: FrameCamera.toProtobuf(this.data),\n frameCorrelationId: { value: renderOptions.correlationId },\n });\n\n return new CameraRenderResult(this.stream, this.decodeFrame, {\n correlationId: renderOptions.correlationId,\n });\n }\n } catch (e) {\n console.warn('Error when performing render: ', e);\n throw e;\n }\n }\n\n /**\n * Repositions the camera by rotating its current position around an axis placed\n * at the `lookAt` point. This method internally will call {@link Camera.rotateAroundAxisAtPoint}\n * with the `point` parameter set to the current `lookAt` point.\n *\n * @see {@link Camera.rotateAroundAxisAtPoint} for more information.\n *\n * @param angleInRadians The angle, in radians, to rotate.\n * @param axis A normalized vector to rotate around.\n */\n public rotateAroundAxis(\n angleInRadians: number,\n axis: Vector3.Vector3\n ): Camera {\n return this.rotateAroundAxisAtPoint(angleInRadians, this.data.lookAt, axis);\n }\n\n /**\n * Aligns the camera to the plane defined by the provided position and normal.\n * This will place the camera at the provided position, set the up vector to\n * the provided normal, and place the lookAt on the defined plane. The point\n * chosen for the lookAt will be determined using the current view vector.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector(\"vertex-viewer\");\n *\n * viewer.addEventListener(\"tap\", async (event) => {\n * const scene = await viewer.scene();\n * const raycaster = scene.raycaster();\n *\n * const [hit] = await raycaster.hitItems(event.detail.position);\n *\n * if (hit != null) {\n * const camera = scene.camera();\n *\n * // Align to the plane represented by the hit result with an animation of 1 second\n * await camera\n * .alignTo(hit.hitPoint, hit.hitNormal)\n * .render({ animation: { milliseconds: 1000 } });\n * }\n * });\n * ```\n *\n * @param position The position to place the camera at.\n * @param normal The normal of the plane to align to.\n */\n public alignTo(position: Vector3.Vector3, normal: Vector3.Vector3): Camera {\n const worldX = Vector3.normalize(\n Vector3.cross(this.up, Vector3.normalize(this.viewVector))\n );\n const positiveWorldY = Vector3.normalize(\n Vector3.cross(Vector3.normalize(this.viewVector), worldX)\n );\n\n // Invert the world y axis if the provided normal is more than 90 degrees from it\n // to compute a proper angle to rotate the view vector by\n const worldY =\n Vector3.angleTo(normal, positiveWorldY) > Math.PI / 2\n ? Vector3.negate(positiveWorldY)\n : positiveWorldY;\n const localX = Vector3.isEqual(worldY, normal)\n ? worldX\n : Vector3.normalize(Vector3.cross(worldY, normal));\n\n const transformedViewVector = Vector3.transformMatrix(\n this.viewVector,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(localX, Vector3.angleTo(normal, worldY))\n )\n );\n const lookAtRay = Ray.create({\n origin: position,\n direction: Vector3.normalize(transformedViewVector),\n });\n const lookAt = Ray.at(lookAtRay, Vector3.magnitude(this.viewVector));\n\n return this.update({\n position,\n lookAt,\n up: normal,\n });\n }\n\n /**\n * Updates the `position` and `up` vectors of the camera to the given standard\n * view, and sets the `lookAt` point to the origin.\n *\n * @see {@link StandardView} for the available standard views.\n *\n * @param standardView The standard view to apply.\n * @returns A new camera.\n */\n public standardView(standardView: StandardView): Camera {\n return this.update({\n position: standardView.position,\n viewVector: Vector3.subtract(Vector3.origin(), standardView.position),\n lookAt: Vector3.origin(),\n up: standardView.up,\n });\n }\n\n /**\n * Updates the `position` and `up` vectors of the camera to the given standard\n * view, maintaining the existing `lookAt` point.\n *\n * @see {@link StandardView} for the available standard views.\n *\n * @param standardView The standard view to apply.\n * @returns A new camera.\n */\n public standardViewFixedLookAt(standardView: StandardView): Camera {\n const standardViewRay = Ray.create({\n origin: this.lookAt,\n direction: Vector3.normalize(standardView.position),\n });\n const updatedPosition = Ray.at(\n standardViewRay,\n Vector3.magnitude(this.viewVector)\n );\n\n return this.update({\n up: standardView.up,\n position: updatedPosition,\n viewVector: Vector3.subtract(this.lookAt, updatedPosition),\n });\n }\n\n private buildFlyToType(options: FlyToParams): FlyTo.FlyToType {\n if (options.boundingBox != null) {\n return { type: 'bounding-box', data: options.boundingBox };\n } else if (options.camera != null) {\n return { type: 'camera', data: options.camera };\n } else if (options.itemId != null) {\n return { type: 'internal', data: options.itemId };\n } else if (options.itemSuppliedId != null) {\n return { type: 'supplied', data: options.itemSuppliedId };\n } else if (options.sceneItemQueryExpression != null) {\n return {\n type: 'scene-item-query',\n data: options.sceneItemQueryExpression,\n };\n } else {\n throw new Error('Fly to must specify at least one option.');\n }\n }\n\n protected computeClippingPlanes(\n camera: FrameCamera.FrameCamera\n ): ClippingPlanes.ClippingPlanes {\n return ClippingPlanes.fromBoundingBoxAndLookAtCamera(\n this.boundingBox,\n camera\n );\n }\n\n /**\n * Repositions the camera by rotating its current position around an axis\n * defined at a specific world point.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n *\n * viewer.addEventListener('tap', async (event) => {\n * const scene = await viewer.scene();\n * const raycaster = scene.raycaster();\n *\n * const [hit] = await raycaster.hitItems(event.detail.position);\n *\n * if (hit != null) {\n * const camera = scene.camera();\n *\n * // Using the current `up` vector of the camera, rotate 45 degrees\n * // about the hit position with an animation of 1 second\n * await camera.rotateAroundAxisAtPoint(\n * Angle.toRadians(45),\n * hit.hitPoint,\n * camera.up,\n * ).render({ animation: { milliseconds: 1000 } });\n * }\n * });\n * ```\n *\n * @param angleInRadians The angle, in radians, to rotate.\n * @param point The point in world space to place the axis at.\n * @param axis A normalized vector to rotate around.\n */\n public abstract rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera;\n\n public abstract get position(): Vector3.Vector3;\n public abstract get lookAt(): Vector3.Vector3;\n public abstract get up(): Vector3.Vector3;\n public abstract get near(): number;\n public abstract get far(): number;\n public abstract get aspectRatio(): number;\n public abstract get viewVector(): Vector3.Vector3;\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public abstract moveBy(delta: Vector3.Vector3): Camera;\n\n /**\n * Updates the `position`, `lookAt` and/or `up` vectors of the camera. Each\n * vector can be omitted in the payload, and the resulting camera will keep\n * the previous `position`, `lookAt`, or `up` vectors.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector(\"vertex-viewer\");\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Update the camera to place it at the origin\n * await camera\n * .update({\n * position: {\n * x: 0,\n * y: 0,\n * z: 0,\n * },\n * })\n * .render({ animation: { milliseconds: 1000 } });\n *\n * // Update the camera to look at the origin\n * await camera\n * .update({\n * lookAt: {\n * x: 0,\n * y: 0,\n * z: 0,\n * },\n * })\n * .render({ animation: { milliseconds: 1000 } });\n * ```\n *\n * @param camera The values to update the camera to.\n */\n public abstract update(camera: Partial<FrameCamera.FrameCamera>): Camera;\n\n /**\n * Returns a `FrameCameraBase` representation.\n */\n public abstract toFrameCamera(): FrameCameraBase;\n\n protected abstract updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): Camera;\n}\n\nexport class PerspectiveCamera\n extends Camera\n implements FrameCamera.PerspectiveFrameCamera\n{\n public constructor(\n stream: StreamApi,\n aspect: number,\n private perspectiveData: FrameCamera.PerspectiveFrameCamera,\n boundingBox: BoundingBox.BoundingBox,\n decodeFrame: FrameDecoder,\n flyToOptions?: FlyTo.FlyToOptions\n ) {\n super(\n stream,\n aspect,\n perspectiveData,\n boundingBox,\n decodeFrame,\n flyToOptions\n );\n }\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public moveBy(delta: Vector3.Vector3): Camera {\n return this.update({\n position: Vector3.add(this.position, delta),\n lookAt: Vector3.add(this.lookAt, delta),\n });\n }\n\n public rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera {\n return this.update({\n position: Vector3.rotateAboutAxis(\n angleInRadians,\n this.position,\n axis,\n point\n ),\n lookAt: Vector3.rotateAboutAxis(angleInRadians, this.lookAt, axis, point),\n up: Vector3.rotateAboutAxis(\n angleInRadians,\n this.up,\n axis,\n Vector3.origin()\n ),\n });\n }\n\n public update(camera: Partial<FrameCamera.PerspectiveFrameCamera>): Camera {\n const fovY = camera.fovY ?? this.fovY;\n return new PerspectiveCamera(\n this.stream,\n this.aspect,\n { ...this.perspectiveData, ...camera, fovY },\n this.boundingBox,\n this.decodeFrame,\n this.flyToOptions\n );\n }\n\n public toFrameCamera(): FramePerspectiveCamera {\n return new FramePerspectiveCamera(\n this.position,\n this.lookAt,\n this.up,\n this.near,\n this.far,\n this.aspectRatio,\n this.fovY ?? 45\n );\n }\n\n public get viewVector(): Vector3.Vector3 {\n return Vector3.subtract(this.lookAt, this.position);\n }\n\n /**\n * The position vector for the camera, in world space coordinates.\n */\n public get position(): Vector3.Vector3 {\n return { ...this.perspectiveData.position };\n }\n\n /**\n * A normalized vector representing the up direction.\n */\n public get up(): Vector3.Vector3 {\n return { ...this.perspectiveData.up };\n }\n\n /**\n * A vector, in world space coordinates, of where the camera is pointed at.\n */\n public get lookAt(): Vector3.Vector3 {\n return { ...this.perspectiveData.lookAt };\n }\n\n /**\n * The camera's field of view.\n */\n public get fovY(): number | undefined {\n return this.perspectiveData.fovY;\n }\n\n /**\n * The aspect ratio of the camera.\n */\n public get aspectRatio(): number {\n return this.aspect;\n }\n\n /**\n * The camera's near clipping plane.\n */\n public get near(): number {\n const { near } = this.computeClippingPlanes(this.perspectiveData);\n return near;\n }\n\n /**\n * The camera's far clipping plane.\n */\n public get far(): number {\n const { far } = this.computeClippingPlanes(this.perspectiveData);\n return far;\n }\n\n protected updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): PerspectiveCamera {\n return new PerspectiveCamera(\n this.stream,\n this.aspect,\n this.perspectiveData,\n this.boundingBox,\n this.decodeFrame,\n flyToOptions\n );\n }\n}\n\nexport class OrthographicCamera\n extends Camera\n implements FrameCamera.OrthographicFrameCamera\n{\n public constructor(\n stream: StreamApi,\n aspect: number,\n private orthographicData: FrameCamera.OrthographicFrameCamera,\n boundingBox: BoundingBox.BoundingBox,\n decodeFrame: FrameDecoder,\n flyToOptions?: FlyTo.FlyToOptions\n ) {\n super(\n stream,\n aspect,\n orthographicData,\n boundingBox,\n decodeFrame,\n flyToOptions\n );\n }\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public moveBy(delta: Vector3.Vector3): Camera {\n // The rotation point should match the lookAt point when panning\n const updatedPoint = Vector3.add(this.lookAt, delta);\n return this.update({\n lookAt: updatedPoint,\n rotationPoint: updatedPoint,\n });\n }\n\n public rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera {\n const updatedLookAt = Vector3.rotateAboutAxis(\n angleInRadians,\n this.lookAt,\n axis,\n point\n );\n const updatedPosition = Vector3.rotateAboutAxis(\n angleInRadians,\n this.position,\n axis,\n point\n );\n const viewVector = constrainViewVector(\n Vector3.subtract(updatedLookAt, updatedPosition),\n BoundingSphere.create(this.boundingBox)\n );\n\n return this.update({\n viewVector: viewVector,\n lookAt: updatedLookAt,\n up: Vector3.rotateAboutAxis(\n angleInRadians,\n this.up,\n axis,\n Vector3.origin()\n ),\n });\n }\n\n public update(camera: Partial<FrameCamera.FrameCamera>): Camera {\n return new OrthographicCamera(\n this.stream,\n this.aspect,\n { ...this.orthographicData, ...camera },\n this.boundingBox,\n this.decodeFrame,\n this.flyToOptions\n );\n }\n\n public toFrameCamera(): FrameOrthographicCamera {\n const boundingSphere = BoundingSphere.create(this.boundingBox);\n const viewVector = constrainViewVector(this.viewVector, boundingSphere);\n const lookAt = updateLookAtRelativeToBoundingBoxCenter(\n this.lookAt,\n viewVector,\n boundingSphere.center\n );\n\n return new FrameOrthographicCamera(\n viewVector,\n lookAt,\n this.up,\n this.near,\n this.far,\n this.aspectRatio,\n this.fovHeight,\n this.rotationPoint\n );\n }\n\n public get viewVector(): Vector3.Vector3 {\n return { ...this.orthographicData.viewVector };\n }\n\n public get position(): Vector3.Vector3 {\n return Vector3.add(this.lookAt, Vector3.negate(this.viewVector));\n }\n\n /**\n * A vector, in world space coordinates, of where the camera should be rotated around.\n * Most interactions (like pan and zoom) will update lookAt and rotationPoint to be the same point.\n * However, rotation interactions will only update lookAt and not rotationPoint.\n */\n public get rotationPoint(): Vector3.Vector3 | undefined {\n const rotationPoint = this.orthographicData.rotationPoint;\n if (rotationPoint != null) {\n return rotationPoint;\n } else {\n return undefined;\n }\n }\n\n /**\n * A normalized vector representing the up direction.\n */\n public get up(): Vector3.Vector3 {\n return { ...this.orthographicData.up };\n }\n\n /**\n * A vector, in world space coordinates, of where the camera is pointed at.\n */\n public get lookAt(): Vector3.Vector3 {\n return { ...this.orthographicData.lookAt };\n }\n\n /**\n * The camera's field of view.\n */\n public get fovHeight(): number {\n return this.orthographicData.fovHeight;\n }\n\n /**\n * The aspect ratio of the camera.\n */\n public get aspectRatio(): number {\n return this.aspect;\n }\n\n /**\n * The camera's near clipping plane.\n */\n public get near(): number {\n const { near } = this.computeClippingPlanes(this.orthographicData);\n return near;\n }\n\n /**\n * The camera's far clipping plane.\n */\n public get far(): number {\n const { far } = this.computeClippingPlanes(this.orthographicData);\n return far;\n }\n\n protected updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): OrthographicCamera {\n return new OrthographicCamera(\n this.stream,\n this.aspect,\n this.orthographicData,\n this.boundingBox,\n this.decodeFrame,\n flyToOptions\n );\n }\n}\n"]}
|
|
@@ -200,7 +200,7 @@ export class TeleportInteractionHandler {
|
|
|
200
200
|
renderConfiguration() {
|
|
201
201
|
return this.animationConfiguration != null
|
|
202
202
|
? { animation: { milliseconds: this.animationConfiguration.durationMs } }
|
|
203
|
-
:
|
|
203
|
+
: {};
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
//# sourceMappingURL=interactions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../src/lib/teleportation/interactions.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundingBox, Plane, Point, Ray, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport {\n CameraTransform,\n InteractionApi,\n InteractionHandler,\n} from '../interactions';\nimport { Camera, CameraRenderOptions } from '../scenes';\nimport { ViewerTeleportMode, WalkModeModel } from '../walk-mode/model';\n\nexport interface AnimationConfiguration {\n durationMs: number;\n}\n\nexport class TeleportInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private element?: HTMLElement;\n\n private rectObserver = new ElementRectObserver();\n\n private downPosition?: Point.Point;\n private downButtons?: number;\n\n private enabledChangeDisposable?: Disposable;\n private teleportModeChangeDisposable?: Disposable;\n private cursorDisposable?: Disposable;\n\n public constructor(\n private model: WalkModeModel,\n private animationConfiguration?: AnimationConfiguration\n ) {\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.handleTeleportModeChange = this.handleTeleportModeChange.bind(this);\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n\n this.rectObserver.disconnect();\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public setAnimations(config?: AnimationConfiguration): void {\n this.animationConfiguration = config;\n }\n\n public enable(): void {\n this.disable();\n\n this.teleportModeChangeDisposable = this.model.onTeleportModeChange(\n this.handleTeleportModeChange\n );\n this.element?.addEventListener('pointerdown', this.handlePointerDown);\n\n this.handleTeleportModeChange(this.model.getTeleportMode());\n }\n\n public disable(): void {\n this.teleportModeChangeDisposable?.dispose();\n this.cursorDisposable?.dispose();\n\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n }\n\n private async handlePointerDown(event: PointerEvent): Promise<void> {\n this.downPosition = getMouseClientPosition(event, this.rectObserver.rect);\n this.downButtons = event.buttons;\n\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private async handlePointerUp(event: PointerEvent): Promise<void> {\n const mode = this.model.getTeleportMode();\n const threshold = this.api?.pixelThreshold() ?? 2;\n const point = getMouseClientPosition(event, this.rectObserver.rect);\n const isRightClick = this.downButtons === 2;\n const hasModifier =\n event.shiftKey || event.altKey || event.metaKey || event.ctrlKey;\n\n if (\n mode != null &&\n this.downPosition != null &&\n Point.distance(this.downPosition, point) <= threshold &&\n !isRightClick &&\n !hasModifier\n ) {\n switch (mode) {\n case 'teleport':\n return this.teleportToHit(point);\n case 'teleport-toward':\n return this.teleportTowardHit(point);\n case 'teleport-and-align':\n return this.teleportAndAlign(point);\n }\n }\n\n this.downPosition = undefined;\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n private async beginInteraction(): Promise<void> {\n if (!this.api?.isInteracting()) {\n await this.api?.beginInteraction();\n }\n }\n\n private async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n }\n\n private async teleportTowardHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n const mouseRay = this.api?.getRayFromPoint(point);\n\n if (mouseRay != null) {\n const { teleportDistancePercentage, teleportCollisionDistance } =\n this.model.getConfiguration();\n const teleportDistanceScalar = teleportDistancePercentage / 100;\n\n return this.performInteraction(({ camera, boundingBox }) => {\n const stepDistance =\n Math.max(...Vector3.toArray(BoundingBox.lengths(boundingBox))) *\n teleportDistanceScalar;\n\n const positionPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position\n );\n const projectedWorldPoint = Plane.projectPoint(\n positionPlane,\n worldPoint ?? camera.position\n );\n const distanceToWorldPoint = Vector3.distance(\n camera.position,\n projectedWorldPoint\n );\n\n if (\n distanceToWorldPoint < stepDistance &&\n distanceToWorldPoint > teleportCollisionDistance * 1.1\n ) {\n const mouseRayAtWorldPoint = Ray.create({\n ...mouseRay,\n origin: projectedWorldPoint,\n });\n const nextPosition = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRayAtWorldPoint, -teleportCollisionDistance)\n );\n\n return camera.update({\n position: nextPosition,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(nextPosition, camera.position)\n ),\n });\n } else {\n const projectedNextStep = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRay, stepDistance)\n );\n\n return camera.update({\n position: projectedNextStep,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(projectedNextStep, camera.position)\n ),\n });\n }\n });\n }\n }\n\n private async teleportToHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.getWorldPointWithFallback(point);\n\n if (worldPoint != null) {\n return this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const cameraPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position\n );\n const projectedHitPosition = Plane.projectPoint(\n cameraPlane,\n worldPoint\n );\n\n const rayToHitPosition = Ray.create({\n origin: camera.position,\n direction: Vector3.normalize(\n Vector3.subtract(projectedHitPosition, camera.position)\n ),\n });\n const distanceToHitPosition = Vector3.distance(\n camera.position,\n projectedHitPosition\n );\n const distanceToLookAt = Vector3.distance(\n camera.position,\n camera.lookAt\n );\n\n const newPosition = Ray.at(\n rayToHitPosition,\n distanceToHitPosition - shortestBoundingBoxLength * heightScalar\n );\n const newPositionViewVectorRay = Ray.create({\n origin: newPosition,\n direction: Vector3.normalize(camera.viewVector),\n });\n\n return camera.update({\n position: newPosition,\n lookAt: Ray.at(newPositionViewVectorRay, distanceToLookAt),\n });\n });\n }\n }\n\n private async teleportAndAlign(point: Point.Point): Promise<void> {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n if (hit?.hitNormal != null && hit?.hitPoint) {\n await this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const upRay = Ray.create({\n origin: hit.hitPoint as Vector3.Vector3,\n direction: hit.hitNormal as Vector3.Vector3,\n });\n\n return camera.alignTo(\n Ray.at(upRay, shortestBoundingBoxLength * heightScalar),\n hit.hitNormal as Vector3.Vector3\n );\n });\n }\n }\n\n private async performInteraction(fn: CameraTransform<Camera>): Promise<void> {\n await this.beginInteraction();\n await this.api?.transformCamera(fn, this.renderConfiguration());\n await this.endInteraction();\n }\n\n private async getWorldPointWithFallback(\n point: Point.Point\n ): Promise<Vector3.Vector3 | undefined> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n\n if (worldPoint == null) {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n return hit?.hitPoint != null\n ? (hit.hitPoint as Vector3.Vector3)\n : worldPoint;\n }\n return worldPoint;\n }\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private handleTeleportModeChange(mode?: ViewerTeleportMode): void {\n this.cursorDisposable?.dispose();\n\n if (mode != null) {\n this.cursorDisposable = this.api?.addCursor('crosshair');\n }\n }\n\n private shortestLength(boundingBox: BoundingBox.BoundingBox): number {\n return Math.min(...Vector3.toArray(BoundingBox.lengths(boundingBox)));\n }\n\n private renderConfiguration(): CameraRenderOptions | undefined {\n return this.animationConfiguration != null\n ? { animation: { milliseconds: this.animationConfiguration.durationMs } }\n : undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../src/lib/teleportation/interactions.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundingBox, Plane, Point, Ray, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport {\n CameraTransform,\n InteractionApi,\n InteractionHandler,\n} from '../interactions';\nimport { Camera, CameraRenderOptions } from '../scenes';\nimport { ViewerTeleportMode, WalkModeModel } from '../walk-mode/model';\n\nexport interface AnimationConfiguration {\n durationMs: number;\n}\n\nexport class TeleportInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private element?: HTMLElement;\n\n private rectObserver = new ElementRectObserver();\n\n private downPosition?: Point.Point;\n private downButtons?: number;\n\n private enabledChangeDisposable?: Disposable;\n private teleportModeChangeDisposable?: Disposable;\n private cursorDisposable?: Disposable;\n\n public constructor(\n private model: WalkModeModel,\n private animationConfiguration?: AnimationConfiguration\n ) {\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.handleTeleportModeChange = this.handleTeleportModeChange.bind(this);\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n\n this.rectObserver.disconnect();\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public setAnimations(config?: AnimationConfiguration): void {\n this.animationConfiguration = config;\n }\n\n public enable(): void {\n this.disable();\n\n this.teleportModeChangeDisposable = this.model.onTeleportModeChange(\n this.handleTeleportModeChange\n );\n this.element?.addEventListener('pointerdown', this.handlePointerDown);\n\n this.handleTeleportModeChange(this.model.getTeleportMode());\n }\n\n public disable(): void {\n this.teleportModeChangeDisposable?.dispose();\n this.cursorDisposable?.dispose();\n\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n }\n\n private async handlePointerDown(event: PointerEvent): Promise<void> {\n this.downPosition = getMouseClientPosition(event, this.rectObserver.rect);\n this.downButtons = event.buttons;\n\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private async handlePointerUp(event: PointerEvent): Promise<void> {\n const mode = this.model.getTeleportMode();\n const threshold = this.api?.pixelThreshold() ?? 2;\n const point = getMouseClientPosition(event, this.rectObserver.rect);\n const isRightClick = this.downButtons === 2;\n const hasModifier =\n event.shiftKey || event.altKey || event.metaKey || event.ctrlKey;\n\n if (\n mode != null &&\n this.downPosition != null &&\n Point.distance(this.downPosition, point) <= threshold &&\n !isRightClick &&\n !hasModifier\n ) {\n switch (mode) {\n case 'teleport':\n return this.teleportToHit(point);\n case 'teleport-toward':\n return this.teleportTowardHit(point);\n case 'teleport-and-align':\n return this.teleportAndAlign(point);\n }\n }\n\n this.downPosition = undefined;\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n private async beginInteraction(): Promise<void> {\n if (!this.api?.isInteracting()) {\n await this.api?.beginInteraction();\n }\n }\n\n private async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n }\n\n private async teleportTowardHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n const mouseRay = this.api?.getRayFromPoint(point);\n\n if (mouseRay != null) {\n const { teleportDistancePercentage, teleportCollisionDistance } =\n this.model.getConfiguration();\n const teleportDistanceScalar = teleportDistancePercentage / 100;\n\n return this.performInteraction(({ camera, boundingBox }) => {\n const stepDistance =\n Math.max(...Vector3.toArray(BoundingBox.lengths(boundingBox))) *\n teleportDistanceScalar;\n\n const positionPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position\n );\n const projectedWorldPoint = Plane.projectPoint(\n positionPlane,\n worldPoint ?? camera.position\n );\n const distanceToWorldPoint = Vector3.distance(\n camera.position,\n projectedWorldPoint\n );\n\n if (\n distanceToWorldPoint < stepDistance &&\n distanceToWorldPoint > teleportCollisionDistance * 1.1\n ) {\n const mouseRayAtWorldPoint = Ray.create({\n ...mouseRay,\n origin: projectedWorldPoint,\n });\n const nextPosition = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRayAtWorldPoint, -teleportCollisionDistance)\n );\n\n return camera.update({\n position: nextPosition,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(nextPosition, camera.position)\n ),\n });\n } else {\n const projectedNextStep = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRay, stepDistance)\n );\n\n return camera.update({\n position: projectedNextStep,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(projectedNextStep, camera.position)\n ),\n });\n }\n });\n }\n }\n\n private async teleportToHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.getWorldPointWithFallback(point);\n\n if (worldPoint != null) {\n return this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const cameraPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position\n );\n const projectedHitPosition = Plane.projectPoint(\n cameraPlane,\n worldPoint\n );\n\n const rayToHitPosition = Ray.create({\n origin: camera.position,\n direction: Vector3.normalize(\n Vector3.subtract(projectedHitPosition, camera.position)\n ),\n });\n const distanceToHitPosition = Vector3.distance(\n camera.position,\n projectedHitPosition\n );\n const distanceToLookAt = Vector3.distance(\n camera.position,\n camera.lookAt\n );\n\n const newPosition = Ray.at(\n rayToHitPosition,\n distanceToHitPosition - shortestBoundingBoxLength * heightScalar\n );\n const newPositionViewVectorRay = Ray.create({\n origin: newPosition,\n direction: Vector3.normalize(camera.viewVector),\n });\n\n return camera.update({\n position: newPosition,\n lookAt: Ray.at(newPositionViewVectorRay, distanceToLookAt),\n });\n });\n }\n }\n\n private async teleportAndAlign(point: Point.Point): Promise<void> {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n if (hit?.hitNormal != null && hit?.hitPoint) {\n await this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const upRay = Ray.create({\n origin: hit.hitPoint as Vector3.Vector3,\n direction: hit.hitNormal as Vector3.Vector3,\n });\n\n return camera.alignTo(\n Ray.at(upRay, shortestBoundingBoxLength * heightScalar),\n hit.hitNormal as Vector3.Vector3\n );\n });\n }\n }\n\n private async performInteraction(fn: CameraTransform<Camera>): Promise<void> {\n await this.beginInteraction();\n await this.api?.transformCamera(fn, this.renderConfiguration());\n await this.endInteraction();\n }\n\n private async getWorldPointWithFallback(\n point: Point.Point\n ): Promise<Vector3.Vector3 | undefined> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n\n if (worldPoint == null) {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n return hit?.hitPoint != null\n ? (hit.hitPoint as Vector3.Vector3)\n : worldPoint;\n }\n return worldPoint;\n }\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private handleTeleportModeChange(mode?: ViewerTeleportMode): void {\n this.cursorDisposable?.dispose();\n\n if (mode != null) {\n this.cursorDisposable = this.api?.addCursor('crosshair');\n }\n }\n\n private shortestLength(boundingBox: BoundingBox.BoundingBox): number {\n return Math.min(...Vector3.toArray(BoundingBox.lengths(boundingBox)));\n }\n\n private renderConfiguration(): CameraRenderOptions {\n return this.animationConfiguration != null\n ? { animation: { milliseconds: this.animationConfiguration.durationMs } }\n : {};\n }\n}\n"]}
|
package/dist/components/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{g as o}from"./p-Bb32XUUS.js";export{a as getAssetPath,r as render,s as setAssetPath,b as setNonce,c as setPlatformOptions}from"./p-Bb32XUUS.js";export{C as Camera,c as ColorMaterial,a as CrossSectioner,I as ItemOperationBuilder,l as LoadableResource,M as ModelViewController,P as PmiAnnotationOperationsBuilder,b as PmiAnnotationsQueryExecutor,k as PmiController,R as Raycaster,d as RootQuery,S as Scene,e as SceneElementQueryExecutor,f as SceneElementsOperationExecutor,g as SceneItemOperationsBuilder,h as SceneItemQueryExecutor,i as SceneItemsOperationExecutor,s as SceneViewStateIdentifier,j as SynchronizedClock}from"./p-
|
|
4
|
+
import{g as o}from"./p-Bb32XUUS.js";export{a as getAssetPath,r as render,s as setAssetPath,b as setNonce,c as setPlatformOptions}from"./p-Bb32XUUS.js";export{C as Camera,c as ColorMaterial,a as CrossSectioner,I as ItemOperationBuilder,l as LoadableResource,M as ModelViewController,P as PmiAnnotationOperationsBuilder,b as PmiAnnotationsQueryExecutor,k as PmiController,R as Raycaster,d as RootQuery,S as Scene,e as SceneElementQueryExecutor,f as SceneElementsOperationExecutor,g as SceneItemOperationsBuilder,h as SceneItemQueryExecutor,i as SceneItemsOperationExecutor,s as SceneViewStateIdentifier,j as SynchronizedClock}from"./p-CAugdB_8.js";export{S as SceneTreeController}from"./p-Dbz9yUqC.js";export{f as fromNodeProto,i as isLoadedRow}from"./p-CiSHWNC4.js";export{S as SCENE_ITEM_NAME_METADATA_KEY}from"./p-BZwvQkyb.js";export{C as CursorManager,b as boxQueryCursor,l as labelPinCursor,m as measurementCursor,a as measurementWithArrowCursor,p as pinCursor}from"./p-B-ToCp8-.js";export{M as MeasurementController,a as MeasurementEntity}from"./p-CZCXdo3t.js";export{M as MeasurementModel}from"./p-COlcifvm.js";export{M as MeasurementOverlayManager}from"./p-CkjXRDNL.js";export{m as makeMinimumDistanceResult}from"./p-Yfi0i5Kj.js";import{v as n,q as u,m as x}from"./p-DDQcM-So.js";export{T as TransformController}from"./p-D33gVA2W.js";export{f as flattenPointArray,a as toDegreesTransform,e as toLocalTransform,b as toMatrix,t as toRadiansTransform,c as toTransform,d as toWorldTransform}from"./p-CXTH3zrN.js";export{A as AngleUnits,g as AreaUnits,c as CrossSectioning,D as DistanceUnits,E as EntityType,F as FrameCameraBase,O as Orientation,a as ReceivedFrame,b as ReceivedFrameImage,d as ReceivedFrameScene,e as ReceivedOrthographicCamera,f as ReceivedPerspectiveCamera,S as StandardView}from"./p-B9R0QWr4.js";export{A as ArrowMarkup,C as CircleMarkup,F as FreeformMarkup}from"./p-DqhOxx7Z.js";export{V as Viewport}from"./p-BHAaIoH5.js";export{V as VolumeIntersectionQueryController,a as VolumeIntersectionQueryModel}from"./p-DZI8pnGz.js";const y=.9999;function v(e){const r=n.create(0,e.z,-e.y);const a=n.create(-e.z,0,e.x);const s=n.magnitudeSquared(r)>n.magnitudeSquared(a)?r:a;return n.normalize(n.cross(e,s))}function B(e,r){const a=n.dot(e,r);if(a>y){const r=v(e);const a=u.fromAxisAngle(r,Math.PI);return x.makeRotation(a)}else if(a<=-y){return x.makeIdentity()}else{const a=n.angleTo(r,e);const s=n.normalize(n.cross(e,r));return x.makeRotation(u.fromAxisAngle(s,a+Math.PI))}}function Q(e,r,a,s){const o=B(e,a);const t=x.makeTranslation(s);return x.multiply(x.multiply(t,o),x.makeTranslation(n.negate(r)))}var _=Object.freeze({__proto__:null,ALMOST_ONE:y,calculateOrthogonalCoordinate:v,computeRotationMatrix:B,computeTransformationDelta:Q});o();export{_ as TransformationDelta};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{E as i,b as t}from"./p-CHdoymO5.js";import{p as s}from"./p-DDQcM-So.js";import{g as h}from"./p-bal2RLiw.js";const e=16;const n=1.2;class
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{E as i,b as t}from"./p-CHdoymO5.js";import{p as s}from"./p-DDQcM-So.js";import{g as h}from"./p-bal2RLiw.js";const e=16;const n=1.2;class o{constructor(t,s,h,e,n,o,l,a,r,d){this.downEvent=t;this.upEvent=s;this.moveEvent=h;this.rotateInteraction=e;this.rotatePointInteraction=n;this.zoomInteraction=o;this.panInteraction=l;this.twistInteraction=a;this.pivotInteraction=r;this.getConfig=d;this.isDragging=false;this.keyboardControls=false;this.disableIndividualInteractions=false;this.primaryInteractionTypeChange=new i;this.primaryInteraction=e;this.handleDownEvent=this.handleDownEvent.bind(this);this.handleMouseWheel=this.handleMouseWheel.bind(this);this.handleWindowMove=this.handleWindowMove.bind(this);this.handleWindowUp=this.handleWindowUp.bind(this);this.handleDoubleClick=this.handleDoubleClick.bind(this)}initialize(i,t){this.element=i;this.interactionApi=t;i.addEventListener(this.downEvent,this.handleDownEvent);i.addEventListener("mousedown",this.handleDoubleClick);i.addEventListener("wheel",this.handleMouseWheel,{passive:false})}dispose(){var i,t,s;(i=this.element)===null||i===void 0?void 0:i.removeEventListener(this.downEvent,this.handleDownEvent);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("mousedown",this.handleDoubleClick);(s=this.element)===null||s===void 0?void 0:s.removeEventListener("wheel",this.handleMouseWheel);this.element=undefined}onPrimaryInteractionTypeChange(i){return this.primaryInteractionTypeChange.on(i)}setCurrentInteractionType(i){var t;switch(i){case"rotate":this.currentInteraction=this.rotateInteraction;break;case"zoom":this.currentInteraction=this.zoomInteraction;break;case"pan":this.currentInteraction=this.panInteraction;break;case"twist":this.currentInteraction=this.twistInteraction;break;case"rotate-point":this.currentInteraction=this.rotatePointInteraction;break;case"pivot":this.currentInteraction=this.pivotInteraction;break;default:this.currentInteraction=undefined}if(this.draggingInteraction){const i=this.draggingInteraction.getPosition();this.draggingInteraction=this.currentInteraction||this.primaryInteraction;(t=this.interactionApi)===null||t===void 0?void 0:t.resetLastAngle();this.draggingInteraction.setPosition(i)}}getPrimaryInteractionType(){return this.primaryInteraction.getType()}getCurrentInteractionType(){return(this.currentInteraction||this.primaryInteraction).getType()}setPrimaryInteractionType(i){switch(i){case"rotate":this.primaryInteraction=this.rotateInteraction;this.lastPrimaryRotateInteraction=this.rotateInteraction;break;case"rotate-point":this.primaryInteraction=this.rotatePointInteraction;this.lastPrimaryRotateInteraction=this.rotatePointInteraction;break;case"zoom":this.primaryInteraction=this.zoomInteraction;break;case"pan":this.primaryInteraction=this.panInteraction;break;case"pivot":this.primaryInteraction=this.pivotInteraction;break}this.primaryInteractionTypeChange.emit()}setDefaultKeyboardControls(i){this.keyboardControls=i}handleDownEvent(i){i.preventDefault();this.interactionTimer=window.setTimeout((()=>{this.downPosition=s.create(i.screenX,i.screenY);this.downPositionCanvas=this.getCanvasPosition(i);this.interactionTimer=undefined;if(this.lastMoveEvent!=null){this.handleWindowMove(this.lastMoveEvent)}}),this.getConfig().interactions.interactionDelay);window.addEventListener(this.moveEvent,this.handleWindowMove);window.addEventListener(this.upEvent,this.handleWindowUp)}handleWindowMove(i){if(this.interactionTimer==null){if(this.disableIndividualInteractions){return}const t=s.create(i.screenX,i.screenY);const h=this.interactionApi!=null?this.interactionApi.pixelThreshold(this.isTouch(i)):2;if(this.downPosition!=null&&s.distance(t,this.downPosition)>=h&&!this.isDragging){this.beginDrag(i);this.isDragging=true}if(this.isDragging){this.drag(i)}}this.lastMoveEvent=i}async handleWindowUp(i){if(this.isDragging){this.endDrag(i);this.isDragging=false}if(this.interactionTimer!=null){window.clearTimeout(this.interactionTimer);this.interactionTimer=undefined}window.removeEventListener(this.moveEvent,this.handleWindowMove);window.removeEventListener(this.upEvent,this.handleWindowUp);this.lastMoveEvent=undefined}async handleDoubleClick(i){if(i.detail===2&&i.buttons===4&&this.interactionApi!=null){await this.interactionApi.viewAll()}}beginDrag(i){var t;if(this.keyboardControls&&i.metaKey&&i.shiftKey){this.currentInteraction=this.rotatePointInteraction}else if(this.keyboardControls&&i.shiftKey&&i.altKey){this.currentInteraction=this.twistInteraction}else if(this.keyboardControls&&i.shiftKey){this.currentInteraction=this.zoomInteraction}else if(this.keyboardControls&&(i.metaKey||i.ctrlKey)){this.currentInteraction=this.panInteraction}else if(this.keyboardControls&&i.altKey){this.currentInteraction=this.rotateInteraction}if(i.buttons===1){this.draggingInteraction=this.currentInteraction||this.primaryInteraction}else if(i.buttons===2){this.draggingInteraction=this.panInteraction}else if(i.buttons===4){this.draggingInteraction=(t=this.lastPrimaryRotateInteraction)!==null&&t!==void 0?t:this.rotateInteraction}if(this.draggingInteraction!=null&&this.interactionApi!=null&&this.element!=null){this.zoomInteraction.endDrag(i,this.interactionApi);this.draggingInteraction.beginDrag(i,this.downPositionCanvas||s.create(i.clientX,i.clientY),this.interactionApi,this.element)}}drag(i){if(this.keyboardControls&&i.altKey&&i.shiftKey){this.currentInteraction=this.twistInteraction}else{this.currentInteraction=undefined}this.draggingInteraction=this.currentInteraction||this.draggingInteraction||this.primaryInteraction;if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.drag(i,this.interactionApi)}}endDrag(i){if(this.keyboardControls&&this.currentInteraction===this.twistInteraction){this.currentInteraction=undefined}if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.endDrag(i,this.interactionApi);this.draggingInteraction=undefined}}handleMouseWheel(i){i.preventDefault();if(this.element!=null&&this.interactionApi!=null&&i.buttons!==4){const t=-this.wheelDeltaToPixels(i.deltaY,i.deltaMode)/10;const s=this.element.getBoundingClientRect();const e=h(i,s);const n=Math.abs(i.deltaY);if(n<12){void this.zoomInteraction.zoomToPoint(e,t,this.interactionApi)}else{const i=Math.min(10,Math.ceil(n/12));const s=t/i;for(let t=1;t<=i;t++){const i=t*5;window.setTimeout((()=>{if(this.interactionApi!=null){this.zoomInteraction.zoomToPoint(e,s,this.interactionApi,i)}}),i)}}}}wheelDeltaToPixels(i,t){if(this.bodyStyleCache==null){const i=window.getComputedStyle(document.body);this.bodyStyleCache={fontSize:parseFloat(i.getPropertyValue("fontSize"))||e,lineHeight:parseFloat(i.getPropertyValue("lineHeight"))||n,height:parseFloat(i.getPropertyValue("height"))||window.innerHeight};window.setTimeout((()=>{this.bodyStyleCache=undefined}),4800)}if(t===1){return i*(this.bodyStyleCache.fontSize*this.bodyStyleCache.lineHeight)}else if(t===2){return i*this.bodyStyleCache.height}return i}getCanvasPosition(i){var t;const h=(t=this.element)===null||t===void 0?void 0:t.getBoundingClientRect();const e=h!=null?s.create(h.left,h.top):undefined;return e!=null?s.subtract(s.create(i.clientX,i.clientY),e):undefined}isTouch(i){return window.PointerEvent!=null&&i instanceof PointerEvent?i.pointerType==="touch":false}}class l extends o{constructor(){super(...arguments);this.registeredExternalElements={}}registerAdditionalElement(i){const s=t.create();const h=this.addEventListenersToElement(i);this.registeredExternalElements[s]=h;return h}deregisterAdditionalElementById(i){const t=this.registeredExternalElements[i];t.dispose();this.registeredExternalElements=Object.fromEntries(Object.entries(this.registeredExternalElements).filter((([t])=>t!==i)))}deregisterAllListeners(){Object.keys(this.registeredExternalElements).forEach((i=>this.deregisterAdditionalElementById(i)))}}export{o as B,l as M};
|
|
5
|
+
//# sourceMappingURL=p-3DqRAYgO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_FONT_SIZE","DEFAULT_LINE_HEIGHT","BaseInteractionHandler","constructor","downEvent","upEvent","moveEvent","rotateInteraction","rotatePointInteraction","zoomInteraction","panInteraction","twistInteraction","pivotInteraction","getConfig","this","isDragging","keyboardControls","disableIndividualInteractions","primaryInteractionTypeChange","EventDispatcher","primaryInteraction","handleDownEvent","bind","handleMouseWheel","handleWindowMove","handleWindowUp","handleDoubleClick","initialize","element","api","interactionApi","addEventListener","passive","dispose","_a","removeEventListener","_b","_c","undefined","onPrimaryInteractionTypeChange","listener","on","setCurrentInteractionType","type","currentInteraction","draggingInteraction","point","getPosition","resetLastAngle","setPosition","getPrimaryInteractionType","getType","getCurrentInteractionType","setPrimaryInteractionType","lastPrimaryRotateInteraction","emit","setDefaultKeyboardControls","event","preventDefault","interactionTimer","window","setTimeout","downPosition","Point","create","screenX","screenY","downPositionCanvas","getCanvasPosition","lastMoveEvent","interactions","interactionDelay","position","pixelThreshold","isTouch","distance","beginDrag","drag","endDrag","clearTimeout","detail","buttons","viewAll","metaKey","shiftKey","altKey","ctrlKey","clientX","clientY","delta","wheelDeltaToPixels","deltaY","deltaMode","rect","getBoundingClientRect","getMouseClientPosition","scrollSize","Math","abs","zoomToPoint","divisions","min","ceil","zoomDelta","i","delayMs","bodyStyleCache","bodyStyle","getComputedStyle","document","body","fontSize","parseFloat","getPropertyValue","lineHeight","height","innerHeight","canvasBounds","canvasOffset","left","top","subtract","PointerEvent","pointerType","MultiElementInteractionHandler","registeredExternalElements","registerAdditionalElement","external","id","UUID","disposable","addEventListenersToElement","deregisterAdditionalElementById","externalElement","Object","fromEntries","entries","filter","key","deregisterAllListeners","keys","forEach"],"sources":["src/lib/interactions/baseInteractionHandler.ts","src/lib/interactions/multiElementInteractionHandler.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n | 'rotate'\n | 'zoom'\n | 'pan'\n | 'twist'\n | 'rotate-point'\n | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_LINE_HEIGHT = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n fontSize: number;\n lineHeight: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n this.bodyStyleCache = {\n fontSize:\n parseFloat(bodyStyle.getPropertyValue('fontSize')) ||\n DEFAULT_FONT_SIZE,\n lineHeight:\n parseFloat(bodyStyle.getPropertyValue('lineHeight')) ||\n DEFAULT_LINE_HEIGHT,\n height:\n parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return (\n deltaY * (this.bodyStyleCache.fontSize * this.bodyStyleCache.lineHeight)\n );\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n","import { Disposable, UUID } from '@vertexvis/utils';\n\nimport { BaseInteractionHandler } from './baseInteractionHandler';\n\nexport abstract class MultiElementInteractionHandler extends BaseInteractionHandler {\n protected registeredExternalElements: Record<UUID.UUID, Disposable> = {};\n\n public registerAdditionalElement(external: HTMLElement): Disposable {\n const id = UUID.create();\n const disposable = this.addEventListenersToElement(external);\n\n this.registeredExternalElements[id] = disposable;\n return disposable;\n }\n\n public deregisterAdditionalElementById(id: UUID.UUID): void {\n const externalElement = this.registeredExternalElements[id];\n\n externalElement.dispose();\n\n this.registeredExternalElements = Object.fromEntries(\n Object.entries(this.registeredExternalElements).filter(\n ([key]) => key !== id\n )\n );\n }\n\n protected deregisterAllListeners(): void {\n Object.keys(this.registeredExternalElements).forEach((id) =>\n this.deregisterAdditionalElementById(id)\n );\n }\n\n public abstract addEventListenersToElement(element?: HTMLElement): Disposable;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{h as e,t,p as n,H as s,e as i}from"./p-Bb32XUUS.js";import{m as r,v as o}from"./p-DDQcM-So.js";import{M as l}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{h as e,t,p as n,H as s,e as i}from"./p-Bb32XUUS.js";import{m as r,v as o}from"./p-DDQcM-So.js";import{M as l}from"./p-3DqRAYgO.js";import"./p-B9R0QWr4.js";import{V as a}from"./p-BHAaIoH5.js";function c(e){return e instanceof HTMLElement&&e.nodeName==="VERTEX-VIEWER-DOM-ELEMENT"&&e.matrix!=null}function d(e){return(e instanceof HTMLElement&&e.nodeName==="VERTEX-VIEWER-DOM-GROUP"||e instanceof HTMLElement&&e.dataset.isDomGroupElement!=null)&&e.matrix!=null}const h=(t,n)=>e("div",{class:"root-2d"},n);function u(e,t,n,s,i){const r=v(e,t,s).sort(((e,t)=>e.distanceToCamera-t.distanceToCamera));for(let e=0;e<r.length;e++){const{element:t,worldMatrix:o,worldPosition:l}=r[e];const a=i==null;const c=a||!t.occlusionOff&&(i===null||i===void 0?void 0:i.isOccluded(l,n));const d=a||!t.detachedOff&&(i===null||i===void 0?void 0:i.isDetached(l,n));const h=p(l,s.projectionViewMatrix,n);f(t,h);m(t,e,r.length);u(t,o,n,s,i);t.occluded=c!==null&&c!==void 0?c:false;t.detached=d!==null&&d!==void 0?d:false;t.classList.add("ready")}}function v(e,t,n){const s=[];for(let i=0;i<e.children.length;i++){const l=e.children[i];if(d(l)){const e=r.multiply(t,l.matrix);s.push(...v(l,e,n))}else if(c(l)){const e=r.multiply(t,l.matrix);const i=o.fromMatrixPosition(e);const a=o.distanceSquared(n.position,i);s.push({element:l,worldMatrix:e,worldPosition:i,distanceToCamera:a})}else{s.push(...v(l,t,n))}}return s}function f(e,t){e.style.transform=[`translate(-50%, -50%)`,`translate(${t.x}px, ${t.y}px)`].join(" ")}function m(e,t,n){e.style.zIndex=`${n-t}`}function p(e,t,n){const s=o.transformMatrix(e,t);return n.transformVectorToViewport(s)}const w=({camera:t,viewport:n},s)=>{const i=r.toObject(t.projectionMatrix);const o=t.isOrthographic()?t.far*2/(t.fovHeight*2)*(n.height/2):i.m22*(n.height/2);const l=[`translateZ(${o}px)`,y(t.viewMatrix),`translate(${n.width/2}px, ${n.height/2}px)`].join(" ");return e("div",{class:"root-3d",style:{perspective:`${o}px`}},e("div",{class:"camera",style:{transform:l}},s))};function E(e,t,n,s,i){for(let r=0;r<e.children.length;r++){const o=e.children[r];if(c(o)){x(o,t,n,s,i)}else if(d(o)){g(o,t,n,s,i)}else{E(o,t,n,s,i)}}}function x(e,t,n,s,i){const l=r.multiply(t,e.matrix);const a=o.fromMatrixPosition(l);const c=i==null;const d=c||!e.occlusionOff&&(i===null||i===void 0?void 0:i.isOccluded(a,n));e.occluded=d!==null&&d!==void 0?d:false;const h=c||!e.detachedOff&&(i===null||i===void 0?void 0:i.isDetached(a,n));e.detached=h!==null&&h!==void 0?h:false;e.classList.add("ready");if(e.billboardOff){e.style.transform=M(l)}else{let t=s.viewMatrix;t=r.transpose(t);t=r.position(t,l);t=r.scale(t,e.scale);t[3]=0;t[7]=0;t[11]=0;t[15]=1;e.style.transform=M(t)}E(e,l,n,s,i)}function g(e,t,n,s,i){const o=r.multiply(t,e.matrix);E(e,o,n,s,i)}function y(e){const t=[V(e[0]),V(-e[1]),V(e[2]),V(e[3]),V(e[4]),V(-e[5]),V(e[6]),V(e[7]),V(e[8]),V(-e[9]),V(e[10]),V(e[11]),V(e[12]),V(-e[13]),V(e[14]),V(e[15])].join(", ");return`matrix3d(${t})`}function M(e){const t=[V(e[0]),V(e[1]),V(e[2]),V(e[3]),V(-e[4]),V(-e[5]),V(-e[6]),V(-e[7]),V(e[8]),V(e[9]),V(e[10]),V(e[11]),V(e[12]),V(e[13]),V(e[14]),V(e[15])].join(", ");return[`translate(-50%, -50%)`,`matrix3d(${t})`].join(" ")}function V(e){return Math.abs(e)<1e-10?0:e}const C=()=>`.sc-vertex-viewer-dom-renderer-h{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}.root-3d.sc-vertex-viewer-dom-renderer{width:100%;height:100%;pointer-events:inherit}.camera.sc-vertex-viewer-dom-renderer{transform-style:preserve-3d;pointer-events:inherit;width:100%;height:100%}`;const R=n(class t extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.drawMode="3d";this.propagateEventsToViewer=true;this.viewport=new a(0,0);this.invalidateFrameCounter=0;this.interactionDisposables=[];this.handleViewerFrameDrawn=async()=>{this.updatePropsFromViewer()}}componentWillLoad(){var e;const t=new ResizeObserver((()=>this.handleResize()));t.observe(this.hostEl);const n=new MutationObserver((()=>this.handleChildrenChange()));n.observe(this.hostEl,{childList:true});this.handleViewerChange(this.viewer,undefined);if(((e=this.viewer)===null||e===void 0?void 0:e.frame)!=null){this.handleViewerFrameDrawn()}}render(){if(this.camera!=null){if(this.drawMode==="2d"){return e(i,null,e(h,null,e("slot",null)))}else{return e(i,null,e(w,{camera:this.camera,viewport:this.viewport},e("slot",null)))}}else{return e(i,null)}}componentWillRender(){this.updateElements()}handleViewerChange(e,t){t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.handleViewerFrameDrawn);e===null||e===void 0?void 0:e.addEventListener("frameDrawn",this.handleViewerFrameDrawn);if(this.propagateEventsToViewer&&e!=null){this.handleEventPropagationToViewer(e)}}handlePropertyChange(){this.invalidateFrame()}invalidateFrame(){this.invalidateFrameCounter=this.invalidateFrameCounter+1}handleEventPropagationToViewer(e){this.interactionDisposables.forEach((e=>{e.dispose()}));this.interactionDisposables=[];e.getInteractionHandlers().then((e=>{e.forEach((e=>{if(e instanceof l){const t=e.registerAdditionalElement(this.hostEl);this.interactionDisposables=[...this.interactionDisposables,t]}}))}))}async updateElements(){const{viewport:e,camera:t}=this;const n=r.makeIdentity();if(t!=null){if(this.drawMode==="3d"){E(this.hostEl,n,e,t,this.depthBuffer)}else{u(this.hostEl,n,e,t,this.depthBuffer)}}}handleResize(){const e=this.hostEl.getBoundingClientRect();this.viewport=new a(e.width,e.height)}handleChildrenChange(){this.invalidateFrame()}async updatePropsFromViewer(){const{frame:e}=this.viewer||{};this.depthBuffer=await(e===null||e===void 0?void 0:e.depthBuffer());this.camera=e===null||e===void 0?void 0:e.scene.camera}get hostEl(){return this}static get watchers(){return{viewer:[{handleViewerChange:0}]}}static get style(){return C()}},[262,"vertex-viewer-dom-renderer",{drawMode:[1,"draw-mode"],propagateEventsToViewer:[4,"propagate-events-to-viewer"],viewer:[16],camera:[1040],depthBuffer:[1040],viewport:[32],invalidateFrameCounter:[32],interactionDisposables:[32]},[[0,"propertyChange","handlePropertyChange"]],{viewer:[{handleViewerChange:0}]}]);function T(){if(typeof customElements==="undefined"){return}const e=["vertex-viewer-dom-renderer"];e.forEach((e=>{switch(e){case"vertex-viewer-dom-renderer":if(!customElements.get(t(e))){customElements.define(t(e),R)}break}}))}T();export{R as V,T as d};
|
|
5
|
+
//# sourceMappingURL=p-BCOD9yfw.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{c as e,u as t,b as s,a as n}from"./p-CHdoymO5.js";import{c as i,d as r,e as a}from"./p--8q6LyIm.js";import{u as o,m as u,a as h,p as c,b as l,r as d}from"./p-DRnMrHWY.js";import{s as p,w}from"./p-FRKLa468.js";import{r as v,c as f}from"./p-CjG1fMh1.js";import{v as m,f as y,c as x,m as I,q as g,r as b,p as S,e as B}from"./p-DDQcM-So.js";import{P as R,t as E,Q as A,u as V,e as T,f as q,R as k,T as C}from"./p-B9R0QWr4.js";import{v as P,t as M,L as O}from"./p-BoB09nlv.js";const D={opacity:255,glossiness:4,diffuse:{r:0,g:0,b:0,a:0},ambient:{r:0,g:0,b:0,a:0},specular:{r:0,g:0,b:0,a:0},emissive:{r:0,g:0,b:0,a:0}};const _=(e,t,s,n)=>({...D,opacity:n!==null&&n!==void 0?n:D.opacity,diffuse:{r:e,g:t,b:s,a:0}});const j=(t,s)=>{const n=e.fromHexString(t);return{...D,opacity:s!==null&&s!==void 0?s:D.opacity,diffuse:n!=null?{...n}:{...D.diffuse}}};var F=Object.freeze({__proto__:null,create:_,defaultColor:D,fromHex:j});function U(e){var s;const n=t.parse(e);if(n.scheme!=="urn"||n.path==null){throw new Error("Invalid URN. Expected URN scheme.")}const[r,a,o,...u]=n.path.split(/[:/]/);if(r!=="vertexvis"&&r!=="vertex"){throw new Error("Invalid URN. Expected URN to be vertex namespace")}if(r==="vertexvis"){console.warn("vertexvis namespace is deprecated. Use 'vertex' for the namespace urn instead")}switch(a){case"stream-key":const e=N(n.query);const t=(s=z(u.join("/")))!==null&&s!==void 0?s:e.find((e=>e.type==="scene-view-state"));return{resource:{type:"stream-key",id:o},subResource:t,queries:e.filter((e=>e.type!=="scene-view-state"))};default:throw new i(`Invalid URN. Unknown resource type ${a}`)}}function z(e){if(e!=null){const[t,s]=e.split("/");switch(t){case"scene-view-states":return{type:"scene-view-state",id:s};default:return undefined}}}function N(e){if(e!=null){return e.split("&").map((e=>{const[t,s]=e.split("=");switch(t){case"supplied-id":return{type:"supplied-id",id:s};case"scene-view-state":return{type:"scene-view-state",id:s};default:throw new Error("Invalid URN. Unknown query value type")}}))}else{return[]}}var H=Object.freeze({__proto__:null,fromUrn:U});function L(e){return e.id!=null}function Q(e){return e.suppliedId!=null}var Y=Object.freeze({__proto__:null,isSceneViewStateId:L,isSceneViewStateSuppliedId:Q});class W{constructor(e,t=new Date){this.knownRemoteTime=e;this.knownLocalTime=t}localOffset(){return this.duration(this.knownLocalTime,this.localNow())}localTime(e){const t=typeof e==="number"?new Date(this.knownLocalTime.getTime()+e):e;const s=this.duration(this.knownRemoteTime,t);return this.addDuration(this.knownLocalTime,s)}remoteOffset(e=new Date){return this.duration(this.remoteTime(this.knownLocalTime),this.remoteTime(e))}remoteNow(){return this.remoteTime(this.localNow())}remoteTime(e){const t=typeof e==="number"?new Date(this.knownLocalTime.getTime()+e):e;const s=this.duration(this.knownLocalTime,t);return this.addDuration(this.knownRemoteTime,s)}addDuration(e,t){return new Date(e.getTime()+t)}duration(e,t){return t.getTime()-e.getTime()}localNow(){return new Date(Date.now())}}function G(e){const t=s.toMsbLsb(e);const n=new o.Uuid2l;n.setMsb(t.msb);n.setLsb(t.lsb);return n}class K{constructor(e,t,s,n){this.client=e;this.stream=t;this.jwtProvider=s;this.deviceIdProvider=n}async listByItem(e,{hasAnnotations:t,cursor:s,size:n=50}={}){const i=await v((async i=>{const r=this.deviceIdProvider();const a=await f(this.jwtProvider,r);const o=new p.ListItemModelViewsRequest;const u=G(e);o.setItemId(u);if(t!=null){const e=new w.BoolValue;e.setValue(t);o.setHasAnnotations(e)}const h=new c.Pager;h.setLimit(n);if(s!=null){h.setCursor(s)}o.setPage(h);this.client.listItemModelViews(o,a,i)}));return u(i.toObject())}async load(e,t){const s=h({modelViewId:t,sceneItemId:e});this.stream.updateModelView({itemModelView:s},true)}async unload(){await this.stream.updateModelView({},true)}}class ${constructor(e,t,s){this.client=e;this.jwtProvider=t;this.deviceIdProvider=s}async listAnnotations({modelViewId:e,cursor:t,size:s=50}={}){const n=await v((async n=>{const i=this.deviceIdProvider();const r=await f(this.jwtProvider,i);const a=new p.ListPmiAnnotationsRequest;if(e!=null){const t=G(e);a.setModelViewId(t)}const o=new c.Pager;o.setLimit(s);if(t!=null){o.setCursor(t)}a.setPage(o);this.client.listPmiAnnotations(a,r,n)}));return l(n.toObject())}}const J=1e3*10;class X{constructor(e,t,s,n=J){this.stream=e;this.predicate=t;this.transform=s;this.timeout=n;this.listeners=[];this.handleMessage=this.handleMessage.bind(this)}on(e){this.listeners=[...this.listeners,e];if(this.eventDisposable==null||this.requestDisposable==null){this.addListeners()}}off(e){this.listeners=this.listeners.filter((t=>t!==e));if(this.listeners.length===0){this.removeListeners()}}once(){let e;return n.timeout(this.timeout,new Promise((t=>{e=s=>{t(s);this.off(e)};this.on(e)}))).finally((()=>{this.off(e)}))}handleMessage(e){if(this.predicate(e)){const t=this.transform(e);if(t!=null){this.listeners.forEach((e=>e(t)))}}}addListeners(){this.eventDisposable=this.stream.onEvent(this.handleMessage);this.requestDisposable=this.stream.onRequest(this.handleMessage)}removeListeners(){var e,t;(e=this.eventDisposable)===null||e===void 0?void 0:e.dispose();(t=this.requestDisposable)===null||t===void 0?void 0:t.dispose()}}class Z{constructor(e,t,{animationId:s,correlationId:n},i){this.data=undefined;this.onAnimationCompleted=new X(e,(e=>{var t,n,i;return((i=(n=(t=e.event)===null||t===void 0?void 0:t.animationCompleted)===null||n===void 0?void 0:n.animationId)===null||i===void 0?void 0:i.hex)===s}),(e=>{var t,s,n;return((n=(s=(t=e.event)===null||t===void 0?void 0:t.animationCompleted)===null||s===void 0?void 0:s.animationId)===null||n===void 0?void 0:n.hex)||undefined}),i);this.onFrameReceived=new X(e,(e=>{var t,s,i;return!!((i=(s=(t=e.request)===null||t===void 0?void 0:t.drawFrame)===null||s===void 0?void 0:s.frameCorrelationIds)===null||i===void 0?void 0:i.some((e=>e===n)))}),(e=>{var s;return((s=e.request)===null||s===void 0?void 0:s.drawFrame)!=null?t(e.request.drawFrame):undefined}),i)}}function ee(e){if(typeof e==="string"){return{sceneViewStateId:{hex:e}}}else if(L(e)){return{sceneViewStateId:{hex:e.id}}}else if(Q(e)){return{sceneViewStateSuppliedId:{value:e.suppliedId}}}else{throw new Error("Unable to build scene view state identifier, input must be a string or `SceneViewStateIdentifier`.")}}function te(e,t){switch(e.type){case"and":case"or":return{operand:{itemCollection:{queries:e.expressions.map((e=>({sceneItemQuery:re(e)})))}}};case"not":return{not:{expression:te(e.query,t)}};case"item-id":case"supplied-id":return{operand:{item:{sceneItemQuery:re(e)}}};case"all":return{operand:{root:{}}};case"scene-tree-range":return{operand:{sceneTreeRange:{start:e.range.start,end:e.range.end}}};case"metadata":if(e.removeHiddenItems){return{and:{first:{operand:{metadata:{valueFilter:e.filter,keys:e.keys,exactMatch:e.exactMatch}}},second:{operand:{override:{visibility:{visibilityState:true}}}}}}}else{return{operand:{metadata:{valueFilter:e.filter,keys:e.keys,exactMatch:e.exactMatch}}}}case"all-selected":return{operand:{override:{selection:{}}}};case"all-visible":return{operand:{override:{visibility:{visibilityState:true}}}};case"point":return{operand:{point:{point:e.point,viewport:t.dimensions}}};case"volume-intersection":return{operand:{volume:{frustumByRectangle:{rectangle:e.rectangle},exclusive:e.exclusive,viewport:t.dimensions}}};default:return{}}}function se(e,t){switch(e.type){case"and":const t=e.expressions.length;if(t===1){return se({type:"annotation-id",value:e.expressions[0].value})}else if(t!==2){throw new Error("Incorrect number of query expressions provided.")}return{and:{first:se(e.expressions[0]),second:se(e.expressions[1])}};case"or":const n=e.expressions.length;if(n===1){return se({type:"annotation-id",value:e.expressions[0].value})}else if(n!==2){throw new Error("Incorrect number of query expressions provided.")}return{or:{first:se(e.expressions[0]),second:se(e.expressions[1])}};case"not":return{not:{expression:se(e.query)}};case"annotation-id":const{msb:i,lsb:r}=s.toMsbLsb(e.value);return{operand:{annotation:{id:new P.protobuf.core.Uuid2l({msb:O.fromString(i),lsb:O.fromString(r)})}}};case"all":return{operand:{all:{}}};default:return{}}}function ne(e,t,s){const n=oe(t);const i=te(e,s);return{sceneItemOperation:{queryExpression:i,operationTypes:n}}}function ie(e,t,s){const n=ue(t);const i=se(e);return{pmiAnnotationOperation:{queryExpression:i,operationTypes:n}}}function re(e){switch(e.type){case"item-id":return{id:new P.protobuf.core.Uuid({hex:e.value})};case"supplied-id":return{suppliedId:e.value};default:return{}}}function ae(e,t,s,n){const i={frameCorrelationId:{value:e},animation:s?{duration:M(s.milliseconds)}:undefined,baseCamera:n!=null&&R(n)?E(n):undefined};switch(t.flyTo.type){case"supplied":{return{...i,itemSuppliedId:t.flyTo.data}}case"internal":{return{...i,itemId:new P.protobuf.core.Uuid({hex:t.flyTo.data})}}case"camera":{return{...i,camera:E(t.flyTo.data)}}case"scene-item-query":return{...i,sceneItemQueryExpression:t.flyTo.data};case"bounding-box":{return{...i,boundingBox:{xmin:t.flyTo.data.min.x,xmax:t.flyTo.data.max.x,ymin:t.flyTo.data.min.y,ymax:t.flyTo.data.max.y,zmin:t.flyTo.data.min.z,zmax:t.flyTo.data.max.z}}}default:return{}}}function oe(e){return e.map((e=>{var t,s;switch(e.type){case"change-material":return{changeMaterial:{materialOverride:{colorMaterial:{d:e.material.opacity,ns:e.material.glossiness,ka:e.material.ambient,kd:e.material.diffuse,ks:e.material.specular,ke:e.material.emissive}}}};case"clear-override":return{clearMaterial:{}};case"change-transform":return{changeTransform:{transform:{...e.transform}}};case"clear-transform":return{clearTransform:{cascade:e.cascade}};case"hide":return{changeVisibility:{visible:false}};case"show":return{changeVisibility:{visible:true}};case"select":return{changeSelection:{selected:true}};case"deselect":return{changeSelection:{selected:false}};case"change-phantom":return{changePhantom:{phantom:(t=e.phantomState)!==null&&t!==void 0?t:true}};case"clear-phantom":return{changePhantom:{phantom:false}};case"change-end-item":return{changeEndItem:{endItem:(s=e.endItemState)!==null&&s!==void 0?s:true}};case"clear-end-item":return{changeEndItem:{endItem:false}};case"view-rendition-by-id":return{viewRendition:{id:new P.protobuf.core.Uuid({hex:e.id})}};case"view-rendition-by-supplied-id":return{viewRendition:{suppliedId:e.suppliedId}};case"view-default-rendition":return{viewDefaultRendition:{}};case"clear-rendition":return{clearRendition:{}};case"view-representation":if(e.id==="empty"){return{viewRepresentation:{predefinedId:d.RepresentationPredefinedId.REPRESENTATION_PREDEFINED_ID_EMPTY}}}else if(e.id==="entire-part"){return{viewRepresentation:{predefinedId:d.RepresentationPredefinedId.REPRESENTATION_PREDEFINED_ID_ENTIRE_PART}}}else{return{viewRepresentation:{id:new P.protobuf.core.Uuid({hex:e.id})}}}case"clear-representation":return{clearRepresentation:{}};default:return{}}}))}function ue(e){return e.map((e=>{switch(e.type){case"show":return{changeVisibility:{visible:true}};case"hide":return{changeVisibility:{visible:false}};case"select":return{changeSelection:{selected:true}};case"deselect":return{changeSelection:{selected:false}};default:return{}}}))}function he(e){return e.map((e=>{switch(e){case"camera":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_CAMERA;case"material_overrides":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_MATERIAL_OVERRIDE;case"selection":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_SELECTION;case"visibility":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_VISIBILITY;case"transforms":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_TRANSFORM;case"cross_section":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_CROSS_SECTION;case"phantom":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_PHANTOM;case"shading":return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_SHADING;default:return P.protobuf.stream.SceneViewStateFeature.SCENE_VIEW_STATE_FEATURE_INVALID}}))}class ce{constructor(e){this.flyToOptions=e}build(){return this.flyToOptions}}class le{withItemId(e){return new ce({flyTo:{type:"internal",data:e}})}withSuppliedId(e){return new ce({flyTo:{type:"supplied",data:e}})}withCamera(e){return new ce({flyTo:{type:"camera",data:e}})}withBoundingBox(e){return new ce({flyTo:{type:"bounding-box",data:e}})}build(){return this.flyToOptions}}class de{constructor(e,t,s,n,i,r){this.stream=e;this.aspect=t;this.data=s;this.boundingBox=n;this.decodeFrame=i;this.flyToOptions=r}fitToBoundingBox(e){return this.flyTo({boundingBox:e})}signedDistanceToBoundingBoxCenter(e){const{position:t,viewVector:s}=k(this.data);const n=x.center(e!==null&&e!==void 0?e:this.boundingBox);const i=m.subtract(n,t);return m.dot(s,i)/m.magnitude(s)}flyTo(e){if(typeof e!=="function"){return this.updateFlyToOptions({flyTo:this.buildFlyToType(e)})}else{return this.updateFlyToOptions(e(new le).build())}}viewAll(){return this.fitToBoundingBox(this.boundingBox)}async render(e={}){var t,n,i,r;if(this.flyToOptions==null&&e.animation){this.flyToOptions={flyTo:{type:"camera",data:this.data}}}try{(t=e.correlationId)!==null&&t!==void 0?t:e.correlationId=s.create();if(this.flyToOptions!=null){const t=ae(e.correlationId,this.flyToOptions,e.animation,this.toFrameCamera());const s=await this.stream.flyTo(t,true);return new Z(this.stream,this.decodeFrame,{correlationId:e.correlationId,animationId:((i=(n=s.flyTo)===null||n===void 0?void 0:n.animationId)===null||i===void 0?void 0:i.hex)||undefined},((r=e.animation)===null||r===void 0?void 0:r.milliseconds)!=null?e.animation.milliseconds+J:undefined)}else{this.stream.replaceCamera({camera:E(this.data),frameCorrelationId:{value:e.correlationId}});return new Z(this.stream,this.decodeFrame,{correlationId:e.correlationId})}}catch(e){console.warn("Error when performing render: ",e);throw e}}rotateAroundAxis(e,t){return this.rotateAroundAxisAtPoint(e,this.data.lookAt,t)}alignTo(e,t){const s=m.normalize(m.cross(this.up,m.normalize(this.viewVector)));const n=m.normalize(m.cross(m.normalize(this.viewVector),s));const i=m.angleTo(t,n)>Math.PI/2?m.negate(n):n;const r=m.isEqual(i,t)?s:m.normalize(m.cross(i,t));const a=m.transformMatrix(this.viewVector,I.makeRotation(g.fromAxisAngle(r,m.angleTo(t,i))));const o=b.create({origin:e,direction:m.normalize(a)});const u=b.at(o,m.magnitude(this.viewVector));return this.update({position:e,lookAt:u,up:t})}standardView(e){return this.update({position:e.position,viewVector:m.subtract(m.origin(),e.position),lookAt:m.origin(),up:e.up})}standardViewFixedLookAt(e){const t=b.create({origin:this.lookAt,direction:m.normalize(e.position)});const s=b.at(t,m.magnitude(this.viewVector));return this.update({up:e.up,position:s,viewVector:m.subtract(this.lookAt,s)})}buildFlyToType(e){if(e.boundingBox!=null){return{type:"bounding-box",data:e.boundingBox}}else if(e.camera!=null){return{type:"camera",data:e.camera}}else if(e.itemId!=null){return{type:"internal",data:e.itemId}}else if(e.itemSuppliedId!=null){return{type:"supplied",data:e.itemSuppliedId}}else if(e.sceneItemQueryExpression!=null){return{type:"scene-item-query",data:e.sceneItemQueryExpression}}else{throw new Error("Fly to must specify at least one option.")}}computeClippingPlanes(e){return C(this.boundingBox,e)}}class pe extends de{constructor(e,t,s,n,i,r){super(e,t,s,n,i,r);this.perspectiveData=s}moveBy(e){return this.update({position:m.add(this.position,e),lookAt:m.add(this.lookAt,e)})}rotateAroundAxisAtPoint(e,t,s){return this.update({position:m.rotateAboutAxis(e,this.position,s,t),lookAt:m.rotateAboutAxis(e,this.lookAt,s,t),up:m.rotateAboutAxis(e,this.up,s,m.origin())})}update(e){var t;const s=(t=e.fovY)!==null&&t!==void 0?t:this.fovY;return new pe(this.stream,this.aspect,{...this.perspectiveData,...e,fovY:s},this.boundingBox,this.decodeFrame,this.flyToOptions)}toFrameCamera(){var e;return new q(this.position,this.lookAt,this.up,this.near,this.far,this.aspectRatio,(e=this.fovY)!==null&&e!==void 0?e:45)}get viewVector(){return m.subtract(this.lookAt,this.position)}get position(){return{...this.perspectiveData.position}}get up(){return{...this.perspectiveData.up}}get lookAt(){return{...this.perspectiveData.lookAt}}get fovY(){return this.perspectiveData.fovY}get aspectRatio(){return this.aspect}get near(){const{near:e}=this.computeClippingPlanes(this.perspectiveData);return e}get far(){const{far:e}=this.computeClippingPlanes(this.perspectiveData);return e}updateFlyToOptions(e){return new pe(this.stream,this.aspect,this.perspectiveData,this.boundingBox,this.decodeFrame,e)}}class we extends de{constructor(e,t,s,n,i,r){super(e,t,s,n,i,r);this.orthographicData=s}moveBy(e){const t=m.add(this.lookAt,e);return this.update({lookAt:t,rotationPoint:t})}rotateAroundAxisAtPoint(e,t,s){const n=m.rotateAboutAxis(e,this.lookAt,s,t);const i=m.rotateAboutAxis(e,this.position,s,t);const r=A(m.subtract(n,i),y.create(this.boundingBox));return this.update({viewVector:r,lookAt:n,up:m.rotateAboutAxis(e,this.up,s,m.origin())})}update(e){return new we(this.stream,this.aspect,{...this.orthographicData,...e},this.boundingBox,this.decodeFrame,this.flyToOptions)}toFrameCamera(){const e=y.create(this.boundingBox);const t=A(this.viewVector,e);const s=V(this.lookAt,t,e.center);return new T(t,s,this.up,this.near,this.far,this.aspectRatio,this.fovHeight,this.rotationPoint)}get viewVector(){return{...this.orthographicData.viewVector}}get position(){return m.add(this.lookAt,m.negate(this.viewVector))}get rotationPoint(){const e=this.orthographicData.rotationPoint;if(e!=null){return e}else{return undefined}}get up(){return{...this.orthographicData.up}}get lookAt(){return{...this.orthographicData.lookAt}}get fovHeight(){return this.orthographicData.fovHeight}get aspectRatio(){return this.aspect}get near(){const{near:e}=this.computeClippingPlanes(this.orthographicData);return e}get far(){const{far:e}=this.computeClippingPlanes(this.orthographicData);return e}updateFlyToOptions(e){return new we(this.stream,this.aspect,this.orthographicData,this.boundingBox,this.decodeFrame,e)}}class ve{constructor(e,t){this.stream=e;this.data=t}async update(e){const t=await this.stream.updateCrossSectioning({crossSectioning:{sectionPlanes:e.sectionPlanes,highlightColor:e.highlightColor,lineWidth:(e===null||e===void 0?void 0:e.lineWidth)!=null?{value:e.lineWidth}:null}},true);return t.updateCrossSectioning||undefined}current(){return this.data}}class fe{constructor(e=[]){this.operations=e}build(){return this.operations.concat()}materialOverride(e){return new fe(this.operations.concat([{type:"change-material",material:e}]))}show(){return new fe(this.operations.concat([{type:"show"}]))}hide(){return new fe(this.operations.concat([{type:"hide"}]))}select(){return new fe(this.operations.concat([{type:"select"}]))}deselect(){return new fe(this.operations.concat([{type:"deselect"}]))}clearMaterialOverrides(){return new fe(this.operations.concat([{type:"clear-override"}]))}transform(e){return new fe(this.operations.concat([{type:"change-transform",transform:e}]))}clearTransforms(e=true){return new fe(this.operations.concat([{type:"clear-transform",cascade:e}]))}setPhantom(e){return new fe(this.operations.concat([{type:"change-phantom",phantomState:e}]))}clearPhantom(){return new fe(this.operations.concat([{type:"clear-phantom"}]))}setEndItem(e){return new fe(this.operations.concat([{type:"change-end-item",endItemState:e}]))}clearEndItem(){return new fe(this.operations.concat([{type:"clear-end-item"}]))}viewRenditionById(e){return new fe(this.operations.concat([{type:"view-rendition-by-id",id:e}]))}viewRenditionBySuppliedId(e){return new fe(this.operations.concat([{type:"view-rendition-by-supplied-id",suppliedId:e}]))}viewDefaultRendition(){return new fe(this.operations.concat([{type:"view-default-rendition"}]))}clearRendition(){return new fe(this.operations.concat([{type:"clear-rendition"}]))}viewRepresentation(e){return new fe(this.operations.concat({type:"view-representation",id:e}))}clearRepresentation(){return new fe(this.operations.concat({type:"clear-representation"}))}}class me{constructor(e=[]){this.operations=e}build(){return this.operations.concat()}show(){return new me(this.operations.concat([{type:"show"}]))}hide(){return new me(this.operations.concat([{type:"hide"}]))}select(){return new me(this.operations.concat([{type:"select"}]))}deselect(){return new me(this.operations.concat([{type:"deselect"}]))}}class ye{constructor(e,t){this.stream=e;this.imageScaleProvider=t}async hitItems(e,t){const s=this.imageScaleProvider();const n=await this.stream.hitItems({point:S.scale(e,(s===null||s===void 0?void 0:s.x)||1,(s===null||s===void 0?void 0:s.y)||1),includeMetadata:t===null||t===void 0?void 0:t.includeMetadata},true);return n.hitItems||undefined}}const xe=1e3*30;class Ie{constructor(e,t,s,n){this.onFrameDrawn=new X(e,(e=>{var t,n,i;return!!((i=(n=(t=e.request)===null||t===void 0?void 0:t.drawFrame)===null||n===void 0?void 0:n.frameCorrelationIds)===null||i===void 0?void 0:i.some((e=>e===s)))}),(e=>{var s;return((s=e.request)===null||s===void 0?void 0:s.drawFrame)!=null?t(e.request.drawFrame):undefined}),n!==null&&n!==void 0?n:xe)}}class ge{constructor(e,t,s,n,i){this.stream=e;this.decodeFrame=t;this.encodeCameraType=s;this.sceneId=n;this.sceneViewId=i}async applySceneViewState(e,t={}){const s=ee(e);await this.animateToSceneViewState(s,t);return await this.stream.loadSceneViewState({...s,frameCorrelationId:t.suppliedCorrelationId?{value:t.suppliedCorrelationId}:undefined,cameraType:t.cameraTypeOverride?this.encodeCameraType(t.cameraTypeOverride):undefined},true)}async applyPartialSceneViewState(e,t,s={}){const n=ee(e);const i=he(t);if(t.includes("camera")){await this.animateToSceneViewState(n,s)}return await this.stream.loadSceneViewState({...n,frameCorrelationId:s.suppliedCorrelationId?{value:s.suppliedCorrelationId}:undefined,sceneViewStateFeatureSubset:i,cameraType:s.cameraTypeOverride?this.encodeCameraType(s.cameraTypeOverride):undefined},true)}async animateToSceneViewState(e,t){var n,i,r;if(t.animation!=null){const a=s.create();const o=await this.stream.flyTo({sceneViewStateIdentifier:e,animation:{duration:M(t.animation.milliseconds)},frameCorrelationId:{value:a}},true);if(t.waitForAnimation==null||t.waitForAnimation){const e=new Z(this.stream,this.decodeFrame,{animationId:(r=(i=(n=o.flyTo)===null||n===void 0?void 0:n.animationId)===null||i===void 0?void 0:i.hex)!==null&&r!==void 0?r:undefined,correlationId:a},t.animation.milliseconds+J);await e.onAnimationCompleted.once()}}}}class be{constructor(e,t){this.query=e;this.builder=t!==null&&t!==void 0?t:new fe}isItemBuilder(){return true}isAnnotationBuilder(){return false}materialOverride(e){if(typeof e==="string"){return new be(this.query,this.builder.materialOverride(j(e)))}else{return new be(this.query,this.builder.materialOverride(e))}}hide(){return new be(this.query,this.builder.hide())}show(){return new be(this.query,this.builder.show())}select(){return new be(this.query,this.builder.select())}deselect(){return new be(this.query,this.builder.deselect())}clearMaterialOverrides(){return new be(this.query,this.builder.clearMaterialOverrides())}transform(e){if(Array.isArray(e)){if(e.length!==16){throw new a("Matrix provided must contain exactly 16 values (4x4).")}return new be(this.query,this.builder.transform({r0:{x:e[0],y:e[1],z:e[2],w:e[3]},r1:{x:e[4],y:e[5],z:e[6],w:e[7]},r2:{x:e[8],y:e[9],z:e[10],w:e[11]},r3:{x:e[12],y:e[13],z:e[14],w:e[15]}}))}else{return new be(this.query,this.builder.transform(e))}}clearTransforms(e=true){return new be(this.query,this.builder.clearTransforms(e))}setPhantom(e){return new be(this.query,this.builder.setPhantom(e))}clearPhantom(){return new be(this.query,this.builder.clearPhantom())}setEndItem(e){return new be(this.query,this.builder.setEndItem(e))}clearEndItem(){return new be(this.query,this.builder.clearEndItem())}viewRenditionById(e){return new be(this.query,this.builder.viewRenditionById(e))}viewRenditionBySuppliedId(e){return new be(this.query,this.builder.viewRenditionBySuppliedId(e))}viewDefaultRendition(){return new be(this.query,this.builder.viewDefaultRendition())}clearRendition(){return new be(this.query,this.builder.clearRendition())}viewRepresentation(e){return new be(this.query,this.builder.viewRepresentation(e))}clearRepresentation(){return new be(this.query,this.builder.clearRepresentation())}build(){return{query:this.query,operations:this.builder.build()}}}class Se{constructor(e,t){this.query=e;this.builder=t!==null&&t!==void 0?t:new me}isItemBuilder(){return false}isAnnotationBuilder(){return true}hide(){return new Se(this.query,this.builder.hide())}show(){return new Se(this.query,this.builder.show())}select(){return new Se(this.query,this.builder.select())}deselect(){return new Se(this.query,this.builder.deselect())}build(){return{query:this.query,operations:this.builder.build()}}}class Be{constructor(e,t,s,n,i,r){this.sceneViewId=e;this.stream=t;this.decodeFrame=s;this.dimensions=n;this.sceneItemQueryOperations=i;this.pmiAnnotationQueryOperations=r}async execute(e){var t;const n=this.sceneItemQueryOperations.map((e=>ne(e.query,e.operations,{dimensions:this.dimensions})));const i=this.pmiAnnotationQueryOperations.map((e=>ie(e.query,e.operations)));const r=(t=e===null||e===void 0?void 0:e.suppliedCorrelationId)!==null&&t!==void 0?t:s.create();const a={sceneViewId:{hex:this.sceneViewId},elementOperations:[...n,...i],suppliedCorrelationId:{value:r}};await this.stream.createSceneAlteration(a)}}class Re extends Be{async execute(e){var t;if(e===null||e===void 0?void 0:e.awaitCorrelatedFrame){const n=(t=e.suppliedCorrelationId)!==null&&t!==void 0?t:s.create();const i=new Ie(this.stream,this.decodeFrame,n);await super.execute({...e,suppliedCorrelationId:n});await i.onFrameDrawn.once()}else{await super.execute(e)}}}class Ee extends Be{async execute(e){var t;if(e===null||e===void 0?void 0:e.skipAwaitCorrelatedFrame){await super.execute(e)}else{const n=(t=e===null||e===void 0?void 0:e.suppliedCorrelationId)!==null&&t!==void 0?t:s.create();const i=new Ie(this.stream,this.decodeFrame,n);await super.execute({...e,suppliedCorrelationId:n});await i.onFrameDrawn.once()}}}class Ae{constructor(e,t,s,n,i,r,a,o){this.stream=e;this.frame=t;this.decodeFrame=s;this.encodeCameraType=n;this.imageScaleProvider=i;this.dimensions=r;this.sceneId=a;this.sceneViewId=o;this.sceneViewStateLoader=new ge(e,s,n,a,o)}async applySceneViewState(e,t={}){return await this.sceneViewStateLoader.applySceneViewState(e,t)}async applyPartialSceneViewState(e,t,s={}){return await this.sceneViewStateLoader.applyPartialSceneViewState(e,t,s)}async reset(e={}){return await this.stream.resetSceneView({includeCamera:e.includeCamera,frameCorrelationId:e.suppliedCorrelationId?{value:e.suppliedCorrelationId}:undefined,cameraType:e.cameraTypeOverride?this.encodeCameraType(e.cameraTypeOverride):undefined},true)}items(e){const t=e(new Ke);const s=Array.isArray(t)?t:[t];const n=s.filter((e=>e.isItemBuilder()));const i=n.reduce(((e,t)=>e.concat(t.build())),[]);return new Re(this.sceneViewId,this.stream,this.decodeFrame,this.dimensions,i,[])}elements(e){const t=e(new We);const s=Array.isArray(t)?t:[t];const n=s.filter((e=>e.isItemBuilder()));const i=n.reduce(((e,t)=>e.concat(t.build())),[]);const r=s.filter((e=>e.isAnnotationBuilder()));const a=r.reduce(((e,t)=>e.concat(t.build())),[]);return new Ee(this.sceneViewId,this.stream,this.decodeFrame,this.dimensions,i,a)}camera(){const{scene:e}=this.frame;if(e.camera.isOrthographic()){return new we(this.stream,B.aspectRatio(this.viewport()),{viewVector:e.camera.viewVector,lookAt:e.camera.lookAt,up:e.camera.up,fovHeight:e.camera.fovHeight,rotationPoint:e.camera.lookAt},this.frame.scene.boundingBox,this.decodeFrame)}else if(e.camera.isPerspective()){return new pe(this.stream,B.aspectRatio(this.viewport()),{position:e.camera.position,lookAt:e.camera.lookAt,up:e.camera.up,fovY:e.camera.fovY},this.frame.scene.boundingBox,this.decodeFrame)}else{throw new r("Cannot retrieve camera. Scene has an unknown or invalid camera type.")}}isOrthographic(){const{scene:e}=this.frame;return e.camera.isOrthographic()}boundingBox(){return this.frame.scene.boundingBox}crossSectioning(){return new ve(this.stream,this.frame.scene.crossSection)}raycaster(){return new ye(this.stream,this.imageScaleProvider)}viewport(){return this.frame.dimensions}scale(){return this.imageScaleProvider()||S.create(1,1)}}class Ve{constructor(e){this.inverted=e}build(){if(this.inverted){return{type:"not",query:this.queryExpressionBuilder()}}else{return this.queryExpressionBuilder()}}}class Te{constructor(e=false){this.inverted=e}all(){return new Pe}not(){return new qe(!this.inverted)}withItemIds(e){return new Ue(e,"item-id",this.inverted)}withSuppliedIds(e){return new Ue(e,"supplied-id",this.inverted)}withItemId(e){return new ze({type:"item-id",value:e},this.inverted)}withSuppliedId(e){return new ze({type:"supplied-id",value:e},this.inverted)}withSceneTreeRange(e){return new Me(e,this.inverted)}withMetadata(e,t,s,n){return new Oe(e,t,s,this.inverted,n)}withSelected(){return new De(this.inverted)}withVisible(){return new _e(this.inverted)}withPoint(e){return new je(e,this.inverted)}withVolumeIntersection(e,t){return new Fe(e,this.inverted,t)}}class qe extends Te{constructor(e){super(e)}}class ke{constructor(e=false){this.inverted=e}all(){return new Pe}not(){return new Ce(!this.inverted)}withAnnotationIds(e){return new Ue(e,"annotation-id",this.inverted)}withAnnotationId(e){return new Le({type:"annotation-id",value:e},this.inverted)}}class Ce extends ke{constructor(e){super(e)}}class Pe extends Ve{constructor(e=false){super(e)}queryExpressionBuilder(){return{type:"all"}}}class Me extends Ve{constructor(e,t){super(t);this.range=e}queryExpressionBuilder(){return{type:"scene-tree-range",range:this.range}}}class Oe extends Ve{constructor(e,t,s,n,i){super(n);this.filter=e;this.keys=t;this.exactMatch=s;this.removeHiddenItems=i}queryExpressionBuilder(){return{type:"metadata",filter:this.filter,keys:this.keys,exactMatch:this.exactMatch,removeHiddenItems:this.removeHiddenItems}}}class De extends Ve{constructor(e){super(e)}queryExpressionBuilder(){return{type:"all-selected"}}}class _e extends Ve{constructor(e){super(e)}queryExpressionBuilder(){return{type:"all-visible"}}}class je extends Ve{constructor(e,t){super(t);this.point=e}queryExpressionBuilder(){return{type:"point",point:this.point}}}class Fe extends Ve{constructor(e,t,s){super(t);this.rectangle=e;this.exclusive=s}queryExpressionBuilder(){return{type:"volume-intersection",rectangle:this.rectangle,exclusive:!!this.exclusive}}}class Ue extends Ve{constructor(e,t,s){super(s);this.ids=e;this.type=t}queryExpressionBuilder(){return{type:"or",expressions:this.ids.map((e=>({type:this.type,value:e})))}}}class ze extends Ve{constructor(e,t){super(t);this.query=e}queryExpressionBuilder(){return{...this.query}}and(){return new He([this.query],this.inverted)}or(){return new Ne([this.query],this.inverted)}}class Ne extends Ve{constructor(e,t){super(t);this.expressions=e}queryExpressionBuilder(){return{type:"or",expressions:[...this.expressions]}}withItemId(e){return new Ne([...this.expressions,{type:"item-id",value:e}],this.inverted)}withSuppliedId(e){return new Ne([...this.expressions,{type:"supplied-id",value:e}],this.inverted)}or(){return this}}class He extends Ve{constructor(e,t){super(t);this.expressions=e}queryExpressionBuilder(){return{type:"and",expressions:[...this.expressions]}}withItemId(e){return new He([...this.expressions,{type:"item-id",value:e}],this.inverted)}withSuppliedId(e){return new He([...this.expressions,{type:"supplied-id",value:e}],this.inverted)}and(){return this}}class Le extends Ve{constructor(e,t){super(t);this.query=e}queryExpressionBuilder(){return{...this.query}}and(){return new Ye([this.query],this.inverted)}or(){return new Qe([this.query],this.inverted)}}class Qe extends Ve{constructor(e,t){super(t);this.expressions=e}queryExpressionBuilder(){return{type:"or",expressions:[...this.expressions]}}withAnnotationId(e){return new Qe([...this.expressions,{type:"annotation-id",value:e}],this.inverted)}or(){return this}}class Ye extends Ve{constructor(e,t){super(t);this.expressions=e}queryExpressionBuilder(){return{type:"and",expressions:[...this.expressions]}}withAnnotationId(e){return new Ye([...this.expressions,{type:"annotation-id",value:e}],this.inverted)}and(){return this}}class We{get items(){return new Ke}get annotations(){return new Ge}}class Ge{where(e){const t=e(new ke).build();return new Se(t)}}class Ke{where(e){const t=e(new Te).build();return new be(t)}}export{de as C,fe as I,K as M,Se as P,ye as R,Ae as S,ve as a,Ge as b,F as c,Te as d,We as e,Ee as f,be as g,Ke as h,Re as i,W as j,$ as k,H as l,D as m,U as n,Y as s,G as t};
|
|
5
|
+
//# sourceMappingURL=p-CAugdB_8.js.map
|