import { vertexvis } from '@vertexvis/frame-streaming-protos'; import { Point } from '@vertexvis/geometry'; import { StreamApi } from '@vertexvis/stream-api'; import { ImageScaleProvider } from './scene'; /** * Optional raycaster options available on a hit request. */ export interface RaycasterOptions { includeMetadata: boolean; } export interface RaycasterLike { hitItems(point: Point.Point, options?: RaycasterOptions): Promise; } /** * The `Raycaster` class is here. */ export declare class Raycaster implements RaycasterLike { private stream; private imageScaleProvider; constructor(stream: StreamApi, imageScaleProvider: ImageScaleProvider); /** * Performs request on the stream to find items that intersect * the given point. * * @example * ```typescript * const viewer = document.querySelector("vertex-viewer"); * * viewer.addEventListener("tap", async (event) => { * const scene = await viewer.scene(); * const raycaster = scene.raycaster(); * * // Query the scene for the item at the position of the `tap` event * const [hit] = await raycaster.hitItems(event.detail.position); * * if (hit != null) { * // If there was an item present at the position, select it * await scene.elements((op) => * op.items.where((q) => q.withItemId(hit.itemId.hex)).select() * ); * } * }); * ``` * * @see {@link Scene.items} for more information on the operations that * can be performed on a hit result. * * @param point The point to cast from looking for intersections. * @param options Optional set of options for the request @see {@link RaycasterOptions} * for available options. */ hitItems(point: Point.Point, options?: RaycasterOptions): Promise; }